From 9776c4adf8be8a4abee760f8a68adc7b8867fcc2 Mon Sep 17 00:00:00 2001 From: afgmlff Date: Sat, 24 Oct 2020 17:56:18 -0300 Subject: [PATCH 01/82] add aditional files to cucumber/capybara bdd --- cucumber.yaml | 6 ++++++ features/support/env.rb | 9 +++++++++ features/support/hooks.rb | 41 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 56 insertions(+) create mode 100644 cucumber.yaml create mode 100644 features/support/hooks.rb diff --git a/cucumber.yaml b/cucumber.yaml new file mode 100644 index 00000000..2a5fdc5d --- /dev/null +++ b/cucumber.yaml @@ -0,0 +1,6 @@ +--- +default: -p html -p bdd -p json +html: --format html --out=features.html +dot: --format progress +bdd: --format pretty +json: --format json -o "report.json" diff --git a/features/support/env.rb b/features/support/env.rb index 003fb131..c6d5a72e 100644 --- a/features/support/env.rb +++ b/features/support/env.rb @@ -4,7 +4,16 @@ # instead of editing this one. Cucumber will automatically load all features/**/*.rb # files. +require 'capybara' +require 'capybara/cucumber' require 'cucumber/rails' +require 'report_builder' + + +Capybara.configure do |config| + config.default_driver = :selenium_chrome #roda no navegador + #config.default_driver = :selenium_chrome_headless #roda com o nageador em background +end # frozen_string_literal: true diff --git a/features/support/hooks.rb b/features/support/hooks.rb new file mode 100644 index 00000000..37784b19 --- /dev/null +++ b/features/support/hooks.rb @@ -0,0 +1,41 @@ +After do |scenario| + add_screenshot(scenario) + + if scenario.failed? + add_browser_logs + end + end + + def add_screenshot(scenario) + nome_cenario = scenario.name.gsub(/[^A-Za-z0-9]/, '') + nome_cenario = nome_cenario.gsub(' ','_').downcase! + screenshot = "log/screenshots/#{nome_cenario}.png" + page.save_screenshot(screenshot) + embed(screenshot, 'image/png', 'Print maroto :)') + end + + def add_browser_logs + time_now = Time.now + # Getting current URL + current_url = Capybara.current_url.to_s + # Gather browser logs + logs = page.driver.browser.manage.logs.get(:browser).map {|line| [line.level, line.message]} + # Remove warnings and info messages + logs.reject! { |line| ['WARNING', 'INFO'].include?(line.first) } + logs.any? == true + embed(time_now.strftime('%Y-%m-%d-%H-%M-%S' + "\n") + ( "Current URL: " + current_url + "\n") + logs.join("\n"), 'text/plain', 'BROWSER ERROR') +end + +at_exit do + time = Time.now.getutc + ReportBuilder.configure do |config| + config.json_path = 'report.json' + config.report_path = 'cucumber_web_report' + config.report_types = [:html] + config.report_tabs = %w[Overview Features Scenarios Errors] + config.report_title = 'Cucumber Report Builder web automation test results' + config.compress_images = false + config.additional_info = { 'Project name' => 'Test', 'Platform' => 'Integration', 'Report generated' => time } + end + ReportBuilder.build_report +end From 3dcac425d31e9e74e0011ebcdddfe63c09ae738e Mon Sep 17 00:00:00 2001 From: afgmlff Date: Fri, 30 Oct 2020 18:27:53 -0300 Subject: [PATCH 02/82] add .feature and _steps.rb for EngSwCIC#19 ('Definir prazo de credenciamento') --- features/credenciamento_periodo.feature | 23 +++++++++++++++++ .../credenciamento_periodo_steps.rb | 25 +++++++++++++++++++ 2 files changed, 48 insertions(+) create mode 100644 features/credenciamento_periodo.feature create mode 100644 features/step_definitions/credenciamento_periodo_steps.rb diff --git a/features/credenciamento_periodo.feature b/features/credenciamento_periodo.feature new file mode 100644 index 00000000..8738c2bb --- /dev/null +++ b/features/credenciamento_periodo.feature @@ -0,0 +1,23 @@ +#language: pt +#encoding: utf-8 + +Funcionalidade: Definir o prazo de credenciamento dos professores + Como um administrador, + para que eu possa credenciar os professores, + eu gostaria de definir o prazo de credenciamento dos professores + + Contexto: + Dado que eu esteja autenticado como usuario "admin" + E que esteja na pagina inicial + + Cenário: Definir prazo de credenciamento sem data + Quando eu aperto o botão "Definir prazo de credenciamento" + E eu aperto o botão "Salvar período" + Então eu espero ver a mensagem "Insira uma data de início e uma data de término válidas." + + Cenário: Definir prazo de credenciamento com data + Quando eu aperto o botão "Definir prazo de credenciamento" + Quando eu adiciono um valor para "Data de Início" + E adiciono um valor para "Data de Término" + E eu aperto o botão "Salvar período" + Então eu espero ver a mensagem "Prazo cadastrado com sucesso." \ No newline at end of file diff --git a/features/step_definitions/credenciamento_periodo_steps.rb b/features/step_definitions/credenciamento_periodo_steps.rb new file mode 100644 index 00000000..d4aa724a --- /dev/null +++ b/features/step_definitions/credenciamento_periodo_steps.rb @@ -0,0 +1,25 @@ +Dado("Dado que eu esteja autenticado como usuario {string}") do |string| + User.create(full_name: string, email: 'admin1@admin.unb.br', password: 'password', + registration_number: "123456789", role: 1 + ) + visit new_user_session_path + fill_in :user_email, with: 'admin1@admin.unb.br' + fill_in :user_password, with: 'password' + click_button "Log in" +end + +Dado('que esteja na página de credenciamento') do |page_credenciamento| + pending #visit path_to(page_credenciamento) +end + +Quando('eu aperto o botão {string}') do |string| + pending #click_button(string) +end + +Então('eu espero ver a mensagem {string}') do |string| + @expected_message = string +end + +Quando('eu adiciono um valor {string} para {string2}') do |string, string2| + fill_in(string2, :with => string) +end \ No newline at end of file From 2c5737bbc827d1af09f40d6b0ca0cf6604b6f61b Mon Sep 17 00:00:00 2001 From: afgmlff Date: Fri, 30 Oct 2020 19:08:58 -0300 Subject: [PATCH 03/82] commented pending functions --- features/credenciamento_periodo.feature | 6 +++--- features/step_definitions/credenciamento_periodo_steps.rb | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/features/credenciamento_periodo.feature b/features/credenciamento_periodo.feature index 8738c2bb..bc113ceb 100644 --- a/features/credenciamento_periodo.feature +++ b/features/credenciamento_periodo.feature @@ -8,7 +8,7 @@ Funcionalidade: Definir o prazo de credenciamento dos professores Contexto: Dado que eu esteja autenticado como usuario "admin" - E que esteja na pagina inicial + E que esteja na página de credenciamento Cenário: Definir prazo de credenciamento sem data Quando eu aperto o botão "Definir prazo de credenciamento" @@ -17,7 +17,7 @@ Funcionalidade: Definir o prazo de credenciamento dos professores Cenário: Definir prazo de credenciamento com data Quando eu aperto o botão "Definir prazo de credenciamento" - Quando eu adiciono um valor para "Data de Início" - E adiciono um valor para "Data de Término" + Quando eu adiciono um valor "Início" para "Data de Início" + E eu adiciono um valor "Término" para "Data de Término" E eu aperto o botão "Salvar período" Então eu espero ver a mensagem "Prazo cadastrado com sucesso." \ No newline at end of file diff --git a/features/step_definitions/credenciamento_periodo_steps.rb b/features/step_definitions/credenciamento_periodo_steps.rb index d4aa724a..ff5881b4 100644 --- a/features/step_definitions/credenciamento_periodo_steps.rb +++ b/features/step_definitions/credenciamento_periodo_steps.rb @@ -17,9 +17,9 @@ end Então('eu espero ver a mensagem {string}') do |string| - @expected_message = string + pending #@expected_message = string end Quando('eu adiciono um valor {string} para {string2}') do |string, string2| - fill_in(string2, :with => string) + pending #fill_in(string2, :with => string) end \ No newline at end of file From 063684523a4fb0320fe1302d84dba665eb1368d3 Mon Sep 17 00:00:00 2001 From: Gabriel Preihs Date: Fri, 30 Oct 2020 19:16:46 -0300 Subject: [PATCH 04/82] Beginning #20 issue, feature and steps EngSwCIC#20 --- features/requisitos_necessarios.feature | 22 +++++++++++++ .../requisitos_necessarios.rb | 32 +++++++++++++++++++ 2 files changed, 54 insertions(+) create mode 100644 features/requisitos_necessarios.feature create mode 100644 features/step_definitions/requisitos_necessarios.rb diff --git a/features/requisitos_necessarios.feature b/features/requisitos_necessarios.feature new file mode 100644 index 00000000..90199605 --- /dev/null +++ b/features/requisitos_necessarios.feature @@ -0,0 +1,22 @@ +#language: pt +#encoding: utf-8 + +Funcionalidade: Disponibilizar os requisitos necessarios para credenciamento de professores + Como administrador autenticado no sistema, + Quero poder disponibilizar para os professores os requisitos necessários para o credenciamento + Para que eles possam dar procedimento ao credenciamento + + Contexto: + Dado que eu esteja logado como administrador de email "gp@admin.com" e senha "123" + E não existem requisitos selecionados na página principal + Quando o administrador clicou no link para alterar documentos necessários para credenciamento + + Cenário: Os campos puderam ser selecionados + Quando eu selecionar os campos + E eu clicar no botão atualizar requisitos + Então eu devo voltar para a página principal aonde aparece meus requisitos selecionados + + Cenário: Não houveram mudanças feitas + Quando eu não selecionar os campos + E eu clicar no botão atualizar requisitos + Então eu recebo uma mensagem dizendo que "não houveram mudanças" diff --git a/features/step_definitions/requisitos_necessarios.rb b/features/step_definitions/requisitos_necessarios.rb new file mode 100644 index 00000000..39edcc34 --- /dev/null +++ b/features/step_definitions/requisitos_necessarios.rb @@ -0,0 +1,32 @@ +Dado("que eu esteja logado como administrador de email {string} e senha {string}") do |email, senha| + User.create(username: 'admin', email: email, password: senha, + registration: "123456789", is_admin: true + ) + visit new_user_session_path + fill_in :user_email, with: email + fill_in :user_password, with: senha + click_button "Log in" +end + +Quando("o administrador clicou no link para alterar documentos necessários para credenciamento") do + pending visit alterar_requisitos_path +end + +Quando("eu selecionar os campos") do + # select = page.find('select#select_id') + # select.select 'Opção 1' + # select.select 'Opção 2' + # select.select 'Opção 3' +end + +E("eu clicar no botão atualizar requisitos") do + pending click_button "atualizar requisitos" +end + +Então("eu devo voltar para a página principal aonde aparece meus requisitos selecionados") do + pending page.hasText('opções atuais: Option 1, Option 2, Option 3'); +end + +Então("eu recebo uma mensagem dizendo que {string}") do |string| + pending @expected_message = string +end From 158d03ec5a3414f4ab0316b39230d4301fb4f093 Mon Sep 17 00:00:00 2001 From: Lucas Miranda Date: Fri, 30 Oct 2020 19:22:00 -0300 Subject: [PATCH 05/82] add abrir_solicitacao_credenciamento.feature and abrir_solicitacao_credenciamento.rb for EngSwCIC#21 --- .DS_Store | Bin 0 -> 10244 bytes features/.DS_Store | Bin 0 -> 6148 bytes .../abrir_solicitacao_credenciamento.feature | 29 ++++++++++++++++++ .../abrir_solicitacao_credenciamento.rb | 28 +++++++++++++++++ spec/.DS_Store | Bin 0 -> 6148 bytes 5 files changed, 57 insertions(+) create mode 100644 .DS_Store create mode 100644 features/.DS_Store create mode 100644 features/abrir_solicitacao_credenciamento.feature create mode 100644 features/step_definitions/abrir_solicitacao_credenciamento.rb create mode 100644 spec/.DS_Store diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..3bbd03ac03275dd7f1e6984a26d68f4e41bda99a GIT binary patch literal 10244 zcmeI1ziSjh6vyA(9r4hB5$tSMP*4joC}J92!$~BKN@|1N4^Qzfd*tq{?+>t0+hAkF zKOlBmL~K$^z*=ktv9r|go0;8x?=~B-Q3Eru`!@65oA=r8{>sb|ky#wK=ZPXBs$*k2 zH;dgKjs3h8TE+J)!5ZXKuRFieO8SFBWatPA1Ojcx4h#9905z|KwqU~A~M4aakQ02_H5dpmI!9yH@pVO^^6Qw-zM(I5G^ z*xQM-E}e{@d>CKZ_!)|^)iHi#!^yVC{R>@=k7H+PhEOMBQ<|NcV%1p`bneF z>?KX~)lctkE!}zZ@w)c6_w^4RinW1Dc8Q=$_h~=_Rh2Hj!>HaPYp!n4(`eJy%)EKU zqF2?cL>LsKHgT3~y58(4_sDuzw@qHp=Jk`jUeT-S;k3|Zs6`2_(F0WN>Z%)Gr~R__ zukV$#wi-hcl*K3x^Mg4m)TU;8*y=Ttq?dJQpraqsKnXHDRZT(cAQE8OrwUWdb?P|v z4leSD#8N!%qpTrZ`U@6v#WH}YVK z^{t&@`8)|z^lAkA`Qp5Ux~W(pQi{NGIGlTf#ty_3u7tJV)F72C_NVV<#ChX6CeJ++Rf zu}dAP*OW_xaqe`o#JhW~mcAgS#*vWaQ5w}&s{s_R3Vl(tPK{^WC(0*Cu-7j$uq;<1 z?d8`n5z|xw)2D&d%XdkT%Ib;td9cLT`n>Zh`)b*tBt+3G5h|Ns7-5EQwd`*j1U%fFoe{|4Mdpdze?)dDj zCGhQ^96Y|CKffHci%VB=uWyHgvzBqi?Rt*<^3x7TSb~BAOTMQ?eHDB7t899#=X`bA zeXvhH=Z$gZ?lZ&fUiEw|=cA$wCG{pIi$ZUsI4-f3@8ID26%t4P{t@=CFr*f zH2w+z?7{2>eg8QHv}^!I0V_dRAVxxg5^BN~!$>&nHuyyWD?te-<7dV=VP+FFK8p9DUSPM}0Y(8UL0BOAA>e7yMj7~320j3*2xa5| literal 0 HcmV?d00001 diff --git a/features/abrir_solicitacao_credenciamento.feature b/features/abrir_solicitacao_credenciamento.feature new file mode 100644 index 00000000..910d270f --- /dev/null +++ b/features/abrir_solicitacao_credenciamento.feature @@ -0,0 +1,29 @@ +#language: pt +#encoding: utf-8 + +Funcionalidade: Solicitar credenciamento + Como professor autenticado no sistema, + Quero poder solicitar meu credenciamento + Para que eu possa ser um professor credenciado + + Contexto: + Dado que eu esteja cadastrado como usuário "prof1@user.com" + E que esteja logado + E que esteja na página de credenciamento + E esteja pendente de credenciamento + + Cenário: Solicitacao enviada com sucesso + Quando eu preencher o número do processo SEI + E clicar no botão "Solicitar credenciamento" + Então é enviado à administração uma solicitação de credenciamento + E aparece uma mensagem de confirmação + + Cenário: Solicitacao não enviada - erro no número do processo + Quando eu preencher com um número qualquer + E clicar no botão "Solicitar credenciamento" + Então a mensagem de erro "Número inválido" + + Cenário: Solicitação não enviada - campo em branco + Quando eu não preencher o campo do número do processo SEI + E clicar no botão "Solicitar credenciamento" + Então a mensagem de erro "Campo obrigatório em branco" \ No newline at end of file diff --git a/features/step_definitions/abrir_solicitacao_credenciamento.rb b/features/step_definitions/abrir_solicitacao_credenciamento.rb new file mode 100644 index 00000000..77684bad --- /dev/null +++ b/features/step_definitions/abrir_solicitacao_credenciamento.rb @@ -0,0 +1,28 @@ +Dado("que eu esteja logado como professor com o email {string} e a senha {string}") do |string, string2| + User.create(username: 'professor123', email: string, password: string2, course: "CIC", is_admin: false) + visit new_user_session_path + click_button "Entrar" + fill_in :user_email, with: string + fill_in :user_password, with: string2 + click_button "Log in" +end + +Dado("que eu esteja na pagina {string}") do |string| + pending #expect(current_path).to eq("/#{string}") +end + +Dado("que exista a pendencia de credenciamento no sistema com o botao {string)") do |button| + pending #page.should have_button("Solicitar credenciamento") +end + +Entao("preencho o campo de processo SEI {string}") do |string| + pending #fill_in :processo_sei, with: string + +E("clico no botao {string}") do |button| + pending #click_button "Solicitar credenciamento" +end + +E("espero ver a mensagem de confirmacao {string}") do |string| + pending #@expected_message = string +end + diff --git a/spec/.DS_Store b/spec/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..b6ed53366a752c6b9b2382716925585a7df52cce GIT binary patch literal 6148 zcmeHKJx;?g82wBGRCKAt!sv~;HwaZYK`(&XAV5lR)$$`TWnn?R1tW(*;wWrffSLE% zCbgRci2;Pr_f_^wK0n(pPqJMTks4p;BcdS@^-&m;Jyb2h?OYnM_5C_D8zvck1-2u(8ZZGKyt9HG9m-%v5OpPh9w7V$9*=RB|<=lVOYd5nrSvD=q z6pa4rt+&#TFGpXo^KY={=b;MT%4nC)u?ZD4w_DLN)~TMFj8NbGd#!I{oYJgyb+cOZ z>`)17bE~N~mW4(Qu}r$#Y!5{adda7W(HNn`E>4TUZMvZg$h)OTUXb1p_W*H0Ybfpc zu$C4v*50)rTqfjB)(T%HL3wogH~?>7-JJQi}uP zKOKkmN&$DQO&91sWol>;itCfOLDZ|$MIRKQBF`em{&QpT~PVs*go)4 de1KvDZJHl|smID8G6?x2U~P~}9QaiSJ^(JSpveFL literal 0 HcmV?d00001 From 8c005a948fdb911c748394ce759182c0404d1d9f Mon Sep 17 00:00:00 2001 From: ngsylar Date: Fri, 30 Oct 2020 19:27:41 -0300 Subject: [PATCH 06/82] add .feature EngSwCIC#23 issue --- ...enciar-solicitacoes-credenciamento.feature | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 features/gerenciar-solicitacoes-credenciamento.feature diff --git a/features/gerenciar-solicitacoes-credenciamento.feature b/features/gerenciar-solicitacoes-credenciamento.feature new file mode 100644 index 00000000..6c8daeb5 --- /dev/null +++ b/features/gerenciar-solicitacoes-credenciamento.feature @@ -0,0 +1,37 @@ +#language: pt +#encoding: utf-8 + +Funcionalidade: Gerenciar solicitações de credenciamento + Como um admnistrador do sistema + Quero visualizar uma solicitação de credencimento em aberto + Para decidir se vou aceitar ou recusar tal solicitação + + Contexto: + Dado que os seguintes solicitações estejam pendentes: + | title | due_date | activity_type_id | + | Solicitação 1 | 02-Jan-2021 | 1 | + | Solicitação 2 | 02-Jan-2021 | 1 | + | Solicitação 3 | 02-Jan-2021 | 1 | + | Solicitação 4 | 02-Jan-2021 | 1 | + + E que eu estou cadastrado como "Gabriel", "gabriel@admin.com", "gabriel123", 1, "200000000" + E que eu estou logado + E que eu estou na página de solicitações de credenciamento + + Cenário: Aceitar uma solicitação de credenciamento + Quando eu clico em "Solicitação 1" + Então eu devo estar na página da "Solicitação 1" + Quando eu clico em "Aceitar" + Então eu devo estar na página de solicitações de credenciamento + E eu não devo ver "Solicitação 1" + Quando eu clico em "Solicitações aceitas" + Então eu devo ver "Solicitação 1" + + Cenário: Recusar uma solicitação de credenciamento + Quando eu clico em "Solicitação 2" + Então eu devo estar na página da "Solicitação 2" + Quando eu clico em "Recusar" + Então eu devo estar na página de solicitações de credenciamento + E eu não devo ver "Solicitação 2" + Quando eu clico em "Solicitações aceitas" + Então eu não devo ver "Solicitação 2" From 550d623eca531d5eee780acb9192f6a21262354e Mon Sep 17 00:00:00 2001 From: ngsylar Date: Fri, 30 Oct 2020 20:06:46 -0300 Subject: [PATCH 07/82] add steps issue EngSwCIC#23 --- ...nciar_solicitacoes_credenciamento.feature} | 0 ...nciar_solicitacoes_credenciamento_steps.rb | 51 +++++++++++++++++++ 2 files changed, 51 insertions(+) rename features/{gerenciar-solicitacoes-credenciamento.feature => gerenciar_solicitacoes_credenciamento.feature} (100%) create mode 100644 features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb diff --git a/features/gerenciar-solicitacoes-credenciamento.feature b/features/gerenciar_solicitacoes_credenciamento.feature similarity index 100% rename from features/gerenciar-solicitacoes-credenciamento.feature rename to features/gerenciar_solicitacoes_credenciamento.feature diff --git a/features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb b/features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb new file mode 100644 index 00000000..7f536f7c --- /dev/null +++ b/features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb @@ -0,0 +1,51 @@ +Dado "que os seguintes solicitações estejam pendentes:" do |table| + pending +# table.hashes.each do |row| +# Activity.create!(row) +# end +end + +Dado /^que eu estou cadastrado como (.*)$/ do |values| + pending +# values.split(/,[ ]*/).each do |value| +# end +end + +Dado /^que eu estou logado como (.*)$/ do |values| + pending +# values.split(/,[]*/) +# fill_in("Email", :with => values[0]) +# fill_in("Password", :with => values[1]) +# click_button("Log in") +end + +Quando /^eu clico em "([^"]*)"$/ do |link| + pending +# click_link(link) +end + +Então /^eu devo ver "([^"]*)"$/ do |text| + pending +# if page.respond_to? :should +# page.should have_content(text) +# else +# assert page.has_content?(text) +# end +end + +Então /^eu não devo ver "([^"]*)"$/ do |text| + pending +# if page.respond_to? :should +# page.should have_no_content(text) +# else +# assert page.has_no_content?(text) +# end +end + +Dado /^que estou na página de (.+)$/ do |page_name| + visit path_to(page_name) +end + +Então /^eu devo estar na página (.+)$/ + pending +end From 349dcfb714b6f4aa20f833eba3998fcbb5940a1c Mon Sep 17 00:00:00 2001 From: Gabriel Preihs Date: Fri, 30 Oct 2020 20:08:50 -0300 Subject: [PATCH 08/82] Fixing name --- ...{requisitos_necessarios.rb => requisitos_necessarios_steps.rb} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename features/step_definitions/{requisitos_necessarios.rb => requisitos_necessarios_steps.rb} (100%) diff --git a/features/step_definitions/requisitos_necessarios.rb b/features/step_definitions/requisitos_necessarios_steps.rb similarity index 100% rename from features/step_definitions/requisitos_necessarios.rb rename to features/step_definitions/requisitos_necessarios_steps.rb From 3e64d6e54f46fade9c34bce6fc9a29e30e4396df Mon Sep 17 00:00:00 2001 From: ngsylar Date: Mon, 9 Nov 2020 20:34:35 -0300 Subject: [PATCH 09/82] Cucumber and new steps --- .tool-versions | 1 + Gemfile | 4 +- Gemfile.lock | 6 + features.html | 485 ++++++++++++++++++ .../abrir_solicitacao_credenciamento.feature | 29 -- features/credenciamento_periodo.feature | 23 - ...enciar_solicitacoes_credenciamento.feature | 2 +- features/requisitos_necessarios.feature | 22 - features/spike.feature | 6 + .../abrir_solicitacao_credenciamento.rb | 28 - .../credenciamento_periodo_steps.rb | 25 - ...nciar_solicitacoes_credenciamento_steps.rb | 80 +-- .../requisitos_necessarios_steps.rb | 32 -- features/step_definitions/web_steps.rb | 254 +++++++++ features/support/env.rb | 9 - features/support/hooks.rb | 2 +- features/support/paths.rb | 38 ++ features/support/selectors.rb | 44 ++ report.json | 1 + spike.rb | 16 + 20 files changed, 905 insertions(+), 202 deletions(-) create mode 100644 .tool-versions create mode 100644 features.html delete mode 100644 features/abrir_solicitacao_credenciamento.feature delete mode 100644 features/credenciamento_periodo.feature delete mode 100644 features/requisitos_necessarios.feature create mode 100644 features/spike.feature delete mode 100644 features/step_definitions/abrir_solicitacao_credenciamento.rb delete mode 100644 features/step_definitions/credenciamento_periodo_steps.rb delete mode 100644 features/step_definitions/requisitos_necessarios_steps.rb create mode 100644 features/step_definitions/web_steps.rb create mode 100644 features/support/paths.rb create mode 100644 features/support/selectors.rb create mode 100644 report.json create mode 100644 spike.rb diff --git a/.tool-versions b/.tool-versions new file mode 100644 index 00000000..7f44804c --- /dev/null +++ b/.tool-versions @@ -0,0 +1 @@ +ruby 2.6.3 diff --git a/Gemfile b/Gemfile index 54be0f4e..d347e85b 100644 --- a/Gemfile +++ b/Gemfile @@ -56,13 +56,15 @@ end group :test do # Adds support for Capybara system testing and selenium driver - gem 'capybara', '>= 2.15' gem 'selenium-webdriver' # Easy installation and use of chromedriver to run system tests with Chrome gem 'webdrivers' gem 'cucumber-rails', require: false + gem 'cucumber-rails-training-wheels' # some pre-fabbed step definitions # database_cleaner is not required, but highly recommended gem 'database_cleaner' + gem 'capybara', '>= 2.15' + gem 'launchy' # a useful debugging aid for user stories gem 'shoulda-matchers' end diff --git a/Gemfile.lock b/Gemfile.lock index 0a9e4f86..b6223e46 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -90,6 +90,8 @@ GEM mime-types (>= 2.0, < 4) nokogiri (~> 1.8) railties (>= 4.2, < 7) + cucumber-rails-training-wheels (1.0.0) + cucumber-rails (>= 1.1.1) cucumber-tag_expressions (1.1.1) cucumber-wire (0.0.1) database_cleaner (1.7.0) @@ -110,6 +112,8 @@ GEM concurrent-ruby (~> 1.0) jbuilder (2.9.1) activesupport (>= 4.2.0) + launchy (2.5.0) + addressable (~> 2.7) listen (3.1.5) rb-fsevent (~> 0.9, >= 0.9.4) rb-inotify (~> 0.9, >= 0.9.7) @@ -256,9 +260,11 @@ DEPENDENCIES capybara (>= 2.15) coffee-rails (~> 4.2) cucumber-rails + cucumber-rails-training-wheels database_cleaner devise jbuilder (~> 2.5) + launchy listen (>= 3.0.5, < 3.2) pg (>= 0.18, < 2.0) puma (~> 3.12) diff --git a/features.html b/features.html new file mode 100644 index 00000000..45392229 --- /dev/null +++ b/features.html @@ -0,0 +1,485 @@ +Cucumber

Cucumber Features

Expand All

Collapse All

# language: pt
#encoding: utf-8

Funcionalidade: Gerenciar solicitações de credenciamento

Como um admnistrador do sistema
Quero visualizar uma solicitação de credencimento em aberto
Para decidir se vou aceitar ou recusar tal solicitação

Contexto

  1. Dado que os seguintes solicitações estejam pendentes:
    features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:31
    title
    due_date
    activity_type_id
    Solicitação 1
    02-Jan-2021
    1
    Solicitação 2
    02-Jan-2021
    1
    Solicitação 3
    02-Jan-2021
    1
    Solicitação 4
    02-Jan-2021
    1
    TODO (Cucumber::Pending)
    ./features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:32:in `"que os seguintes solicitações estejam pendentes:"'
    +features/gerenciar_solicitacoes_credenciamento.feature:10:in `Dado que os seguintes solicitações estejam pendentes:'
    30
    +31Dado "que os seguintes solicitações estejam pendentes:" do |table|
    +32    pending
    
    +33    # table.hashes.each do |row|
    +34    #     Activity.create!(row)
    +35# gem install syntax to get syntax highlighting
  2. E que eu estou cadastrado como "Gabriel", "gabriel@admin.com", "gabriel123", 1, "200000000"
    features/gerenciar_solicitacoes_credenciamento.feature:17
    Dado("que eu estou cadastrado como {string}, {string}, {string}, {int}, {string}") do |string, string2, string3, int, string4|
    +  pending # Write code here that turns the phrase above into concrete actions
    +end
  3. E que eu estou logado
    features/gerenciar_solicitacoes_credenciamento.feature:18
    Dado("que eu estou logado") do
    +  pending # Write code here that turns the phrase above into concrete actions
    +end
  4. E que eu estou na página de solicitações de credenciamento
    features/gerenciar_solicitacoes_credenciamento.feature:19
    Dado("que eu estou na página de solicitações de credenciamento") do
    +  pending # Write code here that turns the phrase above into concrete actions
    +end
features/gerenciar_solicitacoes_credenciamento.feature:21

Cenário: Aceitar uma solicitação de credenciamento

  1. Quando eu clico em "Solicitação 1"
    features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:38
  2. Então eu devo estar na página da "Solicitação 1"
    features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:62
  3. Quando eu clico em "Aceitar"
    features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:38
  4. Então eu devo estar na página de solicitações de credenciamento
    features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:62
  5. E eu não devo ver "Solicitação 1"
    features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:50
  6. Quando eu clico em "Solicitações aceitas"
    features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:38
  7. Então eu devo ver "Solicitação 1"
    features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:42
  8. Print maroto :)
      +
features/gerenciar_solicitacoes_credenciamento.feature:30

Cenário: Recusar uma solicitação de credenciamento

  1. Quando eu clico em "Solicitação 2"
    features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:38
  2. Então eu devo estar na página da "Solicitação 2"
    features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:62
  3. Quando eu clico em "Recusar"
    features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:38
  4. Então eu devo estar na página de solicitações de credenciamento
    features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:62
  5. E eu não devo ver "Solicitação 2"
    features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:50
  6. Quando eu clico em "Solicitações aceitas"
    features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:38
  7. Então eu não devo ver "Solicitação 2"
    features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:50
  8. Print maroto :)
      +
# language: pt
#encoding: utf-8

Funcionalidade: Testar

features/spike.feature:5

Cenário:

  1. Dado que eu estou cadastrado e logado como "Gabriel", "gabriel@admin.com", "gabriel123", 1, "200000000"
    features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:1
  2. Print maroto :)
      +
\ No newline at end of file diff --git a/features/abrir_solicitacao_credenciamento.feature b/features/abrir_solicitacao_credenciamento.feature deleted file mode 100644 index 910d270f..00000000 --- a/features/abrir_solicitacao_credenciamento.feature +++ /dev/null @@ -1,29 +0,0 @@ -#language: pt -#encoding: utf-8 - -Funcionalidade: Solicitar credenciamento - Como professor autenticado no sistema, - Quero poder solicitar meu credenciamento - Para que eu possa ser um professor credenciado - - Contexto: - Dado que eu esteja cadastrado como usuário "prof1@user.com" - E que esteja logado - E que esteja na página de credenciamento - E esteja pendente de credenciamento - - Cenário: Solicitacao enviada com sucesso - Quando eu preencher o número do processo SEI - E clicar no botão "Solicitar credenciamento" - Então é enviado à administração uma solicitação de credenciamento - E aparece uma mensagem de confirmação - - Cenário: Solicitacao não enviada - erro no número do processo - Quando eu preencher com um número qualquer - E clicar no botão "Solicitar credenciamento" - Então a mensagem de erro "Número inválido" - - Cenário: Solicitação não enviada - campo em branco - Quando eu não preencher o campo do número do processo SEI - E clicar no botão "Solicitar credenciamento" - Então a mensagem de erro "Campo obrigatório em branco" \ No newline at end of file diff --git a/features/credenciamento_periodo.feature b/features/credenciamento_periodo.feature deleted file mode 100644 index bc113ceb..00000000 --- a/features/credenciamento_periodo.feature +++ /dev/null @@ -1,23 +0,0 @@ -#language: pt -#encoding: utf-8 - -Funcionalidade: Definir o prazo de credenciamento dos professores - Como um administrador, - para que eu possa credenciar os professores, - eu gostaria de definir o prazo de credenciamento dos professores - - Contexto: - Dado que eu esteja autenticado como usuario "admin" - E que esteja na página de credenciamento - - Cenário: Definir prazo de credenciamento sem data - Quando eu aperto o botão "Definir prazo de credenciamento" - E eu aperto o botão "Salvar período" - Então eu espero ver a mensagem "Insira uma data de início e uma data de término válidas." - - Cenário: Definir prazo de credenciamento com data - Quando eu aperto o botão "Definir prazo de credenciamento" - Quando eu adiciono um valor "Início" para "Data de Início" - E eu adiciono um valor "Término" para "Data de Término" - E eu aperto o botão "Salvar período" - Então eu espero ver a mensagem "Prazo cadastrado com sucesso." \ No newline at end of file diff --git a/features/gerenciar_solicitacoes_credenciamento.feature b/features/gerenciar_solicitacoes_credenciamento.feature index 6c8daeb5..c002a5c1 100644 --- a/features/gerenciar_solicitacoes_credenciamento.feature +++ b/features/gerenciar_solicitacoes_credenciamento.feature @@ -14,7 +14,7 @@ Funcionalidade: Gerenciar solicitações de credenciamento | Solicitação 3 | 02-Jan-2021 | 1 | | Solicitação 4 | 02-Jan-2021 | 1 | - E que eu estou cadastrado como "Gabriel", "gabriel@admin.com", "gabriel123", 1, "200000000" + E que eu estou cadastrado como "Gabriel", "gabriel@admin.com", "gabriel123", "administrador", "200000000" E que eu estou logado E que eu estou na página de solicitações de credenciamento diff --git a/features/requisitos_necessarios.feature b/features/requisitos_necessarios.feature deleted file mode 100644 index 90199605..00000000 --- a/features/requisitos_necessarios.feature +++ /dev/null @@ -1,22 +0,0 @@ -#language: pt -#encoding: utf-8 - -Funcionalidade: Disponibilizar os requisitos necessarios para credenciamento de professores - Como administrador autenticado no sistema, - Quero poder disponibilizar para os professores os requisitos necessários para o credenciamento - Para que eles possam dar procedimento ao credenciamento - - Contexto: - Dado que eu esteja logado como administrador de email "gp@admin.com" e senha "123" - E não existem requisitos selecionados na página principal - Quando o administrador clicou no link para alterar documentos necessários para credenciamento - - Cenário: Os campos puderam ser selecionados - Quando eu selecionar os campos - E eu clicar no botão atualizar requisitos - Então eu devo voltar para a página principal aonde aparece meus requisitos selecionados - - Cenário: Não houveram mudanças feitas - Quando eu não selecionar os campos - E eu clicar no botão atualizar requisitos - Então eu recebo uma mensagem dizendo que "não houveram mudanças" diff --git a/features/spike.feature b/features/spike.feature new file mode 100644 index 00000000..eef30006 --- /dev/null +++ b/features/spike.feature @@ -0,0 +1,6 @@ +#language: pt +#encoding: utf-8 + +Funcionalidade: Testar + Cenário: + Dado que eu estou cadastrado e logado como "Gabriel", "gabriel@admin.com", "gabriel123", 1, "200000000" diff --git a/features/step_definitions/abrir_solicitacao_credenciamento.rb b/features/step_definitions/abrir_solicitacao_credenciamento.rb deleted file mode 100644 index 77684bad..00000000 --- a/features/step_definitions/abrir_solicitacao_credenciamento.rb +++ /dev/null @@ -1,28 +0,0 @@ -Dado("que eu esteja logado como professor com o email {string} e a senha {string}") do |string, string2| - User.create(username: 'professor123', email: string, password: string2, course: "CIC", is_admin: false) - visit new_user_session_path - click_button "Entrar" - fill_in :user_email, with: string - fill_in :user_password, with: string2 - click_button "Log in" -end - -Dado("que eu esteja na pagina {string}") do |string| - pending #expect(current_path).to eq("/#{string}") -end - -Dado("que exista a pendencia de credenciamento no sistema com o botao {string)") do |button| - pending #page.should have_button("Solicitar credenciamento") -end - -Entao("preencho o campo de processo SEI {string}") do |string| - pending #fill_in :processo_sei, with: string - -E("clico no botao {string}") do |button| - pending #click_button "Solicitar credenciamento" -end - -E("espero ver a mensagem de confirmacao {string}") do |string| - pending #@expected_message = string -end - diff --git a/features/step_definitions/credenciamento_periodo_steps.rb b/features/step_definitions/credenciamento_periodo_steps.rb deleted file mode 100644 index ff5881b4..00000000 --- a/features/step_definitions/credenciamento_periodo_steps.rb +++ /dev/null @@ -1,25 +0,0 @@ -Dado("Dado que eu esteja autenticado como usuario {string}") do |string| - User.create(full_name: string, email: 'admin1@admin.unb.br', password: 'password', - registration_number: "123456789", role: 1 - ) - visit new_user_session_path - fill_in :user_email, with: 'admin1@admin.unb.br' - fill_in :user_password, with: 'password' - click_button "Log in" -end - -Dado('que esteja na página de credenciamento') do |page_credenciamento| - pending #visit path_to(page_credenciamento) -end - -Quando('eu aperto o botão {string}') do |string| - pending #click_button(string) -end - -Então('eu espero ver a mensagem {string}') do |string| - pending #@expected_message = string -end - -Quando('eu adiciono um valor {string} para {string2}') do |string, string2| - pending #fill_in(string2, :with => string) -end \ No newline at end of file diff --git a/features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb b/features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb index 7f536f7c..1d006ed3 100644 --- a/features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb +++ b/features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb @@ -1,51 +1,69 @@ -Dado "que os seguintes solicitações estejam pendentes:" do |table| - pending -# table.hashes.each do |row| -# Activity.create!(row) -# end +Dado /^que eu estou cadastrado e logado como (.*)$/ do |input| + columns = [:full_name, :email, :password, :role, :registration] + + values = input.split(/,\s?/) + values.each_with_index do |value, i| + if /"([^"]*)"/ === value + value.gsub!(/"/,'') + else + values[i] = value.to_i + end + end + + record = Hash[columns.zip(values)] + User.create!(record) + + steps %( + Dado que eu estou logado como "#{record[:email]}", "#{record[:password]}" + ) end -Dado /^que eu estou cadastrado como (.*)$/ do |values| - pending -# values.split(/,[ ]*/).each do |value| -# end +Dado /^que eu estou logado como (.*)$/ do |input| + fields = ['email', 'password'] + values = Hash[fields.zip input.gsub!(/"/,'').split(/,\s?/)] + + visit new_user_session_path + fill_in("Email", :with => values['email']) + fill_in("Password", :with => values['password']) + click_button("Log in") end -Dado /^que eu estou logado como (.*)$/ do |values| +Dado "que os seguintes solicitações estejam pendentes:" do |table| pending -# values.split(/,[]*/) -# fill_in("Email", :with => values[0]) -# fill_in("Password", :with => values[1]) -# click_button("Log in") + # table.hashes.each do |row| + # Activity.create!(row) + # end end Quando /^eu clico em "([^"]*)"$/ do |link| - pending -# click_link(link) + click_link(link) end Então /^eu devo ver "([^"]*)"$/ do |text| - pending -# if page.respond_to? :should -# page.should have_content(text) -# else -# assert page.has_content?(text) -# end + if page.respond_to? :should + page.should have_content(text) + else + assert page.has_content?(text) + end end Então /^eu não devo ver "([^"]*)"$/ do |text| - pending -# if page.respond_to? :should -# page.should have_no_content(text) -# else -# assert page.has_no_content?(text) -# end + if page.respond_to? :should + page.should have_no_content(text) + else + assert page.has_no_content?(text) + end end -Dado /^que estou na página de (.+)$/ do |page_name| +Dado /^que estou na página (.+)$/ do |page_name| visit path_to(page_name) end -Então /^eu devo estar na página (.+)$/ - pending +Então /^eu devo estar na página (.+)$/ do |page_name| + current_path = URI.parse(current_url).path + if current_path.respond_to? :should + current_path.should == path_to(page_name) + else + assert_equal path_to(page_name), current_path + end end diff --git a/features/step_definitions/requisitos_necessarios_steps.rb b/features/step_definitions/requisitos_necessarios_steps.rb deleted file mode 100644 index 39edcc34..00000000 --- a/features/step_definitions/requisitos_necessarios_steps.rb +++ /dev/null @@ -1,32 +0,0 @@ -Dado("que eu esteja logado como administrador de email {string} e senha {string}") do |email, senha| - User.create(username: 'admin', email: email, password: senha, - registration: "123456789", is_admin: true - ) - visit new_user_session_path - fill_in :user_email, with: email - fill_in :user_password, with: senha - click_button "Log in" -end - -Quando("o administrador clicou no link para alterar documentos necessários para credenciamento") do - pending visit alterar_requisitos_path -end - -Quando("eu selecionar os campos") do - # select = page.find('select#select_id') - # select.select 'Opção 1' - # select.select 'Opção 2' - # select.select 'Opção 3' -end - -E("eu clicar no botão atualizar requisitos") do - pending click_button "atualizar requisitos" -end - -Então("eu devo voltar para a página principal aonde aparece meus requisitos selecionados") do - pending page.hasText('opções atuais: Option 1, Option 2, Option 3'); -end - -Então("eu recebo uma mensagem dizendo que {string}") do |string| - pending @expected_message = string -end diff --git a/features/step_definitions/web_steps.rb b/features/step_definitions/web_steps.rb new file mode 100644 index 00000000..94c2db84 --- /dev/null +++ b/features/step_definitions/web_steps.rb @@ -0,0 +1,254 @@ +# TL;DR: YOU SHOULD DELETE THIS FILE +# +# This file was generated by Cucumber-Rails and is only here to get you a head start +# These step definitions are thin wrappers around the Capybara/Webrat API that lets you +# visit pages, interact with widgets and make assertions about page content. +# +# If you use these step definitions as basis for your features you will quickly end up +# with features that are: +# +# * Hard to maintain +# * Verbose to read +# +# A much better approach is to write your own higher level step definitions, following +# the advice in the following blog posts: +# +# * http://benmabey.com/2008/05/19/imperative-vs-declarative-scenarios-in-user-stories.html +# * http://dannorth.net/2011/01/31/whose-domain-is-it-anyway/ +# * http://elabs.se/blog/15-you-re-cuking-it-wrong +# + + +require 'uri' +require 'cgi' +require File.expand_path(File.join(File.dirname(__FILE__), "..", "support", "paths")) +require File.expand_path(File.join(File.dirname(__FILE__), "..", "support", "selectors")) + +module WithinHelpers + def with_scope(locator) + locator ? within(*selector_for(locator)) { yield } : yield + end +end +World(WithinHelpers) + +# # Single-line step scoper +# When /^(.*) within (.*[^:])$/ do |step, parent| +# with_scope(parent) { When step } +# end + +# # Multi-line step scoper +# When /^(.*) within (.*[^:]):$/ do |step, parent, table_or_string| +# with_scope(parent) { When "#{step}:", table_or_string } +# end + +# Given /^(?:|I )am on (.+)$/ do |page_name| +# visit path_to(page_name) +# end + +# When /^(?:|I )go to (.+)$/ do |page_name| +# visit path_to(page_name) +# end + +# When /^(?:|I )press "([^"]*)"$/ do |button| +# click_button(button) +# end + +# When /^(?:|I )follow "([^"]*)"$/ do |link| +# click_link(link) +# end + +# When /^(?:|I )fill in "([^"]*)" with "([^"]*)"$/ do |field, value| +# fill_in(field, :with => value) +# end + +# When /^(?:|I )fill in "([^"]*)" for "([^"]*)"$/ do |value, field| +# fill_in(field, :with => value) +# end + +# # Use this to fill in an entire form with data from a table. Example: +# # +# # When I fill in the following: +# # | Account Number | 5002 | +# # | Expiry date | 2009-11-01 | +# # | Note | Nice guy | +# # | Wants Email? | | +# # +# # TODO: Add support for checkbox, select or option +# # based on naming conventions. +# # +# When /^(?:|I )fill in the following:$/ do |fields| +# fields.rows_hash.each do |name, value| +# When %{I fill in "#{name}" with "#{value}"} +# end +# end + +# When /^(?:|I )select "([^"]*)" from "([^"]*)"$/ do |value, field| +# select(value, :from => field) +# end + +# When /^(?:|I )check "([^"]*)"$/ do |field| +# check(field) +# end + +# When /^(?:|I )uncheck "([^"]*)"$/ do |field| +# uncheck(field) +# end + +# When /^(?:|I )choose "([^"]*)"$/ do |field| +# choose(field) +# end + +# When /^(?:|I )attach the file "([^"]*)" to "([^"]*)"$/ do |path, field| +# attach_file(field, File.expand_path(path)) +# end + +# Then /^(?:|I )should see "([^"]*)"$/ do |text| +# if page.respond_to? :should +# page.should have_content(text) +# else +# assert page.has_content?(text) +# end +# end + +# Then /^(?:|I )should see \/([^\/]*)\/$/ do |regexp| +# regexp = Regexp.new(regexp) + +# if page.respond_to? :should +# page.should have_xpath('//*', :text => regexp) +# else +# assert page.has_xpath?('//*', :text => regexp) +# end +# end + +# Then /^(?:|I )should not see "([^"]*)"$/ do |text| +# if page.respond_to? :should +# page.should have_no_content(text) +# else +# assert page.has_no_content?(text) +# end +# end + +# Then /^(?:|I )should not see \/([^\/]*)\/$/ do |regexp| +# regexp = Regexp.new(regexp) + +# if page.respond_to? :should +# page.should have_no_xpath('//*', :text => regexp) +# else +# assert page.has_no_xpath?('//*', :text => regexp) +# end +# end + +# Then /^the "([^"]*)" field(?: within (.*))? should contain "([^"]*)"$/ do |field, parent, value| +# with_scope(parent) do +# field = find_field(field) +# field_value = (field.tag_name == 'textarea') ? field.text : field.value +# if field_value.respond_to? :should +# field_value.should =~ /#{value}/ +# else +# assert_match(/#{value}/, field_value) +# end +# end +# end + +# Then /^the "([^"]*)" field(?: within (.*))? should not contain "([^"]*)"$/ do |field, parent, value| +# with_scope(parent) do +# field = find_field(field) +# field_value = (field.tag_name == 'textarea') ? field.text : field.value +# if field_value.respond_to? :should_not +# field_value.should_not =~ /#{value}/ +# else +# assert_no_match(/#{value}/, field_value) +# end +# end +# end + +# Then /^the "([^"]*)" field should have the error "([^"]*)"$/ do |field, error_message| +# element = find_field(field) +# classes = element.find(:xpath, '..')[:class].split(' ') + +# form_for_input = element.find(:xpath, 'ancestor::form[1]') +# using_formtastic = form_for_input[:class].include?('formtastic') +# error_class = using_formtastic ? 'error' : 'field_with_errors' + +# if classes.respond_to? :should +# classes.should include(error_class) +# else +# assert classes.include?(error_class) +# end + +# if page.respond_to?(:should) +# if using_formtastic +# error_paragraph = element.find(:xpath, '../*[@class="inline-errors"][1]') +# error_paragraph.should have_content(error_message) +# else +# page.should have_content("#{field.titlecase} #{error_message}") +# end +# else +# if using_formtastic +# error_paragraph = element.find(:xpath, '../*[@class="inline-errors"][1]') +# assert error_paragraph.has_content?(error_message) +# else +# assert page.has_content?("#{field.titlecase} #{error_message}") +# end +# end +# end + +# Then /^the "([^"]*)" field should have no error$/ do |field| +# element = find_field(field) +# classes = element.find(:xpath, '..')[:class].split(' ') +# if classes.respond_to? :should +# classes.should_not include('field_with_errors') +# classes.should_not include('error') +# else +# assert !classes.include?('field_with_errors') +# assert !classes.include?('error') +# end +# end + +# Then /^the "([^"]*)" checkbox(?: within (.*))? should be checked$/ do |label, parent| +# with_scope(parent) do +# field_checked = find_field(label)['checked'] +# if field_checked.respond_to? :should +# field_checked.should be_true +# else +# assert field_checked +# end +# end +# end + +# Then /^the "([^"]*)" checkbox(?: within (.*))? should not be checked$/ do |label, parent| +# with_scope(parent) do +# field_checked = find_field(label)['checked'] +# if field_checked.respond_to? :should +# field_checked.should be_false +# else +# assert !field_checked +# end +# end +# end + +# Then /^(?:|I )should be on (.+)$/ do |page_name| +# current_path = URI.parse(current_url).path +# if current_path.respond_to? :should +# current_path.should == path_to(page_name) +# else +# assert_equal path_to(page_name), current_path +# end +# end + +# Then /^(?:|I )should have the following query string:$/ do |expected_pairs| +# query = URI.parse(current_url).query +# actual_params = query ? CGI.parse(query) : {} +# expected_params = {} +# expected_pairs.rows_hash.each_pair{|k,v| expected_params[k] = v.split(',')} + +# if actual_params.respond_to? :should +# actual_params.should == expected_params +# else +# assert_equal expected_params, actual_params +# end +# end + +# Then /^show me the page$/ do +# save_and_open_page +# end diff --git a/features/support/env.rb b/features/support/env.rb index c6d5a72e..003fb131 100644 --- a/features/support/env.rb +++ b/features/support/env.rb @@ -4,16 +4,7 @@ # instead of editing this one. Cucumber will automatically load all features/**/*.rb # files. -require 'capybara' -require 'capybara/cucumber' require 'cucumber/rails' -require 'report_builder' - - -Capybara.configure do |config| - config.default_driver = :selenium_chrome #roda no navegador - #config.default_driver = :selenium_chrome_headless #roda com o nageador em background -end # frozen_string_literal: true diff --git a/features/support/hooks.rb b/features/support/hooks.rb index 37784b19..6049864c 100644 --- a/features/support/hooks.rb +++ b/features/support/hooks.rb @@ -10,7 +10,7 @@ def add_screenshot(scenario) nome_cenario = scenario.name.gsub(/[^A-Za-z0-9]/, '') nome_cenario = nome_cenario.gsub(' ','_').downcase! screenshot = "log/screenshots/#{nome_cenario}.png" - page.save_screenshot(screenshot) + # page.save_screenshot(screenshot) embed(screenshot, 'image/png', 'Print maroto :)') end diff --git a/features/support/paths.rb b/features/support/paths.rb new file mode 100644 index 00000000..290543c3 --- /dev/null +++ b/features/support/paths.rb @@ -0,0 +1,38 @@ +# TL;DR: YOU SHOULD DELETE THIS FILE +# +# This file is used by web_steps.rb, which you should also delete +# +# You have been warned +module NavigationHelpers + # Maps a name to a path. Used by the + # + # When /^I go to (.+)$/ do |page_name| + # + # step definition in web_steps.rb + # + def path_to(page_name) + case page_name + + when /^the home\s?page$/ + '/' + + # Add more mappings here. + # Here is an example that pulls values out of the Regexp: + # + # when /^(.*)'s profile page$/i + # user_profile_path(User.find_by_login($1)) + + else + begin + page_name =~ /^the (.*) page$/ + path_components = $1.split(/\s+/) + self.send(path_components.push('path').join('_').to_sym) + rescue NoMethodError, ArgumentError + raise "Can't find mapping from \"#{page_name}\" to a path.\n" + + "Now, go and add a mapping in #{__FILE__}" + end + end + end +end + +World(NavigationHelpers) diff --git a/features/support/selectors.rb b/features/support/selectors.rb new file mode 100644 index 00000000..33bebc1d --- /dev/null +++ b/features/support/selectors.rb @@ -0,0 +1,44 @@ +# TL;DR: YOU SHOULD DELETE THIS FILE +# +# This file is used by web_steps.rb, which you should also delete +# +# You have been warned +module HtmlSelectorsHelpers + # Maps a name to a selector. Used primarily by the + # + # When /^(.+) within (.+)$/ do |step, scope| + # + # step definitions in web_steps.rb + # + def selector_for(locator) + case locator + + when "the page" + "html > body" + + # Add more mappings here. + # Here is an example that pulls values out of the Regexp: + # + # when /^the (notice|error|info) flash$/ + # ".flash.#{$1}" + + # You can also return an array to use a different selector + # type, like: + # + # when /the header/ + # [:xpath, "//header"] + + # This allows you to provide a quoted selector as the scope + # for "within" steps as was previously the default for the + # web steps: + when /^"(.+)"$/ + $1 + + else + raise "Can't find mapping from \"#{locator}\" to a selector.\n" + + "Now, go and add a mapping in #{__FILE__}" + end + end +end + +World(HtmlSelectorsHelpers) diff --git a/report.json b/report.json new file mode 100644 index 00000000..e33767b0 --- /dev/null +++ b/report.json @@ -0,0 +1 @@ +[{"uri":"features/gerenciar_solicitacoes_credenciamento.feature","id":"gerenciar-solicitações-de-credenciamento","keyword":"Funcionalidade","name":"Gerenciar solicitações de credenciamento","description":" Como um admnistrador do sistema\n Quero visualizar uma solicitação de credencimento em aberto\n Para decidir se vou aceitar ou recusar tal solicitação","line":4,"comments":[{"value":"#encoding: utf-8","line":2}],"elements":[{"keyword":"Contexto","name":"","description":"","line":9,"type":"background","before":[{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:14"},"result":{"status":"passed","duration":25500}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:22"},"result":{"status":"passed","duration":16600}}],"steps":[{"keyword":"Dado ","name":"que os seguintes solicitações estejam pendentes:","line":10,"rows":[{"cells":["title","due_date","activity_type_id"]},{"cells":["Solicitação 1","02-Jan-2021","1"]},{"cells":["Solicitação 2","02-Jan-2021","1"]},{"cells":["Solicitação 3","02-Jan-2021","1"]},{"cells":["Solicitação 4","02-Jan-2021","1"]}],"match":{"location":"features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:31"},"result":{"status":"pending","error_message":"TODO (Cucumber::Pending)\n./features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:32:in `\"que os seguintes solicitações estejam pendentes:\"'\nfeatures/gerenciar_solicitacoes_credenciamento.feature:10:in `Dado que os seguintes solicitações estejam pendentes:'","duration":311000}},{"keyword":"E ","name":"que eu estou cadastrado como \"Gabriel\", \"gabriel@admin.com\", \"gabriel123\", 1, \"200000000\"","line":17,"match":{"location":"features/gerenciar_solicitacoes_credenciamento.feature:17"},"result":{"status":"undefined"}},{"keyword":"E ","name":"que eu estou logado","line":18,"match":{"location":"features/gerenciar_solicitacoes_credenciamento.feature:18"},"result":{"status":"undefined"}},{"keyword":"E ","name":"que eu estou na página de solicitações de credenciamento","line":19,"match":{"location":"features/gerenciar_solicitacoes_credenciamento.feature:19"},"result":{"status":"undefined"}}]},{"id":"gerenciar-solicitações-de-credenciamento;aceitar-uma-solicitação-de-credenciamento","keyword":"Cenário","name":"Aceitar uma solicitação de credenciamento","description":"","line":21,"type":"scenario","steps":[{"keyword":"Quando ","name":"eu clico em \"Solicitação 1\"","line":22,"match":{"location":"features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:38"},"result":{"status":"skipped"}},{"keyword":"Então ","name":"eu devo estar na página da \"Solicitação 1\"","line":23,"match":{"location":"features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:62"},"result":{"status":"skipped"}},{"keyword":"Quando ","name":"eu clico em \"Aceitar\"","line":24,"match":{"location":"features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:38"},"result":{"status":"skipped"}},{"keyword":"Então ","name":"eu devo estar na página de solicitações de credenciamento","line":25,"match":{"location":"features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:62"},"result":{"status":"skipped"}},{"keyword":"E ","name":"eu não devo ver \"Solicitação 1\"","line":26,"match":{"location":"features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:50"},"result":{"status":"skipped"}},{"keyword":"Quando ","name":"eu clico em \"Solicitações aceitas\"","line":27,"match":{"location":"features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:38"},"result":{"status":"skipped"}},{"keyword":"Então ","name":"eu devo ver \"Solicitação 1\"","line":28,"match":{"location":"features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:42"},"result":{"status":"skipped"}}],"after":[{"embeddings":[{"mime_type":"image/png","data":"bG9nL3NjcmVlbnNob3RzL2FjZWl0YXJ1bWFzb2xpY2l0YW9kZWNyZWRlbmNpYW1lbnRvLnBuZw=="}],"match":{"location":"features/support/hooks.rb:1"},"result":{"status":"passed","duration":242200}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:10"},"result":{"status":"passed","duration":18400}}]},{"keyword":"Contexto","name":"","description":"","line":9,"type":"background","before":[{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:14"},"result":{"status":"passed","duration":11400}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:22"},"result":{"status":"passed","duration":45600}}],"steps":[{"keyword":"Dado ","name":"que os seguintes solicitações estejam pendentes:","line":10,"rows":[{"cells":["title","due_date","activity_type_id"]},{"cells":["Solicitação 1","02-Jan-2021","1"]},{"cells":["Solicitação 2","02-Jan-2021","1"]},{"cells":["Solicitação 3","02-Jan-2021","1"]},{"cells":["Solicitação 4","02-Jan-2021","1"]}],"match":{"location":"features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:31"},"result":{"status":"pending","error_message":"TODO (Cucumber::Pending)\n./features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:32:in `\"que os seguintes solicitações estejam pendentes:\"'\nfeatures/gerenciar_solicitacoes_credenciamento.feature:10:in `Dado que os seguintes solicitações estejam pendentes:'","duration":173000}},{"keyword":"E ","name":"que eu estou cadastrado como \"Gabriel\", \"gabriel@admin.com\", \"gabriel123\", 1, \"200000000\"","line":17,"match":{"location":"features/gerenciar_solicitacoes_credenciamento.feature:17"},"result":{"status":"undefined"}},{"keyword":"E ","name":"que eu estou logado","line":18,"match":{"location":"features/gerenciar_solicitacoes_credenciamento.feature:18"},"result":{"status":"undefined"}},{"keyword":"E ","name":"que eu estou na página de solicitações de credenciamento","line":19,"match":{"location":"features/gerenciar_solicitacoes_credenciamento.feature:19"},"result":{"status":"undefined"}}]},{"id":"gerenciar-solicitações-de-credenciamento;recusar-uma-solicitação-de-credenciamento","keyword":"Cenário","name":"Recusar uma solicitação de credenciamento","description":"","line":30,"type":"scenario","steps":[{"keyword":"Quando ","name":"eu clico em \"Solicitação 2\"","line":31,"match":{"location":"features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:38"},"result":{"status":"skipped"}},{"keyword":"Então ","name":"eu devo estar na página da \"Solicitação 2\"","line":32,"match":{"location":"features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:62"},"result":{"status":"skipped"}},{"keyword":"Quando ","name":"eu clico em \"Recusar\"","line":33,"match":{"location":"features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:38"},"result":{"status":"skipped"}},{"keyword":"Então ","name":"eu devo estar na página de solicitações de credenciamento","line":34,"match":{"location":"features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:62"},"result":{"status":"skipped"}},{"keyword":"E ","name":"eu não devo ver \"Solicitação 2\"","line":35,"match":{"location":"features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:50"},"result":{"status":"skipped"}},{"keyword":"Quando ","name":"eu clico em \"Solicitações aceitas\"","line":36,"match":{"location":"features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:38"},"result":{"status":"skipped"}},{"keyword":"Então ","name":"eu não devo ver \"Solicitação 2\"","line":37,"match":{"location":"features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:50"},"result":{"status":"skipped"}}],"after":[{"embeddings":[{"mime_type":"image/png","data":"bG9nL3NjcmVlbnNob3RzL3JlY3VzYXJ1bWFzb2xpY2l0YW9kZWNyZWRlbmNpYW1lbnRvLnBuZw=="}],"match":{"location":"features/support/hooks.rb:1"},"result":{"status":"passed","duration":201700}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:10"},"result":{"status":"passed","duration":14900}}]}]},{"uri":"features/spike.feature","id":"testar","keyword":"Funcionalidade","name":"Testar","description":"","line":4,"comments":[{"value":"#encoding: utf-8","line":2}],"elements":[{"id":"testar;","keyword":"Cenário","name":"","description":"","line":5,"type":"scenario","before":[{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:14"},"result":{"status":"passed","duration":11200}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:22"},"result":{"status":"passed","duration":9100}}],"steps":[{"keyword":"Dado ","name":"que eu estou cadastrado e logado como \"Gabriel\", \"gabriel@admin.com\", \"gabriel123\", 1, \"200000000\"","line":6,"match":{"location":"features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:1"},"result":{"status":"passed","duration":4778577400}}],"after":[{"embeddings":[{"mime_type":"image/png","data":"bG9nL3NjcmVlbnNob3RzLy5wbmc="}],"match":{"location":"features/support/hooks.rb:1"},"result":{"status":"passed","duration":253000}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:10"},"result":{"status":"passed","duration":31900}}]}]}] \ No newline at end of file diff --git a/spike.rb b/spike.rb new file mode 100644 index 00000000..a5837c1e --- /dev/null +++ b/spike.rb @@ -0,0 +1,16 @@ +# frase = "\"Gabriel\", \"gabriel@admin.com\", \"gabriel123\", 1, \"200000000\"" +# values = frase.split(/,\s?/) +# values.each_with_index do |value, i| +# if /"([^"]*)"/ === value +# value.gsub!(/"/,'') +# else +# values[i] = value.to_i +# end +# end +# columns = [:full_name, :email, :password, :role, :registration] +# record = Hash[columns.zip(values)] +# p record + +# frase = "\"gabriel@admin.com\", \"gabriel123\"" +# values = frase.gsub!(/"/,'').split(/,\s?/) +# p values \ No newline at end of file From 03b583dbe6427de7e6c4f726e037cc6348ac51e8 Mon Sep 17 00:00:00 2001 From: ngsylar Date: Mon, 9 Nov 2020 22:25:04 -0300 Subject: [PATCH 10/82] rescue original features --- features.html | 33 ++++++---- .../abrir_solicitacao_credenciamento.feature | 29 ++++++++ features/credenciamento_periodo.feature | 23 +++++++ ...enciar_solicitacoes_credenciamento.feature | 33 +++++----- features/requisitos_necessarios.feature | 22 +++++++ features/spike.feature | 2 +- ...rb => credenciamento_professores_steps.rb} | 66 +++++++++++-------- report.json | 2 +- spike.rb | 2 +- 9 files changed, 151 insertions(+), 61 deletions(-) create mode 100644 features/abrir_solicitacao_credenciamento.feature create mode 100644 features/credenciamento_periodo.feature create mode 100644 features/requisitos_necessarios.feature rename features/step_definitions/{gerenciar_solicitacoes_credenciamento_steps.rb => credenciamento_professores_steps.rb} (67%) diff --git a/features.html b/features.html index 45392229..d4aef58d 100644 --- a/features.html +++ b/features.html @@ -467,19 +467,26 @@ function makeYellow(element_id) { $('#'+element_id).css('background', '#FAF834'); $('#'+element_id).css('color', '#000000'); -}

Cucumber Features

Expand All

Collapse All

# language: pt
#encoding: utf-8

Funcionalidade: Gerenciar solicitações de credenciamento

Como um admnistrador do sistema
Quero visualizar uma solicitação de credencimento em aberto
Para decidir se vou aceitar ou recusar tal solicitação

Contexto

  1. Dado que os seguintes solicitações estejam pendentes:
    features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:31
    title
    due_date
    activity_type_id
    Solicitação 1
    02-Jan-2021
    1
    Solicitação 2
    02-Jan-2021
    1
    Solicitação 3
    02-Jan-2021
    1
    Solicitação 4
    02-Jan-2021
    1
    TODO (Cucumber::Pending)
    ./features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:32:in `"que os seguintes solicitações estejam pendentes:"'
    -features/gerenciar_solicitacoes_credenciamento.feature:10:in `Dado que os seguintes solicitações estejam pendentes:'
    30
    -31Dado "que os seguintes solicitações estejam pendentes:" do |table|
    -32    pending
    
    -33    # table.hashes.each do |row|
    -34    #     Activity.create!(row)
    -35# gem install syntax to get syntax highlighting
  2. E que eu estou cadastrado como "Gabriel", "gabriel@admin.com", "gabriel123", 1, "200000000"
    features/gerenciar_solicitacoes_credenciamento.feature:17
    Dado("que eu estou cadastrado como {string}, {string}, {string}, {int}, {string}") do |string, string2, string3, int, string4|
    +}

    Cucumber Features

    Expand All

    Collapse All

    # language: pt
    #encoding: utf-8

    Funcionalidade: Gerenciar solicitações de credenciamento

    Como um admnistrador do sistema
    Quero visualizar uma solicitação de credencimento em aberto
    Para decidir se vou aceitar ou recusar tal solicitação

    Contexto

    1. Dado que os seguintes solicitações estejam pendentes:
      features/step_definitions/credenciamento_professores_steps.rb:1
      title
      due_date
      activity_type_id
      Solicitação 1
      02-Jan-2021
      Solicitação de credenciamento
      Solicitação 2
      02-Jan-2021
      Solicitação de credenciamento
      Solicitação 3
      02-Jan-2021
      Solicitação de credenciamento
      Solicitação 4
      02-Jan-2021
      Solicitação de credenciamento
      TODO (Cucumber::Pending)
      ./features/step_definitions/credenciamento_professores_steps.rb:2:in `"que os seguintes solicitações estejam pendentes:"'
      +features/gerenciar_solicitacoes_credenciamento.feature:10:in `Dado que os seguintes solicitações estejam pendentes:'
      0Dado "que os seguintes solicitações estejam pendentes:" do |table|
      +1    pending
      +2    # table.hashes.each do |row|
      
      +3    #     Activity.create!(row)
      +4# gem install syntax to get syntax highlighting
    2. E que eu estou cadastrado e logado como "Gabriel", "gabriel@admin.com", "gabriel123", "administrator", "200000000"
      features/step_definitions/credenciamento_professores_steps.rb:8
    3. E que eu estou na página de solicitações de credenciamento
      features/gerenciar_solicitacoes_credenciamento.feature:18
      Dado("que eu estou na página de solicitações de credenciamento") do
         pending # Write code here that turns the phrase above into concrete actions
      -end
    4. E que eu estou logado
      features/gerenciar_solicitacoes_credenciamento.feature:18
      Dado("que eu estou logado") do
      +end
    features/gerenciar_solicitacoes_credenciamento.feature:20

    Cenário: Aceitar uma solicitação de credenciamento

    1. Quando eu clico em "Solicitação 1"
      features/step_definitions/credenciamento_professores_steps.rb:34
    2. Então eu devo estar na página da "Solicitação 1"
      features/step_definitions/credenciamento_professores_steps.rb:38
    3. Quando eu clico em "Aprovar"
      features/step_definitions/credenciamento_professores_steps.rb:34
    4. Então eu devo estar na página de solicitações de credenciamento
      features/step_definitions/credenciamento_professores_steps.rb:38
    5. Quando eu desmarco os seguintes estados: Rejeitadas, Reformulação
      features/gerenciar_solicitacoes_credenciamento.feature:25
      Quando("eu desmarco os seguintes estados: Rejeitadas, Reformulação") do
         pending # Write code here that turns the phrase above into concrete actions
      -end
    6. E que eu estou na página de solicitações de credenciamento
      features/gerenciar_solicitacoes_credenciamento.feature:19
      Dado("que eu estou na página de solicitações de credenciamento") do
      +end
    7. E eu marco os seguintes estados: Aprovadas
      features/gerenciar_solicitacoes_credenciamento.feature:26
      Quando("eu marco os seguintes estados: Aprovadas") do
         pending # Write code here that turns the phrase above into concrete actions
      -end
    features/gerenciar_solicitacoes_credenciamento.feature:21

    Cenário: Aceitar uma solicitação de credenciamento

    1. Quando eu clico em "Solicitação 1"
      features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:38
    2. Então eu devo estar na página da "Solicitação 1"
      features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:62
    3. Quando eu clico em "Aceitar"
      features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:38
    4. Então eu devo estar na página de solicitações de credenciamento
      features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:62
    5. E eu não devo ver "Solicitação 1"
      features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:50
    6. Quando eu clico em "Solicitações aceitas"
      features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:38
    7. Então eu devo ver "Solicitação 1"
      features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:42
    8. Print maroto :)
        -
    features/gerenciar_solicitacoes_credenciamento.feature:30

    Cenário: Recusar uma solicitação de credenciamento

    1. Quando eu clico em "Solicitação 2"
      features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:38
    2. Então eu devo estar na página da "Solicitação 2"
      features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:62
    3. Quando eu clico em "Recusar"
      features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:38
    4. Então eu devo estar na página de solicitações de credenciamento
      features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:62
    5. E eu não devo ver "Solicitação 2"
      features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:50
    6. Quando eu clico em "Solicitações aceitas"
      features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:38
    7. Então eu não devo ver "Solicitação 2"
      features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:50
    8. Print maroto :)
        -
    # language: pt
    #encoding: utf-8

    Funcionalidade: Testar

    features/spike.feature:5

    Cenário:

    1. Dado que eu estou cadastrado e logado como "Gabriel", "gabriel@admin.com", "gabriel123", 1, "200000000"
      features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:1
    2. Print maroto :)
        -
    \ No newline at end of file +end
  3. E aperto 'Atualizar'
    features/gerenciar_solicitacoes_credenciamento.feature:27
    Quando("aperto {string}") do |string|
    +  pending # Write code here that turns the phrase above into concrete actions
    +end
  4. Então eu devo ver "Solicitação 1"
    features/step_definitions/credenciamento_professores_steps.rb:63
  5. Print maroto :)
      +
features/gerenciar_solicitacoes_credenciamento.feature:30

Cenário: Recusar uma solicitação de credenciamento

  1. Quando eu clico em "Solicitação 2"
    features/step_definitions/credenciamento_professores_steps.rb:34
  2. Então eu devo estar na página da "Solicitação 2"
    features/step_definitions/credenciamento_professores_steps.rb:38
  3. Quando eu clico em "Rejeitar"
    features/step_definitions/credenciamento_professores_steps.rb:34
  4. Então eu devo estar na página de solicitações de credenciamento
    features/step_definitions/credenciamento_professores_steps.rb:38
  5. Quando eu desmarco os seguintes estados: Aprovadas, Reformulação
    features/gerenciar_solicitacoes_credenciamento.feature:35
    Quando("eu desmarco os seguintes estados: Aprovadas, Reformulação") do
    +  pending # Write code here that turns the phrase above into concrete actions
    +end
  6. E eu marco os seguintes estados: Rejeitadas
    features/gerenciar_solicitacoes_credenciamento.feature:36
    Quando("eu marco os seguintes estados: Rejeitadas") do
    +  pending # Write code here that turns the phrase above into concrete actions
    +end
  7. E aperto 'Atualizar'
    features/gerenciar_solicitacoes_credenciamento.feature:37
    Quando("aperto {string}") do |string|
    +  pending # Write code here that turns the phrase above into concrete actions
    +end
  8. Então eu devo ver "Solicitação 2"
    features/step_definitions/credenciamento_professores_steps.rb:63
  9. Print maroto :)
      +
# language: pt
#encoding: utf-8

Funcionalidade: Testar

features/spike.feature:5

Cenário:

  1. Dado que eu estou cadastrado e logado como "Gabriel", "gabriel@admin.com", "gabriel123", "administrator", "200000000"
    features/step_definitions/credenciamento_professores_steps.rb:8
  2. Print maroto :)
      +
\ No newline at end of file diff --git a/features/abrir_solicitacao_credenciamento.feature b/features/abrir_solicitacao_credenciamento.feature new file mode 100644 index 00000000..910d270f --- /dev/null +++ b/features/abrir_solicitacao_credenciamento.feature @@ -0,0 +1,29 @@ +#language: pt +#encoding: utf-8 + +Funcionalidade: Solicitar credenciamento + Como professor autenticado no sistema, + Quero poder solicitar meu credenciamento + Para que eu possa ser um professor credenciado + + Contexto: + Dado que eu esteja cadastrado como usuário "prof1@user.com" + E que esteja logado + E que esteja na página de credenciamento + E esteja pendente de credenciamento + + Cenário: Solicitacao enviada com sucesso + Quando eu preencher o número do processo SEI + E clicar no botão "Solicitar credenciamento" + Então é enviado à administração uma solicitação de credenciamento + E aparece uma mensagem de confirmação + + Cenário: Solicitacao não enviada - erro no número do processo + Quando eu preencher com um número qualquer + E clicar no botão "Solicitar credenciamento" + Então a mensagem de erro "Número inválido" + + Cenário: Solicitação não enviada - campo em branco + Quando eu não preencher o campo do número do processo SEI + E clicar no botão "Solicitar credenciamento" + Então a mensagem de erro "Campo obrigatório em branco" \ No newline at end of file diff --git a/features/credenciamento_periodo.feature b/features/credenciamento_periodo.feature new file mode 100644 index 00000000..bc113ceb --- /dev/null +++ b/features/credenciamento_periodo.feature @@ -0,0 +1,23 @@ +#language: pt +#encoding: utf-8 + +Funcionalidade: Definir o prazo de credenciamento dos professores + Como um administrador, + para que eu possa credenciar os professores, + eu gostaria de definir o prazo de credenciamento dos professores + + Contexto: + Dado que eu esteja autenticado como usuario "admin" + E que esteja na página de credenciamento + + Cenário: Definir prazo de credenciamento sem data + Quando eu aperto o botão "Definir prazo de credenciamento" + E eu aperto o botão "Salvar período" + Então eu espero ver a mensagem "Insira uma data de início e uma data de término válidas." + + Cenário: Definir prazo de credenciamento com data + Quando eu aperto o botão "Definir prazo de credenciamento" + Quando eu adiciono um valor "Início" para "Data de Início" + E eu adiciono um valor "Término" para "Data de Término" + E eu aperto o botão "Salvar período" + Então eu espero ver a mensagem "Prazo cadastrado com sucesso." \ No newline at end of file diff --git a/features/gerenciar_solicitacoes_credenciamento.feature b/features/gerenciar_solicitacoes_credenciamento.feature index c002a5c1..3598e10d 100644 --- a/features/gerenciar_solicitacoes_credenciamento.feature +++ b/features/gerenciar_solicitacoes_credenciamento.feature @@ -7,31 +7,32 @@ Funcionalidade: Gerenciar solicitações de credenciamento Para decidir se vou aceitar ou recusar tal solicitação Contexto: - Dado que os seguintes solicitações estejam pendentes: - | title | due_date | activity_type_id | - | Solicitação 1 | 02-Jan-2021 | 1 | - | Solicitação 2 | 02-Jan-2021 | 1 | - | Solicitação 3 | 02-Jan-2021 | 1 | - | Solicitação 4 | 02-Jan-2021 | 1 | - - E que eu estou cadastrado como "Gabriel", "gabriel@admin.com", "gabriel123", "administrador", "200000000" - E que eu estou logado + Dado que as seguintes solicitações estejam pendentes: + | title | due_date | activity_type_id | + | Solicitação 1 | 02-Jan-2021 | Solicitação de credenciamento | + | Solicitação 2 | 02-Jan-2021 | Solicitação de credenciamento | + | Solicitação 3 | 02-Jan-2021 | Solicitação de credenciamento | + | Solicitação 4 | 02-Jan-2021 | Solicitação de credenciamento | + + E que eu estou cadastrado e logado como "Gabriel", "gabriel@admin.com", "gabriel123", "administrator", "200000000" E que eu estou na página de solicitações de credenciamento Cenário: Aceitar uma solicitação de credenciamento Quando eu clico em "Solicitação 1" Então eu devo estar na página da "Solicitação 1" - Quando eu clico em "Aceitar" + Quando eu clico em "Aprovar" Então eu devo estar na página de solicitações de credenciamento - E eu não devo ver "Solicitação 1" - Quando eu clico em "Solicitações aceitas" + Quando eu desmarco os seguintes estados: Rejeitadas, Reformulação + E eu marco os seguintes estados: Aprovadas + E aperto 'Atualizar' Então eu devo ver "Solicitação 1" Cenário: Recusar uma solicitação de credenciamento Quando eu clico em "Solicitação 2" Então eu devo estar na página da "Solicitação 2" - Quando eu clico em "Recusar" + Quando eu clico em "Rejeitar" Então eu devo estar na página de solicitações de credenciamento - E eu não devo ver "Solicitação 2" - Quando eu clico em "Solicitações aceitas" - Então eu não devo ver "Solicitação 2" + Quando eu desmarco os seguintes estados: Aprovadas, Reformulação + E eu marco os seguintes estados: Rejeitadas + E aperto 'Atualizar' + Então eu devo ver "Solicitação 2" diff --git a/features/requisitos_necessarios.feature b/features/requisitos_necessarios.feature new file mode 100644 index 00000000..90199605 --- /dev/null +++ b/features/requisitos_necessarios.feature @@ -0,0 +1,22 @@ +#language: pt +#encoding: utf-8 + +Funcionalidade: Disponibilizar os requisitos necessarios para credenciamento de professores + Como administrador autenticado no sistema, + Quero poder disponibilizar para os professores os requisitos necessários para o credenciamento + Para que eles possam dar procedimento ao credenciamento + + Contexto: + Dado que eu esteja logado como administrador de email "gp@admin.com" e senha "123" + E não existem requisitos selecionados na página principal + Quando o administrador clicou no link para alterar documentos necessários para credenciamento + + Cenário: Os campos puderam ser selecionados + Quando eu selecionar os campos + E eu clicar no botão atualizar requisitos + Então eu devo voltar para a página principal aonde aparece meus requisitos selecionados + + Cenário: Não houveram mudanças feitas + Quando eu não selecionar os campos + E eu clicar no botão atualizar requisitos + Então eu recebo uma mensagem dizendo que "não houveram mudanças" diff --git a/features/spike.feature b/features/spike.feature index eef30006..c6d04b45 100644 --- a/features/spike.feature +++ b/features/spike.feature @@ -3,4 +3,4 @@ Funcionalidade: Testar Cenário: - Dado que eu estou cadastrado e logado como "Gabriel", "gabriel@admin.com", "gabriel123", 1, "200000000" + Dado que eu estou cadastrado e logado como "Gabriel", "gabriel@admin.com", "gabriel123", "administrator", "200000000" diff --git a/features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb b/features/step_definitions/credenciamento_professores_steps.rb similarity index 67% rename from features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb rename to features/step_definitions/credenciamento_professores_steps.rb index 1d006ed3..d9d6d856 100644 --- a/features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb +++ b/features/step_definitions/credenciamento_professores_steps.rb @@ -1,16 +1,15 @@ +Dado "que as seguintes solicitações estejam pendentes:" do |table| + pending + # table.hashes.each do |row| + # Activity.create!(row) + # end +end + Dado /^que eu estou cadastrado e logado como (.*)$/ do |input| - columns = [:full_name, :email, :password, :role, :registration] + user_props = [:full_name, :email, :password, :role, :registration] - values = input.split(/,\s?/) - values.each_with_index do |value, i| - if /"([^"]*)"/ === value - value.gsub!(/"/,'') - else - values[i] = value.to_i - end - end - - record = Hash[columns.zip(values)] + values = input.gsub!(/"/,'').split(/,\s?/) + record = Hash[user_props.zip(values)] User.create!(record) steps %( @@ -28,17 +27,39 @@ click_button("Log in") end -Dado "que os seguintes solicitações estejam pendentes:" do |table| - pending - # table.hashes.each do |row| - # Activity.create!(row) - # end +Dado /^que eu estou na página (.+)$/ do |page_name| + visit path_to(page_name) end Quando /^eu clico em "([^"]*)"$/ do |link| click_link(link) end +Então /^eu devo estar na página (.+)$/ do |page_name| + current_path = URI.parse(current_url).path + if current_path.respond_to? :should + current_path.should == path_to(page_name) + else + assert_equal path_to(page_name), current_path + end +end + +Quando /^eu marco os seguintes estados (.*)$/ do |statuses| + statuses.split(/,[ ]*/).each do |status| + check("statuses[#{status}]") + end +end + +Quando /^eu desmarco os seguintes estados (.*)$/ do |statuses| + statuses.split(/,[ ]*/).each do |status| + uncheck("statuses[#{status}]") + end +end + +Quando /^eu aperto '([^']*)'$/ do |button| + click_button(button) +end + Então /^eu devo ver "([^"]*)"$/ do |text| if page.respond_to? :should page.should have_content(text) @@ -54,16 +75,3 @@ assert page.has_no_content?(text) end end - -Dado /^que estou na página (.+)$/ do |page_name| - visit path_to(page_name) -end - -Então /^eu devo estar na página (.+)$/ do |page_name| - current_path = URI.parse(current_url).path - if current_path.respond_to? :should - current_path.should == path_to(page_name) - else - assert_equal path_to(page_name), current_path - end -end diff --git a/report.json b/report.json index e33767b0..d79596a6 100644 --- a/report.json +++ b/report.json @@ -1 +1 @@ -[{"uri":"features/gerenciar_solicitacoes_credenciamento.feature","id":"gerenciar-solicitações-de-credenciamento","keyword":"Funcionalidade","name":"Gerenciar solicitações de credenciamento","description":" Como um admnistrador do sistema\n Quero visualizar uma solicitação de credencimento em aberto\n Para decidir se vou aceitar ou recusar tal solicitação","line":4,"comments":[{"value":"#encoding: utf-8","line":2}],"elements":[{"keyword":"Contexto","name":"","description":"","line":9,"type":"background","before":[{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:14"},"result":{"status":"passed","duration":25500}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:22"},"result":{"status":"passed","duration":16600}}],"steps":[{"keyword":"Dado ","name":"que os seguintes solicitações estejam pendentes:","line":10,"rows":[{"cells":["title","due_date","activity_type_id"]},{"cells":["Solicitação 1","02-Jan-2021","1"]},{"cells":["Solicitação 2","02-Jan-2021","1"]},{"cells":["Solicitação 3","02-Jan-2021","1"]},{"cells":["Solicitação 4","02-Jan-2021","1"]}],"match":{"location":"features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:31"},"result":{"status":"pending","error_message":"TODO (Cucumber::Pending)\n./features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:32:in `\"que os seguintes solicitações estejam pendentes:\"'\nfeatures/gerenciar_solicitacoes_credenciamento.feature:10:in `Dado que os seguintes solicitações estejam pendentes:'","duration":311000}},{"keyword":"E ","name":"que eu estou cadastrado como \"Gabriel\", \"gabriel@admin.com\", \"gabriel123\", 1, \"200000000\"","line":17,"match":{"location":"features/gerenciar_solicitacoes_credenciamento.feature:17"},"result":{"status":"undefined"}},{"keyword":"E ","name":"que eu estou logado","line":18,"match":{"location":"features/gerenciar_solicitacoes_credenciamento.feature:18"},"result":{"status":"undefined"}},{"keyword":"E ","name":"que eu estou na página de solicitações de credenciamento","line":19,"match":{"location":"features/gerenciar_solicitacoes_credenciamento.feature:19"},"result":{"status":"undefined"}}]},{"id":"gerenciar-solicitações-de-credenciamento;aceitar-uma-solicitação-de-credenciamento","keyword":"Cenário","name":"Aceitar uma solicitação de credenciamento","description":"","line":21,"type":"scenario","steps":[{"keyword":"Quando ","name":"eu clico em \"Solicitação 1\"","line":22,"match":{"location":"features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:38"},"result":{"status":"skipped"}},{"keyword":"Então ","name":"eu devo estar na página da \"Solicitação 1\"","line":23,"match":{"location":"features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:62"},"result":{"status":"skipped"}},{"keyword":"Quando ","name":"eu clico em \"Aceitar\"","line":24,"match":{"location":"features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:38"},"result":{"status":"skipped"}},{"keyword":"Então ","name":"eu devo estar na página de solicitações de credenciamento","line":25,"match":{"location":"features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:62"},"result":{"status":"skipped"}},{"keyword":"E ","name":"eu não devo ver \"Solicitação 1\"","line":26,"match":{"location":"features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:50"},"result":{"status":"skipped"}},{"keyword":"Quando ","name":"eu clico em \"Solicitações aceitas\"","line":27,"match":{"location":"features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:38"},"result":{"status":"skipped"}},{"keyword":"Então ","name":"eu devo ver \"Solicitação 1\"","line":28,"match":{"location":"features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:42"},"result":{"status":"skipped"}}],"after":[{"embeddings":[{"mime_type":"image/png","data":"bG9nL3NjcmVlbnNob3RzL2FjZWl0YXJ1bWFzb2xpY2l0YW9kZWNyZWRlbmNpYW1lbnRvLnBuZw=="}],"match":{"location":"features/support/hooks.rb:1"},"result":{"status":"passed","duration":242200}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:10"},"result":{"status":"passed","duration":18400}}]},{"keyword":"Contexto","name":"","description":"","line":9,"type":"background","before":[{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:14"},"result":{"status":"passed","duration":11400}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:22"},"result":{"status":"passed","duration":45600}}],"steps":[{"keyword":"Dado ","name":"que os seguintes solicitações estejam pendentes:","line":10,"rows":[{"cells":["title","due_date","activity_type_id"]},{"cells":["Solicitação 1","02-Jan-2021","1"]},{"cells":["Solicitação 2","02-Jan-2021","1"]},{"cells":["Solicitação 3","02-Jan-2021","1"]},{"cells":["Solicitação 4","02-Jan-2021","1"]}],"match":{"location":"features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:31"},"result":{"status":"pending","error_message":"TODO (Cucumber::Pending)\n./features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:32:in `\"que os seguintes solicitações estejam pendentes:\"'\nfeatures/gerenciar_solicitacoes_credenciamento.feature:10:in `Dado que os seguintes solicitações estejam pendentes:'","duration":173000}},{"keyword":"E ","name":"que eu estou cadastrado como \"Gabriel\", \"gabriel@admin.com\", \"gabriel123\", 1, \"200000000\"","line":17,"match":{"location":"features/gerenciar_solicitacoes_credenciamento.feature:17"},"result":{"status":"undefined"}},{"keyword":"E ","name":"que eu estou logado","line":18,"match":{"location":"features/gerenciar_solicitacoes_credenciamento.feature:18"},"result":{"status":"undefined"}},{"keyword":"E ","name":"que eu estou na página de solicitações de credenciamento","line":19,"match":{"location":"features/gerenciar_solicitacoes_credenciamento.feature:19"},"result":{"status":"undefined"}}]},{"id":"gerenciar-solicitações-de-credenciamento;recusar-uma-solicitação-de-credenciamento","keyword":"Cenário","name":"Recusar uma solicitação de credenciamento","description":"","line":30,"type":"scenario","steps":[{"keyword":"Quando ","name":"eu clico em \"Solicitação 2\"","line":31,"match":{"location":"features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:38"},"result":{"status":"skipped"}},{"keyword":"Então ","name":"eu devo estar na página da \"Solicitação 2\"","line":32,"match":{"location":"features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:62"},"result":{"status":"skipped"}},{"keyword":"Quando ","name":"eu clico em \"Recusar\"","line":33,"match":{"location":"features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:38"},"result":{"status":"skipped"}},{"keyword":"Então ","name":"eu devo estar na página de solicitações de credenciamento","line":34,"match":{"location":"features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:62"},"result":{"status":"skipped"}},{"keyword":"E ","name":"eu não devo ver \"Solicitação 2\"","line":35,"match":{"location":"features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:50"},"result":{"status":"skipped"}},{"keyword":"Quando ","name":"eu clico em \"Solicitações aceitas\"","line":36,"match":{"location":"features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:38"},"result":{"status":"skipped"}},{"keyword":"Então ","name":"eu não devo ver \"Solicitação 2\"","line":37,"match":{"location":"features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:50"},"result":{"status":"skipped"}}],"after":[{"embeddings":[{"mime_type":"image/png","data":"bG9nL3NjcmVlbnNob3RzL3JlY3VzYXJ1bWFzb2xpY2l0YW9kZWNyZWRlbmNpYW1lbnRvLnBuZw=="}],"match":{"location":"features/support/hooks.rb:1"},"result":{"status":"passed","duration":201700}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:10"},"result":{"status":"passed","duration":14900}}]}]},{"uri":"features/spike.feature","id":"testar","keyword":"Funcionalidade","name":"Testar","description":"","line":4,"comments":[{"value":"#encoding: utf-8","line":2}],"elements":[{"id":"testar;","keyword":"Cenário","name":"","description":"","line":5,"type":"scenario","before":[{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:14"},"result":{"status":"passed","duration":11200}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:22"},"result":{"status":"passed","duration":9100}}],"steps":[{"keyword":"Dado ","name":"que eu estou cadastrado e logado como \"Gabriel\", \"gabriel@admin.com\", \"gabriel123\", 1, \"200000000\"","line":6,"match":{"location":"features/step_definitions/gerenciar_solicitacoes_credenciamento_steps.rb:1"},"result":{"status":"passed","duration":4778577400}}],"after":[{"embeddings":[{"mime_type":"image/png","data":"bG9nL3NjcmVlbnNob3RzLy5wbmc="}],"match":{"location":"features/support/hooks.rb:1"},"result":{"status":"passed","duration":253000}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:10"},"result":{"status":"passed","duration":31900}}]}]}] \ No newline at end of file +[{"uri":"features/gerenciar_solicitacoes_credenciamento.feature","id":"gerenciar-solicitações-de-credenciamento","keyword":"Funcionalidade","name":"Gerenciar solicitações de credenciamento","description":" Como um admnistrador do sistema\n Quero visualizar uma solicitação de credencimento em aberto\n Para decidir se vou aceitar ou recusar tal solicitação","line":4,"comments":[{"value":"#encoding: utf-8","line":2}],"elements":[{"keyword":"Contexto","name":"","description":"","line":9,"type":"background","before":[{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:14"},"result":{"status":"passed","duration":21800}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:22"},"result":{"status":"passed","duration":12500}}],"steps":[{"keyword":"Dado ","name":"que os seguintes solicitações estejam pendentes:","line":10,"rows":[{"cells":["title","due_date","activity_type_id"]},{"cells":["Solicitação 1","02-Jan-2021","Solicitação de credenciamento"]},{"cells":["Solicitação 2","02-Jan-2021","Solicitação de credenciamento"]},{"cells":["Solicitação 3","02-Jan-2021","Solicitação de credenciamento"]},{"cells":["Solicitação 4","02-Jan-2021","Solicitação de credenciamento"]}],"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:1"},"result":{"status":"pending","error_message":"TODO (Cucumber::Pending)\n./features/step_definitions/credenciamento_professores_steps.rb:2:in `\"que os seguintes solicitações estejam pendentes:\"'\nfeatures/gerenciar_solicitacoes_credenciamento.feature:10:in `Dado que os seguintes solicitações estejam pendentes:'","duration":8013000}},{"keyword":"E ","name":"que eu estou cadastrado e logado como \"Gabriel\", \"gabriel@admin.com\", \"gabriel123\", \"administrator\", \"200000000\"","line":17,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:8"},"result":{"status":"skipped"}},{"keyword":"E ","name":"que eu estou na página de solicitações de credenciamento","line":18,"match":{"location":"features/gerenciar_solicitacoes_credenciamento.feature:18"},"result":{"status":"undefined"}}]},{"id":"gerenciar-solicitações-de-credenciamento;aceitar-uma-solicitação-de-credenciamento","keyword":"Cenário","name":"Aceitar uma solicitação de credenciamento","description":"","line":20,"type":"scenario","steps":[{"keyword":"Quando ","name":"eu clico em \"Solicitação 1\"","line":21,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:34"},"result":{"status":"skipped"}},{"keyword":"Então ","name":"eu devo estar na página da \"Solicitação 1\"","line":22,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:38"},"result":{"status":"skipped"}},{"keyword":"Quando ","name":"eu clico em \"Aprovar\"","line":23,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:34"},"result":{"status":"skipped"}},{"keyword":"Então ","name":"eu devo estar na página de solicitações de credenciamento","line":24,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:38"},"result":{"status":"skipped"}},{"keyword":"Quando ","name":"eu desmarco os seguintes estados: Rejeitadas, Reformulação","line":25,"match":{"location":"features/gerenciar_solicitacoes_credenciamento.feature:25"},"result":{"status":"undefined"}},{"keyword":"E ","name":"eu marco os seguintes estados: Aprovadas","line":26,"match":{"location":"features/gerenciar_solicitacoes_credenciamento.feature:26"},"result":{"status":"undefined"}},{"keyword":"E ","name":"aperto 'Atualizar'","line":27,"match":{"location":"features/gerenciar_solicitacoes_credenciamento.feature:27"},"result":{"status":"undefined"}},{"keyword":"Então ","name":"eu devo ver \"Solicitação 1\"","line":28,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:63"},"result":{"status":"skipped"}}],"after":[{"embeddings":[{"mime_type":"image/png","data":"bG9nL3NjcmVlbnNob3RzL2FjZWl0YXJ1bWFzb2xpY2l0YW9kZWNyZWRlbmNpYW1lbnRvLnBuZw=="}],"match":{"location":"features/support/hooks.rb:1"},"result":{"status":"passed","duration":173000}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:10"},"result":{"status":"passed","duration":16300}}]},{"keyword":"Contexto","name":"","description":"","line":9,"type":"background","before":[{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:14"},"result":{"status":"passed","duration":11100}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:22"},"result":{"status":"passed","duration":12000}}],"steps":[{"keyword":"Dado ","name":"que os seguintes solicitações estejam pendentes:","line":10,"rows":[{"cells":["title","due_date","activity_type_id"]},{"cells":["Solicitação 1","02-Jan-2021","Solicitação de credenciamento"]},{"cells":["Solicitação 2","02-Jan-2021","Solicitação de credenciamento"]},{"cells":["Solicitação 3","02-Jan-2021","Solicitação de credenciamento"]},{"cells":["Solicitação 4","02-Jan-2021","Solicitação de credenciamento"]}],"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:1"},"result":{"status":"pending","error_message":"TODO (Cucumber::Pending)\n./features/step_definitions/credenciamento_professores_steps.rb:2:in `\"que os seguintes solicitações estejam pendentes:\"'\nfeatures/gerenciar_solicitacoes_credenciamento.feature:10:in `Dado que os seguintes solicitações estejam pendentes:'","duration":158300}},{"keyword":"E ","name":"que eu estou cadastrado e logado como \"Gabriel\", \"gabriel@admin.com\", \"gabriel123\", \"administrator\", \"200000000\"","line":17,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:8"},"result":{"status":"skipped"}},{"keyword":"E ","name":"que eu estou na página de solicitações de credenciamento","line":18,"match":{"location":"features/gerenciar_solicitacoes_credenciamento.feature:18"},"result":{"status":"undefined"}}]},{"id":"gerenciar-solicitações-de-credenciamento;recusar-uma-solicitação-de-credenciamento","keyword":"Cenário","name":"Recusar uma solicitação de credenciamento","description":"","line":30,"type":"scenario","steps":[{"keyword":"Quando ","name":"eu clico em \"Solicitação 2\"","line":31,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:34"},"result":{"status":"skipped"}},{"keyword":"Então ","name":"eu devo estar na página da \"Solicitação 2\"","line":32,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:38"},"result":{"status":"skipped"}},{"keyword":"Quando ","name":"eu clico em \"Rejeitar\"","line":33,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:34"},"result":{"status":"skipped"}},{"keyword":"Então ","name":"eu devo estar na página de solicitações de credenciamento","line":34,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:38"},"result":{"status":"skipped"}},{"keyword":"Quando ","name":"eu desmarco os seguintes estados: Aprovadas, Reformulação","line":35,"match":{"location":"features/gerenciar_solicitacoes_credenciamento.feature:35"},"result":{"status":"undefined"}},{"keyword":"E ","name":"eu marco os seguintes estados: Rejeitadas","line":36,"match":{"location":"features/gerenciar_solicitacoes_credenciamento.feature:36"},"result":{"status":"undefined"}},{"keyword":"E ","name":"aperto 'Atualizar'","line":37,"match":{"location":"features/gerenciar_solicitacoes_credenciamento.feature:37"},"result":{"status":"undefined"}},{"keyword":"Então ","name":"eu devo ver \"Solicitação 2\"","line":38,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:63"},"result":{"status":"skipped"}}],"after":[{"embeddings":[{"mime_type":"image/png","data":"bG9nL3NjcmVlbnNob3RzL3JlY3VzYXJ1bWFzb2xpY2l0YW9kZWNyZWRlbmNpYW1lbnRvLnBuZw=="}],"match":{"location":"features/support/hooks.rb:1"},"result":{"status":"passed","duration":244100}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:10"},"result":{"status":"passed","duration":22100}}]}]},{"uri":"features/spike.feature","id":"testar","keyword":"Funcionalidade","name":"Testar","description":"","line":4,"comments":[{"value":"#encoding: utf-8","line":2}],"elements":[{"id":"testar;","keyword":"Cenário","name":"","description":"","line":5,"type":"scenario","before":[{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:14"},"result":{"status":"passed","duration":12300}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:22"},"result":{"status":"passed","duration":9900}}],"steps":[{"keyword":"Dado ","name":"que eu estou cadastrado e logado como \"Gabriel\", \"gabriel@admin.com\", \"gabriel123\", \"administrator\", \"200000000\"","line":6,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:8"},"result":{"status":"passed","duration":2499355600}}],"after":[{"embeddings":[{"mime_type":"image/png","data":"bG9nL3NjcmVlbnNob3RzLy5wbmc="}],"match":{"location":"features/support/hooks.rb:1"},"result":{"status":"passed","duration":182300}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:10"},"result":{"status":"passed","duration":18100}}]}]}] \ No newline at end of file diff --git a/spike.rb b/spike.rb index a5837c1e..5ef3f7c4 100644 --- a/spike.rb +++ b/spike.rb @@ -12,5 +12,5 @@ # p record # frase = "\"gabriel@admin.com\", \"gabriel123\"" -# values = frase.gsub!(/"/,'').split(/,\s?/) +# values = frase.gsub!(/["']/,'').split(/,\s?/) # p values \ No newline at end of file From 2d8b43f9354f4b4fcbcddb5c870dd25b36720782 Mon Sep 17 00:00:00 2001 From: ngsylar Date: Mon, 9 Nov 2020 23:34:38 -0300 Subject: [PATCH 11/82] EngSwCIC#21 and EngSwCIC#23 adjustments --- .../abrir_solicitacao_credenciamento.feature | 39 ++++++++----------- ...enciar_solicitacoes_credenciamento.feature | 8 ++-- .../credenciamento_professores_steps.rb | 6 ++- 3 files changed, 25 insertions(+), 28 deletions(-) diff --git a/features/abrir_solicitacao_credenciamento.feature b/features/abrir_solicitacao_credenciamento.feature index 910d270f..7d591d99 100644 --- a/features/abrir_solicitacao_credenciamento.feature +++ b/features/abrir_solicitacao_credenciamento.feature @@ -1,29 +1,22 @@ #language: pt #encoding: utf-8 -Funcionalidade: Solicitar credenciamento - Como professor autenticado no sistema, - Quero poder solicitar meu credenciamento - Para que eu possa ser um professor credenciado +Funcionalidade: Abrir solicitação de credenciamento + Como professor autenticado no sistema, + Quero poder abrir uma solicitação de credenciamento + Para que eu possa ser um professor credenciado - Contexto: - Dado que eu esteja cadastrado como usuário "prof1@user.com" - E que esteja logado - E que esteja na página de credenciamento - E esteja pendente de credenciamento + Contexto: + Dado que eu estou cadastrado e logado como "Lucas", "lucas@professor.com", "lucas123", "professor", "200000000" + E que eu estou na página de abrir solicitação de credenciamento - Cenário: Solicitacao enviada com sucesso - Quando eu preencher o número do processo SEI - E clicar no botão "Solicitar credenciamento" - Então é enviado à administração uma solicitação de credenciamento - E aparece uma mensagem de confirmação + Cenário: Solicitação enviada com sucesso + Quando eu anexo o arquivo "Formulário de Credenciamento.pdf" no campo 'Formulario' + E eu anexo o arquivo "CV Lattes.pdf" em 'CV Lattes' + E eu clico em 'Enviar' + Então eu devo ver "Solicitação enviada com sucesso" - Cenário: Solicitacao não enviada - erro no número do processo - Quando eu preencher com um número qualquer - E clicar no botão "Solicitar credenciamento" - Então a mensagem de erro "Número inválido" - - Cenário: Solicitação não enviada - campo em branco - Quando eu não preencher o campo do número do processo SEI - E clicar no botão "Solicitar credenciamento" - Então a mensagem de erro "Campo obrigatório em branco" \ No newline at end of file + Cenário: Solicitação não enviada (campo obrigatório em branco) + Quando eu anexo o arquivo "Formulário de Credenciamento.pdf" no campo 'Formulario' + E eu clico em 'Enviar' + Então eu devo ver "Solicitação não enviada (campo obrigatório* em branco)" \ No newline at end of file diff --git a/features/gerenciar_solicitacoes_credenciamento.feature b/features/gerenciar_solicitacoes_credenciamento.feature index 3598e10d..67e71c4f 100644 --- a/features/gerenciar_solicitacoes_credenciamento.feature +++ b/features/gerenciar_solicitacoes_credenciamento.feature @@ -20,19 +20,19 @@ Funcionalidade: Gerenciar solicitações de credenciamento Cenário: Aceitar uma solicitação de credenciamento Quando eu clico em "Solicitação 1" Então eu devo estar na página da "Solicitação 1" - Quando eu clico em "Aprovar" + Quando eu clico em 'Aprovar' Então eu devo estar na página de solicitações de credenciamento Quando eu desmarco os seguintes estados: Rejeitadas, Reformulação E eu marco os seguintes estados: Aprovadas - E aperto 'Atualizar' + E eu aperto 'Atualizar' Então eu devo ver "Solicitação 1" Cenário: Recusar uma solicitação de credenciamento Quando eu clico em "Solicitação 2" Então eu devo estar na página da "Solicitação 2" - Quando eu clico em "Rejeitar" + Quando eu clico em 'Rejeitar' Então eu devo estar na página de solicitações de credenciamento Quando eu desmarco os seguintes estados: Aprovadas, Reformulação E eu marco os seguintes estados: Rejeitadas - E aperto 'Atualizar' + E eu aperto 'Atualizar' Então eu devo ver "Solicitação 2" diff --git a/features/step_definitions/credenciamento_professores_steps.rb b/features/step_definitions/credenciamento_professores_steps.rb index d9d6d856..4cb57b3f 100644 --- a/features/step_definitions/credenciamento_professores_steps.rb +++ b/features/step_definitions/credenciamento_professores_steps.rb @@ -31,7 +31,11 @@ visit path_to(page_name) end -Quando /^eu clico em "([^"]*)"$/ do |link| +Quando /^eu anexo o arquivo "([^"]*)" em '([^']*)'$/ do |path, field| + attach_file(field, File.expand_path(path)) +end + +Quando /^eu clico em '([^']*)'$/ do |link| click_link(link) end From fc54cb97acb17f5260e4ba4d6a8ee62baafc3861 Mon Sep 17 00:00:00 2001 From: ngsylar Date: Tue, 10 Nov 2020 01:50:12 -0300 Subject: [PATCH 12/82] Adjustments EngSwCIC#19 EngSwCIC#20 EngSwCIC#21 EngSwCIC#23 --- features.html | 93 ++++++- .../abrir_solicitacao_credenciamento.feature | 14 +- features/credenciamento_periodo.feature | 38 +-- ...enciar_solicitacoes_credenciamento.feature | 22 +- features/requisitos_necessarios.feature | 32 +-- .../credenciamento_professores_steps.rb | 41 ++- features/step_definitions/web_steps.rb | 254 ------------------ report.json | 2 +- 8 files changed, 173 insertions(+), 323 deletions(-) delete mode 100644 features/step_definitions/web_steps.rb diff --git a/features.html b/features.html index d4aef58d..0c37612d 100644 --- a/features.html +++ b/features.html @@ -467,26 +467,93 @@ function makeYellow(element_id) { $('#'+element_id).css('background', '#FAF834'); $('#'+element_id).css('color', '#000000'); -}

Cucumber Features

Expand All

Collapse All

# language: pt
#encoding: utf-8

Funcionalidade: Gerenciar solicitações de credenciamento

Como um admnistrador do sistema
Quero visualizar uma solicitação de credencimento em aberto
Para decidir se vou aceitar ou recusar tal solicitação

Contexto

  1. Dado que os seguintes solicitações estejam pendentes:
    features/step_definitions/credenciamento_professores_steps.rb:1
    title
    due_date
    activity_type_id
    Solicitação 1
    02-Jan-2021
    Solicitação de credenciamento
    Solicitação 2
    02-Jan-2021
    Solicitação de credenciamento
    Solicitação 3
    02-Jan-2021
    Solicitação de credenciamento
    Solicitação 4
    02-Jan-2021
    Solicitação de credenciamento
    TODO (Cucumber::Pending)
    ./features/step_definitions/credenciamento_professores_steps.rb:2:in `"que os seguintes solicitações estejam pendentes:"'
    -features/gerenciar_solicitacoes_credenciamento.feature:10:in `Dado que os seguintes solicitações estejam pendentes:'
    0Dado "que os seguintes solicitações estejam pendentes:" do |table|
    +}

    Cucumber Features

    Expand All

    Collapse All

    # language: pt
    #encoding: utf-8

    Funcionalidade: Abrir solicitação de credenciamento

    Como professor autenticado no sistema,
    Quero poder abrir uma solicitação de credenciamento
    Para que eu possa ser um professor credenciado

    Contexto

    1. Dado que eu estou cadastrado e logado como "Lucas", "lucas@professor.com", "lucas123", "professor", "200000000"
      features/step_definitions/credenciamento_professores_steps.rb:8
    2. E que eu estou na página de abrir solicitação de credenciamento
      features/step_definitions/credenciamento_professores_steps.rb:30
      Can't find mapping from "de abrir solicitação de credenciamento" to a path.
      +Now, go and add a mapping in /mnt/c/Users/Fontenelle/Desktop/UnB/9 semestre/Engenharia de Software/secretaria_ppgi/features/support/paths.rb
      ./features/support/paths.rb:31:in `rescue in path_to'
      +./features/support/paths.rb:26:in `path_to'
      +./features/step_definitions/credenciamento_professores_steps.rb:31:in `/^que eu estou na página (.+)$/'
      +features/abrir_solicitacao_credenciamento.feature:11:in `E que eu estou na página de abrir solicitação de credenciamento'
      29        self.send(path_components.push('path').join('_').to_sym)
      +30      rescue NoMethodError, ArgumentError
      +31        raise "Can't find mapping from \"#{page_name}\" to a path.\n" +
      +32          "Now, go and add a mapping in #{__FILE__}"
      +33      end
      +34# gem install syntax to get syntax highlighting
    features/abrir_solicitacao_credenciamento.feature:13

    Cenário: Solicitação enviada com sucesso

    1. Quando eu anexo o arquivo "Formulário de Credenciamento.pdf" no campo 'Formulario'
      features/abrir_solicitacao_credenciamento.feature:14
      Quando("eu anexo o arquivo {string} no campo {string}") do |string, string2|
      +  pending # Write code here that turns the phrase above into concrete actions
      +end
    2. E eu anexo o arquivo "CV Lattes.pdf" em 'CV Lattes'
      features/step_definitions/credenciamento_professores_steps.rb:34
    3. E eu clico em 'Enviar'
      features/step_definitions/credenciamento_professores_steps.rb:38
    4. Então eu devo ver "Solicitação enviada com sucesso"
      features/step_definitions/credenciamento_professores_steps.rb:67
    5. Print maroto :)
        +
      undefined method `manage' for #<Capybara::RackTest::Browser:0x00007fffcd7263a0> (NoMethodError)
      ./features/support/hooks.rb:22:in `add_browser_logs'
      +./features/support/hooks.rb:5:in `After'
      20    current_url = Capybara.current_url.to_s
      +21    # Gather browser logs
      +22    logs = page.driver.browser.manage.logs.get(:browser).map {|line| [line.level, line.message]}
      
      +23   # Remove warnings and info messages
      +24    logs.reject! { |line| ['WARNING', 'INFO'].include?(line.first) }
      +25# gem install syntax to get syntax highlighting
    features/abrir_solicitacao_credenciamento.feature:19

    Cenário: Solicitação não enviada (campo obrigatório em branco)

    1. Quando eu anexo o arquivo "Formulário de Credenciamento.pdf" no campo 'Formulario'
      features/abrir_solicitacao_credenciamento.feature:20
      Quando("eu anexo o arquivo {string} no campo {string}") do |string, string2|
      +  pending # Write code here that turns the phrase above into concrete actions
      +end
    2. E eu clico em 'Enviar'
      features/step_definitions/credenciamento_professores_steps.rb:38
    3. Então eu devo ver "Solicitação não enviada (campo obrigatório* em branco)"
      features/step_definitions/credenciamento_professores_steps.rb:67
    4. Print maroto :)
        +
      undefined method `manage' for #<Capybara::RackTest::Browser:0x00007fffce93fbb8> (NoMethodError)
      ./features/support/hooks.rb:22:in `add_browser_logs'
      +./features/support/hooks.rb:5:in `After'
      20    current_url = Capybara.current_url.to_s
      +21    # Gather browser logs
      +22    logs = page.driver.browser.manage.logs.get(:browser).map {|line| [line.level, line.message]}
      
      +23   # Remove warnings and info messages
      +24    logs.reject! { |line| ['WARNING', 'INFO'].include?(line.first) }
      +25# gem install syntax to get syntax highlighting
    # language: pt
    #encoding: utf-8

    Funcionalidade: Definir o prazo de credenciamento dos professores

    Como um administrador,
    para que eu possa credenciar os professores,
    eu gostaria de definir o prazo de credenciamento dos professores

    Contexto

    1. Dado que eu esteja autenticado como usuario "admin"
      features/credenciamento_periodo.feature:10
      Dado("que eu esteja autenticado como usuario {string}") do |string|
      +  pending # Write code here that turns the phrase above into concrete actions
      +end
    2. E que esteja na página de credenciamento
      features/credenciamento_periodo.feature:11
      Dado("que esteja na página de credenciamento") do
      +  pending # Write code here that turns the phrase above into concrete actions
      +end
    features/credenciamento_periodo.feature:13

    Cenário: Definir prazo de credenciamento sem data

    1. Quando eu aperto o botão "Definir prazo de credenciamento"
      features/credenciamento_periodo.feature:14
      Quando("eu aperto o botão {string}") do |string|
      +  pending # Write code here that turns the phrase above into concrete actions
      +end
    2. E eu aperto o botão "Salvar período"
      features/credenciamento_periodo.feature:15
      Quando("eu aperto o botão {string}") do |string|
      +  pending # Write code here that turns the phrase above into concrete actions
      +end
    3. Então eu espero ver a mensagem "Insira uma data de início e uma data de término válidas."
      features/credenciamento_periodo.feature:16
      Então("eu espero ver a mensagem {string}") do |string|
      +  pending # Write code here that turns the phrase above into concrete actions
      +end
    4. Print maroto :)
        +
    features/credenciamento_periodo.feature:18

    Cenário: Definir prazo de credenciamento com data

    1. Quando eu aperto o botão "Definir prazo de credenciamento"
      features/credenciamento_periodo.feature:19
      Quando("eu aperto o botão {string}") do |string|
      +  pending # Write code here that turns the phrase above into concrete actions
      +end
    2. Quando eu adiciono um valor "Início" para "Data de Início"
      features/credenciamento_periodo.feature:20
      Quando("eu adiciono um valor {string} para {string}") do |string, string2|
      +  pending # Write code here that turns the phrase above into concrete actions
      +end
    3. E eu adiciono um valor "Término" para "Data de Término"
      features/credenciamento_periodo.feature:21
      Quando("eu adiciono um valor {string} para {string}") do |string, string2|
      +  pending # Write code here that turns the phrase above into concrete actions
      +end
    4. E eu aperto o botão "Salvar período"
      features/credenciamento_periodo.feature:22
      Quando("eu aperto o botão {string}") do |string|
      +  pending # Write code here that turns the phrase above into concrete actions
      +end
    5. Então eu espero ver a mensagem "Prazo cadastrado com sucesso."
      features/credenciamento_periodo.feature:23
      Então("eu espero ver a mensagem {string}") do |string|
      +  pending # Write code here that turns the phrase above into concrete actions
      +end
    6. Print maroto :)
        +
    # language: pt
    #encoding: utf-8

    Funcionalidade: Gerenciar solicitações de credenciamento

    Como um admnistrador do sistema
    Quero visualizar uma solicitação de credencimento em aberto
    Para decidir se vou aceitar ou recusar tal solicitação

    Contexto

    1. Dado que as seguintes solicitações estejam pendentes:
      features/step_definitions/credenciamento_professores_steps.rb:1
      title
      due_date
      activity_type_id
      Solicitação 1
      02-Jan-2021
      Solicitação de credenciamento
      Solicitação 2
      02-Jan-2021
      Solicitação de credenciamento
      Solicitação 3
      02-Jan-2021
      Solicitação de credenciamento
      Solicitação 4
      02-Jan-2021
      Solicitação de credenciamento
      TODO (Cucumber::Pending)
      ./features/step_definitions/credenciamento_professores_steps.rb:2:in `"que as seguintes solicitações estejam pendentes:"'
      +features/gerenciar_solicitacoes_credenciamento.feature:10:in `Dado que as seguintes solicitações estejam pendentes:'
      0Dado "que as seguintes solicitações estejam pendentes:" do |table|
       1    pending
       2    # table.hashes.each do |row|
      
       3    #     Activity.create!(row)
      -4# gem install syntax to get syntax highlighting
    2. E que eu estou cadastrado e logado como "Gabriel", "gabriel@admin.com", "gabriel123", "administrator", "200000000"
      features/step_definitions/credenciamento_professores_steps.rb:8
    3. E que eu estou na página de solicitações de credenciamento
      features/gerenciar_solicitacoes_credenciamento.feature:18
      Dado("que eu estou na página de solicitações de credenciamento") do
      +4# gem install syntax to get syntax highlighting
    4. E que eu estou cadastrado e logado como "Gabriel", "gabriel@admin.com", "gabriel123", "administrator", "200000000"
      features/step_definitions/credenciamento_professores_steps.rb:8
    5. E que eu estou na página de solicitações de credenciamento
      features/step_definitions/credenciamento_professores_steps.rb:30
    features/gerenciar_solicitacoes_credenciamento.feature:20

    Cenário: Aceitar uma solicitação de credenciamento

    1. Quando eu clico em "Solicitação 1"
      features/gerenciar_solicitacoes_credenciamento.feature:21
      Quando("eu clico em {string}") do |string|
      +  pending # Write code here that turns the phrase above into concrete actions
      +end
    2. Então eu devo estar na página da "Solicitação 1"
      features/step_definitions/credenciamento_professores_steps.rb:42
    3. Quando eu clico em 'Aprovar'
      features/step_definitions/credenciamento_professores_steps.rb:38
    4. Então eu devo estar na página de solicitações de credenciamento
      features/step_definitions/credenciamento_professores_steps.rb:42
    5. Quando eu desmarco os seguintes estados: Rejeitadas, Reformulação
      features/gerenciar_solicitacoes_credenciamento.feature:25
      Quando("eu desmarco os seguintes estados: Rejeitadas, Reformulação") do
      +  pending # Write code here that turns the phrase above into concrete actions
      +end
    6. E eu marco os seguintes estados: Aprovadas
      features/gerenciar_solicitacoes_credenciamento.feature:26
      Quando("eu marco os seguintes estados: Aprovadas") do
      +  pending # Write code here that turns the phrase above into concrete actions
      +end
    7. E eu aperto 'Atualizar'
      features/step_definitions/credenciamento_professores_steps.rb:63
    8. Então eu devo ver "Solicitação 1"
      features/step_definitions/credenciamento_professores_steps.rb:67
    9. Print maroto :)
        +
    features/gerenciar_solicitacoes_credenciamento.feature:30

    Cenário: Recusar uma solicitação de credenciamento

    1. Quando eu clico em "Solicitação 2"
      features/gerenciar_solicitacoes_credenciamento.feature:31
      Quando("eu clico em {string}") do |string|
      +  pending # Write code here that turns the phrase above into concrete actions
      +end
    2. Então eu devo estar na página da "Solicitação 2"
      features/step_definitions/credenciamento_professores_steps.rb:42
    3. Quando eu clico em 'Rejeitar'
      features/step_definitions/credenciamento_professores_steps.rb:38
    4. Então eu devo estar na página de solicitações de credenciamento
      features/step_definitions/credenciamento_professores_steps.rb:42
    5. Quando eu desmarco os seguintes estados: Aprovadas, Reformulação
      features/gerenciar_solicitacoes_credenciamento.feature:35
      Quando("eu desmarco os seguintes estados: Aprovadas, Reformulação") do
      +  pending # Write code here that turns the phrase above into concrete actions
      +end
    6. E eu marco os seguintes estados: Rejeitadas
      features/gerenciar_solicitacoes_credenciamento.feature:36
      Quando("eu marco os seguintes estados: Rejeitadas") do
      +  pending # Write code here that turns the phrase above into concrete actions
      +end
    7. E eu aperto 'Atualizar'
      features/step_definitions/credenciamento_professores_steps.rb:63
    8. Então eu devo ver "Solicitação 2"
      features/step_definitions/credenciamento_professores_steps.rb:67
    9. Print maroto :)
        +
    # language: pt
    #encoding: utf-8

    Funcionalidade: Disponibilizar os requisitos necessarios para credenciamento de professores

    Como administrador autenticado no sistema,
    Quero poder disponibilizar para os professores os requisitos necessários para o credenciamento
    Para que eles possam dar procedimento ao credenciamento

    Contexto

    1. Dado que eu esteja logado como administrador de email "gp@admin.com" e senha "123"
      features/requisitos_necessarios.feature:10
      Dado("que eu esteja logado como administrador de email {string} e senha {string}") do |string, string2|
      +  pending # Write code here that turns the phrase above into concrete actions
      +end
    2. E não existem requisitos selecionados na página principal
      features/requisitos_necessarios.feature:11
      Dado("não existem requisitos selecionados na página principal") do
      +  pending # Write code here that turns the phrase above into concrete actions
      +end
    3. Quando o administrador clicou no link para alterar documentos necessários para credenciamento
      features/requisitos_necessarios.feature:12
      Quando("o administrador clicou no link para alterar documentos necessários para credenciamento") do
         pending # Write code here that turns the phrase above into concrete actions
      -end
    features/gerenciar_solicitacoes_credenciamento.feature:20

    Cenário: Aceitar uma solicitação de credenciamento

    1. Quando eu clico em "Solicitação 1"
      features/step_definitions/credenciamento_professores_steps.rb:34
    2. Então eu devo estar na página da "Solicitação 1"
      features/step_definitions/credenciamento_professores_steps.rb:38
    3. Quando eu clico em "Aprovar"
      features/step_definitions/credenciamento_professores_steps.rb:34
    4. Então eu devo estar na página de solicitações de credenciamento
      features/step_definitions/credenciamento_professores_steps.rb:38
    5. Quando eu desmarco os seguintes estados: Rejeitadas, Reformulação
      features/gerenciar_solicitacoes_credenciamento.feature:25
      Quando("eu desmarco os seguintes estados: Rejeitadas, Reformulação") do
      +end
    features/requisitos_necessarios.feature:14

    Cenário: Os campos puderam ser selecionados

    1. Quando eu selecionar os campos
      features/requisitos_necessarios.feature:15
      Quando("eu selecionar os campos") do
         pending # Write code here that turns the phrase above into concrete actions
      -end
    2. E eu marco os seguintes estados: Aprovadas
      features/gerenciar_solicitacoes_credenciamento.feature:26
      Quando("eu marco os seguintes estados: Aprovadas") do
      +end
    3. E eu clicar no botão atualizar requisitos
      features/requisitos_necessarios.feature:16
      Quando("eu clicar no botão atualizar requisitos") do
         pending # Write code here that turns the phrase above into concrete actions
      -end
    4. E aperto 'Atualizar'
      features/gerenciar_solicitacoes_credenciamento.feature:27
      Quando("aperto {string}") do |string|
      +end
    5. Então eu devo voltar para a página principal aonde aparece meus requisitos selecionados
      features/requisitos_necessarios.feature:17
      Então("eu devo voltar para a página principal aonde aparece meus requisitos selecionados") do
         pending # Write code here that turns the phrase above into concrete actions
      -end
    6. Então eu devo ver "Solicitação 1"
      features/step_definitions/credenciamento_professores_steps.rb:63
    7. Print maroto :)
        -
    features/gerenciar_solicitacoes_credenciamento.feature:30

    Cenário: Recusar uma solicitação de credenciamento

    1. Quando eu clico em "Solicitação 2"
      features/step_definitions/credenciamento_professores_steps.rb:34
    2. Então eu devo estar na página da "Solicitação 2"
      features/step_definitions/credenciamento_professores_steps.rb:38
    3. Quando eu clico em "Rejeitar"
      features/step_definitions/credenciamento_professores_steps.rb:34
    4. Então eu devo estar na página de solicitações de credenciamento
      features/step_definitions/credenciamento_professores_steps.rb:38
    5. Quando eu desmarco os seguintes estados: Aprovadas, Reformulação
      features/gerenciar_solicitacoes_credenciamento.feature:35
      Quando("eu desmarco os seguintes estados: Aprovadas, Reformulação") do
      +end
    6. Print maroto :)
        +
    features/requisitos_necessarios.feature:19

    Cenário: Não houveram mudanças feitas

    1. Quando eu não selecionar os campos
      features/requisitos_necessarios.feature:20
      Quando("eu não selecionar os campos") do
         pending # Write code here that turns the phrase above into concrete actions
      -end
    2. E eu marco os seguintes estados: Rejeitadas
      features/gerenciar_solicitacoes_credenciamento.feature:36
      Quando("eu marco os seguintes estados: Rejeitadas") do
      +end
    3. E eu clicar no botão atualizar requisitos
      features/requisitos_necessarios.feature:21
      Quando("eu clicar no botão atualizar requisitos") do
         pending # Write code here that turns the phrase above into concrete actions
      -end
    4. E aperto 'Atualizar'
      features/gerenciar_solicitacoes_credenciamento.feature:37
      Quando("aperto {string}") do |string|
      +end
    5. Então eu recebo uma mensagem dizendo que "não houveram mudanças"
      features/requisitos_necessarios.feature:22
      Então("eu recebo uma mensagem dizendo que {string}") do |string|
         pending # Write code here that turns the phrase above into concrete actions
      -end
    6. Então eu devo ver "Solicitação 2"
      features/step_definitions/credenciamento_professores_steps.rb:63
    7. Print maroto :)
        -
    # language: pt
    #encoding: utf-8

    Funcionalidade: Testar

    features/spike.feature:5

    Cenário:

    1. Dado que eu estou cadastrado e logado como "Gabriel", "gabriel@admin.com", "gabriel123", "administrator", "200000000"
      features/step_definitions/credenciamento_professores_steps.rb:8
    2. Print maroto :)
        -
    \ No newline at end of file +end
  2. Print maroto :)
      +
# language: pt
#encoding: utf-8

Funcionalidade: Testar

features/spike.feature:5

Cenário:

  1. Dado que eu estou cadastrado e logado como "Gabriel", "gabriel@admin.com", "gabriel123", "administrator", "200000000"
    features/step_definitions/credenciamento_professores_steps.rb:8
  2. Print maroto :)
      +
\ No newline at end of file diff --git a/features/abrir_solicitacao_credenciamento.feature b/features/abrir_solicitacao_credenciamento.feature index 7d591d99..593ecbcd 100644 --- a/features/abrir_solicitacao_credenciamento.feature +++ b/features/abrir_solicitacao_credenciamento.feature @@ -2,21 +2,21 @@ #encoding: utf-8 Funcionalidade: Abrir solicitação de credenciamento - Como professor autenticado no sistema, + Como um professor autenticado no sistema, Quero poder abrir uma solicitação de credenciamento Para que eu possa ser um professor credenciado Contexto: - Dado que eu estou cadastrado e logado como "Lucas", "lucas@professor.com", "lucas123", "professor", "200000000" - E que eu estou na página de abrir solicitação de credenciamento + Dado que eu esteja cadastrado e logado como "Lucas", "lucas@professor.com", "lucas123", "professor", "200000000" + E que eu esteja na página de abrir solicitação de credenciamento Cenário: Solicitação enviada com sucesso - Quando eu anexo o arquivo "Formulário de Credenciamento.pdf" no campo 'Formulario' + Quando eu anexo o arquivo "Formulário de Credenciamento.pdf" em 'Formulario' E eu anexo o arquivo "CV Lattes.pdf" em 'CV Lattes' - E eu clico em 'Enviar' + E eu aperto 'Enviar' Então eu devo ver "Solicitação enviada com sucesso" Cenário: Solicitação não enviada (campo obrigatório em branco) - Quando eu anexo o arquivo "Formulário de Credenciamento.pdf" no campo 'Formulario' - E eu clico em 'Enviar' + Quando eu anexo o arquivo "Formulário de Credenciamento.pdf" em 'Formulario' + E eu aperto 'Enviar' Então eu devo ver "Solicitação não enviada (campo obrigatório* em branco)" \ No newline at end of file diff --git a/features/credenciamento_periodo.feature b/features/credenciamento_periodo.feature index bc113ceb..2a320233 100644 --- a/features/credenciamento_periodo.feature +++ b/features/credenciamento_periodo.feature @@ -2,22 +2,30 @@ #encoding: utf-8 Funcionalidade: Definir o prazo de credenciamento dos professores - Como um administrador, - para que eu possa credenciar os professores, - eu gostaria de definir o prazo de credenciamento dos professores + Como um administrador autenticado no sistema, + Quero visualizar professores com credenciamento aprovado + Para definir o prazo de credenciamento dos professores Contexto: - Dado que eu esteja autenticado como usuario "admin" - E que esteja na página de credenciamento + Dado que existam os seguintes credenciamentos sem prazo definido: + | title | full_name | + | Credenciamento 1 | Adalberto | + | Credenciamento 2 | Mariano | + | Credenciamento 3 | Joel | + + E que eu esteja cadastrado e logado como "Aécio", "aecio@admin.com", "aecio123", "administrator", "200000000" + E que esteja na página de prazos de credenciamento - Cenário: Definir prazo de credenciamento sem data - Quando eu aperto o botão "Definir prazo de credenciamento" - E eu aperto o botão "Salvar período" - Então eu espero ver a mensagem "Insira uma data de início e uma data de término válidas." + Cenário: Definir prazo inserindo uma data válida + Quando eu clico em "Credenciamento 2" + Então eu devo estar na página de "Credenciamento 2" + Quando eu seleciono "2022-10-10" como data de 'Prazo' + E eu aperto 'Salvar' + Então eu devo ver "Prazo cadastrado com sucesso" - Cenário: Definir prazo de credenciamento com data - Quando eu aperto o botão "Definir prazo de credenciamento" - Quando eu adiciono um valor "Início" para "Data de Início" - E eu adiciono um valor "Término" para "Data de Término" - E eu aperto o botão "Salvar período" - Então eu espero ver a mensagem "Prazo cadastrado com sucesso." \ No newline at end of file + Cenário: Definir prazo inserindo data inválida + Quando eu clico em "Credenciamento 3" + Então eu devo estar na página de "Credenciamento 3" + Quando eu seleciono "1990-10-10" como data de 'Prazo' + E eu aperto 'Salvar' + Então eu devo ver "Prazo não cadastrado - data inválida" \ No newline at end of file diff --git a/features/gerenciar_solicitacoes_credenciamento.feature b/features/gerenciar_solicitacoes_credenciamento.feature index 67e71c4f..deb85efc 100644 --- a/features/gerenciar_solicitacoes_credenciamento.feature +++ b/features/gerenciar_solicitacoes_credenciamento.feature @@ -2,24 +2,24 @@ #encoding: utf-8 Funcionalidade: Gerenciar solicitações de credenciamento - Como um admnistrador do sistema + Como um admnistrador autenticado no sistema, Quero visualizar uma solicitação de credencimento em aberto Para decidir se vou aceitar ou recusar tal solicitação Contexto: - Dado que as seguintes solicitações estejam pendentes: - | title | due_date | activity_type_id | - | Solicitação 1 | 02-Jan-2021 | Solicitação de credenciamento | - | Solicitação 2 | 02-Jan-2021 | Solicitação de credenciamento | - | Solicitação 3 | 02-Jan-2021 | Solicitação de credenciamento | - | Solicitação 4 | 02-Jan-2021 | Solicitação de credenciamento | + Dado que existam as seguintes solicitações: + | title | activity_type_id | + | Solicitação 1 | Solicitação de credenciamento | + | Solicitação 2 | Solicitação de credenciamento | + | Solicitação 3 | Solicitação de credenciamento | + | Solicitação 4 | Solicitação de credenciamento | - E que eu estou cadastrado e logado como "Gabriel", "gabriel@admin.com", "gabriel123", "administrator", "200000000" - E que eu estou na página de solicitações de credenciamento + E que eu esteja cadastrado e logado como "Gabriel", "gabriel@admin.com", "gabriel123", "administrator", "200000000" + E que eu esteja na página de solicitações de credenciamento Cenário: Aceitar uma solicitação de credenciamento Quando eu clico em "Solicitação 1" - Então eu devo estar na página da "Solicitação 1" + Então eu devo estar na página de "Solicitação 1" Quando eu clico em 'Aprovar' Então eu devo estar na página de solicitações de credenciamento Quando eu desmarco os seguintes estados: Rejeitadas, Reformulação @@ -29,7 +29,7 @@ Funcionalidade: Gerenciar solicitações de credenciamento Cenário: Recusar uma solicitação de credenciamento Quando eu clico em "Solicitação 2" - Então eu devo estar na página da "Solicitação 2" + Então eu devo estar na página de "Solicitação 2" Quando eu clico em 'Rejeitar' Então eu devo estar na página de solicitações de credenciamento Quando eu desmarco os seguintes estados: Aprovadas, Reformulação diff --git a/features/requisitos_necessarios.feature b/features/requisitos_necessarios.feature index 90199605..4d7a7ed5 100644 --- a/features/requisitos_necessarios.feature +++ b/features/requisitos_necessarios.feature @@ -1,22 +1,22 @@ #language: pt #encoding: utf-8 -Funcionalidade: Disponibilizar os requisitos necessarios para credenciamento de professores - Como administrador autenticado no sistema, - Quero poder disponibilizar para os professores os requisitos necessários para o credenciamento - Para que eles possam dar procedimento ao credenciamento +Funcionalidade: Disponibilizar os requisitos para o credenciamento + Como um administrador autenticado no sistema, + Para que os professores possam abrir solicitações de credenciamento + Quero poder disponibilizar os requisitos necessários para o credenciamento Contexto: - Dado que eu esteja logado como administrador de email "gp@admin.com" e senha "123" - E não existem requisitos selecionados na página principal - Quando o administrador clicou no link para alterar documentos necessários para credenciamento + Dado que eu esteja cadastrado e logado como "Preihs", "preihs@admin.com", "preihs123", "administrator", "200000000" + E que eu esteja na página de requisitos para o credenciamento - Cenário: Os campos puderam ser selecionados - Quando eu selecionar os campos - E eu clicar no botão atualizar requisitos - Então eu devo voltar para a página principal aonde aparece meus requisitos selecionados - - Cenário: Não houveram mudanças feitas - Quando eu não selecionar os campos - E eu clicar no botão atualizar requisitos - Então eu recebo uma mensagem dizendo que "não houveram mudanças" + Cenário: Modificar os requisitos necessários para o credenciamento + Quando eu preencho em 'Requisitos' com + """ + - Formulário de solicitação preenchido e assinado pelo interessado* + - CV Lattes do coorientador* (apenas dados de publicação dos últimos 5 anos) + - Cópia do passaporte (apenas caso de orientador/coorientador estrangeiro) + """ + E eu anexo o arquivo "Formulário de Credenciamento.doc" no campo 'Formulario' + E eu aperto 'Enviar' + Então eu devo ver "Requisitos atualizados com sucesso" diff --git a/features/step_definitions/credenciamento_professores_steps.rb b/features/step_definitions/credenciamento_professores_steps.rb index 4cb57b3f..7d12b4dc 100644 --- a/features/step_definitions/credenciamento_professores_steps.rb +++ b/features/step_definitions/credenciamento_professores_steps.rb @@ -1,11 +1,27 @@ -Dado "que as seguintes solicitações estejam pendentes:" do |table| +require 'uri' +require 'cgi' +require File.expand_path(File.join(File.dirname(__FILE__), "..", "support", "paths")) +require File.expand_path(File.join(File.dirname(__FILE__), "..", "support", "selectors")) + +module WithinHelpers + def with_scope(locator) + locator ? within(*selector_for(locator)) { yield } : yield + end +end +World(WithinHelpers) + +Dado "que existam as seguintes solicitações:" do |table| pending # table.hashes.each do |row| # Activity.create!(row) # end end -Dado /^que eu estou cadastrado e logado como (.*)$/ do |input| +Dado "que existam os seguintes credenciamentos sem prazo definido:" do |table| + pending +end + +Dado /^que eu esteja cadastrado e logado como (.*)$/ do |input| user_props = [:full_name, :email, :password, :role, :registration] values = input.gsub!(/"/,'').split(/,\s?/) @@ -13,11 +29,11 @@ User.create!(record) steps %( - Dado que eu estou logado como "#{record[:email]}", "#{record[:password]}" + Dado que eu esteja logado como "#{record[:email]}", "#{record[:password]}" ) end -Dado /^que eu estou logado como (.*)$/ do |input| +Dado /^que eu esteja logado como (.*)$/ do |input| fields = ['email', 'password'] values = Hash[fields.zip input.gsub!(/"/,'').split(/,\s?/)] @@ -27,8 +43,9 @@ click_button("Log in") end -Dado /^que eu estou na página (.+)$/ do |page_name| - visit path_to(page_name) +Dado /^que eu esteja na página (.+)$/ do |page_name| + pending + # visit path_to(page_name) end Quando /^eu anexo o arquivo "([^"]*)" em '([^']*)'$/ do |path, field| @@ -60,6 +77,18 @@ end end +Quando /^eu preencho em '([^']*)' com/m do |field, text| + fill_in(field, :with => text) +end + +Quando /^eu preencho com "([^"]*)" em '([^']*)'$/ do |field, text| + fill_in(field, :with => text) +end + +Quando /^eu seleciono "([^"]*)" como data de '([^']*)'$/ do |date, field| + select_date(date, :from => field) +end + Quando /^eu aperto '([^']*)'$/ do |button| click_button(button) end diff --git a/features/step_definitions/web_steps.rb b/features/step_definitions/web_steps.rb deleted file mode 100644 index 94c2db84..00000000 --- a/features/step_definitions/web_steps.rb +++ /dev/null @@ -1,254 +0,0 @@ -# TL;DR: YOU SHOULD DELETE THIS FILE -# -# This file was generated by Cucumber-Rails and is only here to get you a head start -# These step definitions are thin wrappers around the Capybara/Webrat API that lets you -# visit pages, interact with widgets and make assertions about page content. -# -# If you use these step definitions as basis for your features you will quickly end up -# with features that are: -# -# * Hard to maintain -# * Verbose to read -# -# A much better approach is to write your own higher level step definitions, following -# the advice in the following blog posts: -# -# * http://benmabey.com/2008/05/19/imperative-vs-declarative-scenarios-in-user-stories.html -# * http://dannorth.net/2011/01/31/whose-domain-is-it-anyway/ -# * http://elabs.se/blog/15-you-re-cuking-it-wrong -# - - -require 'uri' -require 'cgi' -require File.expand_path(File.join(File.dirname(__FILE__), "..", "support", "paths")) -require File.expand_path(File.join(File.dirname(__FILE__), "..", "support", "selectors")) - -module WithinHelpers - def with_scope(locator) - locator ? within(*selector_for(locator)) { yield } : yield - end -end -World(WithinHelpers) - -# # Single-line step scoper -# When /^(.*) within (.*[^:])$/ do |step, parent| -# with_scope(parent) { When step } -# end - -# # Multi-line step scoper -# When /^(.*) within (.*[^:]):$/ do |step, parent, table_or_string| -# with_scope(parent) { When "#{step}:", table_or_string } -# end - -# Given /^(?:|I )am on (.+)$/ do |page_name| -# visit path_to(page_name) -# end - -# When /^(?:|I )go to (.+)$/ do |page_name| -# visit path_to(page_name) -# end - -# When /^(?:|I )press "([^"]*)"$/ do |button| -# click_button(button) -# end - -# When /^(?:|I )follow "([^"]*)"$/ do |link| -# click_link(link) -# end - -# When /^(?:|I )fill in "([^"]*)" with "([^"]*)"$/ do |field, value| -# fill_in(field, :with => value) -# end - -# When /^(?:|I )fill in "([^"]*)" for "([^"]*)"$/ do |value, field| -# fill_in(field, :with => value) -# end - -# # Use this to fill in an entire form with data from a table. Example: -# # -# # When I fill in the following: -# # | Account Number | 5002 | -# # | Expiry date | 2009-11-01 | -# # | Note | Nice guy | -# # | Wants Email? | | -# # -# # TODO: Add support for checkbox, select or option -# # based on naming conventions. -# # -# When /^(?:|I )fill in the following:$/ do |fields| -# fields.rows_hash.each do |name, value| -# When %{I fill in "#{name}" with "#{value}"} -# end -# end - -# When /^(?:|I )select "([^"]*)" from "([^"]*)"$/ do |value, field| -# select(value, :from => field) -# end - -# When /^(?:|I )check "([^"]*)"$/ do |field| -# check(field) -# end - -# When /^(?:|I )uncheck "([^"]*)"$/ do |field| -# uncheck(field) -# end - -# When /^(?:|I )choose "([^"]*)"$/ do |field| -# choose(field) -# end - -# When /^(?:|I )attach the file "([^"]*)" to "([^"]*)"$/ do |path, field| -# attach_file(field, File.expand_path(path)) -# end - -# Then /^(?:|I )should see "([^"]*)"$/ do |text| -# if page.respond_to? :should -# page.should have_content(text) -# else -# assert page.has_content?(text) -# end -# end - -# Then /^(?:|I )should see \/([^\/]*)\/$/ do |regexp| -# regexp = Regexp.new(regexp) - -# if page.respond_to? :should -# page.should have_xpath('//*', :text => regexp) -# else -# assert page.has_xpath?('//*', :text => regexp) -# end -# end - -# Then /^(?:|I )should not see "([^"]*)"$/ do |text| -# if page.respond_to? :should -# page.should have_no_content(text) -# else -# assert page.has_no_content?(text) -# end -# end - -# Then /^(?:|I )should not see \/([^\/]*)\/$/ do |regexp| -# regexp = Regexp.new(regexp) - -# if page.respond_to? :should -# page.should have_no_xpath('//*', :text => regexp) -# else -# assert page.has_no_xpath?('//*', :text => regexp) -# end -# end - -# Then /^the "([^"]*)" field(?: within (.*))? should contain "([^"]*)"$/ do |field, parent, value| -# with_scope(parent) do -# field = find_field(field) -# field_value = (field.tag_name == 'textarea') ? field.text : field.value -# if field_value.respond_to? :should -# field_value.should =~ /#{value}/ -# else -# assert_match(/#{value}/, field_value) -# end -# end -# end - -# Then /^the "([^"]*)" field(?: within (.*))? should not contain "([^"]*)"$/ do |field, parent, value| -# with_scope(parent) do -# field = find_field(field) -# field_value = (field.tag_name == 'textarea') ? field.text : field.value -# if field_value.respond_to? :should_not -# field_value.should_not =~ /#{value}/ -# else -# assert_no_match(/#{value}/, field_value) -# end -# end -# end - -# Then /^the "([^"]*)" field should have the error "([^"]*)"$/ do |field, error_message| -# element = find_field(field) -# classes = element.find(:xpath, '..')[:class].split(' ') - -# form_for_input = element.find(:xpath, 'ancestor::form[1]') -# using_formtastic = form_for_input[:class].include?('formtastic') -# error_class = using_formtastic ? 'error' : 'field_with_errors' - -# if classes.respond_to? :should -# classes.should include(error_class) -# else -# assert classes.include?(error_class) -# end - -# if page.respond_to?(:should) -# if using_formtastic -# error_paragraph = element.find(:xpath, '../*[@class="inline-errors"][1]') -# error_paragraph.should have_content(error_message) -# else -# page.should have_content("#{field.titlecase} #{error_message}") -# end -# else -# if using_formtastic -# error_paragraph = element.find(:xpath, '../*[@class="inline-errors"][1]') -# assert error_paragraph.has_content?(error_message) -# else -# assert page.has_content?("#{field.titlecase} #{error_message}") -# end -# end -# end - -# Then /^the "([^"]*)" field should have no error$/ do |field| -# element = find_field(field) -# classes = element.find(:xpath, '..')[:class].split(' ') -# if classes.respond_to? :should -# classes.should_not include('field_with_errors') -# classes.should_not include('error') -# else -# assert !classes.include?('field_with_errors') -# assert !classes.include?('error') -# end -# end - -# Then /^the "([^"]*)" checkbox(?: within (.*))? should be checked$/ do |label, parent| -# with_scope(parent) do -# field_checked = find_field(label)['checked'] -# if field_checked.respond_to? :should -# field_checked.should be_true -# else -# assert field_checked -# end -# end -# end - -# Then /^the "([^"]*)" checkbox(?: within (.*))? should not be checked$/ do |label, parent| -# with_scope(parent) do -# field_checked = find_field(label)['checked'] -# if field_checked.respond_to? :should -# field_checked.should be_false -# else -# assert !field_checked -# end -# end -# end - -# Then /^(?:|I )should be on (.+)$/ do |page_name| -# current_path = URI.parse(current_url).path -# if current_path.respond_to? :should -# current_path.should == path_to(page_name) -# else -# assert_equal path_to(page_name), current_path -# end -# end - -# Then /^(?:|I )should have the following query string:$/ do |expected_pairs| -# query = URI.parse(current_url).query -# actual_params = query ? CGI.parse(query) : {} -# expected_params = {} -# expected_pairs.rows_hash.each_pair{|k,v| expected_params[k] = v.split(',')} - -# if actual_params.respond_to? :should -# actual_params.should == expected_params -# else -# assert_equal expected_params, actual_params -# end -# end - -# Then /^show me the page$/ do -# save_and_open_page -# end diff --git a/report.json b/report.json index d79596a6..43b1702d 100644 --- a/report.json +++ b/report.json @@ -1 +1 @@ -[{"uri":"features/gerenciar_solicitacoes_credenciamento.feature","id":"gerenciar-solicitações-de-credenciamento","keyword":"Funcionalidade","name":"Gerenciar solicitações de credenciamento","description":" Como um admnistrador do sistema\n Quero visualizar uma solicitação de credencimento em aberto\n Para decidir se vou aceitar ou recusar tal solicitação","line":4,"comments":[{"value":"#encoding: utf-8","line":2}],"elements":[{"keyword":"Contexto","name":"","description":"","line":9,"type":"background","before":[{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:14"},"result":{"status":"passed","duration":21800}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:22"},"result":{"status":"passed","duration":12500}}],"steps":[{"keyword":"Dado ","name":"que os seguintes solicitações estejam pendentes:","line":10,"rows":[{"cells":["title","due_date","activity_type_id"]},{"cells":["Solicitação 1","02-Jan-2021","Solicitação de credenciamento"]},{"cells":["Solicitação 2","02-Jan-2021","Solicitação de credenciamento"]},{"cells":["Solicitação 3","02-Jan-2021","Solicitação de credenciamento"]},{"cells":["Solicitação 4","02-Jan-2021","Solicitação de credenciamento"]}],"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:1"},"result":{"status":"pending","error_message":"TODO (Cucumber::Pending)\n./features/step_definitions/credenciamento_professores_steps.rb:2:in `\"que os seguintes solicitações estejam pendentes:\"'\nfeatures/gerenciar_solicitacoes_credenciamento.feature:10:in `Dado que os seguintes solicitações estejam pendentes:'","duration":8013000}},{"keyword":"E ","name":"que eu estou cadastrado e logado como \"Gabriel\", \"gabriel@admin.com\", \"gabriel123\", \"administrator\", \"200000000\"","line":17,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:8"},"result":{"status":"skipped"}},{"keyword":"E ","name":"que eu estou na página de solicitações de credenciamento","line":18,"match":{"location":"features/gerenciar_solicitacoes_credenciamento.feature:18"},"result":{"status":"undefined"}}]},{"id":"gerenciar-solicitações-de-credenciamento;aceitar-uma-solicitação-de-credenciamento","keyword":"Cenário","name":"Aceitar uma solicitação de credenciamento","description":"","line":20,"type":"scenario","steps":[{"keyword":"Quando ","name":"eu clico em \"Solicitação 1\"","line":21,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:34"},"result":{"status":"skipped"}},{"keyword":"Então ","name":"eu devo estar na página da \"Solicitação 1\"","line":22,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:38"},"result":{"status":"skipped"}},{"keyword":"Quando ","name":"eu clico em \"Aprovar\"","line":23,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:34"},"result":{"status":"skipped"}},{"keyword":"Então ","name":"eu devo estar na página de solicitações de credenciamento","line":24,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:38"},"result":{"status":"skipped"}},{"keyword":"Quando ","name":"eu desmarco os seguintes estados: Rejeitadas, Reformulação","line":25,"match":{"location":"features/gerenciar_solicitacoes_credenciamento.feature:25"},"result":{"status":"undefined"}},{"keyword":"E ","name":"eu marco os seguintes estados: Aprovadas","line":26,"match":{"location":"features/gerenciar_solicitacoes_credenciamento.feature:26"},"result":{"status":"undefined"}},{"keyword":"E ","name":"aperto 'Atualizar'","line":27,"match":{"location":"features/gerenciar_solicitacoes_credenciamento.feature:27"},"result":{"status":"undefined"}},{"keyword":"Então ","name":"eu devo ver \"Solicitação 1\"","line":28,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:63"},"result":{"status":"skipped"}}],"after":[{"embeddings":[{"mime_type":"image/png","data":"bG9nL3NjcmVlbnNob3RzL2FjZWl0YXJ1bWFzb2xpY2l0YW9kZWNyZWRlbmNpYW1lbnRvLnBuZw=="}],"match":{"location":"features/support/hooks.rb:1"},"result":{"status":"passed","duration":173000}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:10"},"result":{"status":"passed","duration":16300}}]},{"keyword":"Contexto","name":"","description":"","line":9,"type":"background","before":[{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:14"},"result":{"status":"passed","duration":11100}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:22"},"result":{"status":"passed","duration":12000}}],"steps":[{"keyword":"Dado ","name":"que os seguintes solicitações estejam pendentes:","line":10,"rows":[{"cells":["title","due_date","activity_type_id"]},{"cells":["Solicitação 1","02-Jan-2021","Solicitação de credenciamento"]},{"cells":["Solicitação 2","02-Jan-2021","Solicitação de credenciamento"]},{"cells":["Solicitação 3","02-Jan-2021","Solicitação de credenciamento"]},{"cells":["Solicitação 4","02-Jan-2021","Solicitação de credenciamento"]}],"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:1"},"result":{"status":"pending","error_message":"TODO (Cucumber::Pending)\n./features/step_definitions/credenciamento_professores_steps.rb:2:in `\"que os seguintes solicitações estejam pendentes:\"'\nfeatures/gerenciar_solicitacoes_credenciamento.feature:10:in `Dado que os seguintes solicitações estejam pendentes:'","duration":158300}},{"keyword":"E ","name":"que eu estou cadastrado e logado como \"Gabriel\", \"gabriel@admin.com\", \"gabriel123\", \"administrator\", \"200000000\"","line":17,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:8"},"result":{"status":"skipped"}},{"keyword":"E ","name":"que eu estou na página de solicitações de credenciamento","line":18,"match":{"location":"features/gerenciar_solicitacoes_credenciamento.feature:18"},"result":{"status":"undefined"}}]},{"id":"gerenciar-solicitações-de-credenciamento;recusar-uma-solicitação-de-credenciamento","keyword":"Cenário","name":"Recusar uma solicitação de credenciamento","description":"","line":30,"type":"scenario","steps":[{"keyword":"Quando ","name":"eu clico em \"Solicitação 2\"","line":31,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:34"},"result":{"status":"skipped"}},{"keyword":"Então ","name":"eu devo estar na página da \"Solicitação 2\"","line":32,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:38"},"result":{"status":"skipped"}},{"keyword":"Quando ","name":"eu clico em \"Rejeitar\"","line":33,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:34"},"result":{"status":"skipped"}},{"keyword":"Então ","name":"eu devo estar na página de solicitações de credenciamento","line":34,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:38"},"result":{"status":"skipped"}},{"keyword":"Quando ","name":"eu desmarco os seguintes estados: Aprovadas, Reformulação","line":35,"match":{"location":"features/gerenciar_solicitacoes_credenciamento.feature:35"},"result":{"status":"undefined"}},{"keyword":"E ","name":"eu marco os seguintes estados: Rejeitadas","line":36,"match":{"location":"features/gerenciar_solicitacoes_credenciamento.feature:36"},"result":{"status":"undefined"}},{"keyword":"E ","name":"aperto 'Atualizar'","line":37,"match":{"location":"features/gerenciar_solicitacoes_credenciamento.feature:37"},"result":{"status":"undefined"}},{"keyword":"Então ","name":"eu devo ver \"Solicitação 2\"","line":38,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:63"},"result":{"status":"skipped"}}],"after":[{"embeddings":[{"mime_type":"image/png","data":"bG9nL3NjcmVlbnNob3RzL3JlY3VzYXJ1bWFzb2xpY2l0YW9kZWNyZWRlbmNpYW1lbnRvLnBuZw=="}],"match":{"location":"features/support/hooks.rb:1"},"result":{"status":"passed","duration":244100}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:10"},"result":{"status":"passed","duration":22100}}]}]},{"uri":"features/spike.feature","id":"testar","keyword":"Funcionalidade","name":"Testar","description":"","line":4,"comments":[{"value":"#encoding: utf-8","line":2}],"elements":[{"id":"testar;","keyword":"Cenário","name":"","description":"","line":5,"type":"scenario","before":[{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:14"},"result":{"status":"passed","duration":12300}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:22"},"result":{"status":"passed","duration":9900}}],"steps":[{"keyword":"Dado ","name":"que eu estou cadastrado e logado como \"Gabriel\", \"gabriel@admin.com\", \"gabriel123\", \"administrator\", \"200000000\"","line":6,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:8"},"result":{"status":"passed","duration":2499355600}}],"after":[{"embeddings":[{"mime_type":"image/png","data":"bG9nL3NjcmVlbnNob3RzLy5wbmc="}],"match":{"location":"features/support/hooks.rb:1"},"result":{"status":"passed","duration":182300}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:10"},"result":{"status":"passed","duration":18100}}]}]}] \ No newline at end of file +[{"uri":"features/abrir_solicitacao_credenciamento.feature","id":"abrir-solicitação-de-credenciamento","keyword":"Funcionalidade","name":"Abrir solicitação de credenciamento","description":" Como professor autenticado no sistema,\n Quero poder abrir uma solicitação de credenciamento\n Para que eu possa ser um professor credenciado","line":4,"comments":[{"value":"#encoding: utf-8","line":2}],"elements":[{"keyword":"Contexto","name":"","description":"","line":9,"type":"background","before":[{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:14"},"result":{"status":"passed","duration":31300}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:22"},"result":{"status":"passed","duration":19200}}],"steps":[{"keyword":"Dado ","name":"que eu estou cadastrado e logado como \"Lucas\", \"lucas@professor.com\", \"lucas123\", \"professor\", \"200000000\"","line":10,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:8"},"result":{"status":"passed","duration":2212292400}},{"keyword":"E ","name":"que eu estou na página de abrir solicitação de credenciamento","line":11,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:30"},"result":{"status":"failed","error_message":"Can't find mapping from \"de abrir solicitação de credenciamento\" to a path.\nNow, go and add a mapping in /mnt/c/Users/Fontenelle/Desktop/UnB/9 semestre/Engenharia de Software/secretaria_ppgi/features/support/paths.rb (RuntimeError)\n./features/support/paths.rb:31:in `rescue in path_to'\n./features/support/paths.rb:26:in `path_to'\n./features/step_definitions/credenciamento_professores_steps.rb:31:in `/^que eu estou na página (.+)$/'\nfeatures/abrir_solicitacao_credenciamento.feature:11:in `E que eu estou na página de abrir solicitação de credenciamento'","duration":163700}}]},{"id":"abrir-solicitação-de-credenciamento;solicitação-enviada-com-sucesso","keyword":"Cenário","name":"Solicitação enviada com sucesso","description":"","line":13,"type":"scenario","steps":[{"keyword":"Quando ","name":"eu anexo o arquivo \"Formulário de Credenciamento.pdf\" no campo 'Formulario'","line":14,"match":{"location":"features/abrir_solicitacao_credenciamento.feature:14"},"result":{"status":"undefined"}},{"keyword":"E ","name":"eu anexo o arquivo \"CV Lattes.pdf\" em 'CV Lattes'","line":15,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:34"},"result":{"status":"skipped"}},{"keyword":"E ","name":"eu clico em 'Enviar'","line":16,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:38"},"result":{"status":"skipped"}},{"keyword":"Então ","name":"eu devo ver \"Solicitação enviada com sucesso\"","line":17,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:67"},"result":{"status":"skipped"}}],"after":[{"embeddings":[{"mime_type":"image/png","data":"bG9nL3NjcmVlbnNob3RzL3NvbGljaXRhb2VudmlhZGFjb21zdWNlc3NvLnBuZw=="}],"match":{"location":"features/support/hooks.rb:1"},"result":{"status":"failed","error_message":"undefined method `manage' for #\u003cCapybara::RackTest::Browser:0x00007fffcd7263a0\u003e (NoMethodError)\n./features/support/hooks.rb:22:in `add_browser_logs'\n./features/support/hooks.rb:5:in `After'","duration":367500}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:10"},"result":{"status":"passed","duration":24900}}]},{"keyword":"Contexto","name":"","description":"","line":9,"type":"background","before":[{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:14"},"result":{"status":"passed","duration":11000}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:22"},"result":{"status":"passed","duration":9200}}],"steps":[{"keyword":"Dado ","name":"que eu estou cadastrado e logado como \"Lucas\", \"lucas@professor.com\", \"lucas123\", \"professor\", \"200000000\"","line":10,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:8"},"result":{"status":"passed","duration":36932100}},{"keyword":"E ","name":"que eu estou na página de abrir solicitação de credenciamento","line":11,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:30"},"result":{"status":"failed","error_message":"Can't find mapping from \"de abrir solicitação de credenciamento\" to a path.\nNow, go and add a mapping in /mnt/c/Users/Fontenelle/Desktop/UnB/9 semestre/Engenharia de Software/secretaria_ppgi/features/support/paths.rb (RuntimeError)\n./features/support/paths.rb:31:in `rescue in path_to'\n./features/support/paths.rb:26:in `path_to'\n./features/step_definitions/credenciamento_professores_steps.rb:31:in `/^que eu estou na página (.+)$/'\nfeatures/abrir_solicitacao_credenciamento.feature:11:in `E que eu estou na página de abrir solicitação de credenciamento'","duration":125900}}]},{"id":"abrir-solicitação-de-credenciamento;solicitação-não-enviada-(campo-obrigatório-em-branco)","keyword":"Cenário","name":"Solicitação não enviada (campo obrigatório em branco)","description":"","line":19,"type":"scenario","steps":[{"keyword":"Quando ","name":"eu anexo o arquivo \"Formulário de Credenciamento.pdf\" no campo 'Formulario'","line":20,"match":{"location":"features/abrir_solicitacao_credenciamento.feature:20"},"result":{"status":"undefined"}},{"keyword":"E ","name":"eu clico em 'Enviar'","line":21,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:38"},"result":{"status":"skipped"}},{"keyword":"Então ","name":"eu devo ver \"Solicitação não enviada (campo obrigatório* em branco)\"","line":22,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:67"},"result":{"status":"skipped"}}],"after":[{"embeddings":[{"mime_type":"image/png","data":"bG9nL3NjcmVlbnNob3RzL3NvbGljaXRhb25vZW52aWFkYWNhbXBvb2JyaWdhdHJpb2VtYnJhbmNvLnBuZw=="}],"match":{"location":"features/support/hooks.rb:1"},"result":{"status":"failed","error_message":"undefined method `manage' for #\u003cCapybara::RackTest::Browser:0x00007fffce93fbb8\u003e (NoMethodError)\n./features/support/hooks.rb:22:in `add_browser_logs'\n./features/support/hooks.rb:5:in `After'","duration":1180900}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:10"},"result":{"status":"passed","duration":20800}}]}]},{"uri":"features/credenciamento_periodo.feature","id":"definir-o-prazo-de-credenciamento-dos-professores","keyword":"Funcionalidade","name":"Definir o prazo de credenciamento dos professores","description":" Como um administrador,\n para que eu possa credenciar os professores,\n eu gostaria de definir o prazo de credenciamento dos professores","line":4,"comments":[{"value":"#encoding: utf-8","line":2}],"elements":[{"keyword":"Contexto","name":"","description":"","line":9,"type":"background","before":[{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:14"},"result":{"status":"passed","duration":11000}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:22"},"result":{"status":"passed","duration":8700}}],"steps":[{"keyword":"Dado ","name":"que eu esteja autenticado como usuario \"admin\"","line":10,"match":{"location":"features/credenciamento_periodo.feature:10"},"result":{"status":"undefined"}},{"keyword":"E ","name":"que esteja na página de credenciamento","line":11,"match":{"location":"features/credenciamento_periodo.feature:11"},"result":{"status":"undefined"}}]},{"id":"definir-o-prazo-de-credenciamento-dos-professores;definir-prazo-de-credenciamento-sem-data","keyword":"Cenário","name":"Definir prazo de credenciamento sem data","description":"","line":13,"type":"scenario","steps":[{"keyword":"Quando ","name":"eu aperto o botão \"Definir prazo de credenciamento\"","line":14,"match":{"location":"features/credenciamento_periodo.feature:14"},"result":{"status":"undefined"}},{"keyword":"E ","name":"eu aperto o botão \"Salvar período\"","line":15,"match":{"location":"features/credenciamento_periodo.feature:15"},"result":{"status":"undefined"}},{"keyword":"Então ","name":"eu espero ver a mensagem \"Insira uma data de início e uma data de término válidas.\"","line":16,"match":{"location":"features/credenciamento_periodo.feature:16"},"result":{"status":"undefined"}}],"after":[{"embeddings":[{"mime_type":"image/png","data":"bG9nL3NjcmVlbnNob3RzL2RlZmluaXJwcmF6b2RlY3JlZGVuY2lhbWVudG9zZW1kYXRhLnBuZw=="}],"match":{"location":"features/support/hooks.rb:1"},"result":{"status":"passed","duration":217700}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:10"},"result":{"status":"passed","duration":34100}}]},{"keyword":"Contexto","name":"","description":"","line":9,"type":"background","before":[{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:14"},"result":{"status":"passed","duration":12100}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:22"},"result":{"status":"passed","duration":21000}}],"steps":[{"keyword":"Dado ","name":"que eu esteja autenticado como usuario \"admin\"","line":10,"match":{"location":"features/credenciamento_periodo.feature:10"},"result":{"status":"undefined"}},{"keyword":"E ","name":"que esteja na página de credenciamento","line":11,"match":{"location":"features/credenciamento_periodo.feature:11"},"result":{"status":"undefined"}}]},{"id":"definir-o-prazo-de-credenciamento-dos-professores;definir-prazo-de-credenciamento-com-data","keyword":"Cenário","name":"Definir prazo de credenciamento com data","description":"","line":18,"type":"scenario","steps":[{"keyword":"Quando ","name":"eu aperto o botão \"Definir prazo de credenciamento\"","line":19,"match":{"location":"features/credenciamento_periodo.feature:19"},"result":{"status":"undefined"}},{"keyword":"Quando ","name":"eu adiciono um valor \"Início\" para \"Data de Início\"","line":20,"match":{"location":"features/credenciamento_periodo.feature:20"},"result":{"status":"undefined"}},{"keyword":"E ","name":"eu adiciono um valor \"Término\" para \"Data de Término\"","line":21,"match":{"location":"features/credenciamento_periodo.feature:21"},"result":{"status":"undefined"}},{"keyword":"E ","name":"eu aperto o botão \"Salvar período\"","line":22,"match":{"location":"features/credenciamento_periodo.feature:22"},"result":{"status":"undefined"}},{"keyword":"Então ","name":"eu espero ver a mensagem \"Prazo cadastrado com sucesso.\"","line":23,"match":{"location":"features/credenciamento_periodo.feature:23"},"result":{"status":"undefined"}}],"after":[{"embeddings":[{"mime_type":"image/png","data":"bG9nL3NjcmVlbnNob3RzL2RlZmluaXJwcmF6b2RlY3JlZGVuY2lhbWVudG9jb21kYXRhLnBuZw=="}],"match":{"location":"features/support/hooks.rb:1"},"result":{"status":"passed","duration":219300}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:10"},"result":{"status":"passed","duration":23100}}]}]},{"uri":"features/gerenciar_solicitacoes_credenciamento.feature","id":"gerenciar-solicitações-de-credenciamento","keyword":"Funcionalidade","name":"Gerenciar solicitações de credenciamento","description":" Como um admnistrador do sistema\n Quero visualizar uma solicitação de credencimento em aberto\n Para decidir se vou aceitar ou recusar tal solicitação","line":4,"comments":[{"value":"#encoding: utf-8","line":2}],"elements":[{"keyword":"Contexto","name":"","description":"","line":9,"type":"background","before":[{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:14"},"result":{"status":"passed","duration":12900}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:22"},"result":{"status":"passed","duration":9800}}],"steps":[{"keyword":"Dado ","name":"que as seguintes solicitações estejam pendentes:","line":10,"rows":[{"cells":["title","due_date","activity_type_id"]},{"cells":["Solicitação 1","02-Jan-2021","Solicitação de credenciamento"]},{"cells":["Solicitação 2","02-Jan-2021","Solicitação de credenciamento"]},{"cells":["Solicitação 3","02-Jan-2021","Solicitação de credenciamento"]},{"cells":["Solicitação 4","02-Jan-2021","Solicitação de credenciamento"]}],"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:1"},"result":{"status":"pending","error_message":"TODO (Cucumber::Pending)\n./features/step_definitions/credenciamento_professores_steps.rb:2:in `\"que as seguintes solicitações estejam pendentes:\"'\nfeatures/gerenciar_solicitacoes_credenciamento.feature:10:in `Dado que as seguintes solicitações estejam pendentes:'","duration":496800}},{"keyword":"E ","name":"que eu estou cadastrado e logado como \"Gabriel\", \"gabriel@admin.com\", \"gabriel123\", \"administrator\", \"200000000\"","line":17,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:8"},"result":{"status":"skipped"}},{"keyword":"E ","name":"que eu estou na página de solicitações de credenciamento","line":18,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:30"},"result":{"status":"skipped"}}]},{"id":"gerenciar-solicitações-de-credenciamento;aceitar-uma-solicitação-de-credenciamento","keyword":"Cenário","name":"Aceitar uma solicitação de credenciamento","description":"","line":20,"type":"scenario","steps":[{"keyword":"Quando ","name":"eu clico em \"Solicitação 1\"","line":21,"match":{"location":"features/gerenciar_solicitacoes_credenciamento.feature:21"},"result":{"status":"undefined"}},{"keyword":"Então ","name":"eu devo estar na página da \"Solicitação 1\"","line":22,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:42"},"result":{"status":"skipped"}},{"keyword":"Quando ","name":"eu clico em 'Aprovar'","line":23,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:38"},"result":{"status":"skipped"}},{"keyword":"Então ","name":"eu devo estar na página de solicitações de credenciamento","line":24,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:42"},"result":{"status":"skipped"}},{"keyword":"Quando ","name":"eu desmarco os seguintes estados: Rejeitadas, Reformulação","line":25,"match":{"location":"features/gerenciar_solicitacoes_credenciamento.feature:25"},"result":{"status":"undefined"}},{"keyword":"E ","name":"eu marco os seguintes estados: Aprovadas","line":26,"match":{"location":"features/gerenciar_solicitacoes_credenciamento.feature:26"},"result":{"status":"undefined"}},{"keyword":"E ","name":"eu aperto 'Atualizar'","line":27,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:63"},"result":{"status":"skipped"}},{"keyword":"Então ","name":"eu devo ver \"Solicitação 1\"","line":28,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:67"},"result":{"status":"skipped"}}],"after":[{"embeddings":[{"mime_type":"image/png","data":"bG9nL3NjcmVlbnNob3RzL2FjZWl0YXJ1bWFzb2xpY2l0YW9kZWNyZWRlbmNpYW1lbnRvLnBuZw=="}],"match":{"location":"features/support/hooks.rb:1"},"result":{"status":"passed","duration":220200}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:10"},"result":{"status":"passed","duration":25200}}]},{"keyword":"Contexto","name":"","description":"","line":9,"type":"background","before":[{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:14"},"result":{"status":"passed","duration":15900}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:22"},"result":{"status":"passed","duration":12000}}],"steps":[{"keyword":"Dado ","name":"que as seguintes solicitações estejam pendentes:","line":10,"rows":[{"cells":["title","due_date","activity_type_id"]},{"cells":["Solicitação 1","02-Jan-2021","Solicitação de credenciamento"]},{"cells":["Solicitação 2","02-Jan-2021","Solicitação de credenciamento"]},{"cells":["Solicitação 3","02-Jan-2021","Solicitação de credenciamento"]},{"cells":["Solicitação 4","02-Jan-2021","Solicitação de credenciamento"]}],"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:1"},"result":{"status":"pending","error_message":"TODO (Cucumber::Pending)\n./features/step_definitions/credenciamento_professores_steps.rb:2:in `\"que as seguintes solicitações estejam pendentes:\"'\nfeatures/gerenciar_solicitacoes_credenciamento.feature:10:in `Dado que as seguintes solicitações estejam pendentes:'","duration":147300}},{"keyword":"E ","name":"que eu estou cadastrado e logado como \"Gabriel\", \"gabriel@admin.com\", \"gabriel123\", \"administrator\", \"200000000\"","line":17,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:8"},"result":{"status":"skipped"}},{"keyword":"E ","name":"que eu estou na página de solicitações de credenciamento","line":18,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:30"},"result":{"status":"skipped"}}]},{"id":"gerenciar-solicitações-de-credenciamento;recusar-uma-solicitação-de-credenciamento","keyword":"Cenário","name":"Recusar uma solicitação de credenciamento","description":"","line":30,"type":"scenario","steps":[{"keyword":"Quando ","name":"eu clico em \"Solicitação 2\"","line":31,"match":{"location":"features/gerenciar_solicitacoes_credenciamento.feature:31"},"result":{"status":"undefined"}},{"keyword":"Então ","name":"eu devo estar na página da \"Solicitação 2\"","line":32,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:42"},"result":{"status":"skipped"}},{"keyword":"Quando ","name":"eu clico em 'Rejeitar'","line":33,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:38"},"result":{"status":"skipped"}},{"keyword":"Então ","name":"eu devo estar na página de solicitações de credenciamento","line":34,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:42"},"result":{"status":"skipped"}},{"keyword":"Quando ","name":"eu desmarco os seguintes estados: Aprovadas, Reformulação","line":35,"match":{"location":"features/gerenciar_solicitacoes_credenciamento.feature:35"},"result":{"status":"undefined"}},{"keyword":"E ","name":"eu marco os seguintes estados: Rejeitadas","line":36,"match":{"location":"features/gerenciar_solicitacoes_credenciamento.feature:36"},"result":{"status":"undefined"}},{"keyword":"E ","name":"eu aperto 'Atualizar'","line":37,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:63"},"result":{"status":"skipped"}},{"keyword":"Então ","name":"eu devo ver \"Solicitação 2\"","line":38,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:67"},"result":{"status":"skipped"}}],"after":[{"embeddings":[{"mime_type":"image/png","data":"bG9nL3NjcmVlbnNob3RzL3JlY3VzYXJ1bWFzb2xpY2l0YW9kZWNyZWRlbmNpYW1lbnRvLnBuZw=="}],"match":{"location":"features/support/hooks.rb:1"},"result":{"status":"passed","duration":191900}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:10"},"result":{"status":"passed","duration":25600}}]}]},{"uri":"features/requisitos_necessarios.feature","id":"disponibilizar-os-requisitos-necessarios-para-credenciamento-de-professores","keyword":"Funcionalidade","name":"Disponibilizar os requisitos necessarios para credenciamento de professores","description":" Como administrador autenticado no sistema,\n Quero poder disponibilizar para os professores os requisitos necessários para o credenciamento\n Para que eles possam dar procedimento ao credenciamento","line":4,"comments":[{"value":"#encoding: utf-8","line":2}],"elements":[{"keyword":"Contexto","name":"","description":"","line":9,"type":"background","before":[{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:14"},"result":{"status":"passed","duration":12000}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:22"},"result":{"status":"passed","duration":12700}}],"steps":[{"keyword":"Dado ","name":"que eu esteja logado como administrador de email \"gp@admin.com\" e senha \"123\"","line":10,"match":{"location":"features/requisitos_necessarios.feature:10"},"result":{"status":"undefined"}},{"keyword":"E ","name":"não existem requisitos selecionados na página principal","line":11,"match":{"location":"features/requisitos_necessarios.feature:11"},"result":{"status":"undefined"}},{"keyword":"Quando ","name":"o administrador clicou no link para alterar documentos necessários para credenciamento","line":12,"match":{"location":"features/requisitos_necessarios.feature:12"},"result":{"status":"undefined"}}]},{"id":"disponibilizar-os-requisitos-necessarios-para-credenciamento-de-professores;os-campos-puderam-ser-selecionados","keyword":"Cenário","name":"Os campos puderam ser selecionados","description":"","line":14,"type":"scenario","steps":[{"keyword":"Quando ","name":"eu selecionar os campos","line":15,"match":{"location":"features/requisitos_necessarios.feature:15"},"result":{"status":"undefined"}},{"keyword":"E ","name":"eu clicar no botão atualizar requisitos","line":16,"match":{"location":"features/requisitos_necessarios.feature:16"},"result":{"status":"undefined"}},{"keyword":"Então ","name":"eu devo voltar para a página principal aonde aparece meus requisitos selecionados","line":17,"match":{"location":"features/requisitos_necessarios.feature:17"},"result":{"status":"undefined"}}],"after":[{"embeddings":[{"mime_type":"image/png","data":"bG9nL3NjcmVlbnNob3RzL29zY2FtcG9zcHVkZXJhbXNlcnNlbGVjaW9uYWRvcy5wbmc="}],"match":{"location":"features/support/hooks.rb:1"},"result":{"status":"passed","duration":2373100}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:10"},"result":{"status":"passed","duration":40300}}]},{"keyword":"Contexto","name":"","description":"","line":9,"type":"background","before":[{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:14"},"result":{"status":"passed","duration":15100}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:22"},"result":{"status":"passed","duration":9600}}],"steps":[{"keyword":"Dado ","name":"que eu esteja logado como administrador de email \"gp@admin.com\" e senha \"123\"","line":10,"match":{"location":"features/requisitos_necessarios.feature:10"},"result":{"status":"undefined"}},{"keyword":"E ","name":"não existem requisitos selecionados na página principal","line":11,"match":{"location":"features/requisitos_necessarios.feature:11"},"result":{"status":"undefined"}},{"keyword":"Quando ","name":"o administrador clicou no link para alterar documentos necessários para credenciamento","line":12,"match":{"location":"features/requisitos_necessarios.feature:12"},"result":{"status":"undefined"}}]},{"id":"disponibilizar-os-requisitos-necessarios-para-credenciamento-de-professores;não-houveram-mudanças-feitas","keyword":"Cenário","name":"Não houveram mudanças feitas","description":"","line":19,"type":"scenario","steps":[{"keyword":"Quando ","name":"eu não selecionar os campos","line":20,"match":{"location":"features/requisitos_necessarios.feature:20"},"result":{"status":"undefined"}},{"keyword":"E ","name":"eu clicar no botão atualizar requisitos","line":21,"match":{"location":"features/requisitos_necessarios.feature:21"},"result":{"status":"undefined"}},{"keyword":"Então ","name":"eu recebo uma mensagem dizendo que \"não houveram mudanças\"","line":22,"match":{"location":"features/requisitos_necessarios.feature:22"},"result":{"status":"undefined"}}],"after":[{"embeddings":[{"mime_type":"image/png","data":"bG9nL3NjcmVlbnNob3RzL25vaG91dmVyYW1tdWRhbmFzZmVpdGFzLnBuZw=="}],"match":{"location":"features/support/hooks.rb:1"},"result":{"status":"passed","duration":214700}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:10"},"result":{"status":"passed","duration":18600}}]}]},{"uri":"features/spike.feature","id":"testar","keyword":"Funcionalidade","name":"Testar","description":"","line":4,"comments":[{"value":"#encoding: utf-8","line":2}],"elements":[{"id":"testar;","keyword":"Cenário","name":"","description":"","line":5,"type":"scenario","before":[{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:14"},"result":{"status":"passed","duration":18600}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:22"},"result":{"status":"passed","duration":13400}}],"steps":[{"keyword":"Dado ","name":"que eu estou cadastrado e logado como \"Gabriel\", \"gabriel@admin.com\", \"gabriel123\", \"administrator\", \"200000000\"","line":6,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:8"},"result":{"status":"passed","duration":39523000}}],"after":[{"embeddings":[{"mime_type":"image/png","data":"bG9nL3NjcmVlbnNob3RzLy5wbmc="}],"match":{"location":"features/support/hooks.rb:1"},"result":{"status":"passed","duration":223700}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:10"},"result":{"status":"passed","duration":19100}}]}]}] \ No newline at end of file From af2d639157829b839200f79c6008a023a5d43ce8 Mon Sep 17 00:00:00 2001 From: ngsylar Date: Tue, 10 Nov 2020 23:05:30 -0300 Subject: [PATCH 13/82] migrations --- app/controllers/application_controller.rb | 4 +++ app/controllers/home_controller.rb | 14 ++++++++++ app/models/activity_type.rb | 3 ++ app/views/home/index.html.erb | 1 + .../20201111004338_create_activity_types.rb | 9 ++++++ .../20201111004340_create_activities.rb | 21 ++++++++++++++ db/schema.rb | 28 ++++++++++++++++++- spec/models/activity_type_spec.rb | 5 ++++ 8 files changed, 84 insertions(+), 1 deletion(-) create mode 100644 app/models/activity_type.rb create mode 100644 db/migrate/20201111004338_create_activity_types.rb create mode 100644 db/migrate/20201111004340_create_activities.rb create mode 100644 spec/models/activity_type_spec.rb diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 457cc5f9..ab623125 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -5,6 +5,10 @@ class ApplicationController < ActionController::Base protected + def is_admin? user_id + User.find(user_id).role == "administrator" + end + def configure_permitted_parameters devise_parameter_sanitizer.permit(:sign_up, keys: %i[full_name role]) end diff --git a/app/controllers/home_controller.rb b/app/controllers/home_controller.rb index 95f29929..bfea9d3a 100644 --- a/app/controllers/home_controller.rb +++ b/app/controllers/home_controller.rb @@ -1,4 +1,18 @@ class HomeController < ApplicationController + before_action :set_word, only: [:index] + def index + end + + private + + def set_word + if user_signed_in? && is_admin?(current_user.id) + @word = "Olá Genaína" + else + @word = "Olá impostor" + end + end + end diff --git a/app/models/activity_type.rb b/app/models/activity_type.rb new file mode 100644 index 00000000..2d5116ab --- /dev/null +++ b/app/models/activity_type.rb @@ -0,0 +1,3 @@ +class ActivityType < ApplicationRecord + +end diff --git a/app/views/home/index.html.erb b/app/views/home/index.html.erb index 33ba387d..83afd49c 100644 --- a/app/views/home/index.html.erb +++ b/app/views/home/index.html.erb @@ -2,6 +2,7 @@

Find me in app/views/home/index.html.erb

<% if user_signed_in? %> + <%= @word %>

Usuário atual

Nome: <%= current_user.full_name %>

Email: <%= current_user.email %>

diff --git a/db/migrate/20201111004338_create_activity_types.rb b/db/migrate/20201111004338_create_activity_types.rb new file mode 100644 index 00000000..5bd3eaeb --- /dev/null +++ b/db/migrate/20201111004338_create_activity_types.rb @@ -0,0 +1,9 @@ +class CreateActivityTypes < ActiveRecord::Migration[5.2] + def change + create_table :activity_types do |t| + t.string :title + + t.timestamps + end + end +end diff --git a/db/migrate/20201111004340_create_activities.rb b/db/migrate/20201111004340_create_activities.rb new file mode 100644 index 00000000..48cd51a3 --- /dev/null +++ b/db/migrate/20201111004340_create_activities.rb @@ -0,0 +1,21 @@ +class CreateActivities < ActiveRecord::Migration[5.2] + def change + create_table :activities do |t| + t.string :title + t.text :description + t.date :due_date + # t.attachment :documents + + t.references :activity_type, foreign_key: true + t.datetime :remember_created_at + t.timestamps null: false + end + + create_table :users_activities do |t| + t.references :user + t.references :activity + end + + add_index :users_activities, %i[user_id activity_id], unique: true + end +end diff --git a/db/schema.rb b/db/schema.rb index 96d61d72..507be0c2 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,11 +10,28 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 2019_11_14_163205) do +ActiveRecord::Schema.define(version: 2020_11_11_004340) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" + create_table "activities", force: :cascade do |t| + t.string "title" + t.text "description" + t.date "due_date" + t.bigint "activity_type_id" + t.datetime "remember_created_at" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["activity_type_id"], name: "index_activities_on_activity_type_id" + end + + create_table "activity_types", force: :cascade do |t| + t.string "title" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + end + create_table "users", force: :cascade do |t| t.string "email", default: "", null: false t.string "encrypted_password", default: "", null: false @@ -30,4 +47,13 @@ t.index ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true end + create_table "users_activities", force: :cascade do |t| + t.bigint "user_id" + t.bigint "activity_id" + t.index ["activity_id"], name: "index_users_activities_on_activity_id" + t.index ["user_id", "activity_id"], name: "index_users_activities_on_user_id_and_activity_id", unique: true + t.index ["user_id"], name: "index_users_activities_on_user_id" + end + + add_foreign_key "activities", "activity_types" end diff --git a/spec/models/activity_type_spec.rb b/spec/models/activity_type_spec.rb new file mode 100644 index 00000000..5541b8e6 --- /dev/null +++ b/spec/models/activity_type_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe ActivityType, type: :model do + pending "add some examples to (or delete) #{__FILE__}" +end From 878f1a646cd228fa9748002930e5e0e7ccf70e99 Mon Sep 17 00:00:00 2001 From: ngsylar Date: Wed, 11 Nov 2020 02:10:48 -0300 Subject: [PATCH 14/82] Migrations, Models and Steps --- app/controllers/home_controller.rb | 1 - app/models/activity.rb | 3 + app/models/activity_type.rb | 2 +- app/models/user_activity.rb | 4 + .../20201111004338_create_activity_types.rb | 2 - .../20201111004340_create_activities.rb | 8 +- db/schema.rb | 20 ++-- db/seeds.rb | 6 +- features.html | 96 +++---------------- ...enciar_solicitacoes_credenciamento.feature | 2 +- features/spike.feature | 7 +- .../credenciamento_professores_steps.rb | 18 +++- report.json | 2 +- 13 files changed, 59 insertions(+), 112 deletions(-) create mode 100644 app/models/activity.rb create mode 100644 app/models/user_activity.rb diff --git a/app/controllers/home_controller.rb b/app/controllers/home_controller.rb index bfea9d3a..357f457a 100644 --- a/app/controllers/home_controller.rb +++ b/app/controllers/home_controller.rb @@ -2,7 +2,6 @@ class HomeController < ApplicationController before_action :set_word, only: [:index] def index - end private diff --git a/app/models/activity.rb b/app/models/activity.rb new file mode 100644 index 00000000..757e8e51 --- /dev/null +++ b/app/models/activity.rb @@ -0,0 +1,3 @@ +class Activity < ApplicationRecord + validates :activity_type_id, presence: true +end diff --git a/app/models/activity_type.rb b/app/models/activity_type.rb index 2d5116ab..9258b1da 100644 --- a/app/models/activity_type.rb +++ b/app/models/activity_type.rb @@ -1,3 +1,3 @@ class ActivityType < ApplicationRecord - + validates :title, presence: true end diff --git a/app/models/user_activity.rb b/app/models/user_activity.rb new file mode 100644 index 00000000..eaf64d59 --- /dev/null +++ b/app/models/user_activity.rb @@ -0,0 +1,4 @@ +class UserActivity < ApplicationRecord + belongs_to :user + belongs_to :activity +end diff --git a/db/migrate/20201111004338_create_activity_types.rb b/db/migrate/20201111004338_create_activity_types.rb index 5bd3eaeb..5d9a226f 100644 --- a/db/migrate/20201111004338_create_activity_types.rb +++ b/db/migrate/20201111004338_create_activity_types.rb @@ -2,8 +2,6 @@ class CreateActivityTypes < ActiveRecord::Migration[5.2] def change create_table :activity_types do |t| t.string :title - - t.timestamps end end end diff --git a/db/migrate/20201111004340_create_activities.rb b/db/migrate/20201111004340_create_activities.rb index 48cd51a3..8b516bee 100644 --- a/db/migrate/20201111004340_create_activities.rb +++ b/db/migrate/20201111004340_create_activities.rb @@ -11,11 +11,11 @@ def change t.timestamps null: false end - create_table :users_activities do |t| - t.references :user - t.references :activity + create_table :user_activities do |t| + t.belongs_to :user, foreign_key: true + t.belongs_to :activity, foreign_key: true end - add_index :users_activities, %i[user_id activity_id], unique: true + add_index :user_activities, %i[user_id activity_id], unique: true end end diff --git a/db/schema.rb b/db/schema.rb index 507be0c2..cd357ca3 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -28,8 +28,14 @@ create_table "activity_types", force: :cascade do |t| t.string "title" - t.datetime "created_at", null: false - t.datetime "updated_at", null: false + end + + create_table "user_activities", force: :cascade do |t| + t.bigint "user_id" + t.bigint "activity_id" + t.index ["activity_id"], name: "index_user_activities_on_activity_id" + t.index ["user_id", "activity_id"], name: "index_user_activities_on_user_id_and_activity_id", unique: true + t.index ["user_id"], name: "index_user_activities_on_user_id" end create_table "users", force: :cascade do |t| @@ -47,13 +53,7 @@ t.index ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true end - create_table "users_activities", force: :cascade do |t| - t.bigint "user_id" - t.bigint "activity_id" - t.index ["activity_id"], name: "index_users_activities_on_activity_id" - t.index ["user_id", "activity_id"], name: "index_users_activities_on_user_id_and_activity_id", unique: true - t.index ["user_id"], name: "index_users_activities_on_user_id" - end - add_foreign_key "activities", "activity_types" + add_foreign_key "user_activities", "activities" + add_foreign_key "user_activities", "users" end diff --git a/db/seeds.rb b/db/seeds.rb index a5ddd2f6..94113f98 100644 --- a/db/seeds.rb +++ b/db/seeds.rb @@ -11,4 +11,8 @@ User.create(full_name: "Administrador", email: "admin@admin.com", password: "admin123", role: "administrator", registration: "000000000") User.create(full_name: "Secretário", email: "secretary@secretary.com", password: "admin123", role: "secretary", registration: "000000000") User.create(full_name: "Professor", email: "professor@professor.com", password: "admin123", role: "professor", registration: "000000000") -User.create(full_name: "Aluno", email: "student@student.com", password: "admin123", role: "student", registration: "000000000") \ No newline at end of file +User.create(full_name: "Aluno", email: "student@student.com", password: "admin123", role: "student", registration: "000000000") + +# Activities +ActivityType.destroy_all +Activity.destroy_all diff --git a/features.html b/features.html index 0c37612d..04b1344b 100644 --- a/features.html +++ b/features.html @@ -467,93 +467,19 @@ function makeYellow(element_id) { $('#'+element_id).css('background', '#FAF834'); $('#'+element_id).css('color', '#000000'); -}

Cucumber Features

Expand All

Collapse All

# language: pt
#encoding: utf-8

Funcionalidade: Abrir solicitação de credenciamento

Como professor autenticado no sistema,
Quero poder abrir uma solicitação de credenciamento
Para que eu possa ser um professor credenciado

Contexto

  1. Dado que eu estou cadastrado e logado como "Lucas", "lucas@professor.com", "lucas123", "professor", "200000000"
    features/step_definitions/credenciamento_professores_steps.rb:8
  2. E que eu estou na página de abrir solicitação de credenciamento
    features/step_definitions/credenciamento_professores_steps.rb:30
    Can't find mapping from "de abrir solicitação de credenciamento" to a path.
    -Now, go and add a mapping in /mnt/c/Users/Fontenelle/Desktop/UnB/9 semestre/Engenharia de Software/secretaria_ppgi/features/support/paths.rb
    ./features/support/paths.rb:31:in `rescue in path_to'
    -./features/support/paths.rb:26:in `path_to'
    -./features/step_definitions/credenciamento_professores_steps.rb:31:in `/^que eu estou na página (.+)$/'
    -features/abrir_solicitacao_credenciamento.feature:11:in `E que eu estou na página de abrir solicitação de credenciamento'
    29        self.send(path_components.push('path').join('_').to_sym)
    -30      rescue NoMethodError, ArgumentError
    -31        raise "Can't find mapping from \"#{page_name}\" to a path.\n" +
    -32          "Now, go and add a mapping in #{__FILE__}"
    -33      end
    -34# gem install syntax to get syntax highlighting
features/abrir_solicitacao_credenciamento.feature:13

Cenário: Solicitação enviada com sucesso

  1. Quando eu anexo o arquivo "Formulário de Credenciamento.pdf" no campo 'Formulario'
    features/abrir_solicitacao_credenciamento.feature:14
    Quando("eu anexo o arquivo {string} no campo {string}") do |string, string2|
    -  pending # Write code here that turns the phrase above into concrete actions
    -end
  2. E eu anexo o arquivo "CV Lattes.pdf" em 'CV Lattes'
    features/step_definitions/credenciamento_professores_steps.rb:34
  3. E eu clico em 'Enviar'
    features/step_definitions/credenciamento_professores_steps.rb:38
  4. Então eu devo ver "Solicitação enviada com sucesso"
    features/step_definitions/credenciamento_professores_steps.rb:67
  5. Print maroto :)
      -
    undefined method `manage' for #<Capybara::RackTest::Browser:0x00007fffcd7263a0> (NoMethodError)
    ./features/support/hooks.rb:22:in `add_browser_logs'
    +}

    Cucumber Features

    Expand All

    Collapse All

    # language: pt
    #encoding: utf-8

    Funcionalidade: Testar

    features/spike.feature:5

    Cenário:

    1. Dado que existam os seguintes credenciamentos sem prazo definido:
      features/step_definitions/credenciamento_professores_steps.rb:23
      title
      full_name
      Credenciamento 1
      Adalberto
      Credenciamento 2
      Mariano
      Credenciamento 3
      Joel
      Validation failed: User must exist (ActiveRecord::RecordInvalid)
      ./features/step_definitions/credenciamento_professores_steps.rb:28:in `block (2 levels) in 
      ' +./features/step_definitions/credenciamento_professores_steps.rb:25:in `each' +./features/step_definitions/credenciamento_professores_steps.rb:25:in `"que existam os seguintes credenciamentos sem prazo definido:"' +features/spike.feature:6:in `Dado que existam os seguintes credenciamentos sem prazo definido:'
      26        act_id = Activity.create!(title: row['title'], activity_type_id: type_id).id
      +27        usr_id = User.create!(full_name: row['full_name'], email: row['full_name']+"@professor.com", password: row['full_name']+"123", role: "professor", registration: "000000000").id
      +28        UserActivity.create!(activity_id: act_id)
      
      +29    end
      +30end
      +31# gem install syntax to get syntax highlighting
    2. E que eu esteja cadastrado e logado como "Gabriel", "gabriel@admin.com", "gabriel123", "administrator", "200000000"
      features/step_definitions/credenciamento_professores_steps.rb:32
    3. Print maroto :)
        +
      undefined method `manage' for #<Capybara::RackTest::Browser:0x00007fffd5be5c58> (NoMethodError)
      ./features/support/hooks.rb:22:in `add_browser_logs'
       ./features/support/hooks.rb:5:in `After'
      20    current_url = Capybara.current_url.to_s
       21    # Gather browser logs
       22    logs = page.driver.browser.manage.logs.get(:browser).map {|line| [line.level, line.message]}
      
       23   # Remove warnings and info messages
       24    logs.reject! { |line| ['WARNING', 'INFO'].include?(line.first) }
      -25# gem install syntax to get syntax highlighting
    features/abrir_solicitacao_credenciamento.feature:19

    Cenário: Solicitação não enviada (campo obrigatório em branco)

    1. Quando eu anexo o arquivo "Formulário de Credenciamento.pdf" no campo 'Formulario'
      features/abrir_solicitacao_credenciamento.feature:20
      Quando("eu anexo o arquivo {string} no campo {string}") do |string, string2|
      -  pending # Write code here that turns the phrase above into concrete actions
      -end
    2. E eu clico em 'Enviar'
      features/step_definitions/credenciamento_professores_steps.rb:38
    3. Então eu devo ver "Solicitação não enviada (campo obrigatório* em branco)"
      features/step_definitions/credenciamento_professores_steps.rb:67
    4. Print maroto :)
        -
      undefined method `manage' for #<Capybara::RackTest::Browser:0x00007fffce93fbb8> (NoMethodError)
      ./features/support/hooks.rb:22:in `add_browser_logs'
      -./features/support/hooks.rb:5:in `After'
      20    current_url = Capybara.current_url.to_s
      -21    # Gather browser logs
      -22    logs = page.driver.browser.manage.logs.get(:browser).map {|line| [line.level, line.message]}
      
      -23   # Remove warnings and info messages
      -24    logs.reject! { |line| ['WARNING', 'INFO'].include?(line.first) }
      -25# gem install syntax to get syntax highlighting
    # language: pt
    #encoding: utf-8

    Funcionalidade: Definir o prazo de credenciamento dos professores

    Como um administrador,
    para que eu possa credenciar os professores,
    eu gostaria de definir o prazo de credenciamento dos professores

    Contexto

    1. Dado que eu esteja autenticado como usuario "admin"
      features/credenciamento_periodo.feature:10
      Dado("que eu esteja autenticado como usuario {string}") do |string|
      -  pending # Write code here that turns the phrase above into concrete actions
      -end
    2. E que esteja na página de credenciamento
      features/credenciamento_periodo.feature:11
      Dado("que esteja na página de credenciamento") do
      -  pending # Write code here that turns the phrase above into concrete actions
      -end
    features/credenciamento_periodo.feature:13

    Cenário: Definir prazo de credenciamento sem data

    1. Quando eu aperto o botão "Definir prazo de credenciamento"
      features/credenciamento_periodo.feature:14
      Quando("eu aperto o botão {string}") do |string|
      -  pending # Write code here that turns the phrase above into concrete actions
      -end
    2. E eu aperto o botão "Salvar período"
      features/credenciamento_periodo.feature:15
      Quando("eu aperto o botão {string}") do |string|
      -  pending # Write code here that turns the phrase above into concrete actions
      -end
    3. Então eu espero ver a mensagem "Insira uma data de início e uma data de término válidas."
      features/credenciamento_periodo.feature:16
      Então("eu espero ver a mensagem {string}") do |string|
      -  pending # Write code here that turns the phrase above into concrete actions
      -end
    4. Print maroto :)
        -
    features/credenciamento_periodo.feature:18

    Cenário: Definir prazo de credenciamento com data

    1. Quando eu aperto o botão "Definir prazo de credenciamento"
      features/credenciamento_periodo.feature:19
      Quando("eu aperto o botão {string}") do |string|
      -  pending # Write code here that turns the phrase above into concrete actions
      -end
    2. Quando eu adiciono um valor "Início" para "Data de Início"
      features/credenciamento_periodo.feature:20
      Quando("eu adiciono um valor {string} para {string}") do |string, string2|
      -  pending # Write code here that turns the phrase above into concrete actions
      -end
    3. E eu adiciono um valor "Término" para "Data de Término"
      features/credenciamento_periodo.feature:21
      Quando("eu adiciono um valor {string} para {string}") do |string, string2|
      -  pending # Write code here that turns the phrase above into concrete actions
      -end
    4. E eu aperto o botão "Salvar período"
      features/credenciamento_periodo.feature:22
      Quando("eu aperto o botão {string}") do |string|
      -  pending # Write code here that turns the phrase above into concrete actions
      -end
    5. Então eu espero ver a mensagem "Prazo cadastrado com sucesso."
      features/credenciamento_periodo.feature:23
      Então("eu espero ver a mensagem {string}") do |string|
      -  pending # Write code here that turns the phrase above into concrete actions
      -end
    6. Print maroto :)
        -
    # language: pt
    #encoding: utf-8

    Funcionalidade: Gerenciar solicitações de credenciamento

    Como um admnistrador do sistema
    Quero visualizar uma solicitação de credencimento em aberto
    Para decidir se vou aceitar ou recusar tal solicitação

    Contexto

    1. Dado que as seguintes solicitações estejam pendentes:
      features/step_definitions/credenciamento_professores_steps.rb:1
      title
      due_date
      activity_type_id
      Solicitação 1
      02-Jan-2021
      Solicitação de credenciamento
      Solicitação 2
      02-Jan-2021
      Solicitação de credenciamento
      Solicitação 3
      02-Jan-2021
      Solicitação de credenciamento
      Solicitação 4
      02-Jan-2021
      Solicitação de credenciamento
      TODO (Cucumber::Pending)
      ./features/step_definitions/credenciamento_professores_steps.rb:2:in `"que as seguintes solicitações estejam pendentes:"'
      -features/gerenciar_solicitacoes_credenciamento.feature:10:in `Dado que as seguintes solicitações estejam pendentes:'
      0Dado "que as seguintes solicitações estejam pendentes:" do |table|
      -1    pending
      -2    # table.hashes.each do |row|
      
      -3    #     Activity.create!(row)
      -4# gem install syntax to get syntax highlighting
    2. E que eu estou cadastrado e logado como "Gabriel", "gabriel@admin.com", "gabriel123", "administrator", "200000000"
      features/step_definitions/credenciamento_professores_steps.rb:8
    3. E que eu estou na página de solicitações de credenciamento
      features/step_definitions/credenciamento_professores_steps.rb:30
    features/gerenciar_solicitacoes_credenciamento.feature:20

    Cenário: Aceitar uma solicitação de credenciamento

    1. Quando eu clico em "Solicitação 1"
      features/gerenciar_solicitacoes_credenciamento.feature:21
      Quando("eu clico em {string}") do |string|
      -  pending # Write code here that turns the phrase above into concrete actions
      -end
    2. Então eu devo estar na página da "Solicitação 1"
      features/step_definitions/credenciamento_professores_steps.rb:42
    3. Quando eu clico em 'Aprovar'
      features/step_definitions/credenciamento_professores_steps.rb:38
    4. Então eu devo estar na página de solicitações de credenciamento
      features/step_definitions/credenciamento_professores_steps.rb:42
    5. Quando eu desmarco os seguintes estados: Rejeitadas, Reformulação
      features/gerenciar_solicitacoes_credenciamento.feature:25
      Quando("eu desmarco os seguintes estados: Rejeitadas, Reformulação") do
      -  pending # Write code here that turns the phrase above into concrete actions
      -end
    6. E eu marco os seguintes estados: Aprovadas
      features/gerenciar_solicitacoes_credenciamento.feature:26
      Quando("eu marco os seguintes estados: Aprovadas") do
      -  pending # Write code here that turns the phrase above into concrete actions
      -end
    7. E eu aperto 'Atualizar'
      features/step_definitions/credenciamento_professores_steps.rb:63
    8. Então eu devo ver "Solicitação 1"
      features/step_definitions/credenciamento_professores_steps.rb:67
    9. Print maroto :)
        -
    features/gerenciar_solicitacoes_credenciamento.feature:30

    Cenário: Recusar uma solicitação de credenciamento

    1. Quando eu clico em "Solicitação 2"
      features/gerenciar_solicitacoes_credenciamento.feature:31
      Quando("eu clico em {string}") do |string|
      -  pending # Write code here that turns the phrase above into concrete actions
      -end
    2. Então eu devo estar na página da "Solicitação 2"
      features/step_definitions/credenciamento_professores_steps.rb:42
    3. Quando eu clico em 'Rejeitar'
      features/step_definitions/credenciamento_professores_steps.rb:38
    4. Então eu devo estar na página de solicitações de credenciamento
      features/step_definitions/credenciamento_professores_steps.rb:42
    5. Quando eu desmarco os seguintes estados: Aprovadas, Reformulação
      features/gerenciar_solicitacoes_credenciamento.feature:35
      Quando("eu desmarco os seguintes estados: Aprovadas, Reformulação") do
      -  pending # Write code here that turns the phrase above into concrete actions
      -end
    6. E eu marco os seguintes estados: Rejeitadas
      features/gerenciar_solicitacoes_credenciamento.feature:36
      Quando("eu marco os seguintes estados: Rejeitadas") do
      -  pending # Write code here that turns the phrase above into concrete actions
      -end
    7. E eu aperto 'Atualizar'
      features/step_definitions/credenciamento_professores_steps.rb:63
    8. Então eu devo ver "Solicitação 2"
      features/step_definitions/credenciamento_professores_steps.rb:67
    9. Print maroto :)
        -
    # language: pt
    #encoding: utf-8

    Funcionalidade: Disponibilizar os requisitos necessarios para credenciamento de professores

    Como administrador autenticado no sistema,
    Quero poder disponibilizar para os professores os requisitos necessários para o credenciamento
    Para que eles possam dar procedimento ao credenciamento

    Contexto

    1. Dado que eu esteja logado como administrador de email "gp@admin.com" e senha "123"
      features/requisitos_necessarios.feature:10
      Dado("que eu esteja logado como administrador de email {string} e senha {string}") do |string, string2|
      -  pending # Write code here that turns the phrase above into concrete actions
      -end
    2. E não existem requisitos selecionados na página principal
      features/requisitos_necessarios.feature:11
      Dado("não existem requisitos selecionados na página principal") do
      -  pending # Write code here that turns the phrase above into concrete actions
      -end
    3. Quando o administrador clicou no link para alterar documentos necessários para credenciamento
      features/requisitos_necessarios.feature:12
      Quando("o administrador clicou no link para alterar documentos necessários para credenciamento") do
      -  pending # Write code here that turns the phrase above into concrete actions
      -end
    features/requisitos_necessarios.feature:14

    Cenário: Os campos puderam ser selecionados

    1. Quando eu selecionar os campos
      features/requisitos_necessarios.feature:15
      Quando("eu selecionar os campos") do
      -  pending # Write code here that turns the phrase above into concrete actions
      -end
    2. E eu clicar no botão atualizar requisitos
      features/requisitos_necessarios.feature:16
      Quando("eu clicar no botão atualizar requisitos") do
      -  pending # Write code here that turns the phrase above into concrete actions
      -end
    3. Então eu devo voltar para a página principal aonde aparece meus requisitos selecionados
      features/requisitos_necessarios.feature:17
      Então("eu devo voltar para a página principal aonde aparece meus requisitos selecionados") do
      -  pending # Write code here that turns the phrase above into concrete actions
      -end
    4. Print maroto :)
        -
    features/requisitos_necessarios.feature:19

    Cenário: Não houveram mudanças feitas

    1. Quando eu não selecionar os campos
      features/requisitos_necessarios.feature:20
      Quando("eu não selecionar os campos") do
      -  pending # Write code here that turns the phrase above into concrete actions
      -end
    2. E eu clicar no botão atualizar requisitos
      features/requisitos_necessarios.feature:21
      Quando("eu clicar no botão atualizar requisitos") do
      -  pending # Write code here that turns the phrase above into concrete actions
      -end
    3. Então eu recebo uma mensagem dizendo que "não houveram mudanças"
      features/requisitos_necessarios.feature:22
      Então("eu recebo uma mensagem dizendo que {string}") do |string|
      -  pending # Write code here that turns the phrase above into concrete actions
      -end
    4. Print maroto :)
        -
    # language: pt
    #encoding: utf-8

    Funcionalidade: Testar

    features/spike.feature:5

    Cenário:

    1. Dado que eu estou cadastrado e logado como "Gabriel", "gabriel@admin.com", "gabriel123", "administrator", "200000000"
      features/step_definitions/credenciamento_professores_steps.rb:8
    2. Print maroto :)
        -
    \ No newline at end of file +25# gem install syntax to get syntax highlighting
\ No newline at end of file diff --git a/features/gerenciar_solicitacoes_credenciamento.feature b/features/gerenciar_solicitacoes_credenciamento.feature index deb85efc..15717b4c 100644 --- a/features/gerenciar_solicitacoes_credenciamento.feature +++ b/features/gerenciar_solicitacoes_credenciamento.feature @@ -8,7 +8,7 @@ Funcionalidade: Gerenciar solicitações de credenciamento Contexto: Dado que existam as seguintes solicitações: - | title | activity_type_id | + | title | activity_type | | Solicitação 1 | Solicitação de credenciamento | | Solicitação 2 | Solicitação de credenciamento | | Solicitação 3 | Solicitação de credenciamento | diff --git a/features/spike.feature b/features/spike.feature index c6d04b45..d01b8a69 100644 --- a/features/spike.feature +++ b/features/spike.feature @@ -3,4 +3,9 @@ Funcionalidade: Testar Cenário: - Dado que eu estou cadastrado e logado como "Gabriel", "gabriel@admin.com", "gabriel123", "administrator", "200000000" + Dado que existam os seguintes credenciamentos sem prazo definido: + | title | full_name | + | Credenciamento 1 | Adalberto | + | Credenciamento 2 | Mariano | + | Credenciamento 3 | Joel | + E que eu esteja cadastrado e logado como "Gabriel", "gabriel@admin.com", "gabriel123", "administrator", "200000000" diff --git a/features/step_definitions/credenciamento_professores_steps.rb b/features/step_definitions/credenciamento_professores_steps.rb index 7d12b4dc..57ad311d 100644 --- a/features/step_definitions/credenciamento_professores_steps.rb +++ b/features/step_definitions/credenciamento_professores_steps.rb @@ -11,14 +11,22 @@ def with_scope(locator) World(WithinHelpers) Dado "que existam as seguintes solicitações:" do |table| - pending - # table.hashes.each do |row| - # Activity.create!(row) - # end + table.hashes.each do |row| + type = ActivityType.find_by(title: row['activity_type_title']) + if type == nil + type = ActivityType.create!(title: row['activity_type_title']) + end + Activity.create!(title: row['title'], activity_type_id: type.id) + end end Dado "que existam os seguintes credenciamentos sem prazo definido:" do |table| - pending + type_id = ActivityType.create!(title: 'Credenciamento').id + table.hashes.each do |row| + act_id = Activity.create!(title: row['title'], activity_type_id: type_id).id + usr_id = User.create!(full_name: row['full_name'], email: row['full_name']+"@professor.com", password: row['full_name']+"123", role: "professor", registration: "000000000").id + UserActivity.create!(activity_id: act_id, user_id: usr_id) + end end Dado /^que eu esteja cadastrado e logado como (.*)$/ do |input| diff --git a/report.json b/report.json index 43b1702d..21e33f44 100644 --- a/report.json +++ b/report.json @@ -1 +1 @@ -[{"uri":"features/abrir_solicitacao_credenciamento.feature","id":"abrir-solicitação-de-credenciamento","keyword":"Funcionalidade","name":"Abrir solicitação de credenciamento","description":" Como professor autenticado no sistema,\n Quero poder abrir uma solicitação de credenciamento\n Para que eu possa ser um professor credenciado","line":4,"comments":[{"value":"#encoding: utf-8","line":2}],"elements":[{"keyword":"Contexto","name":"","description":"","line":9,"type":"background","before":[{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:14"},"result":{"status":"passed","duration":31300}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:22"},"result":{"status":"passed","duration":19200}}],"steps":[{"keyword":"Dado ","name":"que eu estou cadastrado e logado como \"Lucas\", \"lucas@professor.com\", \"lucas123\", \"professor\", \"200000000\"","line":10,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:8"},"result":{"status":"passed","duration":2212292400}},{"keyword":"E ","name":"que eu estou na página de abrir solicitação de credenciamento","line":11,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:30"},"result":{"status":"failed","error_message":"Can't find mapping from \"de abrir solicitação de credenciamento\" to a path.\nNow, go and add a mapping in /mnt/c/Users/Fontenelle/Desktop/UnB/9 semestre/Engenharia de Software/secretaria_ppgi/features/support/paths.rb (RuntimeError)\n./features/support/paths.rb:31:in `rescue in path_to'\n./features/support/paths.rb:26:in `path_to'\n./features/step_definitions/credenciamento_professores_steps.rb:31:in `/^que eu estou na página (.+)$/'\nfeatures/abrir_solicitacao_credenciamento.feature:11:in `E que eu estou na página de abrir solicitação de credenciamento'","duration":163700}}]},{"id":"abrir-solicitação-de-credenciamento;solicitação-enviada-com-sucesso","keyword":"Cenário","name":"Solicitação enviada com sucesso","description":"","line":13,"type":"scenario","steps":[{"keyword":"Quando ","name":"eu anexo o arquivo \"Formulário de Credenciamento.pdf\" no campo 'Formulario'","line":14,"match":{"location":"features/abrir_solicitacao_credenciamento.feature:14"},"result":{"status":"undefined"}},{"keyword":"E ","name":"eu anexo o arquivo \"CV Lattes.pdf\" em 'CV Lattes'","line":15,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:34"},"result":{"status":"skipped"}},{"keyword":"E ","name":"eu clico em 'Enviar'","line":16,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:38"},"result":{"status":"skipped"}},{"keyword":"Então ","name":"eu devo ver \"Solicitação enviada com sucesso\"","line":17,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:67"},"result":{"status":"skipped"}}],"after":[{"embeddings":[{"mime_type":"image/png","data":"bG9nL3NjcmVlbnNob3RzL3NvbGljaXRhb2VudmlhZGFjb21zdWNlc3NvLnBuZw=="}],"match":{"location":"features/support/hooks.rb:1"},"result":{"status":"failed","error_message":"undefined method `manage' for #\u003cCapybara::RackTest::Browser:0x00007fffcd7263a0\u003e (NoMethodError)\n./features/support/hooks.rb:22:in `add_browser_logs'\n./features/support/hooks.rb:5:in `After'","duration":367500}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:10"},"result":{"status":"passed","duration":24900}}]},{"keyword":"Contexto","name":"","description":"","line":9,"type":"background","before":[{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:14"},"result":{"status":"passed","duration":11000}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:22"},"result":{"status":"passed","duration":9200}}],"steps":[{"keyword":"Dado ","name":"que eu estou cadastrado e logado como \"Lucas\", \"lucas@professor.com\", \"lucas123\", \"professor\", \"200000000\"","line":10,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:8"},"result":{"status":"passed","duration":36932100}},{"keyword":"E ","name":"que eu estou na página de abrir solicitação de credenciamento","line":11,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:30"},"result":{"status":"failed","error_message":"Can't find mapping from \"de abrir solicitação de credenciamento\" to a path.\nNow, go and add a mapping in /mnt/c/Users/Fontenelle/Desktop/UnB/9 semestre/Engenharia de Software/secretaria_ppgi/features/support/paths.rb (RuntimeError)\n./features/support/paths.rb:31:in `rescue in path_to'\n./features/support/paths.rb:26:in `path_to'\n./features/step_definitions/credenciamento_professores_steps.rb:31:in `/^que eu estou na página (.+)$/'\nfeatures/abrir_solicitacao_credenciamento.feature:11:in `E que eu estou na página de abrir solicitação de credenciamento'","duration":125900}}]},{"id":"abrir-solicitação-de-credenciamento;solicitação-não-enviada-(campo-obrigatório-em-branco)","keyword":"Cenário","name":"Solicitação não enviada (campo obrigatório em branco)","description":"","line":19,"type":"scenario","steps":[{"keyword":"Quando ","name":"eu anexo o arquivo \"Formulário de Credenciamento.pdf\" no campo 'Formulario'","line":20,"match":{"location":"features/abrir_solicitacao_credenciamento.feature:20"},"result":{"status":"undefined"}},{"keyword":"E ","name":"eu clico em 'Enviar'","line":21,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:38"},"result":{"status":"skipped"}},{"keyword":"Então ","name":"eu devo ver \"Solicitação não enviada (campo obrigatório* em branco)\"","line":22,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:67"},"result":{"status":"skipped"}}],"after":[{"embeddings":[{"mime_type":"image/png","data":"bG9nL3NjcmVlbnNob3RzL3NvbGljaXRhb25vZW52aWFkYWNhbXBvb2JyaWdhdHJpb2VtYnJhbmNvLnBuZw=="}],"match":{"location":"features/support/hooks.rb:1"},"result":{"status":"failed","error_message":"undefined method `manage' for #\u003cCapybara::RackTest::Browser:0x00007fffce93fbb8\u003e (NoMethodError)\n./features/support/hooks.rb:22:in `add_browser_logs'\n./features/support/hooks.rb:5:in `After'","duration":1180900}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:10"},"result":{"status":"passed","duration":20800}}]}]},{"uri":"features/credenciamento_periodo.feature","id":"definir-o-prazo-de-credenciamento-dos-professores","keyword":"Funcionalidade","name":"Definir o prazo de credenciamento dos professores","description":" Como um administrador,\n para que eu possa credenciar os professores,\n eu gostaria de definir o prazo de credenciamento dos professores","line":4,"comments":[{"value":"#encoding: utf-8","line":2}],"elements":[{"keyword":"Contexto","name":"","description":"","line":9,"type":"background","before":[{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:14"},"result":{"status":"passed","duration":11000}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:22"},"result":{"status":"passed","duration":8700}}],"steps":[{"keyword":"Dado ","name":"que eu esteja autenticado como usuario \"admin\"","line":10,"match":{"location":"features/credenciamento_periodo.feature:10"},"result":{"status":"undefined"}},{"keyword":"E ","name":"que esteja na página de credenciamento","line":11,"match":{"location":"features/credenciamento_periodo.feature:11"},"result":{"status":"undefined"}}]},{"id":"definir-o-prazo-de-credenciamento-dos-professores;definir-prazo-de-credenciamento-sem-data","keyword":"Cenário","name":"Definir prazo de credenciamento sem data","description":"","line":13,"type":"scenario","steps":[{"keyword":"Quando ","name":"eu aperto o botão \"Definir prazo de credenciamento\"","line":14,"match":{"location":"features/credenciamento_periodo.feature:14"},"result":{"status":"undefined"}},{"keyword":"E ","name":"eu aperto o botão \"Salvar período\"","line":15,"match":{"location":"features/credenciamento_periodo.feature:15"},"result":{"status":"undefined"}},{"keyword":"Então ","name":"eu espero ver a mensagem \"Insira uma data de início e uma data de término válidas.\"","line":16,"match":{"location":"features/credenciamento_periodo.feature:16"},"result":{"status":"undefined"}}],"after":[{"embeddings":[{"mime_type":"image/png","data":"bG9nL3NjcmVlbnNob3RzL2RlZmluaXJwcmF6b2RlY3JlZGVuY2lhbWVudG9zZW1kYXRhLnBuZw=="}],"match":{"location":"features/support/hooks.rb:1"},"result":{"status":"passed","duration":217700}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:10"},"result":{"status":"passed","duration":34100}}]},{"keyword":"Contexto","name":"","description":"","line":9,"type":"background","before":[{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:14"},"result":{"status":"passed","duration":12100}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:22"},"result":{"status":"passed","duration":21000}}],"steps":[{"keyword":"Dado ","name":"que eu esteja autenticado como usuario \"admin\"","line":10,"match":{"location":"features/credenciamento_periodo.feature:10"},"result":{"status":"undefined"}},{"keyword":"E ","name":"que esteja na página de credenciamento","line":11,"match":{"location":"features/credenciamento_periodo.feature:11"},"result":{"status":"undefined"}}]},{"id":"definir-o-prazo-de-credenciamento-dos-professores;definir-prazo-de-credenciamento-com-data","keyword":"Cenário","name":"Definir prazo de credenciamento com data","description":"","line":18,"type":"scenario","steps":[{"keyword":"Quando ","name":"eu aperto o botão \"Definir prazo de credenciamento\"","line":19,"match":{"location":"features/credenciamento_periodo.feature:19"},"result":{"status":"undefined"}},{"keyword":"Quando ","name":"eu adiciono um valor \"Início\" para \"Data de Início\"","line":20,"match":{"location":"features/credenciamento_periodo.feature:20"},"result":{"status":"undefined"}},{"keyword":"E ","name":"eu adiciono um valor \"Término\" para \"Data de Término\"","line":21,"match":{"location":"features/credenciamento_periodo.feature:21"},"result":{"status":"undefined"}},{"keyword":"E ","name":"eu aperto o botão \"Salvar período\"","line":22,"match":{"location":"features/credenciamento_periodo.feature:22"},"result":{"status":"undefined"}},{"keyword":"Então ","name":"eu espero ver a mensagem \"Prazo cadastrado com sucesso.\"","line":23,"match":{"location":"features/credenciamento_periodo.feature:23"},"result":{"status":"undefined"}}],"after":[{"embeddings":[{"mime_type":"image/png","data":"bG9nL3NjcmVlbnNob3RzL2RlZmluaXJwcmF6b2RlY3JlZGVuY2lhbWVudG9jb21kYXRhLnBuZw=="}],"match":{"location":"features/support/hooks.rb:1"},"result":{"status":"passed","duration":219300}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:10"},"result":{"status":"passed","duration":23100}}]}]},{"uri":"features/gerenciar_solicitacoes_credenciamento.feature","id":"gerenciar-solicitações-de-credenciamento","keyword":"Funcionalidade","name":"Gerenciar solicitações de credenciamento","description":" Como um admnistrador do sistema\n Quero visualizar uma solicitação de credencimento em aberto\n Para decidir se vou aceitar ou recusar tal solicitação","line":4,"comments":[{"value":"#encoding: utf-8","line":2}],"elements":[{"keyword":"Contexto","name":"","description":"","line":9,"type":"background","before":[{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:14"},"result":{"status":"passed","duration":12900}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:22"},"result":{"status":"passed","duration":9800}}],"steps":[{"keyword":"Dado ","name":"que as seguintes solicitações estejam pendentes:","line":10,"rows":[{"cells":["title","due_date","activity_type_id"]},{"cells":["Solicitação 1","02-Jan-2021","Solicitação de credenciamento"]},{"cells":["Solicitação 2","02-Jan-2021","Solicitação de credenciamento"]},{"cells":["Solicitação 3","02-Jan-2021","Solicitação de credenciamento"]},{"cells":["Solicitação 4","02-Jan-2021","Solicitação de credenciamento"]}],"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:1"},"result":{"status":"pending","error_message":"TODO (Cucumber::Pending)\n./features/step_definitions/credenciamento_professores_steps.rb:2:in `\"que as seguintes solicitações estejam pendentes:\"'\nfeatures/gerenciar_solicitacoes_credenciamento.feature:10:in `Dado que as seguintes solicitações estejam pendentes:'","duration":496800}},{"keyword":"E ","name":"que eu estou cadastrado e logado como \"Gabriel\", \"gabriel@admin.com\", \"gabriel123\", \"administrator\", \"200000000\"","line":17,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:8"},"result":{"status":"skipped"}},{"keyword":"E ","name":"que eu estou na página de solicitações de credenciamento","line":18,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:30"},"result":{"status":"skipped"}}]},{"id":"gerenciar-solicitações-de-credenciamento;aceitar-uma-solicitação-de-credenciamento","keyword":"Cenário","name":"Aceitar uma solicitação de credenciamento","description":"","line":20,"type":"scenario","steps":[{"keyword":"Quando ","name":"eu clico em \"Solicitação 1\"","line":21,"match":{"location":"features/gerenciar_solicitacoes_credenciamento.feature:21"},"result":{"status":"undefined"}},{"keyword":"Então ","name":"eu devo estar na página da \"Solicitação 1\"","line":22,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:42"},"result":{"status":"skipped"}},{"keyword":"Quando ","name":"eu clico em 'Aprovar'","line":23,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:38"},"result":{"status":"skipped"}},{"keyword":"Então ","name":"eu devo estar na página de solicitações de credenciamento","line":24,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:42"},"result":{"status":"skipped"}},{"keyword":"Quando ","name":"eu desmarco os seguintes estados: Rejeitadas, Reformulação","line":25,"match":{"location":"features/gerenciar_solicitacoes_credenciamento.feature:25"},"result":{"status":"undefined"}},{"keyword":"E ","name":"eu marco os seguintes estados: Aprovadas","line":26,"match":{"location":"features/gerenciar_solicitacoes_credenciamento.feature:26"},"result":{"status":"undefined"}},{"keyword":"E ","name":"eu aperto 'Atualizar'","line":27,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:63"},"result":{"status":"skipped"}},{"keyword":"Então ","name":"eu devo ver \"Solicitação 1\"","line":28,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:67"},"result":{"status":"skipped"}}],"after":[{"embeddings":[{"mime_type":"image/png","data":"bG9nL3NjcmVlbnNob3RzL2FjZWl0YXJ1bWFzb2xpY2l0YW9kZWNyZWRlbmNpYW1lbnRvLnBuZw=="}],"match":{"location":"features/support/hooks.rb:1"},"result":{"status":"passed","duration":220200}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:10"},"result":{"status":"passed","duration":25200}}]},{"keyword":"Contexto","name":"","description":"","line":9,"type":"background","before":[{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:14"},"result":{"status":"passed","duration":15900}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:22"},"result":{"status":"passed","duration":12000}}],"steps":[{"keyword":"Dado ","name":"que as seguintes solicitações estejam pendentes:","line":10,"rows":[{"cells":["title","due_date","activity_type_id"]},{"cells":["Solicitação 1","02-Jan-2021","Solicitação de credenciamento"]},{"cells":["Solicitação 2","02-Jan-2021","Solicitação de credenciamento"]},{"cells":["Solicitação 3","02-Jan-2021","Solicitação de credenciamento"]},{"cells":["Solicitação 4","02-Jan-2021","Solicitação de credenciamento"]}],"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:1"},"result":{"status":"pending","error_message":"TODO (Cucumber::Pending)\n./features/step_definitions/credenciamento_professores_steps.rb:2:in `\"que as seguintes solicitações estejam pendentes:\"'\nfeatures/gerenciar_solicitacoes_credenciamento.feature:10:in `Dado que as seguintes solicitações estejam pendentes:'","duration":147300}},{"keyword":"E ","name":"que eu estou cadastrado e logado como \"Gabriel\", \"gabriel@admin.com\", \"gabriel123\", \"administrator\", \"200000000\"","line":17,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:8"},"result":{"status":"skipped"}},{"keyword":"E ","name":"que eu estou na página de solicitações de credenciamento","line":18,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:30"},"result":{"status":"skipped"}}]},{"id":"gerenciar-solicitações-de-credenciamento;recusar-uma-solicitação-de-credenciamento","keyword":"Cenário","name":"Recusar uma solicitação de credenciamento","description":"","line":30,"type":"scenario","steps":[{"keyword":"Quando ","name":"eu clico em \"Solicitação 2\"","line":31,"match":{"location":"features/gerenciar_solicitacoes_credenciamento.feature:31"},"result":{"status":"undefined"}},{"keyword":"Então ","name":"eu devo estar na página da \"Solicitação 2\"","line":32,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:42"},"result":{"status":"skipped"}},{"keyword":"Quando ","name":"eu clico em 'Rejeitar'","line":33,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:38"},"result":{"status":"skipped"}},{"keyword":"Então ","name":"eu devo estar na página de solicitações de credenciamento","line":34,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:42"},"result":{"status":"skipped"}},{"keyword":"Quando ","name":"eu desmarco os seguintes estados: Aprovadas, Reformulação","line":35,"match":{"location":"features/gerenciar_solicitacoes_credenciamento.feature:35"},"result":{"status":"undefined"}},{"keyword":"E ","name":"eu marco os seguintes estados: Rejeitadas","line":36,"match":{"location":"features/gerenciar_solicitacoes_credenciamento.feature:36"},"result":{"status":"undefined"}},{"keyword":"E ","name":"eu aperto 'Atualizar'","line":37,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:63"},"result":{"status":"skipped"}},{"keyword":"Então ","name":"eu devo ver \"Solicitação 2\"","line":38,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:67"},"result":{"status":"skipped"}}],"after":[{"embeddings":[{"mime_type":"image/png","data":"bG9nL3NjcmVlbnNob3RzL3JlY3VzYXJ1bWFzb2xpY2l0YW9kZWNyZWRlbmNpYW1lbnRvLnBuZw=="}],"match":{"location":"features/support/hooks.rb:1"},"result":{"status":"passed","duration":191900}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:10"},"result":{"status":"passed","duration":25600}}]}]},{"uri":"features/requisitos_necessarios.feature","id":"disponibilizar-os-requisitos-necessarios-para-credenciamento-de-professores","keyword":"Funcionalidade","name":"Disponibilizar os requisitos necessarios para credenciamento de professores","description":" Como administrador autenticado no sistema,\n Quero poder disponibilizar para os professores os requisitos necessários para o credenciamento\n Para que eles possam dar procedimento ao credenciamento","line":4,"comments":[{"value":"#encoding: utf-8","line":2}],"elements":[{"keyword":"Contexto","name":"","description":"","line":9,"type":"background","before":[{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:14"},"result":{"status":"passed","duration":12000}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:22"},"result":{"status":"passed","duration":12700}}],"steps":[{"keyword":"Dado ","name":"que eu esteja logado como administrador de email \"gp@admin.com\" e senha \"123\"","line":10,"match":{"location":"features/requisitos_necessarios.feature:10"},"result":{"status":"undefined"}},{"keyword":"E ","name":"não existem requisitos selecionados na página principal","line":11,"match":{"location":"features/requisitos_necessarios.feature:11"},"result":{"status":"undefined"}},{"keyword":"Quando ","name":"o administrador clicou no link para alterar documentos necessários para credenciamento","line":12,"match":{"location":"features/requisitos_necessarios.feature:12"},"result":{"status":"undefined"}}]},{"id":"disponibilizar-os-requisitos-necessarios-para-credenciamento-de-professores;os-campos-puderam-ser-selecionados","keyword":"Cenário","name":"Os campos puderam ser selecionados","description":"","line":14,"type":"scenario","steps":[{"keyword":"Quando ","name":"eu selecionar os campos","line":15,"match":{"location":"features/requisitos_necessarios.feature:15"},"result":{"status":"undefined"}},{"keyword":"E ","name":"eu clicar no botão atualizar requisitos","line":16,"match":{"location":"features/requisitos_necessarios.feature:16"},"result":{"status":"undefined"}},{"keyword":"Então ","name":"eu devo voltar para a página principal aonde aparece meus requisitos selecionados","line":17,"match":{"location":"features/requisitos_necessarios.feature:17"},"result":{"status":"undefined"}}],"after":[{"embeddings":[{"mime_type":"image/png","data":"bG9nL3NjcmVlbnNob3RzL29zY2FtcG9zcHVkZXJhbXNlcnNlbGVjaW9uYWRvcy5wbmc="}],"match":{"location":"features/support/hooks.rb:1"},"result":{"status":"passed","duration":2373100}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:10"},"result":{"status":"passed","duration":40300}}]},{"keyword":"Contexto","name":"","description":"","line":9,"type":"background","before":[{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:14"},"result":{"status":"passed","duration":15100}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:22"},"result":{"status":"passed","duration":9600}}],"steps":[{"keyword":"Dado ","name":"que eu esteja logado como administrador de email \"gp@admin.com\" e senha \"123\"","line":10,"match":{"location":"features/requisitos_necessarios.feature:10"},"result":{"status":"undefined"}},{"keyword":"E ","name":"não existem requisitos selecionados na página principal","line":11,"match":{"location":"features/requisitos_necessarios.feature:11"},"result":{"status":"undefined"}},{"keyword":"Quando ","name":"o administrador clicou no link para alterar documentos necessários para credenciamento","line":12,"match":{"location":"features/requisitos_necessarios.feature:12"},"result":{"status":"undefined"}}]},{"id":"disponibilizar-os-requisitos-necessarios-para-credenciamento-de-professores;não-houveram-mudanças-feitas","keyword":"Cenário","name":"Não houveram mudanças feitas","description":"","line":19,"type":"scenario","steps":[{"keyword":"Quando ","name":"eu não selecionar os campos","line":20,"match":{"location":"features/requisitos_necessarios.feature:20"},"result":{"status":"undefined"}},{"keyword":"E ","name":"eu clicar no botão atualizar requisitos","line":21,"match":{"location":"features/requisitos_necessarios.feature:21"},"result":{"status":"undefined"}},{"keyword":"Então ","name":"eu recebo uma mensagem dizendo que \"não houveram mudanças\"","line":22,"match":{"location":"features/requisitos_necessarios.feature:22"},"result":{"status":"undefined"}}],"after":[{"embeddings":[{"mime_type":"image/png","data":"bG9nL3NjcmVlbnNob3RzL25vaG91dmVyYW1tdWRhbmFzZmVpdGFzLnBuZw=="}],"match":{"location":"features/support/hooks.rb:1"},"result":{"status":"passed","duration":214700}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:10"},"result":{"status":"passed","duration":18600}}]}]},{"uri":"features/spike.feature","id":"testar","keyword":"Funcionalidade","name":"Testar","description":"","line":4,"comments":[{"value":"#encoding: utf-8","line":2}],"elements":[{"id":"testar;","keyword":"Cenário","name":"","description":"","line":5,"type":"scenario","before":[{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:14"},"result":{"status":"passed","duration":18600}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:22"},"result":{"status":"passed","duration":13400}}],"steps":[{"keyword":"Dado ","name":"que eu estou cadastrado e logado como \"Gabriel\", \"gabriel@admin.com\", \"gabriel123\", \"administrator\", \"200000000\"","line":6,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:8"},"result":{"status":"passed","duration":39523000}}],"after":[{"embeddings":[{"mime_type":"image/png","data":"bG9nL3NjcmVlbnNob3RzLy5wbmc="}],"match":{"location":"features/support/hooks.rb:1"},"result":{"status":"passed","duration":223700}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:10"},"result":{"status":"passed","duration":19100}}]}]}] \ No newline at end of file +[{"uri":"features/spike.feature","id":"testar","keyword":"Funcionalidade","name":"Testar","description":"","line":4,"comments":[{"value":"#encoding: utf-8","line":2}],"elements":[{"id":"testar;","keyword":"Cenário","name":"","description":"","line":5,"type":"scenario","before":[{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:14"},"result":{"status":"passed","duration":18200}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:22"},"result":{"status":"passed","duration":10500}}],"steps":[{"keyword":"Dado ","name":"que existam os seguintes credenciamentos sem prazo definido:","line":6,"rows":[{"cells":["title","full_name"]},{"cells":["Credenciamento 1","Adalberto"]},{"cells":["Credenciamento 2","Mariano"]},{"cells":["Credenciamento 3","Joel"]}],"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:23"},"result":{"status":"failed","error_message":"Validation failed: User must exist (ActiveRecord::RecordInvalid)\n./features/step_definitions/credenciamento_professores_steps.rb:28:in `block (2 levels) in \u003cmain\u003e'\n./features/step_definitions/credenciamento_professores_steps.rb:25:in `each'\n./features/step_definitions/credenciamento_professores_steps.rb:25:in `\"que existam os seguintes credenciamentos sem prazo definido:\"'\nfeatures/spike.feature:6:in `Dado que existam os seguintes credenciamentos sem prazo definido:'","duration":66918400}},{"keyword":"E ","name":"que eu esteja cadastrado e logado como \"Gabriel\", \"gabriel@admin.com\", \"gabriel123\", \"administrator\", \"200000000\"","line":11,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:32"},"result":{"status":"skipped"}}],"after":[{"embeddings":[{"mime_type":"image/png","data":"bG9nL3NjcmVlbnNob3RzLy5wbmc="}],"match":{"location":"features/support/hooks.rb:1"},"result":{"status":"failed","error_message":"undefined method `manage' for #\u003cCapybara::RackTest::Browser:0x00007fffd5be5c58\u003e (NoMethodError)\n./features/support/hooks.rb:22:in `add_browser_logs'\n./features/support/hooks.rb:5:in `After'","duration":390200}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:10"},"result":{"status":"passed","duration":24100}}]}]}] \ No newline at end of file From 494a6e365ae365d1e3abfd0b13ee78d5dee8d310 Mon Sep 17 00:00:00 2001 From: ngsylar Date: Wed, 11 Nov 2020 02:16:13 -0300 Subject: [PATCH 15/82] minor changes variable names --- features/credenciamento_periodo.feature | 8 ++++---- features/gerenciar_solicitacoes_credenciamento.feature | 2 +- .../step_definitions/credenciamento_professores_steps.rb | 4 ++-- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/features/credenciamento_periodo.feature b/features/credenciamento_periodo.feature index 2a320233..4535551e 100644 --- a/features/credenciamento_periodo.feature +++ b/features/credenciamento_periodo.feature @@ -8,10 +8,10 @@ Funcionalidade: Definir o prazo de credenciamento dos professores Contexto: Dado que existam os seguintes credenciamentos sem prazo definido: - | title | full_name | - | Credenciamento 1 | Adalberto | - | Credenciamento 2 | Mariano | - | Credenciamento 3 | Joel | + | activity_title | user_full_name | + | Credenciamento 1 | Adalberto | + | Credenciamento 2 | Mariano | + | Credenciamento 3 | Joel | E que eu esteja cadastrado e logado como "Aécio", "aecio@admin.com", "aecio123", "administrator", "200000000" E que esteja na página de prazos de credenciamento diff --git a/features/gerenciar_solicitacoes_credenciamento.feature b/features/gerenciar_solicitacoes_credenciamento.feature index 15717b4c..4bd19949 100644 --- a/features/gerenciar_solicitacoes_credenciamento.feature +++ b/features/gerenciar_solicitacoes_credenciamento.feature @@ -8,7 +8,7 @@ Funcionalidade: Gerenciar solicitações de credenciamento Contexto: Dado que existam as seguintes solicitações: - | title | activity_type | + | title | activity_type_title | | Solicitação 1 | Solicitação de credenciamento | | Solicitação 2 | Solicitação de credenciamento | | Solicitação 3 | Solicitação de credenciamento | diff --git a/features/step_definitions/credenciamento_professores_steps.rb b/features/step_definitions/credenciamento_professores_steps.rb index 57ad311d..5ff79e50 100644 --- a/features/step_definitions/credenciamento_professores_steps.rb +++ b/features/step_definitions/credenciamento_professores_steps.rb @@ -23,8 +23,8 @@ def with_scope(locator) Dado "que existam os seguintes credenciamentos sem prazo definido:" do |table| type_id = ActivityType.create!(title: 'Credenciamento').id table.hashes.each do |row| - act_id = Activity.create!(title: row['title'], activity_type_id: type_id).id - usr_id = User.create!(full_name: row['full_name'], email: row['full_name']+"@professor.com", password: row['full_name']+"123", role: "professor", registration: "000000000").id + act_id = Activity.create!(title: row['activity_title'], activity_type_id: type_id).id + usr_id = User.create!(full_name: row['user_full_name'], email: row['user_full_name']+"@professor.com", password: row['user_full_name']+"123", role: "professor", registration: "000000000").id UserActivity.create!(activity_id: act_id, user_id: usr_id) end end From cd681dc16fe7849ac8452650887a8ef6a9a0aaa8 Mon Sep 17 00:00:00 2001 From: ngsylar Date: Thu, 12 Nov 2020 00:30:46 -0300 Subject: [PATCH 16/82] Scaffold and ActiveStorage --- Gemfile | 1 - Gemfile.lock | 254 ++--- app/assets/javascripts/activities.coffee | 3 + app/assets/javascripts/activity_types.coffee | 3 + app/assets/javascripts/user_activities.coffee | 3 + app/assets/stylesheets/activities.scss | 3 + app/assets/stylesheets/activity_types.scss | 3 + app/assets/stylesheets/scaffolds.scss | 84 ++ app/assets/stylesheets/user_activities.scss | 3 + app/controllers/activities_controller.rb | 74 ++ app/controllers/activity_types_controller.rb | 74 ++ app/controllers/home_controller.rb | 2 +- app/controllers/user_activities_controller.rb | 74 ++ app/helpers/activities_helper.rb | 2 + app/helpers/activity_types_helper.rb | 2 + app/helpers/user_activities_helper.rb | 2 + app/models/activity.rb | 3 +- app/models/user_activity.rb | 4 +- app/views/activities/_activity.json.jbuilder | 2 + app/views/activities/_form.html.erb | 42 + app/views/activities/edit.html.erb | 6 + app/views/activities/index.html.erb | 35 + app/views/activities/index.json.jbuilder | 1 + app/views/activities/new.html.erb | 5 + app/views/activities/show.html.erb | 29 + app/views/activities/show.json.jbuilder | 1 + .../_activity_type.json.jbuilder | 2 + app/views/activity_types/_form.html.erb | 22 + app/views/activity_types/edit.html.erb | 6 + app/views/activity_types/index.html.erb | 27 + app/views/activity_types/index.json.jbuilder | 1 + app/views/activity_types/new.html.erb | 5 + app/views/activity_types/show.html.erb | 9 + app/views/activity_types/show.json.jbuilder | 1 + app/views/home/index.html.erb | 1 - app/views/user_activities/_form.html.erb | 37 + .../_user_activity.json.jbuilder | 2 + app/views/user_activities/edit.html.erb | 6 + app/views/user_activities/index.html.erb | 33 + app/views/user_activities/index.json.jbuilder | 1 + app/views/user_activities/new.html.erb | 5 + app/views/user_activities/show.html.erb | 24 + app/views/user_activities/show.json.jbuilder | 1 + config/routes.rb | 3 + .../20201111004340_create_activities.rb | 21 - ...> 20201112014423_create_activity_types.rb} | 2 + ...te_active_storage_tables.active_storage.rb | 27 + .../20201112030653_create_activities.rb | 13 + .../20201112030843_create_user_activities.rb | 13 + db/schema.rb | 32 +- db/seeds.rb | 1 + features.html | 878 +++++++++--------- features/spike.feature | 12 +- features/support/hooks.rb | 2 +- report.json | 2 +- spec/helpers/activities_helper_spec.rb | 15 + spec/helpers/activity_types_helper_spec.rb | 15 + spec/helpers/user_activities_helper_spec.rb | 15 + spec/models/activity_spec.rb | 5 + spec/models/user_activity_spec.rb | 5 + spec/rails_helper.rb | 9 +- spec/requests/activities_spec.rb | 129 +++ spec/requests/activity_types_spec.rb | 129 +++ spec/requests/user_activities_spec.rb | 129 +++ spec/routing/activities_routing_spec.rb | 38 + spec/routing/activity_types_routing_spec.rb | 38 + spec/routing/user_activities_routing_spec.rb | 38 + spec/spike_spec.rb | 7 + spec/views/activities/edit.html.erb_spec.rb | 27 + spec/views/activities/index.html.erb_spec.rb | 28 + spec/views/activities/new.html.erb_spec.rb | 27 + spec/views/activities/show.html.erb_spec.rb | 20 + .../activity_types/edit.html.erb_spec.rb | 18 + .../activity_types/index.html.erb_spec.rb | 19 + .../views/activity_types/new.html.erb_spec.rb | 18 + .../activity_types/show.html.erb_spec.rb | 14 + .../user_activities/edit.html.erb_spec.rb | 27 + .../user_activities/index.html.erb_spec.rb | 28 + .../user_activities/new.html.erb_spec.rb | 27 + .../user_activities/show.html.erb_spec.rb | 20 + 80 files changed, 2158 insertions(+), 591 deletions(-) create mode 100644 app/assets/javascripts/activities.coffee create mode 100644 app/assets/javascripts/activity_types.coffee create mode 100644 app/assets/javascripts/user_activities.coffee create mode 100644 app/assets/stylesheets/activities.scss create mode 100644 app/assets/stylesheets/activity_types.scss create mode 100644 app/assets/stylesheets/scaffolds.scss create mode 100644 app/assets/stylesheets/user_activities.scss create mode 100644 app/controllers/activities_controller.rb create mode 100644 app/controllers/activity_types_controller.rb create mode 100644 app/controllers/user_activities_controller.rb create mode 100644 app/helpers/activities_helper.rb create mode 100644 app/helpers/activity_types_helper.rb create mode 100644 app/helpers/user_activities_helper.rb create mode 100644 app/views/activities/_activity.json.jbuilder create mode 100644 app/views/activities/_form.html.erb create mode 100644 app/views/activities/edit.html.erb create mode 100644 app/views/activities/index.html.erb create mode 100644 app/views/activities/index.json.jbuilder create mode 100644 app/views/activities/new.html.erb create mode 100644 app/views/activities/show.html.erb create mode 100644 app/views/activities/show.json.jbuilder create mode 100644 app/views/activity_types/_activity_type.json.jbuilder create mode 100644 app/views/activity_types/_form.html.erb create mode 100644 app/views/activity_types/edit.html.erb create mode 100644 app/views/activity_types/index.html.erb create mode 100644 app/views/activity_types/index.json.jbuilder create mode 100644 app/views/activity_types/new.html.erb create mode 100644 app/views/activity_types/show.html.erb create mode 100644 app/views/activity_types/show.json.jbuilder create mode 100644 app/views/user_activities/_form.html.erb create mode 100644 app/views/user_activities/_user_activity.json.jbuilder create mode 100644 app/views/user_activities/edit.html.erb create mode 100644 app/views/user_activities/index.html.erb create mode 100644 app/views/user_activities/index.json.jbuilder create mode 100644 app/views/user_activities/new.html.erb create mode 100644 app/views/user_activities/show.html.erb create mode 100644 app/views/user_activities/show.json.jbuilder delete mode 100644 db/migrate/20201111004340_create_activities.rb rename db/migrate/{20201111004338_create_activity_types.rb => 20201112014423_create_activity_types.rb} (88%) create mode 100644 db/migrate/20201112022823_create_active_storage_tables.active_storage.rb create mode 100644 db/migrate/20201112030653_create_activities.rb create mode 100644 db/migrate/20201112030843_create_user_activities.rb create mode 100644 spec/helpers/activities_helper_spec.rb create mode 100644 spec/helpers/activity_types_helper_spec.rb create mode 100644 spec/helpers/user_activities_helper_spec.rb create mode 100644 spec/models/activity_spec.rb create mode 100644 spec/models/user_activity_spec.rb create mode 100644 spec/requests/activities_spec.rb create mode 100644 spec/requests/activity_types_spec.rb create mode 100644 spec/requests/user_activities_spec.rb create mode 100644 spec/routing/activities_routing_spec.rb create mode 100644 spec/routing/activity_types_routing_spec.rb create mode 100644 spec/routing/user_activities_routing_spec.rb create mode 100644 spec/spike_spec.rb create mode 100644 spec/views/activities/edit.html.erb_spec.rb create mode 100644 spec/views/activities/index.html.erb_spec.rb create mode 100644 spec/views/activities/new.html.erb_spec.rb create mode 100644 spec/views/activities/show.html.erb_spec.rb create mode 100644 spec/views/activity_types/edit.html.erb_spec.rb create mode 100644 spec/views/activity_types/index.html.erb_spec.rb create mode 100644 spec/views/activity_types/new.html.erb_spec.rb create mode 100644 spec/views/activity_types/show.html.erb_spec.rb create mode 100644 spec/views/user_activities/edit.html.erb_spec.rb create mode 100644 spec/views/user_activities/index.html.erb_spec.rb create mode 100644 spec/views/user_activities/new.html.erb_spec.rb create mode 100644 spec/views/user_activities/show.html.erb_spec.rb diff --git a/Gemfile b/Gemfile index d347e85b..c955677d 100644 --- a/Gemfile +++ b/Gemfile @@ -42,7 +42,6 @@ group :development, :test do # Call 'byebug' anywhere in the code to stop execution and get a debugger console gem 'byebug', platforms: [:mri, :mingw, :x64_mingw] gem 'rspec-rails' - end group :development do diff --git a/Gemfile.lock b/Gemfile.lock index b6223e46..0be772a3 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,43 +1,43 @@ GEM remote: https://rubygems.org/ specs: - actioncable (5.2.3) - actionpack (= 5.2.3) + actioncable (5.2.4.4) + actionpack (= 5.2.4.4) nio4r (~> 2.0) websocket-driver (>= 0.6.1) - actionmailer (5.2.3) - actionpack (= 5.2.3) - actionview (= 5.2.3) - activejob (= 5.2.3) + actionmailer (5.2.4.4) + actionpack (= 5.2.4.4) + actionview (= 5.2.4.4) + activejob (= 5.2.4.4) mail (~> 2.5, >= 2.5.4) rails-dom-testing (~> 2.0) - actionpack (5.2.3) - actionview (= 5.2.3) - activesupport (= 5.2.3) - rack (~> 2.0) + actionpack (5.2.4.4) + actionview (= 5.2.4.4) + activesupport (= 5.2.4.4) + rack (~> 2.0, >= 2.0.8) rack-test (>= 0.6.3) rails-dom-testing (~> 2.0) rails-html-sanitizer (~> 1.0, >= 1.0.2) - actionview (5.2.3) - activesupport (= 5.2.3) + actionview (5.2.4.4) + activesupport (= 5.2.4.4) builder (~> 3.1) erubi (~> 1.4) rails-dom-testing (~> 2.0) rails-html-sanitizer (~> 1.0, >= 1.0.3) - activejob (5.2.3) - activesupport (= 5.2.3) + activejob (5.2.4.4) + activesupport (= 5.2.4.4) globalid (>= 0.3.6) - activemodel (5.2.3) - activesupport (= 5.2.3) - activerecord (5.2.3) - activemodel (= 5.2.3) - activesupport (= 5.2.3) + activemodel (5.2.4.4) + activesupport (= 5.2.4.4) + activerecord (5.2.4.4) + activemodel (= 5.2.4.4) + activesupport (= 5.2.4.4) arel (>= 9.0) - activestorage (5.2.3) - actionpack (= 5.2.3) - activerecord (= 5.2.3) + activestorage (5.2.4.4) + actionpack (= 5.2.4.4) + activerecord (= 5.2.4.4) marcel (~> 0.3.1) - activesupport (5.2.3) + activesupport (5.2.4.4) concurrent-ruby (~> 1.0, >= 1.0.2) i18n (>= 0.7, < 2) minitest (~> 5.1) @@ -45,14 +45,13 @@ GEM addressable (2.7.0) public_suffix (>= 2.0.2, < 5.0) arel (9.0.0) - backports (3.15.0) - bcrypt (3.1.13) + bcrypt (3.1.16) bindex (0.8.1) - bootsnap (1.4.5) + bootsnap (1.5.1) msgpack (~> 1.0) - builder (3.2.3) - byebug (11.0.1) - capybara (3.29.0) + builder (3.2.4) + byebug (11.1.3) + capybara (3.33.0) addressable mini_mime (>= 0.1.3) nokogiri (~> 1.8) @@ -68,135 +67,154 @@ GEM coffee-script-source execjs coffee-script-source (1.12.2) - concurrent-ruby (1.1.5) - crass (1.0.5) - cucumber (3.1.2) - builder (>= 2.1.2) - cucumber-core (~> 3.2.0) - cucumber-expressions (~> 6.0.1) - cucumber-wire (~> 0.0.1) - diff-lcs (~> 1.3) - gherkin (~> 5.1.0) - multi_json (>= 1.7.5, < 2.0) - multi_test (>= 0.1.2) - cucumber-core (3.2.1) - backports (>= 3.8.0) - cucumber-tag_expressions (~> 1.1.0) - gherkin (~> 5.0) - cucumber-expressions (6.0.1) - cucumber-rails (2.0.0) - capybara (>= 2.12, < 4) - cucumber (>= 3.0.2, < 4) - mime-types (>= 2.0, < 4) + concurrent-ruby (1.1.7) + crass (1.0.6) + cucumber (5.2.0) + builder (~> 3.2, >= 3.2.4) + cucumber-core (~> 8.0, >= 8.0.1) + cucumber-create-meta (~> 2.0, >= 2.0.2) + cucumber-cucumber-expressions (~> 10.3, >= 10.3.0) + cucumber-gherkin (~> 15.0, >= 15.0.2) + cucumber-html-formatter (~> 9.0, >= 9.0.0) + cucumber-messages (~> 13.1, >= 13.1.0) + cucumber-wire (~> 4.0, >= 4.0.1) + diff-lcs (~> 1.4, >= 1.4.4) + multi_test (~> 0.1, >= 0.1.2) + sys-uname (~> 1.2, >= 1.2.1) + cucumber-core (8.0.1) + cucumber-gherkin (~> 15.0, >= 15.0.2) + cucumber-messages (~> 13.0, >= 13.0.1) + cucumber-tag-expressions (~> 2.0, >= 2.0.4) + cucumber-create-meta (2.0.4) + cucumber-messages (~> 13.1, >= 13.1.0) + sys-uname (~> 1.2, >= 1.2.1) + cucumber-cucumber-expressions (10.3.0) + cucumber-gherkin (15.0.2) + cucumber-messages (~> 13.0, >= 13.0.1) + cucumber-html-formatter (9.0.0) + cucumber-messages (~> 13.0, >= 13.0.1) + cucumber-messages (13.1.0) + protobuf-cucumber (~> 3.10, >= 3.10.8) + cucumber-rails (2.2.0) + capybara (>= 2.18, < 4) + cucumber (>= 3.0.2, < 6) + mime-types (~> 3.2) nokogiri (~> 1.8) - railties (>= 4.2, < 7) + rails (>= 5.0, < 7) cucumber-rails-training-wheels (1.0.0) cucumber-rails (>= 1.1.1) - cucumber-tag_expressions (1.1.1) - cucumber-wire (0.0.1) - database_cleaner (1.7.0) - devise (4.7.1) + cucumber-tag-expressions (2.0.4) + cucumber-wire (4.0.1) + cucumber-core (~> 8.0, >= 8.0.1) + cucumber-cucumber-expressions (~> 10.3, >= 10.3.0) + cucumber-messages (~> 13.0, >= 13.0.1) + database_cleaner (1.8.5) + devise (4.7.3) bcrypt (~> 3.0) orm_adapter (~> 0.1) railties (>= 4.1.0) responders warden (~> 1.2.3) - diff-lcs (1.3) + diff-lcs (1.4.4) erubi (1.9.0) execjs (2.7.0) - ffi (1.11.1) - gherkin (5.1.0) + ffi (1.13.1) globalid (0.4.2) activesupport (>= 4.2.0) - i18n (1.7.0) + i18n (1.8.5) concurrent-ruby (~> 1.0) - jbuilder (2.9.1) - activesupport (>= 4.2.0) + jbuilder (2.10.1) + activesupport (>= 5.0.0) launchy (2.5.0) addressable (~> 2.7) listen (3.1.5) rb-fsevent (~> 0.9, >= 0.9.4) rb-inotify (~> 0.9, >= 0.9.7) ruby_dep (~> 1.2) - loofah (2.3.1) + loofah (2.7.0) crass (~> 1.0.2) nokogiri (>= 1.5.9) mail (2.7.1) mini_mime (>= 0.1.1) marcel (0.3.3) mimemagic (~> 0.3.2) - method_source (0.9.2) - mime-types (3.3) + method_source (1.0.0) + middleware (0.1.0) + mime-types (3.3.1) mime-types-data (~> 3.2015) - mime-types-data (3.2019.1009) - mimemagic (0.3.3) + mime-types-data (3.2020.1104) + mimemagic (0.3.5) mini_mime (1.0.2) mini_portile2 (2.4.0) - minitest (5.12.2) - msgpack (1.3.1) - multi_json (1.14.1) + minitest (5.14.2) + msgpack (1.3.3) multi_test (0.1.2) - nio4r (2.5.2) - nokogiri (1.10.8) + nio4r (2.5.4) + nokogiri (1.10.10) mini_portile2 (~> 2.4.0) orm_adapter (0.5.0) - pg (1.1.4) - public_suffix (4.0.1) + pg (1.2.3) + protobuf-cucumber (3.10.8) + activesupport (>= 3.2) + middleware + thor + thread_safe + public_suffix (4.0.6) puma (3.12.6) rack (2.2.3) rack-test (1.1.0) rack (>= 1.0, < 3) - rails (5.2.3) - actioncable (= 5.2.3) - actionmailer (= 5.2.3) - actionpack (= 5.2.3) - actionview (= 5.2.3) - activejob (= 5.2.3) - activemodel (= 5.2.3) - activerecord (= 5.2.3) - activestorage (= 5.2.3) - activesupport (= 5.2.3) + rails (5.2.4.4) + actioncable (= 5.2.4.4) + actionmailer (= 5.2.4.4) + actionpack (= 5.2.4.4) + actionview (= 5.2.4.4) + activejob (= 5.2.4.4) + activemodel (= 5.2.4.4) + activerecord (= 5.2.4.4) + activestorage (= 5.2.4.4) + activesupport (= 5.2.4.4) bundler (>= 1.3.0) - railties (= 5.2.3) + railties (= 5.2.4.4) sprockets-rails (>= 2.0.0) rails-dom-testing (2.0.3) activesupport (>= 4.2.0) nokogiri (>= 1.6) rails-html-sanitizer (1.3.0) loofah (~> 2.3) - railties (5.2.3) - actionpack (= 5.2.3) - activesupport (= 5.2.3) + railties (5.2.4.4) + actionpack (= 5.2.4.4) + activesupport (= 5.2.4.4) method_source rake (>= 0.8.7) thor (>= 0.19.0, < 2.0) - rake (13.0.0) - rb-fsevent (0.10.3) - rb-inotify (0.10.0) + rake (13.0.1) + rb-fsevent (0.10.4) + rb-inotify (0.10.1) ffi (~> 1.0) - regexp_parser (1.6.0) - responders (3.0.0) + regexp_parser (1.8.2) + responders (3.0.1) actionpack (>= 5.0) railties (>= 5.0) - rspec-core (3.9.0) - rspec-support (~> 3.9.0) - rspec-expectations (3.9.0) + rspec-core (3.10.0) + rspec-support (~> 3.10.0) + rspec-expectations (3.10.0) diff-lcs (>= 1.2.0, < 2.0) - rspec-support (~> 3.9.0) - rspec-mocks (3.9.0) + rspec-support (~> 3.10.0) + rspec-mocks (3.10.0) diff-lcs (>= 1.2.0, < 2.0) - rspec-support (~> 3.9.0) - rspec-rails (3.9.0) - actionpack (>= 3.0) - activesupport (>= 3.0) - railties (>= 3.0) - rspec-core (~> 3.9.0) - rspec-expectations (~> 3.9.0) - rspec-mocks (~> 3.9.0) - rspec-support (~> 3.9.0) - rspec-support (3.9.0) + rspec-support (~> 3.10.0) + rspec-rails (4.0.1) + actionpack (>= 4.2) + activesupport (>= 4.2) + railties (>= 4.2) + rspec-core (~> 3.9) + rspec-expectations (~> 3.9) + rspec-mocks (~> 3.9) + rspec-support (~> 3.9) + rspec-support (3.10.0) ruby_dep (1.5.0) - rubyzip (2.0.0) + rubyzip (2.3.0) sass (3.7.4) sass-listen (~> 4.0.0) sass-listen (4.0.0) @@ -208,44 +226,46 @@ GEM sprockets (>= 2.8, < 4.0) sprockets-rails (>= 2.0, < 4.0) tilt (>= 1.1, < 3) - selenium-webdriver (3.142.6) + selenium-webdriver (3.142.7) childprocess (>= 0.5, < 4.0) rubyzip (>= 1.2.2) - shoulda-matchers (4.1.2) + shoulda-matchers (4.4.1) activesupport (>= 4.2.0) - spring (2.1.0) + spring (2.1.1) spring-watcher-listen (2.0.1) listen (>= 2.7, < 4.0) spring (>= 1.2, < 3.0) sprockets (3.7.2) concurrent-ruby (~> 1.0) rack (> 1, < 3) - sprockets-rails (3.2.1) + sprockets-rails (3.2.2) actionpack (>= 4.0) activesupport (>= 4.0) sprockets (>= 3.0.0) - thor (0.20.3) + sys-uname (1.2.2) + ffi (~> 1.1) + thor (1.0.1) thread_safe (0.3.6) tilt (2.0.10) turbolinks (5.2.1) turbolinks-source (~> 5.2) turbolinks-source (5.2.0) - tzinfo (1.2.5) + tzinfo (1.2.8) thread_safe (~> 0.1) uglifier (4.2.0) execjs (>= 0.3.0, < 3) - warden (1.2.8) - rack (>= 2.0.6) + warden (1.2.9) + rack (>= 2.0.9) web-console (3.7.0) actionview (>= 5.0) activemodel (>= 5.0) bindex (>= 0.4.0) railties (>= 5.0) - webdrivers (4.1.3) + webdrivers (4.4.1) nokogiri (~> 1.6) rubyzip (>= 1.3.0) selenium-webdriver (>= 3.0, < 4.0) - websocket-driver (0.7.1) + websocket-driver (0.7.3) websocket-extensions (>= 0.1.0) websocket-extensions (0.1.5) xpath (3.2.0) diff --git a/app/assets/javascripts/activities.coffee b/app/assets/javascripts/activities.coffee new file mode 100644 index 00000000..24f83d18 --- /dev/null +++ b/app/assets/javascripts/activities.coffee @@ -0,0 +1,3 @@ +# Place all the behaviors and hooks related to the matching controller here. +# All this logic will automatically be available in application.js. +# You can use CoffeeScript in this file: http://coffeescript.org/ diff --git a/app/assets/javascripts/activity_types.coffee b/app/assets/javascripts/activity_types.coffee new file mode 100644 index 00000000..24f83d18 --- /dev/null +++ b/app/assets/javascripts/activity_types.coffee @@ -0,0 +1,3 @@ +# Place all the behaviors and hooks related to the matching controller here. +# All this logic will automatically be available in application.js. +# You can use CoffeeScript in this file: http://coffeescript.org/ diff --git a/app/assets/javascripts/user_activities.coffee b/app/assets/javascripts/user_activities.coffee new file mode 100644 index 00000000..24f83d18 --- /dev/null +++ b/app/assets/javascripts/user_activities.coffee @@ -0,0 +1,3 @@ +# Place all the behaviors and hooks related to the matching controller here. +# All this logic will automatically be available in application.js. +# You can use CoffeeScript in this file: http://coffeescript.org/ diff --git a/app/assets/stylesheets/activities.scss b/app/assets/stylesheets/activities.scss new file mode 100644 index 00000000..2b1364ef --- /dev/null +++ b/app/assets/stylesheets/activities.scss @@ -0,0 +1,3 @@ +// Place all the styles related to the Activities controller here. +// They will automatically be included in application.css. +// You can use Sass (SCSS) here: http://sass-lang.com/ diff --git a/app/assets/stylesheets/activity_types.scss b/app/assets/stylesheets/activity_types.scss new file mode 100644 index 00000000..6a124a62 --- /dev/null +++ b/app/assets/stylesheets/activity_types.scss @@ -0,0 +1,3 @@ +// Place all the styles related to the ActivityTypes controller here. +// They will automatically be included in application.css. +// You can use Sass (SCSS) here: http://sass-lang.com/ diff --git a/app/assets/stylesheets/scaffolds.scss b/app/assets/stylesheets/scaffolds.scss new file mode 100644 index 00000000..60451880 --- /dev/null +++ b/app/assets/stylesheets/scaffolds.scss @@ -0,0 +1,84 @@ +body { + background-color: #fff; + color: #333; + margin: 33px; + font-family: verdana, arial, helvetica, sans-serif; + font-size: 13px; + line-height: 18px; +} + +p, ol, ul, td { + font-family: verdana, arial, helvetica, sans-serif; + font-size: 13px; + line-height: 18px; +} + +pre { + background-color: #eee; + padding: 10px; + font-size: 11px; +} + +a { + color: #000; + + &:visited { + color: #666; + } + + &:hover { + color: #fff; + background-color: #000; + } +} + +th { + padding-bottom: 5px; +} + +td { + padding: 0 5px 7px; +} + +div { + &.field, &.actions { + margin-bottom: 10px; + } +} + +#notice { + color: green; +} + +.field_with_errors { + padding: 2px; + background-color: red; + display: table; +} + +#error_explanation { + width: 450px; + border: 2px solid red; + padding: 7px 7px 0; + margin-bottom: 20px; + background-color: #f0f0f0; + + h2 { + text-align: left; + font-weight: bold; + padding: 5px 5px 5px 15px; + font-size: 12px; + margin: -7px -7px 0; + background-color: #c00; + color: #fff; + } + + ul li { + font-size: 12px; + list-style: square; + } +} + +label { + display: block; +} diff --git a/app/assets/stylesheets/user_activities.scss b/app/assets/stylesheets/user_activities.scss new file mode 100644 index 00000000..5d2fe634 --- /dev/null +++ b/app/assets/stylesheets/user_activities.scss @@ -0,0 +1,3 @@ +// Place all the styles related to the UserActivities controller here. +// They will automatically be included in application.css. +// You can use Sass (SCSS) here: http://sass-lang.com/ diff --git a/app/controllers/activities_controller.rb b/app/controllers/activities_controller.rb new file mode 100644 index 00000000..31deb2e4 --- /dev/null +++ b/app/controllers/activities_controller.rb @@ -0,0 +1,74 @@ +class ActivitiesController < ApplicationController + before_action :set_activity, only: [:show, :edit, :update, :destroy] + + # GET /activities + # GET /activities.json + def index + @activities = Activity.all + end + + # GET /activities/1 + # GET /activities/1.json + def show + end + + # GET /activities/new + def new + @activity = Activity.new + end + + # GET /activities/1/edit + def edit + end + + # POST /activities + # POST /activities.json + def create + @activity = Activity.new(activity_params) + + respond_to do |format| + if @activity.save + format.html { redirect_to @activity, notice: 'Activity was successfully created.' } + format.json { render :show, status: :created, location: @activity } + else + format.html { render :new } + format.json { render json: @activity.errors, status: :unprocessable_entity } + end + end + end + + # PATCH/PUT /activities/1 + # PATCH/PUT /activities/1.json + def update + respond_to do |format| + if @activity.update(activity_params) + format.html { redirect_to @activity, notice: 'Activity was successfully updated.' } + format.json { render :show, status: :ok, location: @activity } + else + format.html { render :edit } + format.json { render json: @activity.errors, status: :unprocessable_entity } + end + end + end + + # DELETE /activities/1 + # DELETE /activities/1.json + def destroy + @activity.destroy + respond_to do |format| + format.html { redirect_to activities_url, notice: 'Activity was successfully destroyed.' } + format.json { head :no_content } + end + end + + private + # Use callbacks to share common setup or constraints between actions. + def set_activity + @activity = Activity.find(params[:id]) + end + + # Only allow a list of trusted parameters through. + def activity_params + params.require(:activity).permit(:title, :description, :due_date, :status, :activity_type_id) + end +end diff --git a/app/controllers/activity_types_controller.rb b/app/controllers/activity_types_controller.rb new file mode 100644 index 00000000..5116dbbc --- /dev/null +++ b/app/controllers/activity_types_controller.rb @@ -0,0 +1,74 @@ +class ActivityTypesController < ApplicationController + before_action :set_activity_type, only: [:show, :edit, :update, :destroy] + + # GET /activity_types + # GET /activity_types.json + def index + @activity_types = ActivityType.all + end + + # GET /activity_types/1 + # GET /activity_types/1.json + def show + end + + # GET /activity_types/new + def new + @activity_type = ActivityType.new + end + + # GET /activity_types/1/edit + def edit + end + + # POST /activity_types + # POST /activity_types.json + def create + @activity_type = ActivityType.new(activity_type_params) + + respond_to do |format| + if @activity_type.save + format.html { redirect_to @activity_type, notice: 'Activity type was successfully created.' } + format.json { render :show, status: :created, location: @activity_type } + else + format.html { render :new } + format.json { render json: @activity_type.errors, status: :unprocessable_entity } + end + end + end + + # PATCH/PUT /activity_types/1 + # PATCH/PUT /activity_types/1.json + def update + respond_to do |format| + if @activity_type.update(activity_type_params) + format.html { redirect_to @activity_type, notice: 'Activity type was successfully updated.' } + format.json { render :show, status: :ok, location: @activity_type } + else + format.html { render :edit } + format.json { render json: @activity_type.errors, status: :unprocessable_entity } + end + end + end + + # DELETE /activity_types/1 + # DELETE /activity_types/1.json + def destroy + @activity_type.destroy + respond_to do |format| + format.html { redirect_to activity_types_url, notice: 'Activity type was successfully destroyed.' } + format.json { head :no_content } + end + end + + private + # Use callbacks to share common setup or constraints between actions. + def set_activity_type + @activity_type = ActivityType.find(params[:id]) + end + + # Only allow a list of trusted parameters through. + def activity_type_params + params.require(:activity_type).permit(:title) + end +end diff --git a/app/controllers/home_controller.rb b/app/controllers/home_controller.rb index 357f457a..5deed5db 100644 --- a/app/controllers/home_controller.rb +++ b/app/controllers/home_controller.rb @@ -1,5 +1,5 @@ class HomeController < ApplicationController - before_action :set_word, only: [:index] + # before_action :set_word, only: [:index] def index end diff --git a/app/controllers/user_activities_controller.rb b/app/controllers/user_activities_controller.rb new file mode 100644 index 00000000..ee0b67f1 --- /dev/null +++ b/app/controllers/user_activities_controller.rb @@ -0,0 +1,74 @@ +class UserActivitiesController < ApplicationController + before_action :set_user_activity, only: [:show, :edit, :update, :destroy] + + # GET /user_activities + # GET /user_activities.json + def index + @user_activities = UserActivity.all + end + + # GET /user_activities/1 + # GET /user_activities/1.json + def show + end + + # GET /user_activities/new + def new + @user_activity = UserActivity.new + end + + # GET /user_activities/1/edit + def edit + end + + # POST /user_activities + # POST /user_activities.json + def create + @user_activity = UserActivity.new(user_activity_params) + + respond_to do |format| + if @user_activity.save + format.html { redirect_to @user_activity, notice: 'User activity was successfully created.' } + format.json { render :show, status: :created, location: @user_activity } + else + format.html { render :new } + format.json { render json: @user_activity.errors, status: :unprocessable_entity } + end + end + end + + # PATCH/PUT /user_activities/1 + # PATCH/PUT /user_activities/1.json + def update + respond_to do |format| + if @user_activity.update(user_activity_params) + format.html { redirect_to @user_activity, notice: 'User activity was successfully updated.' } + format.json { render :show, status: :ok, location: @user_activity } + else + format.html { render :edit } + format.json { render json: @user_activity.errors, status: :unprocessable_entity } + end + end + end + + # DELETE /user_activities/1 + # DELETE /user_activities/1.json + def destroy + @user_activity.destroy + respond_to do |format| + format.html { redirect_to user_activities_url, notice: 'User activity was successfully destroyed.' } + format.json { head :no_content } + end + end + + private + # Use callbacks to share common setup or constraints between actions. + def set_user_activity + @user_activity = UserActivity.find(params[:id]) + end + + # Only allow a list of trusted parameters through. + def user_activity_params + params.require(:user_activity).permit(:user_id, :activity_id, :interested, :active) + end +end diff --git a/app/helpers/activities_helper.rb b/app/helpers/activities_helper.rb new file mode 100644 index 00000000..4e9784cc --- /dev/null +++ b/app/helpers/activities_helper.rb @@ -0,0 +1,2 @@ +module ActivitiesHelper +end diff --git a/app/helpers/activity_types_helper.rb b/app/helpers/activity_types_helper.rb new file mode 100644 index 00000000..062ce791 --- /dev/null +++ b/app/helpers/activity_types_helper.rb @@ -0,0 +1,2 @@ +module ActivityTypesHelper +end diff --git a/app/helpers/user_activities_helper.rb b/app/helpers/user_activities_helper.rb new file mode 100644 index 00000000..e948cfad --- /dev/null +++ b/app/helpers/user_activities_helper.rb @@ -0,0 +1,2 @@ +module UserActivitiesHelper +end diff --git a/app/models/activity.rb b/app/models/activity.rb index 757e8e51..abdd9b80 100644 --- a/app/models/activity.rb +++ b/app/models/activity.rb @@ -1,3 +1,4 @@ class Activity < ApplicationRecord - validates :activity_type_id, presence: true + belongs_to :activity_type + has_many_attached :documents end diff --git a/app/models/user_activity.rb b/app/models/user_activity.rb index eaf64d59..03943a3d 100644 --- a/app/models/user_activity.rb +++ b/app/models/user_activity.rb @@ -1,4 +1,4 @@ class UserActivity < ApplicationRecord - belongs_to :user - belongs_to :activity + belongs_to :user + belongs_to :activity end diff --git a/app/views/activities/_activity.json.jbuilder b/app/views/activities/_activity.json.jbuilder new file mode 100644 index 00000000..d7784f97 --- /dev/null +++ b/app/views/activities/_activity.json.jbuilder @@ -0,0 +1,2 @@ +json.extract! activity, :id, :title, :description, :due_date, :status, :activity_type_id, :created_at, :updated_at +json.url activity_url(activity, format: :json) diff --git a/app/views/activities/_form.html.erb b/app/views/activities/_form.html.erb new file mode 100644 index 00000000..96c094c1 --- /dev/null +++ b/app/views/activities/_form.html.erb @@ -0,0 +1,42 @@ +<%= form_with(model: activity, local: true) do |form| %> + <% if activity.errors.any? %> +
+

<%= pluralize(activity.errors.count, "error") %> prohibited this activity from being saved:

+ +
    + <% activity.errors.full_messages.each do |message| %> +
  • <%= message %>
  • + <% end %> +
+
+ <% end %> + +
+ <%= form.label :title %> + <%= form.text_field :title %> +
+ +
+ <%= form.label :description %> + <%= form.text_area :description %> +
+ +
+ <%= form.label :due_date %> + <%= form.date_select :due_date %> +
+ +
+ <%= form.label :status %> + <%= form.number_field :status %> +
+ +
+ <%= form.label :activity_type_id %> + <%= form.text_field :activity_type_id %> +
+ +
+ <%= form.submit %> +
+<% end %> diff --git a/app/views/activities/edit.html.erb b/app/views/activities/edit.html.erb new file mode 100644 index 00000000..fd11026b --- /dev/null +++ b/app/views/activities/edit.html.erb @@ -0,0 +1,6 @@ +

Editing Activity

+ +<%= render 'form', activity: @activity %> + +<%= link_to 'Show', @activity %> | +<%= link_to 'Back', activities_path %> diff --git a/app/views/activities/index.html.erb b/app/views/activities/index.html.erb new file mode 100644 index 00000000..bd4c31de --- /dev/null +++ b/app/views/activities/index.html.erb @@ -0,0 +1,35 @@ +

<%= notice %>

+ +

Activities

+ + + + + + + + + + + + + + + <% @activities.each do |activity| %> + + + + + + + + + + + <% end %> + +
TitleDescriptionDue dateStatusActivity type
<%= activity.title %><%= activity.description %><%= activity.due_date %><%= activity.status %><%= activity.activity_type %><%= link_to 'Show', activity %><%= link_to 'Edit', edit_activity_path(activity) %><%= link_to 'Destroy', activity, method: :delete, data: { confirm: 'Are you sure?' } %>
+ +
+ +<%= link_to 'New Activity', new_activity_path %> diff --git a/app/views/activities/index.json.jbuilder b/app/views/activities/index.json.jbuilder new file mode 100644 index 00000000..865f89ee --- /dev/null +++ b/app/views/activities/index.json.jbuilder @@ -0,0 +1 @@ +json.array! @activities, partial: "activities/activity", as: :activity diff --git a/app/views/activities/new.html.erb b/app/views/activities/new.html.erb new file mode 100644 index 00000000..b4aaf12c --- /dev/null +++ b/app/views/activities/new.html.erb @@ -0,0 +1,5 @@ +

New Activity

+ +<%= render 'form', activity: @activity %> + +<%= link_to 'Back', activities_path %> diff --git a/app/views/activities/show.html.erb b/app/views/activities/show.html.erb new file mode 100644 index 00000000..b58ba68d --- /dev/null +++ b/app/views/activities/show.html.erb @@ -0,0 +1,29 @@ +

<%= notice %>

+ +

+ Title: + <%= @activity.title %> +

+ +

+ Description: + <%= @activity.description %> +

+ +

+ Due date: + <%= @activity.due_date %> +

+ +

+ Status: + <%= @activity.status %> +

+ +

+ Activity type: + <%= @activity.activity_type %> +

+ +<%= link_to 'Edit', edit_activity_path(@activity) %> | +<%= link_to 'Back', activities_path %> diff --git a/app/views/activities/show.json.jbuilder b/app/views/activities/show.json.jbuilder new file mode 100644 index 00000000..a145d0a8 --- /dev/null +++ b/app/views/activities/show.json.jbuilder @@ -0,0 +1 @@ +json.partial! "activities/activity", activity: @activity diff --git a/app/views/activity_types/_activity_type.json.jbuilder b/app/views/activity_types/_activity_type.json.jbuilder new file mode 100644 index 00000000..4051f677 --- /dev/null +++ b/app/views/activity_types/_activity_type.json.jbuilder @@ -0,0 +1,2 @@ +json.extract! activity_type, :id, :title, :created_at, :updated_at +json.url activity_type_url(activity_type, format: :json) diff --git a/app/views/activity_types/_form.html.erb b/app/views/activity_types/_form.html.erb new file mode 100644 index 00000000..1f4cda6b --- /dev/null +++ b/app/views/activity_types/_form.html.erb @@ -0,0 +1,22 @@ +<%= form_with(model: activity_type, local: true) do |form| %> + <% if activity_type.errors.any? %> +
+

<%= pluralize(activity_type.errors.count, "error") %> prohibited this activity_type from being saved:

+ +
    + <% activity_type.errors.full_messages.each do |message| %> +
  • <%= message %>
  • + <% end %> +
+
+ <% end %> + +
+ <%= form.label :title %> + <%= form.text_field :title %> +
+ +
+ <%= form.submit %> +
+<% end %> diff --git a/app/views/activity_types/edit.html.erb b/app/views/activity_types/edit.html.erb new file mode 100644 index 00000000..62010fac --- /dev/null +++ b/app/views/activity_types/edit.html.erb @@ -0,0 +1,6 @@ +

Editing Activity Type

+ +<%= render 'form', activity_type: @activity_type %> + +<%= link_to 'Show', @activity_type %> | +<%= link_to 'Back', activity_types_path %> diff --git a/app/views/activity_types/index.html.erb b/app/views/activity_types/index.html.erb new file mode 100644 index 00000000..d6341a62 --- /dev/null +++ b/app/views/activity_types/index.html.erb @@ -0,0 +1,27 @@ +

<%= notice %>

+ +

Activity Types

+ + + + + + + + + + + <% @activity_types.each do |activity_type| %> + + + + + + + <% end %> + +
Title
<%= activity_type.title %><%= link_to 'Show', activity_type %><%= link_to 'Edit', edit_activity_type_path(activity_type) %><%= link_to 'Destroy', activity_type, method: :delete, data: { confirm: 'Are you sure?' } %>
+ +
+ +<%= link_to 'New Activity Type', new_activity_type_path %> diff --git a/app/views/activity_types/index.json.jbuilder b/app/views/activity_types/index.json.jbuilder new file mode 100644 index 00000000..88dfcb88 --- /dev/null +++ b/app/views/activity_types/index.json.jbuilder @@ -0,0 +1 @@ +json.array! @activity_types, partial: "activity_types/activity_type", as: :activity_type diff --git a/app/views/activity_types/new.html.erb b/app/views/activity_types/new.html.erb new file mode 100644 index 00000000..8baa8b2b --- /dev/null +++ b/app/views/activity_types/new.html.erb @@ -0,0 +1,5 @@ +

New Activity Type

+ +<%= render 'form', activity_type: @activity_type %> + +<%= link_to 'Back', activity_types_path %> diff --git a/app/views/activity_types/show.html.erb b/app/views/activity_types/show.html.erb new file mode 100644 index 00000000..16e6b02d --- /dev/null +++ b/app/views/activity_types/show.html.erb @@ -0,0 +1,9 @@ +

<%= notice %>

+ +

+ Title: + <%= @activity_type.title %> +

+ +<%= link_to 'Edit', edit_activity_type_path(@activity_type) %> | +<%= link_to 'Back', activity_types_path %> diff --git a/app/views/activity_types/show.json.jbuilder b/app/views/activity_types/show.json.jbuilder new file mode 100644 index 00000000..6b9e9179 --- /dev/null +++ b/app/views/activity_types/show.json.jbuilder @@ -0,0 +1 @@ +json.partial! "activity_types/activity_type", activity_type: @activity_type diff --git a/app/views/home/index.html.erb b/app/views/home/index.html.erb index 83afd49c..33ba387d 100644 --- a/app/views/home/index.html.erb +++ b/app/views/home/index.html.erb @@ -2,7 +2,6 @@

Find me in app/views/home/index.html.erb

<% if user_signed_in? %> - <%= @word %>

Usuário atual

Nome: <%= current_user.full_name %>

Email: <%= current_user.email %>

diff --git a/app/views/user_activities/_form.html.erb b/app/views/user_activities/_form.html.erb new file mode 100644 index 00000000..2e04f181 --- /dev/null +++ b/app/views/user_activities/_form.html.erb @@ -0,0 +1,37 @@ +<%= form_with(model: user_activity, local: true) do |form| %> + <% if user_activity.errors.any? %> +
+

<%= pluralize(user_activity.errors.count, "error") %> prohibited this user_activity from being saved:

+ +
    + <% user_activity.errors.full_messages.each do |message| %> +
  • <%= message %>
  • + <% end %> +
+
+ <% end %> + +
+ <%= form.label :user_id %> + <%= form.text_field :user_id %> +
+ +
+ <%= form.label :activity_id %> + <%= form.text_field :activity_id %> +
+ +
+ <%= form.label :interested %> + <%= form.check_box :interested %> +
+ +
+ <%= form.label :active %> + <%= form.check_box :active %> +
+ +
+ <%= form.submit %> +
+<% end %> diff --git a/app/views/user_activities/_user_activity.json.jbuilder b/app/views/user_activities/_user_activity.json.jbuilder new file mode 100644 index 00000000..d495643b --- /dev/null +++ b/app/views/user_activities/_user_activity.json.jbuilder @@ -0,0 +1,2 @@ +json.extract! user_activity, :id, :user_id, :activity_id, :interested, :active, :created_at, :updated_at +json.url user_activity_url(user_activity, format: :json) diff --git a/app/views/user_activities/edit.html.erb b/app/views/user_activities/edit.html.erb new file mode 100644 index 00000000..8a2498c7 --- /dev/null +++ b/app/views/user_activities/edit.html.erb @@ -0,0 +1,6 @@ +

Editing User Activity

+ +<%= render 'form', user_activity: @user_activity %> + +<%= link_to 'Show', @user_activity %> | +<%= link_to 'Back', user_activities_path %> diff --git a/app/views/user_activities/index.html.erb b/app/views/user_activities/index.html.erb new file mode 100644 index 00000000..136ce460 --- /dev/null +++ b/app/views/user_activities/index.html.erb @@ -0,0 +1,33 @@ +

<%= notice %>

+ +

User Activities

+ + + + + + + + + + + + + + <% @user_activities.each do |user_activity| %> + + + + + + + + + + <% end %> + +
UserActivityInterestedActive
<%= user_activity.user %><%= user_activity.activity %><%= user_activity.interested %><%= user_activity.active %><%= link_to 'Show', user_activity %><%= link_to 'Edit', edit_user_activity_path(user_activity) %><%= link_to 'Destroy', user_activity, method: :delete, data: { confirm: 'Are you sure?' } %>
+ +
+ +<%= link_to 'New User Activity', new_user_activity_path %> diff --git a/app/views/user_activities/index.json.jbuilder b/app/views/user_activities/index.json.jbuilder new file mode 100644 index 00000000..e6731e95 --- /dev/null +++ b/app/views/user_activities/index.json.jbuilder @@ -0,0 +1 @@ +json.array! @user_activities, partial: "user_activities/user_activity", as: :user_activity diff --git a/app/views/user_activities/new.html.erb b/app/views/user_activities/new.html.erb new file mode 100644 index 00000000..4f193756 --- /dev/null +++ b/app/views/user_activities/new.html.erb @@ -0,0 +1,5 @@ +

New User Activity

+ +<%= render 'form', user_activity: @user_activity %> + +<%= link_to 'Back', user_activities_path %> diff --git a/app/views/user_activities/show.html.erb b/app/views/user_activities/show.html.erb new file mode 100644 index 00000000..46652a7e --- /dev/null +++ b/app/views/user_activities/show.html.erb @@ -0,0 +1,24 @@ +

<%= notice %>

+ +

+ User: + <%= @user_activity.user %> +

+ +

+ Activity: + <%= @user_activity.activity %> +

+ +

+ Interested: + <%= @user_activity.interested %> +

+ +

+ Active: + <%= @user_activity.active %> +

+ +<%= link_to 'Edit', edit_user_activity_path(@user_activity) %> | +<%= link_to 'Back', user_activities_path %> diff --git a/app/views/user_activities/show.json.jbuilder b/app/views/user_activities/show.json.jbuilder new file mode 100644 index 00000000..8fd2851b --- /dev/null +++ b/app/views/user_activities/show.json.jbuilder @@ -0,0 +1 @@ +json.partial! "user_activities/user_activity", user_activity: @user_activity diff --git a/config/routes.rb b/config/routes.rb index f33f7f68..5a28a811 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -1,6 +1,9 @@ # frozen_string_literal: true Rails.application.routes.draw do + resources :user_activities + resources :activities + resources :activity_types get 'home/index' devise_for :users # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html diff --git a/db/migrate/20201111004340_create_activities.rb b/db/migrate/20201111004340_create_activities.rb deleted file mode 100644 index 8b516bee..00000000 --- a/db/migrate/20201111004340_create_activities.rb +++ /dev/null @@ -1,21 +0,0 @@ -class CreateActivities < ActiveRecord::Migration[5.2] - def change - create_table :activities do |t| - t.string :title - t.text :description - t.date :due_date - # t.attachment :documents - - t.references :activity_type, foreign_key: true - t.datetime :remember_created_at - t.timestamps null: false - end - - create_table :user_activities do |t| - t.belongs_to :user, foreign_key: true - t.belongs_to :activity, foreign_key: true - end - - add_index :user_activities, %i[user_id activity_id], unique: true - end -end diff --git a/db/migrate/20201111004338_create_activity_types.rb b/db/migrate/20201112014423_create_activity_types.rb similarity index 88% rename from db/migrate/20201111004338_create_activity_types.rb rename to db/migrate/20201112014423_create_activity_types.rb index 5d9a226f..5bd3eaeb 100644 --- a/db/migrate/20201111004338_create_activity_types.rb +++ b/db/migrate/20201112014423_create_activity_types.rb @@ -2,6 +2,8 @@ class CreateActivityTypes < ActiveRecord::Migration[5.2] def change create_table :activity_types do |t| t.string :title + + t.timestamps end end end diff --git a/db/migrate/20201112022823_create_active_storage_tables.active_storage.rb b/db/migrate/20201112022823_create_active_storage_tables.active_storage.rb new file mode 100644 index 00000000..0b2ce257 --- /dev/null +++ b/db/migrate/20201112022823_create_active_storage_tables.active_storage.rb @@ -0,0 +1,27 @@ +# This migration comes from active_storage (originally 20170806125915) +class CreateActiveStorageTables < ActiveRecord::Migration[5.2] + def change + create_table :active_storage_blobs do |t| + t.string :key, null: false + t.string :filename, null: false + t.string :content_type + t.text :metadata + t.bigint :byte_size, null: false + t.string :checksum, null: false + t.datetime :created_at, null: false + + t.index [ :key ], unique: true + end + + create_table :active_storage_attachments do |t| + t.string :name, null: false + t.references :record, null: false, polymorphic: true, index: false + t.references :blob, null: false + + t.datetime :created_at, null: false + + t.index [ :record_type, :record_id, :name, :blob_id ], name: "index_active_storage_attachments_uniqueness", unique: true + t.foreign_key :active_storage_blobs, column: :blob_id + end + end +end diff --git a/db/migrate/20201112030653_create_activities.rb b/db/migrate/20201112030653_create_activities.rb new file mode 100644 index 00000000..c6a7898e --- /dev/null +++ b/db/migrate/20201112030653_create_activities.rb @@ -0,0 +1,13 @@ +class CreateActivities < ActiveRecord::Migration[5.2] + def change + create_table :activities do |t| + t.string :title + t.text :description + t.date :due_date + t.integer :status + t.references :activity_type, foreign_key: true + + t.timestamps + end + end +end diff --git a/db/migrate/20201112030843_create_user_activities.rb b/db/migrate/20201112030843_create_user_activities.rb new file mode 100644 index 00000000..bb9a1d09 --- /dev/null +++ b/db/migrate/20201112030843_create_user_activities.rb @@ -0,0 +1,13 @@ +class CreateUserActivities < ActiveRecord::Migration[5.2] + def change + create_table :user_activities do |t| + t.belongs_to :user, foreign_key: true + t.belongs_to :activity, foreign_key: true + t.boolean :interested + t.boolean :active + + t.timestamps + end + add_index :user_activities, %i[user_id activity_id], unique: true + end +end diff --git a/db/schema.rb b/db/schema.rb index cd357ca3..7e075be2 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,17 +10,38 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 2020_11_11_004340) do +ActiveRecord::Schema.define(version: 2020_11_12_030843) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" + create_table "active_storage_attachments", force: :cascade do |t| + t.string "name", null: false + t.string "record_type", null: false + t.bigint "record_id", null: false + t.bigint "blob_id", null: false + t.datetime "created_at", null: false + t.index ["blob_id"], name: "index_active_storage_attachments_on_blob_id" + t.index ["record_type", "record_id", "name", "blob_id"], name: "index_active_storage_attachments_uniqueness", unique: true + end + + create_table "active_storage_blobs", force: :cascade do |t| + t.string "key", null: false + t.string "filename", null: false + t.string "content_type" + t.text "metadata" + t.bigint "byte_size", null: false + t.string "checksum", null: false + t.datetime "created_at", null: false + t.index ["key"], name: "index_active_storage_blobs_on_key", unique: true + end + create_table "activities", force: :cascade do |t| t.string "title" t.text "description" t.date "due_date" + t.integer "status" t.bigint "activity_type_id" - t.datetime "remember_created_at" t.datetime "created_at", null: false t.datetime "updated_at", null: false t.index ["activity_type_id"], name: "index_activities_on_activity_type_id" @@ -28,11 +49,17 @@ create_table "activity_types", force: :cascade do |t| t.string "title" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false end create_table "user_activities", force: :cascade do |t| t.bigint "user_id" t.bigint "activity_id" + t.boolean "interested" + t.boolean "active" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false t.index ["activity_id"], name: "index_user_activities_on_activity_id" t.index ["user_id", "activity_id"], name: "index_user_activities_on_user_id_and_activity_id", unique: true t.index ["user_id"], name: "index_user_activities_on_user_id" @@ -53,6 +80,7 @@ t.index ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true end + add_foreign_key "active_storage_attachments", "active_storage_blobs", column: "blob_id" add_foreign_key "activities", "activity_types" add_foreign_key "user_activities", "activities" add_foreign_key "user_activities", "users" diff --git a/db/seeds.rb b/db/seeds.rb index 94113f98..cd784e36 100644 --- a/db/seeds.rb +++ b/db/seeds.rb @@ -16,3 +16,4 @@ # Activities ActivityType.destroy_all Activity.destroy_all +UserActivity.destroy_all diff --git a/features.html b/features.html index 04b1344b..e379db88 100644 --- a/features.html +++ b/features.html @@ -1,485 +1,497 @@ -Cucumber +

Cucumber Features

Expand All

Collapse All

# language: pt
#encoding: utf-8

Funcionalidade: Testar

features/spike.feature:5

Cenário:

  1. Dado que existam os seguintes credenciamentos sem prazo definido:
    features/step_definitions/credenciamento_professores_steps.rb:23
    title
    full_name
    Credenciamento 1
    Adalberto
    Credenciamento 2
    Mariano
    Credenciamento 3
    Joel
    Validation failed: User must exist (ActiveRecord::RecordInvalid)
    ./features/step_definitions/credenciamento_professores_steps.rb:28:in `block (2 levels) in 
    ' -./features/step_definitions/credenciamento_professores_steps.rb:25:in `each' -./features/step_definitions/credenciamento_professores_steps.rb:25:in `"que existam os seguintes credenciamentos sem prazo definido:"' -features/spike.feature:6:in `Dado que existam os seguintes credenciamentos sem prazo definido:'
    26        act_id = Activity.create!(title: row['title'], activity_type_id: type_id).id
    -27        usr_id = User.create!(full_name: row['full_name'], email: row['full_name']+"@professor.com", password: row['full_name']+"123", role: "professor", registration: "000000000").id
    -28        UserActivity.create!(activity_id: act_id)
    
    -29    end
    -30end
    -31# gem install syntax to get syntax highlighting
  2. E que eu esteja cadastrado e logado como "Gabriel", "gabriel@admin.com", "gabriel123", "administrator", "200000000"
    features/step_definitions/credenciamento_professores_steps.rb:32
  3. Print maroto :)
      -
    undefined method `manage' for #<Capybara::RackTest::Browser:0x00007fffd5be5c58> (NoMethodError)
    ./features/support/hooks.rb:22:in `add_browser_logs'
    -./features/support/hooks.rb:5:in `After'
    20    current_url = Capybara.current_url.to_s
    -21    # Gather browser logs
    -22    logs = page.driver.browser.manage.logs.get(:browser).map {|line| [line.level, line.message]}
    
    -23   # Remove warnings and info messages
    -24    logs.reject! { |line| ['WARNING', 'INFO'].include?(line.first) }
    -25# gem install syntax to get syntax highlighting
\ No newline at end of file + + + diff --git a/features/spike.feature b/features/spike.feature index d01b8a69..9f0e0d8a 100644 --- a/features/spike.feature +++ b/features/spike.feature @@ -3,9 +3,9 @@ Funcionalidade: Testar Cenário: - Dado que existam os seguintes credenciamentos sem prazo definido: - | title | full_name | - | Credenciamento 1 | Adalberto | - | Credenciamento 2 | Mariano | - | Credenciamento 3 | Joel | - E que eu esteja cadastrado e logado como "Gabriel", "gabriel@admin.com", "gabriel123", "administrator", "200000000" + Dado que eu esteja cadastrado e logado como "Gabriel", "gabriel@admin.com", "gabriel123", "administrator", "200000000" + E que existam os seguintes credenciamentos sem prazo definido: + | activity_title | user_full_name | + | Credenciamento 1 | Adalberto | + | Credenciamento 2 | Mariano | + | Credenciamento 3 | Joel | diff --git a/features/support/hooks.rb b/features/support/hooks.rb index 6049864c..3c8ec40c 100644 --- a/features/support/hooks.rb +++ b/features/support/hooks.rb @@ -11,7 +11,7 @@ def add_screenshot(scenario) nome_cenario = nome_cenario.gsub(' ','_').downcase! screenshot = "log/screenshots/#{nome_cenario}.png" # page.save_screenshot(screenshot) - embed(screenshot, 'image/png', 'Print maroto :)') + attach(screenshot, 'image/png') end def add_browser_logs diff --git a/report.json b/report.json index 21e33f44..2d9641ae 100644 --- a/report.json +++ b/report.json @@ -1 +1 @@ -[{"uri":"features/spike.feature","id":"testar","keyword":"Funcionalidade","name":"Testar","description":"","line":4,"comments":[{"value":"#encoding: utf-8","line":2}],"elements":[{"id":"testar;","keyword":"Cenário","name":"","description":"","line":5,"type":"scenario","before":[{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:14"},"result":{"status":"passed","duration":18200}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:22"},"result":{"status":"passed","duration":10500}}],"steps":[{"keyword":"Dado ","name":"que existam os seguintes credenciamentos sem prazo definido:","line":6,"rows":[{"cells":["title","full_name"]},{"cells":["Credenciamento 1","Adalberto"]},{"cells":["Credenciamento 2","Mariano"]},{"cells":["Credenciamento 3","Joel"]}],"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:23"},"result":{"status":"failed","error_message":"Validation failed: User must exist (ActiveRecord::RecordInvalid)\n./features/step_definitions/credenciamento_professores_steps.rb:28:in `block (2 levels) in \u003cmain\u003e'\n./features/step_definitions/credenciamento_professores_steps.rb:25:in `each'\n./features/step_definitions/credenciamento_professores_steps.rb:25:in `\"que existam os seguintes credenciamentos sem prazo definido:\"'\nfeatures/spike.feature:6:in `Dado que existam os seguintes credenciamentos sem prazo definido:'","duration":66918400}},{"keyword":"E ","name":"que eu esteja cadastrado e logado como \"Gabriel\", \"gabriel@admin.com\", \"gabriel123\", \"administrator\", \"200000000\"","line":11,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:32"},"result":{"status":"skipped"}}],"after":[{"embeddings":[{"mime_type":"image/png","data":"bG9nL3NjcmVlbnNob3RzLy5wbmc="}],"match":{"location":"features/support/hooks.rb:1"},"result":{"status":"failed","error_message":"undefined method `manage' for #\u003cCapybara::RackTest::Browser:0x00007fffd5be5c58\u003e (NoMethodError)\n./features/support/hooks.rb:22:in `add_browser_logs'\n./features/support/hooks.rb:5:in `After'","duration":390200}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:10"},"result":{"status":"passed","duration":24100}}]}]}] \ No newline at end of file +[{"id":"testar","uri":"features/spike.feature","keyword":"Funcionalidade","name":"Testar","description":"","line":4,"elements":[{"id":"testar;","keyword":"Cenário","name":"","description":"","line":5,"type":"scenario","before":[{"match":{"location":"capybara-3.33.0/lib/capybara/cucumber.rb:14"},"result":{"status":"passed","duration":19400}},{"match":{"location":"capybara-3.33.0/lib/capybara/cucumber.rb:22"},"result":{"status":"passed","duration":12400}}],"steps":[{"keyword":"Dado ","name":"que eu esteja cadastrado e logado como \"Gabriel\", \"gabriel@admin.com\", \"gabriel123\", \"administrator\", \"200000000\"","line":6,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:32"},"result":{"status":"passed","duration":272538100}},{"keyword":"E ","name":"que existam os seguintes credenciamentos sem prazo definido:","line":7,"rows":[{"cells":["activity_title","user_full_name"]},{"cells":["Credenciamento 1","Adalberto"]},{"cells":["Credenciamento 2","Mariano"]},{"cells":["Credenciamento 3","Joel"]}],"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:23"},"result":{"status":"passed","duration":76080000}}],"after":[{"embeddings":[{"mime_type":"image/png","data":"bG9nL3NjcmVlbnNob3RzLy5wbmc="}],"match":{"location":"features/support/hooks.rb:1"},"result":{"status":"passed","duration":391500}},{"match":{"location":"capybara-3.33.0/lib/capybara/cucumber.rb:10"},"result":{"status":"passed","duration":82300}}]}]}] \ No newline at end of file diff --git a/spec/helpers/activities_helper_spec.rb b/spec/helpers/activities_helper_spec.rb new file mode 100644 index 00000000..9dc6d2e0 --- /dev/null +++ b/spec/helpers/activities_helper_spec.rb @@ -0,0 +1,15 @@ +require 'rails_helper' + +# Specs in this file have access to a helper object that includes +# the ActivitiesHelper. For example: +# +# describe ActivitiesHelper do +# describe "string concat" do +# it "concats two strings with spaces" do +# expect(helper.concat_strings("this","that")).to eq("this that") +# end +# end +# end +RSpec.describe ActivitiesHelper, type: :helper do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/helpers/activity_types_helper_spec.rb b/spec/helpers/activity_types_helper_spec.rb new file mode 100644 index 00000000..48447f1f --- /dev/null +++ b/spec/helpers/activity_types_helper_spec.rb @@ -0,0 +1,15 @@ +require 'rails_helper' + +# Specs in this file have access to a helper object that includes +# the ActivityTypesHelper. For example: +# +# describe ActivityTypesHelper do +# describe "string concat" do +# it "concats two strings with spaces" do +# expect(helper.concat_strings("this","that")).to eq("this that") +# end +# end +# end +RSpec.describe ActivityTypesHelper, type: :helper do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/helpers/user_activities_helper_spec.rb b/spec/helpers/user_activities_helper_spec.rb new file mode 100644 index 00000000..c1993ae3 --- /dev/null +++ b/spec/helpers/user_activities_helper_spec.rb @@ -0,0 +1,15 @@ +require 'rails_helper' + +# Specs in this file have access to a helper object that includes +# the UserActivitiesHelper. For example: +# +# describe UserActivitiesHelper do +# describe "string concat" do +# it "concats two strings with spaces" do +# expect(helper.concat_strings("this","that")).to eq("this that") +# end +# end +# end +RSpec.describe UserActivitiesHelper, type: :helper do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/models/activity_spec.rb b/spec/models/activity_spec.rb new file mode 100644 index 00000000..b80b07e7 --- /dev/null +++ b/spec/models/activity_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe Activity, type: :model do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/models/user_activity_spec.rb b/spec/models/user_activity_spec.rb new file mode 100644 index 00000000..417dfa25 --- /dev/null +++ b/spec/models/user_activity_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe UserActivity, type: :model do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/rails_helper.rb b/spec/rails_helper.rb index b06351ba..00345af7 100644 --- a/spec/rails_helper.rb +++ b/spec/rails_helper.rb @@ -1,9 +1,7 @@ # This file is copied to spec/ when you run 'rails generate rspec:install' require 'spec_helper' ENV['RAILS_ENV'] ||= 'test' - require File.expand_path('../config/environment', __dir__) - # Prevent database truncation if the environment is production abort("The Rails environment is running in production mode!") if Rails.env.production? require 'rspec/rails' @@ -22,7 +20,7 @@ # directory. Alternatively, in the individual `*_spec.rb` files, manually # require only the support files necessary. # -# Dir[Rails.root.join('spec', 'support', '**', '*.rb')].each { |f| require f } +# Dir[Rails.root.join('spec', 'support', '**', '*.rb')].sort.each { |f| require f } # Checks for pending migrations and applies them before tests are run. # If you are not using ActiveRecord, you can remove these lines. @@ -41,6 +39,9 @@ # instead of true. config.use_transactional_fixtures = true + # You can uncomment this line to turn off ActiveRecord support entirely. + # config.use_active_record = false + # RSpec Rails can automatically mix in different behaviours to your tests # based on their file location, for example enabling you to call `get` and # `post` in specs under `spec/controllers`. @@ -48,7 +49,7 @@ # You can disable this behaviour by removing the line below, and instead # explicitly tag your specs with their type, e.g.: # - # RSpec.describe UsersController, :type => :controller do + # RSpec.describe UsersController, type: :controller do # # ... # end # diff --git a/spec/requests/activities_spec.rb b/spec/requests/activities_spec.rb new file mode 100644 index 00000000..9c3013d5 --- /dev/null +++ b/spec/requests/activities_spec.rb @@ -0,0 +1,129 @@ + require 'rails_helper' + +# This spec was generated by rspec-rails when you ran the scaffold generator. +# It demonstrates how one might use RSpec to test the controller code that +# was generated by Rails when you ran the scaffold generator. +# +# It assumes that the implementation code is generated by the rails scaffold +# generator. If you are using any extension libraries to generate different +# controller code, this generated spec may or may not pass. +# +# It only uses APIs available in rails and/or rspec-rails. There are a number +# of tools you can use to make these specs even more expressive, but we're +# sticking to rails and rspec-rails APIs to keep things simple and stable. + +RSpec.describe "/activities", type: :request do + # Activity. As you add validations to Activity, be sure to + # adjust the attributes here as well. + let(:valid_attributes) { + skip("Add a hash of attributes valid for your model") + } + + let(:invalid_attributes) { + skip("Add a hash of attributes invalid for your model") + } + + describe "GET /index" do + it "renders a successful response" do + Activity.create! valid_attributes + get activities_url + expect(response).to be_successful + end + end + + describe "GET /show" do + it "renders a successful response" do + activity = Activity.create! valid_attributes + get activity_url(activity) + expect(response).to be_successful + end + end + + describe "GET /new" do + it "renders a successful response" do + get new_activity_url + expect(response).to be_successful + end + end + + describe "GET /edit" do + it "render a successful response" do + activity = Activity.create! valid_attributes + get edit_activity_url(activity) + expect(response).to be_successful + end + end + + describe "POST /create" do + context "with valid parameters" do + it "creates a new Activity" do + expect { + post activities_url, params: { activity: valid_attributes } + }.to change(Activity, :count).by(1) + end + + it "redirects to the created activity" do + post activities_url, params: { activity: valid_attributes } + expect(response).to redirect_to(activity_url(Activity.last)) + end + end + + context "with invalid parameters" do + it "does not create a new Activity" do + expect { + post activities_url, params: { activity: invalid_attributes } + }.to change(Activity, :count).by(0) + end + + it "renders a successful response (i.e. to display the 'new' template)" do + post activities_url, params: { activity: invalid_attributes } + expect(response).to be_successful + end + end + end + + describe "PATCH /update" do + context "with valid parameters" do + let(:new_attributes) { + skip("Add a hash of attributes valid for your model") + } + + it "updates the requested activity" do + activity = Activity.create! valid_attributes + patch activity_url(activity), params: { activity: new_attributes } + activity.reload + skip("Add assertions for updated state") + end + + it "redirects to the activity" do + activity = Activity.create! valid_attributes + patch activity_url(activity), params: { activity: new_attributes } + activity.reload + expect(response).to redirect_to(activity_url(activity)) + end + end + + context "with invalid parameters" do + it "renders a successful response (i.e. to display the 'edit' template)" do + activity = Activity.create! valid_attributes + patch activity_url(activity), params: { activity: invalid_attributes } + expect(response).to be_successful + end + end + end + + describe "DELETE /destroy" do + it "destroys the requested activity" do + activity = Activity.create! valid_attributes + expect { + delete activity_url(activity) + }.to change(Activity, :count).by(-1) + end + + it "redirects to the activities list" do + activity = Activity.create! valid_attributes + delete activity_url(activity) + expect(response).to redirect_to(activities_url) + end + end +end diff --git a/spec/requests/activity_types_spec.rb b/spec/requests/activity_types_spec.rb new file mode 100644 index 00000000..554e1abd --- /dev/null +++ b/spec/requests/activity_types_spec.rb @@ -0,0 +1,129 @@ + require 'rails_helper' + +# This spec was generated by rspec-rails when you ran the scaffold generator. +# It demonstrates how one might use RSpec to test the controller code that +# was generated by Rails when you ran the scaffold generator. +# +# It assumes that the implementation code is generated by the rails scaffold +# generator. If you are using any extension libraries to generate different +# controller code, this generated spec may or may not pass. +# +# It only uses APIs available in rails and/or rspec-rails. There are a number +# of tools you can use to make these specs even more expressive, but we're +# sticking to rails and rspec-rails APIs to keep things simple and stable. + +RSpec.describe "/activity_types", type: :request do + # ActivityType. As you add validations to ActivityType, be sure to + # adjust the attributes here as well. + let(:valid_attributes) { + skip("Add a hash of attributes valid for your model") + } + + let(:invalid_attributes) { + skip("Add a hash of attributes invalid for your model") + } + + describe "GET /index" do + it "renders a successful response" do + ActivityType.create! valid_attributes + get activity_types_url + expect(response).to be_successful + end + end + + describe "GET /show" do + it "renders a successful response" do + activity_type = ActivityType.create! valid_attributes + get activity_type_url(activity_type) + expect(response).to be_successful + end + end + + describe "GET /new" do + it "renders a successful response" do + get new_activity_type_url + expect(response).to be_successful + end + end + + describe "GET /edit" do + it "render a successful response" do + activity_type = ActivityType.create! valid_attributes + get edit_activity_type_url(activity_type) + expect(response).to be_successful + end + end + + describe "POST /create" do + context "with valid parameters" do + it "creates a new ActivityType" do + expect { + post activity_types_url, params: { activity_type: valid_attributes } + }.to change(ActivityType, :count).by(1) + end + + it "redirects to the created activity_type" do + post activity_types_url, params: { activity_type: valid_attributes } + expect(response).to redirect_to(activity_type_url(ActivityType.last)) + end + end + + context "with invalid parameters" do + it "does not create a new ActivityType" do + expect { + post activity_types_url, params: { activity_type: invalid_attributes } + }.to change(ActivityType, :count).by(0) + end + + it "renders a successful response (i.e. to display the 'new' template)" do + post activity_types_url, params: { activity_type: invalid_attributes } + expect(response).to be_successful + end + end + end + + describe "PATCH /update" do + context "with valid parameters" do + let(:new_attributes) { + skip("Add a hash of attributes valid for your model") + } + + it "updates the requested activity_type" do + activity_type = ActivityType.create! valid_attributes + patch activity_type_url(activity_type), params: { activity_type: new_attributes } + activity_type.reload + skip("Add assertions for updated state") + end + + it "redirects to the activity_type" do + activity_type = ActivityType.create! valid_attributes + patch activity_type_url(activity_type), params: { activity_type: new_attributes } + activity_type.reload + expect(response).to redirect_to(activity_type_url(activity_type)) + end + end + + context "with invalid parameters" do + it "renders a successful response (i.e. to display the 'edit' template)" do + activity_type = ActivityType.create! valid_attributes + patch activity_type_url(activity_type), params: { activity_type: invalid_attributes } + expect(response).to be_successful + end + end + end + + describe "DELETE /destroy" do + it "destroys the requested activity_type" do + activity_type = ActivityType.create! valid_attributes + expect { + delete activity_type_url(activity_type) + }.to change(ActivityType, :count).by(-1) + end + + it "redirects to the activity_types list" do + activity_type = ActivityType.create! valid_attributes + delete activity_type_url(activity_type) + expect(response).to redirect_to(activity_types_url) + end + end +end diff --git a/spec/requests/user_activities_spec.rb b/spec/requests/user_activities_spec.rb new file mode 100644 index 00000000..31f98d8b --- /dev/null +++ b/spec/requests/user_activities_spec.rb @@ -0,0 +1,129 @@ + require 'rails_helper' + +# This spec was generated by rspec-rails when you ran the scaffold generator. +# It demonstrates how one might use RSpec to test the controller code that +# was generated by Rails when you ran the scaffold generator. +# +# It assumes that the implementation code is generated by the rails scaffold +# generator. If you are using any extension libraries to generate different +# controller code, this generated spec may or may not pass. +# +# It only uses APIs available in rails and/or rspec-rails. There are a number +# of tools you can use to make these specs even more expressive, but we're +# sticking to rails and rspec-rails APIs to keep things simple and stable. + +RSpec.describe "/user_activities", type: :request do + # UserActivity. As you add validations to UserActivity, be sure to + # adjust the attributes here as well. + let(:valid_attributes) { + skip("Add a hash of attributes valid for your model") + } + + let(:invalid_attributes) { + skip("Add a hash of attributes invalid for your model") + } + + describe "GET /index" do + it "renders a successful response" do + UserActivity.create! valid_attributes + get user_activities_url + expect(response).to be_successful + end + end + + describe "GET /show" do + it "renders a successful response" do + user_activity = UserActivity.create! valid_attributes + get user_activity_url(user_activity) + expect(response).to be_successful + end + end + + describe "GET /new" do + it "renders a successful response" do + get new_user_activity_url + expect(response).to be_successful + end + end + + describe "GET /edit" do + it "render a successful response" do + user_activity = UserActivity.create! valid_attributes + get edit_user_activity_url(user_activity) + expect(response).to be_successful + end + end + + describe "POST /create" do + context "with valid parameters" do + it "creates a new UserActivity" do + expect { + post user_activities_url, params: { user_activity: valid_attributes } + }.to change(UserActivity, :count).by(1) + end + + it "redirects to the created user_activity" do + post user_activities_url, params: { user_activity: valid_attributes } + expect(response).to redirect_to(user_activity_url(UserActivity.last)) + end + end + + context "with invalid parameters" do + it "does not create a new UserActivity" do + expect { + post user_activities_url, params: { user_activity: invalid_attributes } + }.to change(UserActivity, :count).by(0) + end + + it "renders a successful response (i.e. to display the 'new' template)" do + post user_activities_url, params: { user_activity: invalid_attributes } + expect(response).to be_successful + end + end + end + + describe "PATCH /update" do + context "with valid parameters" do + let(:new_attributes) { + skip("Add a hash of attributes valid for your model") + } + + it "updates the requested user_activity" do + user_activity = UserActivity.create! valid_attributes + patch user_activity_url(user_activity), params: { user_activity: new_attributes } + user_activity.reload + skip("Add assertions for updated state") + end + + it "redirects to the user_activity" do + user_activity = UserActivity.create! valid_attributes + patch user_activity_url(user_activity), params: { user_activity: new_attributes } + user_activity.reload + expect(response).to redirect_to(user_activity_url(user_activity)) + end + end + + context "with invalid parameters" do + it "renders a successful response (i.e. to display the 'edit' template)" do + user_activity = UserActivity.create! valid_attributes + patch user_activity_url(user_activity), params: { user_activity: invalid_attributes } + expect(response).to be_successful + end + end + end + + describe "DELETE /destroy" do + it "destroys the requested user_activity" do + user_activity = UserActivity.create! valid_attributes + expect { + delete user_activity_url(user_activity) + }.to change(UserActivity, :count).by(-1) + end + + it "redirects to the user_activities list" do + user_activity = UserActivity.create! valid_attributes + delete user_activity_url(user_activity) + expect(response).to redirect_to(user_activities_url) + end + end +end diff --git a/spec/routing/activities_routing_spec.rb b/spec/routing/activities_routing_spec.rb new file mode 100644 index 00000000..929f3082 --- /dev/null +++ b/spec/routing/activities_routing_spec.rb @@ -0,0 +1,38 @@ +require "rails_helper" + +RSpec.describe ActivitiesController, type: :routing do + describe "routing" do + it "routes to #index" do + expect(get: "/activities").to route_to("activities#index") + end + + it "routes to #new" do + expect(get: "/activities/new").to route_to("activities#new") + end + + it "routes to #show" do + expect(get: "/activities/1").to route_to("activities#show", id: "1") + end + + it "routes to #edit" do + expect(get: "/activities/1/edit").to route_to("activities#edit", id: "1") + end + + + it "routes to #create" do + expect(post: "/activities").to route_to("activities#create") + end + + it "routes to #update via PUT" do + expect(put: "/activities/1").to route_to("activities#update", id: "1") + end + + it "routes to #update via PATCH" do + expect(patch: "/activities/1").to route_to("activities#update", id: "1") + end + + it "routes to #destroy" do + expect(delete: "/activities/1").to route_to("activities#destroy", id: "1") + end + end +end diff --git a/spec/routing/activity_types_routing_spec.rb b/spec/routing/activity_types_routing_spec.rb new file mode 100644 index 00000000..271cd219 --- /dev/null +++ b/spec/routing/activity_types_routing_spec.rb @@ -0,0 +1,38 @@ +require "rails_helper" + +RSpec.describe ActivityTypesController, type: :routing do + describe "routing" do + it "routes to #index" do + expect(get: "/activity_types").to route_to("activity_types#index") + end + + it "routes to #new" do + expect(get: "/activity_types/new").to route_to("activity_types#new") + end + + it "routes to #show" do + expect(get: "/activity_types/1").to route_to("activity_types#show", id: "1") + end + + it "routes to #edit" do + expect(get: "/activity_types/1/edit").to route_to("activity_types#edit", id: "1") + end + + + it "routes to #create" do + expect(post: "/activity_types").to route_to("activity_types#create") + end + + it "routes to #update via PUT" do + expect(put: "/activity_types/1").to route_to("activity_types#update", id: "1") + end + + it "routes to #update via PATCH" do + expect(patch: "/activity_types/1").to route_to("activity_types#update", id: "1") + end + + it "routes to #destroy" do + expect(delete: "/activity_types/1").to route_to("activity_types#destroy", id: "1") + end + end +end diff --git a/spec/routing/user_activities_routing_spec.rb b/spec/routing/user_activities_routing_spec.rb new file mode 100644 index 00000000..f414ed01 --- /dev/null +++ b/spec/routing/user_activities_routing_spec.rb @@ -0,0 +1,38 @@ +require "rails_helper" + +RSpec.describe UserActivitiesController, type: :routing do + describe "routing" do + it "routes to #index" do + expect(get: "/user_activities").to route_to("user_activities#index") + end + + it "routes to #new" do + expect(get: "/user_activities/new").to route_to("user_activities#new") + end + + it "routes to #show" do + expect(get: "/user_activities/1").to route_to("user_activities#show", id: "1") + end + + it "routes to #edit" do + expect(get: "/user_activities/1/edit").to route_to("user_activities#edit", id: "1") + end + + + it "routes to #create" do + expect(post: "/user_activities").to route_to("user_activities#create") + end + + it "routes to #update via PUT" do + expect(put: "/user_activities/1").to route_to("user_activities#update", id: "1") + end + + it "routes to #update via PATCH" do + expect(patch: "/user_activities/1").to route_to("user_activities#update", id: "1") + end + + it "routes to #destroy" do + expect(delete: "/user_activities/1").to route_to("user_activities#destroy", id: "1") + end + end +end diff --git a/spec/spike_spec.rb b/spec/spike_spec.rb new file mode 100644 index 00000000..6760d4a2 --- /dev/null +++ b/spec/spike_spec.rb @@ -0,0 +1,7 @@ +require 'rails_helper' + +describe Activity, type: :model do + describe 'bla' do + it 'blah' + end +end diff --git a/spec/views/activities/edit.html.erb_spec.rb b/spec/views/activities/edit.html.erb_spec.rb new file mode 100644 index 00000000..5a3dba0d --- /dev/null +++ b/spec/views/activities/edit.html.erb_spec.rb @@ -0,0 +1,27 @@ +require 'rails_helper' + +RSpec.describe "activities/edit", type: :view do + before(:each) do + @activity = assign(:activity, Activity.create!( + title: "MyString", + description: "MyText", + status: 1, + activity_type: nil + )) + end + + it "renders the edit activity form" do + render + + assert_select "form[action=?][method=?]", activity_path(@activity), "post" do + + assert_select "input[name=?]", "activity[title]" + + assert_select "textarea[name=?]", "activity[description]" + + assert_select "input[name=?]", "activity[status]" + + assert_select "input[name=?]", "activity[activity_type_id]" + end + end +end diff --git a/spec/views/activities/index.html.erb_spec.rb b/spec/views/activities/index.html.erb_spec.rb new file mode 100644 index 00000000..412e885c --- /dev/null +++ b/spec/views/activities/index.html.erb_spec.rb @@ -0,0 +1,28 @@ +require 'rails_helper' + +RSpec.describe "activities/index", type: :view do + before(:each) do + assign(:activities, [ + Activity.create!( + title: "Title", + description: "MyText", + status: 2, + activity_type: nil + ), + Activity.create!( + title: "Title", + description: "MyText", + status: 2, + activity_type: nil + ) + ]) + end + + it "renders a list of activities" do + render + assert_select "tr>td", text: "Title".to_s, count: 2 + assert_select "tr>td", text: "MyText".to_s, count: 2 + assert_select "tr>td", text: 2.to_s, count: 2 + assert_select "tr>td", text: nil.to_s, count: 2 + end +end diff --git a/spec/views/activities/new.html.erb_spec.rb b/spec/views/activities/new.html.erb_spec.rb new file mode 100644 index 00000000..34c98b59 --- /dev/null +++ b/spec/views/activities/new.html.erb_spec.rb @@ -0,0 +1,27 @@ +require 'rails_helper' + +RSpec.describe "activities/new", type: :view do + before(:each) do + assign(:activity, Activity.new( + title: "MyString", + description: "MyText", + status: 1, + activity_type: nil + )) + end + + it "renders new activity form" do + render + + assert_select "form[action=?][method=?]", activities_path, "post" do + + assert_select "input[name=?]", "activity[title]" + + assert_select "textarea[name=?]", "activity[description]" + + assert_select "input[name=?]", "activity[status]" + + assert_select "input[name=?]", "activity[activity_type_id]" + end + end +end diff --git a/spec/views/activities/show.html.erb_spec.rb b/spec/views/activities/show.html.erb_spec.rb new file mode 100644 index 00000000..15671335 --- /dev/null +++ b/spec/views/activities/show.html.erb_spec.rb @@ -0,0 +1,20 @@ +require 'rails_helper' + +RSpec.describe "activities/show", type: :view do + before(:each) do + @activity = assign(:activity, Activity.create!( + title: "Title", + description: "MyText", + status: 2, + activity_type: nil + )) + end + + it "renders attributes in

" do + render + expect(rendered).to match(/Title/) + expect(rendered).to match(/MyText/) + expect(rendered).to match(/2/) + expect(rendered).to match(//) + end +end diff --git a/spec/views/activity_types/edit.html.erb_spec.rb b/spec/views/activity_types/edit.html.erb_spec.rb new file mode 100644 index 00000000..fa976180 --- /dev/null +++ b/spec/views/activity_types/edit.html.erb_spec.rb @@ -0,0 +1,18 @@ +require 'rails_helper' + +RSpec.describe "activity_types/edit", type: :view do + before(:each) do + @activity_type = assign(:activity_type, ActivityType.create!( + title: "MyString" + )) + end + + it "renders the edit activity_type form" do + render + + assert_select "form[action=?][method=?]", activity_type_path(@activity_type), "post" do + + assert_select "input[name=?]", "activity_type[title]" + end + end +end diff --git a/spec/views/activity_types/index.html.erb_spec.rb b/spec/views/activity_types/index.html.erb_spec.rb new file mode 100644 index 00000000..e9c50f77 --- /dev/null +++ b/spec/views/activity_types/index.html.erb_spec.rb @@ -0,0 +1,19 @@ +require 'rails_helper' + +RSpec.describe "activity_types/index", type: :view do + before(:each) do + assign(:activity_types, [ + ActivityType.create!( + title: "Title" + ), + ActivityType.create!( + title: "Title" + ) + ]) + end + + it "renders a list of activity_types" do + render + assert_select "tr>td", text: "Title".to_s, count: 2 + end +end diff --git a/spec/views/activity_types/new.html.erb_spec.rb b/spec/views/activity_types/new.html.erb_spec.rb new file mode 100644 index 00000000..eef89c66 --- /dev/null +++ b/spec/views/activity_types/new.html.erb_spec.rb @@ -0,0 +1,18 @@ +require 'rails_helper' + +RSpec.describe "activity_types/new", type: :view do + before(:each) do + assign(:activity_type, ActivityType.new( + title: "MyString" + )) + end + + it "renders new activity_type form" do + render + + assert_select "form[action=?][method=?]", activity_types_path, "post" do + + assert_select "input[name=?]", "activity_type[title]" + end + end +end diff --git a/spec/views/activity_types/show.html.erb_spec.rb b/spec/views/activity_types/show.html.erb_spec.rb new file mode 100644 index 00000000..cc754e4e --- /dev/null +++ b/spec/views/activity_types/show.html.erb_spec.rb @@ -0,0 +1,14 @@ +require 'rails_helper' + +RSpec.describe "activity_types/show", type: :view do + before(:each) do + @activity_type = assign(:activity_type, ActivityType.create!( + title: "Title" + )) + end + + it "renders attributes in

" do + render + expect(rendered).to match(/Title/) + end +end diff --git a/spec/views/user_activities/edit.html.erb_spec.rb b/spec/views/user_activities/edit.html.erb_spec.rb new file mode 100644 index 00000000..8df9556d --- /dev/null +++ b/spec/views/user_activities/edit.html.erb_spec.rb @@ -0,0 +1,27 @@ +require 'rails_helper' + +RSpec.describe "user_activities/edit", type: :view do + before(:each) do + @user_activity = assign(:user_activity, UserActivity.create!( + user: nil, + activity: nil, + interested: false, + active: false + )) + end + + it "renders the edit user_activity form" do + render + + assert_select "form[action=?][method=?]", user_activity_path(@user_activity), "post" do + + assert_select "input[name=?]", "user_activity[user_id]" + + assert_select "input[name=?]", "user_activity[activity_id]" + + assert_select "input[name=?]", "user_activity[interested]" + + assert_select "input[name=?]", "user_activity[active]" + end + end +end diff --git a/spec/views/user_activities/index.html.erb_spec.rb b/spec/views/user_activities/index.html.erb_spec.rb new file mode 100644 index 00000000..37434f63 --- /dev/null +++ b/spec/views/user_activities/index.html.erb_spec.rb @@ -0,0 +1,28 @@ +require 'rails_helper' + +RSpec.describe "user_activities/index", type: :view do + before(:each) do + assign(:user_activities, [ + UserActivity.create!( + user: nil, + activity: nil, + interested: false, + active: false + ), + UserActivity.create!( + user: nil, + activity: nil, + interested: false, + active: false + ) + ]) + end + + it "renders a list of user_activities" do + render + assert_select "tr>td", text: nil.to_s, count: 2 + assert_select "tr>td", text: nil.to_s, count: 2 + assert_select "tr>td", text: false.to_s, count: 2 + assert_select "tr>td", text: false.to_s, count: 2 + end +end diff --git a/spec/views/user_activities/new.html.erb_spec.rb b/spec/views/user_activities/new.html.erb_spec.rb new file mode 100644 index 00000000..924b69b7 --- /dev/null +++ b/spec/views/user_activities/new.html.erb_spec.rb @@ -0,0 +1,27 @@ +require 'rails_helper' + +RSpec.describe "user_activities/new", type: :view do + before(:each) do + assign(:user_activity, UserActivity.new( + user: nil, + activity: nil, + interested: false, + active: false + )) + end + + it "renders new user_activity form" do + render + + assert_select "form[action=?][method=?]", user_activities_path, "post" do + + assert_select "input[name=?]", "user_activity[user_id]" + + assert_select "input[name=?]", "user_activity[activity_id]" + + assert_select "input[name=?]", "user_activity[interested]" + + assert_select "input[name=?]", "user_activity[active]" + end + end +end diff --git a/spec/views/user_activities/show.html.erb_spec.rb b/spec/views/user_activities/show.html.erb_spec.rb new file mode 100644 index 00000000..898962ea --- /dev/null +++ b/spec/views/user_activities/show.html.erb_spec.rb @@ -0,0 +1,20 @@ +require 'rails_helper' + +RSpec.describe "user_activities/show", type: :view do + before(:each) do + @user_activity = assign(:user_activity, UserActivity.create!( + user: nil, + activity: nil, + interested: false, + active: false + )) + end + + it "renders attributes in

" do + render + expect(rendered).to match(//) + expect(rendered).to match(//) + expect(rendered).to match(/false/) + expect(rendered).to match(/false/) + end +end From adfc036d65daca7b7ed931e2c952ac3129686a44 Mon Sep 17 00:00:00 2001 From: ngsylar Date: Thu, 12 Nov 2020 02:47:14 -0300 Subject: [PATCH 17/82] Spec for ActivityType model --- app/models/activity.rb | 7 +++++ spec/models/activity_spec.rb | 10 ++++++- spec/models/activity_type_spec.rb | 11 +++++++- spec/models/user_activity_spec.rb | 10 ++++++- spec/views/activities/edit.html.erb_spec.rb | 27 ------------------ spec/views/activities/index.html.erb_spec.rb | 28 ------------------- spec/views/activities/new.html.erb_spec.rb | 27 ------------------ spec/views/activities/show.html.erb_spec.rb | 20 ------------- .../activity_types/edit.html.erb_spec.rb | 18 ------------ .../activity_types/index.html.erb_spec.rb | 19 ------------- .../views/activity_types/new.html.erb_spec.rb | 18 ------------ .../activity_types/show.html.erb_spec.rb | 14 ---------- .../user_activities/edit.html.erb_spec.rb | 27 ------------------ .../user_activities/index.html.erb_spec.rb | 28 ------------------- .../user_activities/new.html.erb_spec.rb | 27 ------------------ .../user_activities/show.html.erb_spec.rb | 20 ------------- 16 files changed, 35 insertions(+), 276 deletions(-) delete mode 100644 spec/views/activities/edit.html.erb_spec.rb delete mode 100644 spec/views/activities/index.html.erb_spec.rb delete mode 100644 spec/views/activities/new.html.erb_spec.rb delete mode 100644 spec/views/activities/show.html.erb_spec.rb delete mode 100644 spec/views/activity_types/edit.html.erb_spec.rb delete mode 100644 spec/views/activity_types/index.html.erb_spec.rb delete mode 100644 spec/views/activity_types/new.html.erb_spec.rb delete mode 100644 spec/views/activity_types/show.html.erb_spec.rb delete mode 100644 spec/views/user_activities/edit.html.erb_spec.rb delete mode 100644 spec/views/user_activities/index.html.erb_spec.rb delete mode 100644 spec/views/user_activities/new.html.erb_spec.rb delete mode 100644 spec/views/user_activities/show.html.erb_spec.rb diff --git a/app/models/activity.rb b/app/models/activity.rb index abdd9b80..72fefc26 100644 --- a/app/models/activity.rb +++ b/app/models/activity.rb @@ -1,4 +1,11 @@ class Activity < ApplicationRecord belongs_to :activity_type has_many_attached :documents + + enum status: { + waiting: 0, + accepted: 1, + rejected: 2, + reformation: 3 + } end diff --git a/spec/models/activity_spec.rb b/spec/models/activity_spec.rb index b80b07e7..0b922853 100644 --- a/spec/models/activity_spec.rb +++ b/spec/models/activity_spec.rb @@ -1,5 +1,13 @@ require 'rails_helper' RSpec.describe Activity, type: :model do - pending "add some examples to (or delete) #{__FILE__}" + context 'valid accreditation' do + it 'has a known status and has documents' + end + + context 'invalid accreditation' do + it 'has no status' + it 'has an unknown status' + it 'has no documents' + end end diff --git a/spec/models/activity_type_spec.rb b/spec/models/activity_type_spec.rb index 5541b8e6..0d2d638b 100644 --- a/spec/models/activity_type_spec.rb +++ b/spec/models/activity_type_spec.rb @@ -1,5 +1,14 @@ require 'rails_helper' RSpec.describe ActivityType, type: :model do - pending "add some examples to (or delete) #{__FILE__}" + describe 'validade an activity type' do + it 'is valid' do + activity = ActivityType.new(title: 'Credenciamento') + expect(activity).to be_valid + end + it 'is invalid' do + activity = ActivityType.new + expect(activity).to_not be_valid + end + end end diff --git a/spec/models/user_activity_spec.rb b/spec/models/user_activity_spec.rb index 417dfa25..ae01e056 100644 --- a/spec/models/user_activity_spec.rb +++ b/spec/models/user_activity_spec.rb @@ -1,5 +1,13 @@ require 'rails_helper' RSpec.describe UserActivity, type: :model do - pending "add some examples to (or delete) #{__FILE__}" + context "a user's activity is valid" do + it 'is valid has an activity associated with a user' + end + + context "a user's activity is invalid" do + it 'has no activity associated with a user' + it 'has no user associated with an activity' + it 'has neither activity nor a user' + end end diff --git a/spec/views/activities/edit.html.erb_spec.rb b/spec/views/activities/edit.html.erb_spec.rb deleted file mode 100644 index 5a3dba0d..00000000 --- a/spec/views/activities/edit.html.erb_spec.rb +++ /dev/null @@ -1,27 +0,0 @@ -require 'rails_helper' - -RSpec.describe "activities/edit", type: :view do - before(:each) do - @activity = assign(:activity, Activity.create!( - title: "MyString", - description: "MyText", - status: 1, - activity_type: nil - )) - end - - it "renders the edit activity form" do - render - - assert_select "form[action=?][method=?]", activity_path(@activity), "post" do - - assert_select "input[name=?]", "activity[title]" - - assert_select "textarea[name=?]", "activity[description]" - - assert_select "input[name=?]", "activity[status]" - - assert_select "input[name=?]", "activity[activity_type_id]" - end - end -end diff --git a/spec/views/activities/index.html.erb_spec.rb b/spec/views/activities/index.html.erb_spec.rb deleted file mode 100644 index 412e885c..00000000 --- a/spec/views/activities/index.html.erb_spec.rb +++ /dev/null @@ -1,28 +0,0 @@ -require 'rails_helper' - -RSpec.describe "activities/index", type: :view do - before(:each) do - assign(:activities, [ - Activity.create!( - title: "Title", - description: "MyText", - status: 2, - activity_type: nil - ), - Activity.create!( - title: "Title", - description: "MyText", - status: 2, - activity_type: nil - ) - ]) - end - - it "renders a list of activities" do - render - assert_select "tr>td", text: "Title".to_s, count: 2 - assert_select "tr>td", text: "MyText".to_s, count: 2 - assert_select "tr>td", text: 2.to_s, count: 2 - assert_select "tr>td", text: nil.to_s, count: 2 - end -end diff --git a/spec/views/activities/new.html.erb_spec.rb b/spec/views/activities/new.html.erb_spec.rb deleted file mode 100644 index 34c98b59..00000000 --- a/spec/views/activities/new.html.erb_spec.rb +++ /dev/null @@ -1,27 +0,0 @@ -require 'rails_helper' - -RSpec.describe "activities/new", type: :view do - before(:each) do - assign(:activity, Activity.new( - title: "MyString", - description: "MyText", - status: 1, - activity_type: nil - )) - end - - it "renders new activity form" do - render - - assert_select "form[action=?][method=?]", activities_path, "post" do - - assert_select "input[name=?]", "activity[title]" - - assert_select "textarea[name=?]", "activity[description]" - - assert_select "input[name=?]", "activity[status]" - - assert_select "input[name=?]", "activity[activity_type_id]" - end - end -end diff --git a/spec/views/activities/show.html.erb_spec.rb b/spec/views/activities/show.html.erb_spec.rb deleted file mode 100644 index 15671335..00000000 --- a/spec/views/activities/show.html.erb_spec.rb +++ /dev/null @@ -1,20 +0,0 @@ -require 'rails_helper' - -RSpec.describe "activities/show", type: :view do - before(:each) do - @activity = assign(:activity, Activity.create!( - title: "Title", - description: "MyText", - status: 2, - activity_type: nil - )) - end - - it "renders attributes in

" do - render - expect(rendered).to match(/Title/) - expect(rendered).to match(/MyText/) - expect(rendered).to match(/2/) - expect(rendered).to match(//) - end -end diff --git a/spec/views/activity_types/edit.html.erb_spec.rb b/spec/views/activity_types/edit.html.erb_spec.rb deleted file mode 100644 index fa976180..00000000 --- a/spec/views/activity_types/edit.html.erb_spec.rb +++ /dev/null @@ -1,18 +0,0 @@ -require 'rails_helper' - -RSpec.describe "activity_types/edit", type: :view do - before(:each) do - @activity_type = assign(:activity_type, ActivityType.create!( - title: "MyString" - )) - end - - it "renders the edit activity_type form" do - render - - assert_select "form[action=?][method=?]", activity_type_path(@activity_type), "post" do - - assert_select "input[name=?]", "activity_type[title]" - end - end -end diff --git a/spec/views/activity_types/index.html.erb_spec.rb b/spec/views/activity_types/index.html.erb_spec.rb deleted file mode 100644 index e9c50f77..00000000 --- a/spec/views/activity_types/index.html.erb_spec.rb +++ /dev/null @@ -1,19 +0,0 @@ -require 'rails_helper' - -RSpec.describe "activity_types/index", type: :view do - before(:each) do - assign(:activity_types, [ - ActivityType.create!( - title: "Title" - ), - ActivityType.create!( - title: "Title" - ) - ]) - end - - it "renders a list of activity_types" do - render - assert_select "tr>td", text: "Title".to_s, count: 2 - end -end diff --git a/spec/views/activity_types/new.html.erb_spec.rb b/spec/views/activity_types/new.html.erb_spec.rb deleted file mode 100644 index eef89c66..00000000 --- a/spec/views/activity_types/new.html.erb_spec.rb +++ /dev/null @@ -1,18 +0,0 @@ -require 'rails_helper' - -RSpec.describe "activity_types/new", type: :view do - before(:each) do - assign(:activity_type, ActivityType.new( - title: "MyString" - )) - end - - it "renders new activity_type form" do - render - - assert_select "form[action=?][method=?]", activity_types_path, "post" do - - assert_select "input[name=?]", "activity_type[title]" - end - end -end diff --git a/spec/views/activity_types/show.html.erb_spec.rb b/spec/views/activity_types/show.html.erb_spec.rb deleted file mode 100644 index cc754e4e..00000000 --- a/spec/views/activity_types/show.html.erb_spec.rb +++ /dev/null @@ -1,14 +0,0 @@ -require 'rails_helper' - -RSpec.describe "activity_types/show", type: :view do - before(:each) do - @activity_type = assign(:activity_type, ActivityType.create!( - title: "Title" - )) - end - - it "renders attributes in

" do - render - expect(rendered).to match(/Title/) - end -end diff --git a/spec/views/user_activities/edit.html.erb_spec.rb b/spec/views/user_activities/edit.html.erb_spec.rb deleted file mode 100644 index 8df9556d..00000000 --- a/spec/views/user_activities/edit.html.erb_spec.rb +++ /dev/null @@ -1,27 +0,0 @@ -require 'rails_helper' - -RSpec.describe "user_activities/edit", type: :view do - before(:each) do - @user_activity = assign(:user_activity, UserActivity.create!( - user: nil, - activity: nil, - interested: false, - active: false - )) - end - - it "renders the edit user_activity form" do - render - - assert_select "form[action=?][method=?]", user_activity_path(@user_activity), "post" do - - assert_select "input[name=?]", "user_activity[user_id]" - - assert_select "input[name=?]", "user_activity[activity_id]" - - assert_select "input[name=?]", "user_activity[interested]" - - assert_select "input[name=?]", "user_activity[active]" - end - end -end diff --git a/spec/views/user_activities/index.html.erb_spec.rb b/spec/views/user_activities/index.html.erb_spec.rb deleted file mode 100644 index 37434f63..00000000 --- a/spec/views/user_activities/index.html.erb_spec.rb +++ /dev/null @@ -1,28 +0,0 @@ -require 'rails_helper' - -RSpec.describe "user_activities/index", type: :view do - before(:each) do - assign(:user_activities, [ - UserActivity.create!( - user: nil, - activity: nil, - interested: false, - active: false - ), - UserActivity.create!( - user: nil, - activity: nil, - interested: false, - active: false - ) - ]) - end - - it "renders a list of user_activities" do - render - assert_select "tr>td", text: nil.to_s, count: 2 - assert_select "tr>td", text: nil.to_s, count: 2 - assert_select "tr>td", text: false.to_s, count: 2 - assert_select "tr>td", text: false.to_s, count: 2 - end -end diff --git a/spec/views/user_activities/new.html.erb_spec.rb b/spec/views/user_activities/new.html.erb_spec.rb deleted file mode 100644 index 924b69b7..00000000 --- a/spec/views/user_activities/new.html.erb_spec.rb +++ /dev/null @@ -1,27 +0,0 @@ -require 'rails_helper' - -RSpec.describe "user_activities/new", type: :view do - before(:each) do - assign(:user_activity, UserActivity.new( - user: nil, - activity: nil, - interested: false, - active: false - )) - end - - it "renders new user_activity form" do - render - - assert_select "form[action=?][method=?]", user_activities_path, "post" do - - assert_select "input[name=?]", "user_activity[user_id]" - - assert_select "input[name=?]", "user_activity[activity_id]" - - assert_select "input[name=?]", "user_activity[interested]" - - assert_select "input[name=?]", "user_activity[active]" - end - end -end diff --git a/spec/views/user_activities/show.html.erb_spec.rb b/spec/views/user_activities/show.html.erb_spec.rb deleted file mode 100644 index 898962ea..00000000 --- a/spec/views/user_activities/show.html.erb_spec.rb +++ /dev/null @@ -1,20 +0,0 @@ -require 'rails_helper' - -RSpec.describe "user_activities/show", type: :view do - before(:each) do - @user_activity = assign(:user_activity, UserActivity.create!( - user: nil, - activity: nil, - interested: false, - active: false - )) - end - - it "renders attributes in

" do - render - expect(rendered).to match(//) - expect(rendered).to match(//) - expect(rendered).to match(/false/) - expect(rendered).to match(/false/) - end -end From 0da11655a80a807ece117a9aae54519101a7a0bb Mon Sep 17 00:00:00 2001 From: ngsylar Date: Thu, 12 Nov 2020 17:09:18 -0300 Subject: [PATCH 18/82] Spec for UserActivity model --- app/controllers/activities_controller.rb | 2 +- app/models/user_activity.rb | 4 + app/views/activities/_activity.json.jbuilder | 2 +- app/views/activities/_form.html.erb | 9 +- app/views/activities/index.html.erb | 6 +- app/views/activities/show.html.erb | 9 +- .../20201112014423_create_activity_types.rb | 2 - .../20201112030653_create_activities.rb | 3 +- .../20201112030843_create_user_activities.rb | 2 - db/schema.rb | 7 +- features.html | 126 +++++++++--------- report.json | 2 +- spec/fixtures/activities.yml | 4 + spec/fixtures/users.yml | 11 ++ spec/models/user_activity_spec.rb | 38 +++++- 15 files changed, 139 insertions(+), 88 deletions(-) create mode 100644 spec/fixtures/activities.yml create mode 100644 spec/fixtures/users.yml diff --git a/app/controllers/activities_controller.rb b/app/controllers/activities_controller.rb index 31deb2e4..744f5008 100644 --- a/app/controllers/activities_controller.rb +++ b/app/controllers/activities_controller.rb @@ -69,6 +69,6 @@ def set_activity # Only allow a list of trusted parameters through. def activity_params - params.require(:activity).permit(:title, :description, :due_date, :status, :activity_type_id) + params.require(:activity).permit(:title, :description, :start_date, :end_date, :status, :activity_type_id) end end diff --git a/app/models/user_activity.rb b/app/models/user_activity.rb index 03943a3d..cea74cfc 100644 --- a/app/models/user_activity.rb +++ b/app/models/user_activity.rb @@ -1,4 +1,8 @@ class UserActivity < ApplicationRecord belongs_to :user belongs_to :activity + + # validates :user, presence: true + # validates :activity, presence: true + validates :activity, uniqueness: { scope: :user } end diff --git a/app/views/activities/_activity.json.jbuilder b/app/views/activities/_activity.json.jbuilder index d7784f97..6707942f 100644 --- a/app/views/activities/_activity.json.jbuilder +++ b/app/views/activities/_activity.json.jbuilder @@ -1,2 +1,2 @@ -json.extract! activity, :id, :title, :description, :due_date, :status, :activity_type_id, :created_at, :updated_at +json.extract! activity, :id, :title, :description, :start_date, :end_date, :status, :activity_type_id, :created_at, :updated_at json.url activity_url(activity, format: :json) diff --git a/app/views/activities/_form.html.erb b/app/views/activities/_form.html.erb index 96c094c1..9425ab83 100644 --- a/app/views/activities/_form.html.erb +++ b/app/views/activities/_form.html.erb @@ -22,8 +22,13 @@

- <%= form.label :due_date %> - <%= form.date_select :due_date %> + <%= form.label :start_date %> + <%= form.date_select :start_date %> +
+ +
+ <%= form.label :end_date %> + <%= form.date_select :end_date %>
diff --git a/app/views/activities/index.html.erb b/app/views/activities/index.html.erb index bd4c31de..b54e01e9 100644 --- a/app/views/activities/index.html.erb +++ b/app/views/activities/index.html.erb @@ -7,7 +7,8 @@ Title Description - Due date + Start date + End date Status Activity type @@ -19,7 +20,8 @@ <%= activity.title %> <%= activity.description %> - <%= activity.due_date %> + <%= activity.start_date %> + <%= activity.end_date %> <%= activity.status %> <%= activity.activity_type %> <%= link_to 'Show', activity %> diff --git a/app/views/activities/show.html.erb b/app/views/activities/show.html.erb index b58ba68d..c2a64cf8 100644 --- a/app/views/activities/show.html.erb +++ b/app/views/activities/show.html.erb @@ -11,8 +11,13 @@

- Due date: - <%= @activity.due_date %> + Start date: + <%= @activity.start_date %> +

+ +

+ End date: + <%= @activity.end_date %>

diff --git a/db/migrate/20201112014423_create_activity_types.rb b/db/migrate/20201112014423_create_activity_types.rb index 5bd3eaeb..5d9a226f 100644 --- a/db/migrate/20201112014423_create_activity_types.rb +++ b/db/migrate/20201112014423_create_activity_types.rb @@ -2,8 +2,6 @@ class CreateActivityTypes < ActiveRecord::Migration[5.2] def change create_table :activity_types do |t| t.string :title - - t.timestamps end end end diff --git a/db/migrate/20201112030653_create_activities.rb b/db/migrate/20201112030653_create_activities.rb index c6a7898e..67d6ed9c 100644 --- a/db/migrate/20201112030653_create_activities.rb +++ b/db/migrate/20201112030653_create_activities.rb @@ -3,7 +3,8 @@ def change create_table :activities do |t| t.string :title t.text :description - t.date :due_date + t.date :start_date + t.date :end_date t.integer :status t.references :activity_type, foreign_key: true diff --git a/db/migrate/20201112030843_create_user_activities.rb b/db/migrate/20201112030843_create_user_activities.rb index bb9a1d09..aa95b011 100644 --- a/db/migrate/20201112030843_create_user_activities.rb +++ b/db/migrate/20201112030843_create_user_activities.rb @@ -5,8 +5,6 @@ def change t.belongs_to :activity, foreign_key: true t.boolean :interested t.boolean :active - - t.timestamps end add_index :user_activities, %i[user_id activity_id], unique: true end diff --git a/db/schema.rb b/db/schema.rb index 7e075be2..d344ecf0 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -39,7 +39,8 @@ create_table "activities", force: :cascade do |t| t.string "title" t.text "description" - t.date "due_date" + t.date "start_date" + t.date "end_date" t.integer "status" t.bigint "activity_type_id" t.datetime "created_at", null: false @@ -49,8 +50,6 @@ create_table "activity_types", force: :cascade do |t| t.string "title" - t.datetime "created_at", null: false - t.datetime "updated_at", null: false end create_table "user_activities", force: :cascade do |t| @@ -58,8 +57,6 @@ t.bigint "activity_id" t.boolean "interested" t.boolean "active" - t.datetime "created_at", null: false - t.datetime "updated_at", null: false t.index ["activity_id"], name: "index_user_activities_on_activity_id" t.index ["user_id", "activity_id"], name: "index_user_activities_on_user_id_and_activity_id", unique: true t.index ["user_id"], name: "index_user_activities_on_user_id" diff --git a/features.html b/features.html index e379db88..ca98c1f4 100644 --- a/features.html +++ b/features.html @@ -303,70 +303,70 @@ - - - +function moveProgressBar(percentDone) { + $("cucumber-header").css('width', percentDone +"%"); +} +function makeRed(element_id) { + $('#'+element_id).css('background', '#C40D0D'); + $('#'+element_id).css('color', '#FFFFFF'); +} +function makeYellow(element_id) { + $('#'+element_id).css('background', '#FAF834'); + $('#'+element_id).css('color', '#000000'); +}

Cucumber Features

Expand All

Collapse All

# language: pt
#encoding: utf-8

Funcionalidade: Abrir solicitação de credenciamento

Como professor autenticado no sistema,
Quero poder abrir uma solicitação de credenciamento
Para que eu possa ser um professor credenciado

Contexto

  1. Dado que eu estou cadastrado e logado como "Lucas", "lucas@professor.com", "lucas123", "professor", "200000000"
    features/step_definitions/credenciamento_professores_steps.rb:8
  2. E que eu estou na página de abrir solicitação de credenciamento
    features/step_definitions/credenciamento_professores_steps.rb:30
    Can't find mapping from "de abrir solicitação de credenciamento" to a path.
    +Now, go and add a mapping in /mnt/c/Users/Fontenelle/Desktop/UnB/9 semestre/Engenharia de Software/secretaria_ppgi/features/support/paths.rb
    ./features/support/paths.rb:31:in `rescue in path_to'
    +./features/support/paths.rb:26:in `path_to'
    +./features/step_definitions/credenciamento_professores_steps.rb:31:in `/^que eu estou na página (.+)$/'
    +features/abrir_solicitacao_credenciamento.feature:11:in `E que eu estou na página de abrir solicitação de credenciamento'
    29        self.send(path_components.push('path').join('_').to_sym)
    +30      rescue NoMethodError, ArgumentError
    +31        raise "Can't find mapping from \"#{page_name}\" to a path.\n" +
    +32          "Now, go and add a mapping in #{__FILE__}"
    +33      end
    +34# gem install syntax to get syntax highlighting
features/abrir_solicitacao_credenciamento.feature:13

Cenário: Solicitação enviada com sucesso

  1. Quando eu anexo o arquivo "Formulário de Credenciamento.pdf" no campo 'Formulario'
    features/abrir_solicitacao_credenciamento.feature:14
    Quando("eu anexo o arquivo {string} no campo {string}") do |string, string2|
    +  pending # Write code here that turns the phrase above into concrete actions
    +end
  2. E eu anexo o arquivo "CV Lattes.pdf" em 'CV Lattes'
    features/step_definitions/credenciamento_professores_steps.rb:34
  3. E eu clico em 'Enviar'
    features/step_definitions/credenciamento_professores_steps.rb:38
  4. Então eu devo ver "Solicitação enviada com sucesso"
    features/step_definitions/credenciamento_professores_steps.rb:67
  5. Print maroto :)
      +
    undefined method `manage' for #<Capybara::RackTest::Browser:0x00007fffcd7263a0> (NoMethodError)
    ./features/support/hooks.rb:22:in `add_browser_logs'
    +./features/support/hooks.rb:5:in `After'
    20    current_url = Capybara.current_url.to_s
    +21    # Gather browser logs
    +22    logs = page.driver.browser.manage.logs.get(:browser).map {|line| [line.level, line.message]}
    
    +23   # Remove warnings and info messages
    +24    logs.reject! { |line| ['WARNING', 'INFO'].include?(line.first) }
    +25# gem install syntax to get syntax highlighting
features/abrir_solicitacao_credenciamento.feature:19

Cenário: Solicitação não enviada (campo obrigatório em branco)

  1. Quando eu anexo o arquivo "Formulário de Credenciamento.pdf" no campo 'Formulario'
    features/abrir_solicitacao_credenciamento.feature:20
    Quando("eu anexo o arquivo {string} no campo {string}") do |string, string2|
    +  pending # Write code here that turns the phrase above into concrete actions
    +end
  2. E eu clico em 'Enviar'
    features/step_definitions/credenciamento_professores_steps.rb:38
  3. Então eu devo ver "Solicitação não enviada (campo obrigatório* em branco)"
    features/step_definitions/credenciamento_professores_steps.rb:67
  4. Print maroto :)
      +
    undefined method `manage' for #<Capybara::RackTest::Browser:0x00007fffce93fbb8> (NoMethodError)
    ./features/support/hooks.rb:22:in `add_browser_logs'
    +./features/support/hooks.rb:5:in `After'
    20    current_url = Capybara.current_url.to_s
    +21    # Gather browser logs
    +22    logs = page.driver.browser.manage.logs.get(:browser).map {|line| [line.level, line.message]}
    
    +23   # Remove warnings and info messages
    +24    logs.reject! { |line| ['WARNING', 'INFO'].include?(line.first) }
    +25# gem install syntax to get syntax highlighting
# language: pt
#encoding: utf-8

Funcionalidade: Definir o prazo de credenciamento dos professores

Como um administrador,
para que eu possa credenciar os professores,
eu gostaria de definir o prazo de credenciamento dos professores

Contexto

  1. Dado que eu esteja autenticado como usuario "admin"
    features/credenciamento_periodo.feature:10
    Dado("que eu esteja autenticado como usuario {string}") do |string|
    +  pending # Write code here that turns the phrase above into concrete actions
    +end
  2. E que esteja na página de credenciamento
    features/credenciamento_periodo.feature:11
    Dado("que esteja na página de credenciamento") do
    +  pending # Write code here that turns the phrase above into concrete actions
    +end
features/credenciamento_periodo.feature:13

Cenário: Definir prazo de credenciamento sem data

  1. Quando eu aperto o botão "Definir prazo de credenciamento"
    features/credenciamento_periodo.feature:14
    Quando("eu aperto o botão {string}") do |string|
    +  pending # Write code here that turns the phrase above into concrete actions
    +end
  2. E eu aperto o botão "Salvar período"
    features/credenciamento_periodo.feature:15
    Quando("eu aperto o botão {string}") do |string|
    +  pending # Write code here that turns the phrase above into concrete actions
    +end
  3. Então eu espero ver a mensagem "Insira uma data de início e uma data de término válidas."
    features/credenciamento_periodo.feature:16
    Então("eu espero ver a mensagem {string}") do |string|
    +  pending # Write code here that turns the phrase above into concrete actions
    +end
  4. Print maroto :)
      +
features/credenciamento_periodo.feature:18

Cenário: Definir prazo de credenciamento com data

  1. Quando eu aperto o botão "Definir prazo de credenciamento"
    features/credenciamento_periodo.feature:19
    Quando("eu aperto o botão {string}") do |string|
    +  pending # Write code here that turns the phrase above into concrete actions
    +end
  2. Quando eu adiciono um valor "Início" para "Data de Início"
    features/credenciamento_periodo.feature:20
    Quando("eu adiciono um valor {string} para {string}") do |string, string2|
    +  pending # Write code here that turns the phrase above into concrete actions
    +end
  3. E eu adiciono um valor "Término" para "Data de Término"
    features/credenciamento_periodo.feature:21
    Quando("eu adiciono um valor {string} para {string}") do |string, string2|
    +  pending # Write code here that turns the phrase above into concrete actions
    +end
  4. E eu aperto o botão "Salvar período"
    features/credenciamento_periodo.feature:22
    Quando("eu aperto o botão {string}") do |string|
    +  pending # Write code here that turns the phrase above into concrete actions
    +end
  5. Então eu espero ver a mensagem "Prazo cadastrado com sucesso."
    features/credenciamento_periodo.feature:23
    Então("eu espero ver a mensagem {string}") do |string|
    +  pending # Write code here that turns the phrase above into concrete actions
    +end
  6. Print maroto :)
      +
# language: pt
#encoding: utf-8

Funcionalidade: Gerenciar solicitações de credenciamento

Como um admnistrador do sistema
Quero visualizar uma solicitação de credencimento em aberto
Para decidir se vou aceitar ou recusar tal solicitação

Contexto

  1. Dado que as seguintes solicitações estejam pendentes:
    features/step_definitions/credenciamento_professores_steps.rb:1
    title
    due_date
    activity_type_id
    Solicitação 1
    02-Jan-2021
    Solicitação de credenciamento
    Solicitação 2
    02-Jan-2021
    Solicitação de credenciamento
    Solicitação 3
    02-Jan-2021
    Solicitação de credenciamento
    Solicitação 4
    02-Jan-2021
    Solicitação de credenciamento
    TODO (Cucumber::Pending)
    ./features/step_definitions/credenciamento_professores_steps.rb:2:in `"que as seguintes solicitações estejam pendentes:"'
    +features/gerenciar_solicitacoes_credenciamento.feature:10:in `Dado que as seguintes solicitações estejam pendentes:'
    0Dado "que as seguintes solicitações estejam pendentes:" do |table|
    +1    pending
    +2    # table.hashes.each do |row|
    
    +3    #     Activity.create!(row)
    +4# gem install syntax to get syntax highlighting
  2. E que eu estou cadastrado e logado como "Gabriel", "gabriel@admin.com", "gabriel123", "administrator", "200000000"
    features/step_definitions/credenciamento_professores_steps.rb:8
  3. E que eu estou na página de solicitações de credenciamento
    features/step_definitions/credenciamento_professores_steps.rb:30
features/gerenciar_solicitacoes_credenciamento.feature:20

Cenário: Aceitar uma solicitação de credenciamento

  1. Quando eu clico em "Solicitação 1"
    features/gerenciar_solicitacoes_credenciamento.feature:21
    Quando("eu clico em {string}") do |string|
    +  pending # Write code here that turns the phrase above into concrete actions
    +end
  2. Então eu devo estar na página da "Solicitação 1"
    features/step_definitions/credenciamento_professores_steps.rb:42
  3. Quando eu clico em 'Aprovar'
    features/step_definitions/credenciamento_professores_steps.rb:38
  4. Então eu devo estar na página de solicitações de credenciamento
    features/step_definitions/credenciamento_professores_steps.rb:42
  5. Quando eu desmarco os seguintes estados: Rejeitadas, Reformulação
    features/gerenciar_solicitacoes_credenciamento.feature:25
    Quando("eu desmarco os seguintes estados: Rejeitadas, Reformulação") do
    +  pending # Write code here that turns the phrase above into concrete actions
    +end
  6. E eu marco os seguintes estados: Aprovadas
    features/gerenciar_solicitacoes_credenciamento.feature:26
    Quando("eu marco os seguintes estados: Aprovadas") do
    +  pending # Write code here that turns the phrase above into concrete actions
    +end
  7. E eu aperto 'Atualizar'
    features/step_definitions/credenciamento_professores_steps.rb:63
  8. Então eu devo ver "Solicitação 1"
    features/step_definitions/credenciamento_professores_steps.rb:67
  9. Print maroto :)
      +
features/gerenciar_solicitacoes_credenciamento.feature:30

Cenário: Recusar uma solicitação de credenciamento

  1. Quando eu clico em "Solicitação 2"
    features/gerenciar_solicitacoes_credenciamento.feature:31
    Quando("eu clico em {string}") do |string|
    +  pending # Write code here that turns the phrase above into concrete actions
    +end
  2. Então eu devo estar na página da "Solicitação 2"
    features/step_definitions/credenciamento_professores_steps.rb:42
  3. Quando eu clico em 'Rejeitar'
    features/step_definitions/credenciamento_professores_steps.rb:38
  4. Então eu devo estar na página de solicitações de credenciamento
    features/step_definitions/credenciamento_professores_steps.rb:42
  5. Quando eu desmarco os seguintes estados: Aprovadas, Reformulação
    features/gerenciar_solicitacoes_credenciamento.feature:35
    Quando("eu desmarco os seguintes estados: Aprovadas, Reformulação") do
    +  pending # Write code here that turns the phrase above into concrete actions
    +end
  6. E eu marco os seguintes estados: Rejeitadas
    features/gerenciar_solicitacoes_credenciamento.feature:36
    Quando("eu marco os seguintes estados: Rejeitadas") do
    +  pending # Write code here that turns the phrase above into concrete actions
    +end
  7. E eu aperto 'Atualizar'
    features/step_definitions/credenciamento_professores_steps.rb:63
  8. Então eu devo ver "Solicitação 2"
    features/step_definitions/credenciamento_professores_steps.rb:67
  9. Print maroto :)
      +
# language: pt
#encoding: utf-8

Funcionalidade: Disponibilizar os requisitos necessarios para credenciamento de professores

Como administrador autenticado no sistema,
Quero poder disponibilizar para os professores os requisitos necessários para o credenciamento
Para que eles possam dar procedimento ao credenciamento

Contexto

  1. Dado que eu esteja logado como administrador de email "gp@admin.com" e senha "123"
    features/requisitos_necessarios.feature:10
    Dado("que eu esteja logado como administrador de email {string} e senha {string}") do |string, string2|
    +  pending # Write code here that turns the phrase above into concrete actions
    +end
  2. E não existem requisitos selecionados na página principal
    features/requisitos_necessarios.feature:11
    Dado("não existem requisitos selecionados na página principal") do
    +  pending # Write code here that turns the phrase above into concrete actions
    +end
  3. Quando o administrador clicou no link para alterar documentos necessários para credenciamento
    features/requisitos_necessarios.feature:12
    Quando("o administrador clicou no link para alterar documentos necessários para credenciamento") do
    +  pending # Write code here that turns the phrase above into concrete actions
    +end
features/requisitos_necessarios.feature:14

Cenário: Os campos puderam ser selecionados

  1. Quando eu selecionar os campos
    features/requisitos_necessarios.feature:15
    Quando("eu selecionar os campos") do
    +  pending # Write code here that turns the phrase above into concrete actions
    +end
  2. E eu clicar no botão atualizar requisitos
    features/requisitos_necessarios.feature:16
    Quando("eu clicar no botão atualizar requisitos") do
    +  pending # Write code here that turns the phrase above into concrete actions
    +end
  3. Então eu devo voltar para a página principal aonde aparece meus requisitos selecionados
    features/requisitos_necessarios.feature:17
    Então("eu devo voltar para a página principal aonde aparece meus requisitos selecionados") do
    +  pending # Write code here that turns the phrase above into concrete actions
    +end
  4. Print maroto :)
      +
features/requisitos_necessarios.feature:19

Cenário: Não houveram mudanças feitas

  1. Quando eu não selecionar os campos
    features/requisitos_necessarios.feature:20
    Quando("eu não selecionar os campos") do
    +  pending # Write code here that turns the phrase above into concrete actions
    +end
  2. E eu clicar no botão atualizar requisitos
    features/requisitos_necessarios.feature:21
    Quando("eu clicar no botão atualizar requisitos") do
    +  pending # Write code here that turns the phrase above into concrete actions
    +end
  3. Então eu recebo uma mensagem dizendo que "não houveram mudanças"
    features/requisitos_necessarios.feature:22
    Então("eu recebo uma mensagem dizendo que {string}") do |string|
    +  pending # Write code here that turns the phrase above into concrete actions
    +end
  4. Print maroto :)
      +
# language: pt
#encoding: utf-8

Funcionalidade: Testar

features/spike.feature:5

Cenário:

  1. Dado que eu estou cadastrado e logado como "Gabriel", "gabriel@admin.com", "gabriel123", "administrator", "200000000"
    features/step_definitions/credenciamento_professores_steps.rb:8
  2. Print maroto :)
      +
\ No newline at end of file diff --git a/features/credenciamento_periodo.feature b/features/credenciamento_periodo.feature index 4535551e..f69e603d 100644 --- a/features/credenciamento_periodo.feature +++ b/features/credenciamento_periodo.feature @@ -8,24 +8,24 @@ Funcionalidade: Definir o prazo de credenciamento dos professores Contexto: Dado que existam os seguintes credenciamentos sem prazo definido: - | activity_title | user_full_name | - | Credenciamento 1 | Adalberto | - | Credenciamento 2 | Mariano | - | Credenciamento 3 | Joel | + | accreditation_title | user_full_name | + | Credenciamento 1 | Adalberto | + | Credenciamento 2 | Mariano | + | Credenciamento 3 | Joel | E que eu esteja cadastrado e logado como "Aécio", "aecio@admin.com", "aecio123", "administrator", "200000000" - E que esteja na página de prazos de credenciamento + E que esteja na página de credenciamentos Cenário: Definir prazo inserindo uma data válida Quando eu clico em "Credenciamento 2" Então eu devo estar na página de "Credenciamento 2" - Quando eu seleciono "2022-10-10" como data de 'Prazo' + Quando eu seleciono uma data posterior a atual em 'Prazo' E eu aperto 'Salvar' Então eu devo ver "Prazo cadastrado com sucesso" Cenário: Definir prazo inserindo data inválida Quando eu clico em "Credenciamento 3" Então eu devo estar na página de "Credenciamento 3" - Quando eu seleciono "1990-10-10" como data de 'Prazo' + Quando eu seleciono uma data anterior a atual em 'Prazo' E eu aperto 'Salvar' Então eu devo ver "Prazo não cadastrado - data inválida" \ No newline at end of file diff --git a/features/gerenciar_solicitacoes_credenciamento.feature b/features/gerenciar_solicitacoes_credenciamento.feature index 4bd19949..4e4d3108 100644 --- a/features/gerenciar_solicitacoes_credenciamento.feature +++ b/features/gerenciar_solicitacoes_credenciamento.feature @@ -8,18 +8,17 @@ Funcionalidade: Gerenciar solicitações de credenciamento Contexto: Dado que existam as seguintes solicitações: - | title | activity_type_title | - | Solicitação 1 | Solicitação de credenciamento | - | Solicitação 2 | Solicitação de credenciamento | - | Solicitação 3 | Solicitação de credenciamento | - | Solicitação 4 | Solicitação de credenciamento | + | user_full_name | status | + | Adalberto | Espera | + | Mariano | Espera | + | Joel | Espera | E que eu esteja cadastrado e logado como "Gabriel", "gabriel@admin.com", "gabriel123", "administrator", "200000000" E que eu esteja na página de solicitações de credenciamento Cenário: Aceitar uma solicitação de credenciamento - Quando eu clico em "Solicitação 1" - Então eu devo estar na página de "Solicitação 1" + Quando eu clico em "Adalberto" + Então eu devo estar na página de "Adalberto" Quando eu clico em 'Aprovar' Então eu devo estar na página de solicitações de credenciamento Quando eu desmarco os seguintes estados: Rejeitadas, Reformulação @@ -28,11 +27,11 @@ Funcionalidade: Gerenciar solicitações de credenciamento Então eu devo ver "Solicitação 1" Cenário: Recusar uma solicitação de credenciamento - Quando eu clico em "Solicitação 2" - Então eu devo estar na página de "Solicitação 2" + Quando eu clico em "Mariano" + Então eu devo estar na página de "Mariano" Quando eu clico em 'Rejeitar' Então eu devo estar na página de solicitações de credenciamento Quando eu desmarco os seguintes estados: Aprovadas, Reformulação E eu marco os seguintes estados: Rejeitadas E eu aperto 'Atualizar' - Então eu devo ver "Solicitação 2" + Então eu devo ver "Mariano" diff --git a/features/step_definitions/credenciamento_professores_steps.rb b/features/step_definitions/credenciamento_professores_steps.rb index 5ff79e50..2fead544 100644 --- a/features/step_definitions/credenciamento_professores_steps.rb +++ b/features/step_definitions/credenciamento_professores_steps.rb @@ -11,22 +11,16 @@ def with_scope(locator) World(WithinHelpers) Dado "que existam as seguintes solicitações:" do |table| - table.hashes.each do |row| - type = ActivityType.find_by(title: row['activity_type_title']) - if type == nil - type = ActivityType.create!(title: row['activity_type_title']) - end - Activity.create!(title: row['title'], activity_type_id: type.id) - end + pending + # table.hashes.each do |row| + # end end Dado "que existam os seguintes credenciamentos sem prazo definido:" do |table| type_id = ActivityType.create!(title: 'Credenciamento').id - table.hashes.each do |row| - act_id = Activity.create!(title: row['activity_title'], activity_type_id: type_id).id - usr_id = User.create!(full_name: row['user_full_name'], email: row['user_full_name']+"@professor.com", password: row['user_full_name']+"123", role: "professor", registration: "000000000").id - UserActivity.create!(activity_id: act_id, user_id: usr_id) - end + pending + # table.hashes.each do |row| + # end end Dado /^que eu esteja cadastrado e logado como (.*)$/ do |input| @@ -93,8 +87,14 @@ def with_scope(locator) fill_in(field, :with => text) end -Quando /^eu seleciono "([^"]*)" como data de '([^']*)'$/ do |date, field| - select_date(date, :from => field) +Quando /^eu seleciono uma data posterior a atual em '([^']*)'$/ do |field| + pending + # select_date(date, :from => field) +end + +ndo /^eu seleciono uma data anterior a atual em '([^']*)'$/ do |field| + pending + # select_date(date, :from => field) end Quando /^eu aperto '([^']*)'$/ do |button| diff --git a/report.json b/report.json index 0ae5eabe..43b1702d 100644 --- a/report.json +++ b/report.json @@ -1 +1 @@ -[{"id":"testar","uri":"features/spike.feature","keyword":"Funcionalidade","name":"Testar","description":"","line":4,"elements":[{"id":"testar;","keyword":"Cenário","name":"","description":"","line":5,"type":"scenario","before":[{"match":{"location":"capybara-3.33.0/lib/capybara/cucumber.rb:14"},"result":{"status":"passed","duration":19200}},{"match":{"location":"capybara-3.33.0/lib/capybara/cucumber.rb:22"},"result":{"status":"passed","duration":13800}}],"steps":[{"keyword":"Dado ","name":"que eu esteja cadastrado e logado como \"Gabriel\", \"gabriel@admin.com\", \"gabriel123\", \"administrator\", \"200000000\"","line":6,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:32"},"result":{"status":"passed","duration":358836300}},{"keyword":"E ","name":"que existam os seguintes credenciamentos sem prazo definido:","line":7,"rows":[{"cells":["activity_title","user_full_name"]},{"cells":["Credenciamento 1","Adalberto"]},{"cells":["Credenciamento 2","Mariano"]},{"cells":["Credenciamento 3","Joel"]}],"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:23"},"result":{"status":"passed","duration":110089000}}],"after":[{"embeddings":[{"mime_type":"image/png","data":"bG9nL3NjcmVlbnNob3RzLy5wbmc="}],"match":{"location":"features/support/hooks.rb:1"},"result":{"status":"passed","duration":455000}},{"match":{"location":"capybara-3.33.0/lib/capybara/cucumber.rb:10"},"result":{"status":"passed","duration":28600}}]}]}] \ No newline at end of file +[{"uri":"features/abrir_solicitacao_credenciamento.feature","id":"abrir-solicitação-de-credenciamento","keyword":"Funcionalidade","name":"Abrir solicitação de credenciamento","description":" Como professor autenticado no sistema,\n Quero poder abrir uma solicitação de credenciamento\n Para que eu possa ser um professor credenciado","line":4,"comments":[{"value":"#encoding: utf-8","line":2}],"elements":[{"keyword":"Contexto","name":"","description":"","line":9,"type":"background","before":[{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:14"},"result":{"status":"passed","duration":31300}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:22"},"result":{"status":"passed","duration":19200}}],"steps":[{"keyword":"Dado ","name":"que eu estou cadastrado e logado como \"Lucas\", \"lucas@professor.com\", \"lucas123\", \"professor\", \"200000000\"","line":10,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:8"},"result":{"status":"passed","duration":2212292400}},{"keyword":"E ","name":"que eu estou na página de abrir solicitação de credenciamento","line":11,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:30"},"result":{"status":"failed","error_message":"Can't find mapping from \"de abrir solicitação de credenciamento\" to a path.\nNow, go and add a mapping in /mnt/c/Users/Fontenelle/Desktop/UnB/9 semestre/Engenharia de Software/secretaria_ppgi/features/support/paths.rb (RuntimeError)\n./features/support/paths.rb:31:in `rescue in path_to'\n./features/support/paths.rb:26:in `path_to'\n./features/step_definitions/credenciamento_professores_steps.rb:31:in `/^que eu estou na página (.+)$/'\nfeatures/abrir_solicitacao_credenciamento.feature:11:in `E que eu estou na página de abrir solicitação de credenciamento'","duration":163700}}]},{"id":"abrir-solicitação-de-credenciamento;solicitação-enviada-com-sucesso","keyword":"Cenário","name":"Solicitação enviada com sucesso","description":"","line":13,"type":"scenario","steps":[{"keyword":"Quando ","name":"eu anexo o arquivo \"Formulário de Credenciamento.pdf\" no campo 'Formulario'","line":14,"match":{"location":"features/abrir_solicitacao_credenciamento.feature:14"},"result":{"status":"undefined"}},{"keyword":"E ","name":"eu anexo o arquivo \"CV Lattes.pdf\" em 'CV Lattes'","line":15,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:34"},"result":{"status":"skipped"}},{"keyword":"E ","name":"eu clico em 'Enviar'","line":16,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:38"},"result":{"status":"skipped"}},{"keyword":"Então ","name":"eu devo ver \"Solicitação enviada com sucesso\"","line":17,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:67"},"result":{"status":"skipped"}}],"after":[{"embeddings":[{"mime_type":"image/png","data":"bG9nL3NjcmVlbnNob3RzL3NvbGljaXRhb2VudmlhZGFjb21zdWNlc3NvLnBuZw=="}],"match":{"location":"features/support/hooks.rb:1"},"result":{"status":"failed","error_message":"undefined method `manage' for #\u003cCapybara::RackTest::Browser:0x00007fffcd7263a0\u003e (NoMethodError)\n./features/support/hooks.rb:22:in `add_browser_logs'\n./features/support/hooks.rb:5:in `After'","duration":367500}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:10"},"result":{"status":"passed","duration":24900}}]},{"keyword":"Contexto","name":"","description":"","line":9,"type":"background","before":[{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:14"},"result":{"status":"passed","duration":11000}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:22"},"result":{"status":"passed","duration":9200}}],"steps":[{"keyword":"Dado ","name":"que eu estou cadastrado e logado como \"Lucas\", \"lucas@professor.com\", \"lucas123\", \"professor\", \"200000000\"","line":10,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:8"},"result":{"status":"passed","duration":36932100}},{"keyword":"E ","name":"que eu estou na página de abrir solicitação de credenciamento","line":11,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:30"},"result":{"status":"failed","error_message":"Can't find mapping from \"de abrir solicitação de credenciamento\" to a path.\nNow, go and add a mapping in /mnt/c/Users/Fontenelle/Desktop/UnB/9 semestre/Engenharia de Software/secretaria_ppgi/features/support/paths.rb (RuntimeError)\n./features/support/paths.rb:31:in `rescue in path_to'\n./features/support/paths.rb:26:in `path_to'\n./features/step_definitions/credenciamento_professores_steps.rb:31:in `/^que eu estou na página (.+)$/'\nfeatures/abrir_solicitacao_credenciamento.feature:11:in `E que eu estou na página de abrir solicitação de credenciamento'","duration":125900}}]},{"id":"abrir-solicitação-de-credenciamento;solicitação-não-enviada-(campo-obrigatório-em-branco)","keyword":"Cenário","name":"Solicitação não enviada (campo obrigatório em branco)","description":"","line":19,"type":"scenario","steps":[{"keyword":"Quando ","name":"eu anexo o arquivo \"Formulário de Credenciamento.pdf\" no campo 'Formulario'","line":20,"match":{"location":"features/abrir_solicitacao_credenciamento.feature:20"},"result":{"status":"undefined"}},{"keyword":"E ","name":"eu clico em 'Enviar'","line":21,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:38"},"result":{"status":"skipped"}},{"keyword":"Então ","name":"eu devo ver \"Solicitação não enviada (campo obrigatório* em branco)\"","line":22,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:67"},"result":{"status":"skipped"}}],"after":[{"embeddings":[{"mime_type":"image/png","data":"bG9nL3NjcmVlbnNob3RzL3NvbGljaXRhb25vZW52aWFkYWNhbXBvb2JyaWdhdHJpb2VtYnJhbmNvLnBuZw=="}],"match":{"location":"features/support/hooks.rb:1"},"result":{"status":"failed","error_message":"undefined method `manage' for #\u003cCapybara::RackTest::Browser:0x00007fffce93fbb8\u003e (NoMethodError)\n./features/support/hooks.rb:22:in `add_browser_logs'\n./features/support/hooks.rb:5:in `After'","duration":1180900}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:10"},"result":{"status":"passed","duration":20800}}]}]},{"uri":"features/credenciamento_periodo.feature","id":"definir-o-prazo-de-credenciamento-dos-professores","keyword":"Funcionalidade","name":"Definir o prazo de credenciamento dos professores","description":" Como um administrador,\n para que eu possa credenciar os professores,\n eu gostaria de definir o prazo de credenciamento dos professores","line":4,"comments":[{"value":"#encoding: utf-8","line":2}],"elements":[{"keyword":"Contexto","name":"","description":"","line":9,"type":"background","before":[{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:14"},"result":{"status":"passed","duration":11000}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:22"},"result":{"status":"passed","duration":8700}}],"steps":[{"keyword":"Dado ","name":"que eu esteja autenticado como usuario \"admin\"","line":10,"match":{"location":"features/credenciamento_periodo.feature:10"},"result":{"status":"undefined"}},{"keyword":"E ","name":"que esteja na página de credenciamento","line":11,"match":{"location":"features/credenciamento_periodo.feature:11"},"result":{"status":"undefined"}}]},{"id":"definir-o-prazo-de-credenciamento-dos-professores;definir-prazo-de-credenciamento-sem-data","keyword":"Cenário","name":"Definir prazo de credenciamento sem data","description":"","line":13,"type":"scenario","steps":[{"keyword":"Quando ","name":"eu aperto o botão \"Definir prazo de credenciamento\"","line":14,"match":{"location":"features/credenciamento_periodo.feature:14"},"result":{"status":"undefined"}},{"keyword":"E ","name":"eu aperto o botão \"Salvar período\"","line":15,"match":{"location":"features/credenciamento_periodo.feature:15"},"result":{"status":"undefined"}},{"keyword":"Então ","name":"eu espero ver a mensagem \"Insira uma data de início e uma data de término válidas.\"","line":16,"match":{"location":"features/credenciamento_periodo.feature:16"},"result":{"status":"undefined"}}],"after":[{"embeddings":[{"mime_type":"image/png","data":"bG9nL3NjcmVlbnNob3RzL2RlZmluaXJwcmF6b2RlY3JlZGVuY2lhbWVudG9zZW1kYXRhLnBuZw=="}],"match":{"location":"features/support/hooks.rb:1"},"result":{"status":"passed","duration":217700}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:10"},"result":{"status":"passed","duration":34100}}]},{"keyword":"Contexto","name":"","description":"","line":9,"type":"background","before":[{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:14"},"result":{"status":"passed","duration":12100}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:22"},"result":{"status":"passed","duration":21000}}],"steps":[{"keyword":"Dado ","name":"que eu esteja autenticado como usuario \"admin\"","line":10,"match":{"location":"features/credenciamento_periodo.feature:10"},"result":{"status":"undefined"}},{"keyword":"E ","name":"que esteja na página de credenciamento","line":11,"match":{"location":"features/credenciamento_periodo.feature:11"},"result":{"status":"undefined"}}]},{"id":"definir-o-prazo-de-credenciamento-dos-professores;definir-prazo-de-credenciamento-com-data","keyword":"Cenário","name":"Definir prazo de credenciamento com data","description":"","line":18,"type":"scenario","steps":[{"keyword":"Quando ","name":"eu aperto o botão \"Definir prazo de credenciamento\"","line":19,"match":{"location":"features/credenciamento_periodo.feature:19"},"result":{"status":"undefined"}},{"keyword":"Quando ","name":"eu adiciono um valor \"Início\" para \"Data de Início\"","line":20,"match":{"location":"features/credenciamento_periodo.feature:20"},"result":{"status":"undefined"}},{"keyword":"E ","name":"eu adiciono um valor \"Término\" para \"Data de Término\"","line":21,"match":{"location":"features/credenciamento_periodo.feature:21"},"result":{"status":"undefined"}},{"keyword":"E ","name":"eu aperto o botão \"Salvar período\"","line":22,"match":{"location":"features/credenciamento_periodo.feature:22"},"result":{"status":"undefined"}},{"keyword":"Então ","name":"eu espero ver a mensagem \"Prazo cadastrado com sucesso.\"","line":23,"match":{"location":"features/credenciamento_periodo.feature:23"},"result":{"status":"undefined"}}],"after":[{"embeddings":[{"mime_type":"image/png","data":"bG9nL3NjcmVlbnNob3RzL2RlZmluaXJwcmF6b2RlY3JlZGVuY2lhbWVudG9jb21kYXRhLnBuZw=="}],"match":{"location":"features/support/hooks.rb:1"},"result":{"status":"passed","duration":219300}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:10"},"result":{"status":"passed","duration":23100}}]}]},{"uri":"features/gerenciar_solicitacoes_credenciamento.feature","id":"gerenciar-solicitações-de-credenciamento","keyword":"Funcionalidade","name":"Gerenciar solicitações de credenciamento","description":" Como um admnistrador do sistema\n Quero visualizar uma solicitação de credencimento em aberto\n Para decidir se vou aceitar ou recusar tal solicitação","line":4,"comments":[{"value":"#encoding: utf-8","line":2}],"elements":[{"keyword":"Contexto","name":"","description":"","line":9,"type":"background","before":[{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:14"},"result":{"status":"passed","duration":12900}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:22"},"result":{"status":"passed","duration":9800}}],"steps":[{"keyword":"Dado ","name":"que as seguintes solicitações estejam pendentes:","line":10,"rows":[{"cells":["title","due_date","activity_type_id"]},{"cells":["Solicitação 1","02-Jan-2021","Solicitação de credenciamento"]},{"cells":["Solicitação 2","02-Jan-2021","Solicitação de credenciamento"]},{"cells":["Solicitação 3","02-Jan-2021","Solicitação de credenciamento"]},{"cells":["Solicitação 4","02-Jan-2021","Solicitação de credenciamento"]}],"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:1"},"result":{"status":"pending","error_message":"TODO (Cucumber::Pending)\n./features/step_definitions/credenciamento_professores_steps.rb:2:in `\"que as seguintes solicitações estejam pendentes:\"'\nfeatures/gerenciar_solicitacoes_credenciamento.feature:10:in `Dado que as seguintes solicitações estejam pendentes:'","duration":496800}},{"keyword":"E ","name":"que eu estou cadastrado e logado como \"Gabriel\", \"gabriel@admin.com\", \"gabriel123\", \"administrator\", \"200000000\"","line":17,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:8"},"result":{"status":"skipped"}},{"keyword":"E ","name":"que eu estou na página de solicitações de credenciamento","line":18,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:30"},"result":{"status":"skipped"}}]},{"id":"gerenciar-solicitações-de-credenciamento;aceitar-uma-solicitação-de-credenciamento","keyword":"Cenário","name":"Aceitar uma solicitação de credenciamento","description":"","line":20,"type":"scenario","steps":[{"keyword":"Quando ","name":"eu clico em \"Solicitação 1\"","line":21,"match":{"location":"features/gerenciar_solicitacoes_credenciamento.feature:21"},"result":{"status":"undefined"}},{"keyword":"Então ","name":"eu devo estar na página da \"Solicitação 1\"","line":22,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:42"},"result":{"status":"skipped"}},{"keyword":"Quando ","name":"eu clico em 'Aprovar'","line":23,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:38"},"result":{"status":"skipped"}},{"keyword":"Então ","name":"eu devo estar na página de solicitações de credenciamento","line":24,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:42"},"result":{"status":"skipped"}},{"keyword":"Quando ","name":"eu desmarco os seguintes estados: Rejeitadas, Reformulação","line":25,"match":{"location":"features/gerenciar_solicitacoes_credenciamento.feature:25"},"result":{"status":"undefined"}},{"keyword":"E ","name":"eu marco os seguintes estados: Aprovadas","line":26,"match":{"location":"features/gerenciar_solicitacoes_credenciamento.feature:26"},"result":{"status":"undefined"}},{"keyword":"E ","name":"eu aperto 'Atualizar'","line":27,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:63"},"result":{"status":"skipped"}},{"keyword":"Então ","name":"eu devo ver \"Solicitação 1\"","line":28,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:67"},"result":{"status":"skipped"}}],"after":[{"embeddings":[{"mime_type":"image/png","data":"bG9nL3NjcmVlbnNob3RzL2FjZWl0YXJ1bWFzb2xpY2l0YW9kZWNyZWRlbmNpYW1lbnRvLnBuZw=="}],"match":{"location":"features/support/hooks.rb:1"},"result":{"status":"passed","duration":220200}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:10"},"result":{"status":"passed","duration":25200}}]},{"keyword":"Contexto","name":"","description":"","line":9,"type":"background","before":[{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:14"},"result":{"status":"passed","duration":15900}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:22"},"result":{"status":"passed","duration":12000}}],"steps":[{"keyword":"Dado ","name":"que as seguintes solicitações estejam pendentes:","line":10,"rows":[{"cells":["title","due_date","activity_type_id"]},{"cells":["Solicitação 1","02-Jan-2021","Solicitação de credenciamento"]},{"cells":["Solicitação 2","02-Jan-2021","Solicitação de credenciamento"]},{"cells":["Solicitação 3","02-Jan-2021","Solicitação de credenciamento"]},{"cells":["Solicitação 4","02-Jan-2021","Solicitação de credenciamento"]}],"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:1"},"result":{"status":"pending","error_message":"TODO (Cucumber::Pending)\n./features/step_definitions/credenciamento_professores_steps.rb:2:in `\"que as seguintes solicitações estejam pendentes:\"'\nfeatures/gerenciar_solicitacoes_credenciamento.feature:10:in `Dado que as seguintes solicitações estejam pendentes:'","duration":147300}},{"keyword":"E ","name":"que eu estou cadastrado e logado como \"Gabriel\", \"gabriel@admin.com\", \"gabriel123\", \"administrator\", \"200000000\"","line":17,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:8"},"result":{"status":"skipped"}},{"keyword":"E ","name":"que eu estou na página de solicitações de credenciamento","line":18,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:30"},"result":{"status":"skipped"}}]},{"id":"gerenciar-solicitações-de-credenciamento;recusar-uma-solicitação-de-credenciamento","keyword":"Cenário","name":"Recusar uma solicitação de credenciamento","description":"","line":30,"type":"scenario","steps":[{"keyword":"Quando ","name":"eu clico em \"Solicitação 2\"","line":31,"match":{"location":"features/gerenciar_solicitacoes_credenciamento.feature:31"},"result":{"status":"undefined"}},{"keyword":"Então ","name":"eu devo estar na página da \"Solicitação 2\"","line":32,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:42"},"result":{"status":"skipped"}},{"keyword":"Quando ","name":"eu clico em 'Rejeitar'","line":33,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:38"},"result":{"status":"skipped"}},{"keyword":"Então ","name":"eu devo estar na página de solicitações de credenciamento","line":34,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:42"},"result":{"status":"skipped"}},{"keyword":"Quando ","name":"eu desmarco os seguintes estados: Aprovadas, Reformulação","line":35,"match":{"location":"features/gerenciar_solicitacoes_credenciamento.feature:35"},"result":{"status":"undefined"}},{"keyword":"E ","name":"eu marco os seguintes estados: Rejeitadas","line":36,"match":{"location":"features/gerenciar_solicitacoes_credenciamento.feature:36"},"result":{"status":"undefined"}},{"keyword":"E ","name":"eu aperto 'Atualizar'","line":37,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:63"},"result":{"status":"skipped"}},{"keyword":"Então ","name":"eu devo ver \"Solicitação 2\"","line":38,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:67"},"result":{"status":"skipped"}}],"after":[{"embeddings":[{"mime_type":"image/png","data":"bG9nL3NjcmVlbnNob3RzL3JlY3VzYXJ1bWFzb2xpY2l0YW9kZWNyZWRlbmNpYW1lbnRvLnBuZw=="}],"match":{"location":"features/support/hooks.rb:1"},"result":{"status":"passed","duration":191900}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:10"},"result":{"status":"passed","duration":25600}}]}]},{"uri":"features/requisitos_necessarios.feature","id":"disponibilizar-os-requisitos-necessarios-para-credenciamento-de-professores","keyword":"Funcionalidade","name":"Disponibilizar os requisitos necessarios para credenciamento de professores","description":" Como administrador autenticado no sistema,\n Quero poder disponibilizar para os professores os requisitos necessários para o credenciamento\n Para que eles possam dar procedimento ao credenciamento","line":4,"comments":[{"value":"#encoding: utf-8","line":2}],"elements":[{"keyword":"Contexto","name":"","description":"","line":9,"type":"background","before":[{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:14"},"result":{"status":"passed","duration":12000}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:22"},"result":{"status":"passed","duration":12700}}],"steps":[{"keyword":"Dado ","name":"que eu esteja logado como administrador de email \"gp@admin.com\" e senha \"123\"","line":10,"match":{"location":"features/requisitos_necessarios.feature:10"},"result":{"status":"undefined"}},{"keyword":"E ","name":"não existem requisitos selecionados na página principal","line":11,"match":{"location":"features/requisitos_necessarios.feature:11"},"result":{"status":"undefined"}},{"keyword":"Quando ","name":"o administrador clicou no link para alterar documentos necessários para credenciamento","line":12,"match":{"location":"features/requisitos_necessarios.feature:12"},"result":{"status":"undefined"}}]},{"id":"disponibilizar-os-requisitos-necessarios-para-credenciamento-de-professores;os-campos-puderam-ser-selecionados","keyword":"Cenário","name":"Os campos puderam ser selecionados","description":"","line":14,"type":"scenario","steps":[{"keyword":"Quando ","name":"eu selecionar os campos","line":15,"match":{"location":"features/requisitos_necessarios.feature:15"},"result":{"status":"undefined"}},{"keyword":"E ","name":"eu clicar no botão atualizar requisitos","line":16,"match":{"location":"features/requisitos_necessarios.feature:16"},"result":{"status":"undefined"}},{"keyword":"Então ","name":"eu devo voltar para a página principal aonde aparece meus requisitos selecionados","line":17,"match":{"location":"features/requisitos_necessarios.feature:17"},"result":{"status":"undefined"}}],"after":[{"embeddings":[{"mime_type":"image/png","data":"bG9nL3NjcmVlbnNob3RzL29zY2FtcG9zcHVkZXJhbXNlcnNlbGVjaW9uYWRvcy5wbmc="}],"match":{"location":"features/support/hooks.rb:1"},"result":{"status":"passed","duration":2373100}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:10"},"result":{"status":"passed","duration":40300}}]},{"keyword":"Contexto","name":"","description":"","line":9,"type":"background","before":[{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:14"},"result":{"status":"passed","duration":15100}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:22"},"result":{"status":"passed","duration":9600}}],"steps":[{"keyword":"Dado ","name":"que eu esteja logado como administrador de email \"gp@admin.com\" e senha \"123\"","line":10,"match":{"location":"features/requisitos_necessarios.feature:10"},"result":{"status":"undefined"}},{"keyword":"E ","name":"não existem requisitos selecionados na página principal","line":11,"match":{"location":"features/requisitos_necessarios.feature:11"},"result":{"status":"undefined"}},{"keyword":"Quando ","name":"o administrador clicou no link para alterar documentos necessários para credenciamento","line":12,"match":{"location":"features/requisitos_necessarios.feature:12"},"result":{"status":"undefined"}}]},{"id":"disponibilizar-os-requisitos-necessarios-para-credenciamento-de-professores;não-houveram-mudanças-feitas","keyword":"Cenário","name":"Não houveram mudanças feitas","description":"","line":19,"type":"scenario","steps":[{"keyword":"Quando ","name":"eu não selecionar os campos","line":20,"match":{"location":"features/requisitos_necessarios.feature:20"},"result":{"status":"undefined"}},{"keyword":"E ","name":"eu clicar no botão atualizar requisitos","line":21,"match":{"location":"features/requisitos_necessarios.feature:21"},"result":{"status":"undefined"}},{"keyword":"Então ","name":"eu recebo uma mensagem dizendo que \"não houveram mudanças\"","line":22,"match":{"location":"features/requisitos_necessarios.feature:22"},"result":{"status":"undefined"}}],"after":[{"embeddings":[{"mime_type":"image/png","data":"bG9nL3NjcmVlbnNob3RzL25vaG91dmVyYW1tdWRhbmFzZmVpdGFzLnBuZw=="}],"match":{"location":"features/support/hooks.rb:1"},"result":{"status":"passed","duration":214700}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:10"},"result":{"status":"passed","duration":18600}}]}]},{"uri":"features/spike.feature","id":"testar","keyword":"Funcionalidade","name":"Testar","description":"","line":4,"comments":[{"value":"#encoding: utf-8","line":2}],"elements":[{"id":"testar;","keyword":"Cenário","name":"","description":"","line":5,"type":"scenario","before":[{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:14"},"result":{"status":"passed","duration":18600}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:22"},"result":{"status":"passed","duration":13400}}],"steps":[{"keyword":"Dado ","name":"que eu estou cadastrado e logado como \"Gabriel\", \"gabriel@admin.com\", \"gabriel123\", \"administrator\", \"200000000\"","line":6,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:8"},"result":{"status":"passed","duration":39523000}}],"after":[{"embeddings":[{"mime_type":"image/png","data":"bG9nL3NjcmVlbnNob3RzLy5wbmc="}],"match":{"location":"features/support/hooks.rb:1"},"result":{"status":"passed","duration":223700}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:10"},"result":{"status":"passed","duration":19100}}]}]}] \ No newline at end of file diff --git a/spec/controllers/accreditations_controller_spec.rb b/spec/controllers/accreditations_controller_spec.rb new file mode 100644 index 00000000..74a354df --- /dev/null +++ b/spec/controllers/accreditations_controller_spec.rb @@ -0,0 +1,141 @@ +require 'rails_helper' + +# This spec was generated by rspec-rails when you ran the scaffold generator. +# It demonstrates how one might use RSpec to specify the controller code that +# was generated by Rails when you ran the scaffold generator. +# +# It assumes that the implementation code is generated by the rails scaffold +# generator. If you are using any extension libraries to generate different +# controller code, this generated spec may or may not pass. +# +# It only uses APIs available in rails and/or rspec-rails. There are a number +# of tools you can use to make these specs even more expressive, but we're +# sticking to rails and rspec-rails APIs to keep things simple and stable. +# +# Compared to earlier versions of this generator, there is very limited use of +# stubs and message expectations in this spec. Stubs are only used when there +# is no simpler way to get a handle on the object needed for the example. +# Message expectations are only used when there is no simpler way to specify +# that an instance is receiving a specific message. +# +# Also compared to earlier versions of this generator, there are no longer any +# expectations of assigns and templates rendered. These features have been +# removed from Rails core in Rails 5, but can be added back in via the +# `rails-controller-testing` gem. + +RSpec.describe AccreditationsController, type: :controller do + + # This should return the minimal set of attributes required to create a valid + # Accreditation. As you add validations to Accreditation, be sure to + # adjust the attributes here as well. + let(:valid_attributes) { + skip("Add a hash of attributes valid for your model") + } + + let(:invalid_attributes) { + skip("Add a hash of attributes invalid for your model") + } + + # This should return the minimal set of values that should be in the session + # in order to pass any filters (e.g. authentication) defined in + # AccreditationsController. Be sure to keep this updated too. + let(:valid_session) { {} } + + describe "GET #index" do + it "returns a success response" do + Accreditation.create! valid_attributes + get :index, params: {}, session: valid_session + expect(response).to be_successful + end + end + + describe "GET #show" do + it "returns a success response" do + accreditation = Accreditation.create! valid_attributes + get :show, params: {id: accreditation.to_param}, session: valid_session + expect(response).to be_successful + end + end + + describe "GET #new" do + it "returns a success response" do + get :new, params: {}, session: valid_session + expect(response).to be_successful + end + end + + describe "GET #edit" do + it "returns a success response" do + accreditation = Accreditation.create! valid_attributes + get :edit, params: {id: accreditation.to_param}, session: valid_session + expect(response).to be_successful + end + end + + describe "POST #create" do + context "with valid params" do + it "creates a new Accreditation" do + expect { + post :create, params: {accreditation: valid_attributes}, session: valid_session + }.to change(Accreditation, :count).by(1) + end + + it "redirects to the created accreditation" do + post :create, params: {accreditation: valid_attributes}, session: valid_session + expect(response).to redirect_to(Accreditation.last) + end + end + + context "with invalid params" do + it "returns a success response (i.e. to display the 'new' template)" do + post :create, params: {accreditation: invalid_attributes}, session: valid_session + expect(response).to be_successful + end + end + end + + describe "PUT #update" do + context "with valid params" do + let(:new_attributes) { + skip("Add a hash of attributes valid for your model") + } + + it "updates the requested accreditation" do + accreditation = Accreditation.create! valid_attributes + put :update, params: {id: accreditation.to_param, accreditation: new_attributes}, session: valid_session + accreditation.reload + skip("Add assertions for updated state") + end + + it "redirects to the accreditation" do + accreditation = Accreditation.create! valid_attributes + put :update, params: {id: accreditation.to_param, accreditation: valid_attributes}, session: valid_session + expect(response).to redirect_to(accreditation) + end + end + + context "with invalid params" do + it "returns a success response (i.e. to display the 'edit' template)" do + accreditation = Accreditation.create! valid_attributes + put :update, params: {id: accreditation.to_param, accreditation: invalid_attributes}, session: valid_session + expect(response).to be_successful + end + end + end + + describe "DELETE #destroy" do + it "destroys the requested accreditation" do + accreditation = Accreditation.create! valid_attributes + expect { + delete :destroy, params: {id: accreditation.to_param}, session: valid_session + }.to change(Accreditation, :count).by(-1) + end + + it "redirects to the accreditations list" do + accreditation = Accreditation.create! valid_attributes + delete :destroy, params: {id: accreditation.to_param}, session: valid_session + expect(response).to redirect_to(accreditations_url) + end + end + +end diff --git a/spec/controllers/activities_controller_spec.rb b/spec/controllers/activities_controller_spec.rb deleted file mode 100644 index 577dd807..00000000 --- a/spec/controllers/activities_controller_spec.rb +++ /dev/null @@ -1,6 +0,0 @@ -# require 'rails_helper' - -# describe ActivitiesController do -# describe 'create a new activity' do -# end -# end \ No newline at end of file diff --git a/spec/controllers/requirements_controller_spec.rb b/spec/controllers/requirements_controller_spec.rb new file mode 100644 index 00000000..996b41bd --- /dev/null +++ b/spec/controllers/requirements_controller_spec.rb @@ -0,0 +1,141 @@ +require 'rails_helper' + +# This spec was generated by rspec-rails when you ran the scaffold generator. +# It demonstrates how one might use RSpec to specify the controller code that +# was generated by Rails when you ran the scaffold generator. +# +# It assumes that the implementation code is generated by the rails scaffold +# generator. If you are using any extension libraries to generate different +# controller code, this generated spec may or may not pass. +# +# It only uses APIs available in rails and/or rspec-rails. There are a number +# of tools you can use to make these specs even more expressive, but we're +# sticking to rails and rspec-rails APIs to keep things simple and stable. +# +# Compared to earlier versions of this generator, there is very limited use of +# stubs and message expectations in this spec. Stubs are only used when there +# is no simpler way to get a handle on the object needed for the example. +# Message expectations are only used when there is no simpler way to specify +# that an instance is receiving a specific message. +# +# Also compared to earlier versions of this generator, there are no longer any +# expectations of assigns and templates rendered. These features have been +# removed from Rails core in Rails 5, but can be added back in via the +# `rails-controller-testing` gem. + +RSpec.describe RequirementsController, type: :controller do + + # This should return the minimal set of attributes required to create a valid + # Requirement. As you add validations to Requirement, be sure to + # adjust the attributes here as well. + let(:valid_attributes) { + skip("Add a hash of attributes valid for your model") + } + + let(:invalid_attributes) { + skip("Add a hash of attributes invalid for your model") + } + + # This should return the minimal set of values that should be in the session + # in order to pass any filters (e.g. authentication) defined in + # RequirementsController. Be sure to keep this updated too. + let(:valid_session) { {} } + + describe "GET #index" do + it "returns a success response" do + Requirement.create! valid_attributes + get :index, params: {}, session: valid_session + expect(response).to be_successful + end + end + + describe "GET #show" do + it "returns a success response" do + requirement = Requirement.create! valid_attributes + get :show, params: {id: requirement.to_param}, session: valid_session + expect(response).to be_successful + end + end + + describe "GET #new" do + it "returns a success response" do + get :new, params: {}, session: valid_session + expect(response).to be_successful + end + end + + describe "GET #edit" do + it "returns a success response" do + requirement = Requirement.create! valid_attributes + get :edit, params: {id: requirement.to_param}, session: valid_session + expect(response).to be_successful + end + end + + describe "POST #create" do + context "with valid params" do + it "creates a new Requirement" do + expect { + post :create, params: {requirement: valid_attributes}, session: valid_session + }.to change(Requirement, :count).by(1) + end + + it "redirects to the created requirement" do + post :create, params: {requirement: valid_attributes}, session: valid_session + expect(response).to redirect_to(Requirement.last) + end + end + + context "with invalid params" do + it "returns a success response (i.e. to display the 'new' template)" do + post :create, params: {requirement: invalid_attributes}, session: valid_session + expect(response).to be_successful + end + end + end + + describe "PUT #update" do + context "with valid params" do + let(:new_attributes) { + skip("Add a hash of attributes valid for your model") + } + + it "updates the requested requirement" do + requirement = Requirement.create! valid_attributes + put :update, params: {id: requirement.to_param, requirement: new_attributes}, session: valid_session + requirement.reload + skip("Add assertions for updated state") + end + + it "redirects to the requirement" do + requirement = Requirement.create! valid_attributes + put :update, params: {id: requirement.to_param, requirement: valid_attributes}, session: valid_session + expect(response).to redirect_to(requirement) + end + end + + context "with invalid params" do + it "returns a success response (i.e. to display the 'edit' template)" do + requirement = Requirement.create! valid_attributes + put :update, params: {id: requirement.to_param, requirement: invalid_attributes}, session: valid_session + expect(response).to be_successful + end + end + end + + describe "DELETE #destroy" do + it "destroys the requested requirement" do + requirement = Requirement.create! valid_attributes + expect { + delete :destroy, params: {id: requirement.to_param}, session: valid_session + }.to change(Requirement, :count).by(-1) + end + + it "redirects to the requirements list" do + requirement = Requirement.create! valid_attributes + delete :destroy, params: {id: requirement.to_param}, session: valid_session + expect(response).to redirect_to(requirements_url) + end + end + +end diff --git a/spec/controllers/sei_processes_controller_spec.rb b/spec/controllers/sei_processes_controller_spec.rb new file mode 100644 index 00000000..c6745941 --- /dev/null +++ b/spec/controllers/sei_processes_controller_spec.rb @@ -0,0 +1,141 @@ +require 'rails_helper' + +# This spec was generated by rspec-rails when you ran the scaffold generator. +# It demonstrates how one might use RSpec to specify the controller code that +# was generated by Rails when you ran the scaffold generator. +# +# It assumes that the implementation code is generated by the rails scaffold +# generator. If you are using any extension libraries to generate different +# controller code, this generated spec may or may not pass. +# +# It only uses APIs available in rails and/or rspec-rails. There are a number +# of tools you can use to make these specs even more expressive, but we're +# sticking to rails and rspec-rails APIs to keep things simple and stable. +# +# Compared to earlier versions of this generator, there is very limited use of +# stubs and message expectations in this spec. Stubs are only used when there +# is no simpler way to get a handle on the object needed for the example. +# Message expectations are only used when there is no simpler way to specify +# that an instance is receiving a specific message. +# +# Also compared to earlier versions of this generator, there are no longer any +# expectations of assigns and templates rendered. These features have been +# removed from Rails core in Rails 5, but can be added back in via the +# `rails-controller-testing` gem. + +RSpec.describe SeiProcessesController, type: :controller do + + # This should return the minimal set of attributes required to create a valid + # SeiProcess. As you add validations to SeiProcess, be sure to + # adjust the attributes here as well. + let(:valid_attributes) { + skip("Add a hash of attributes valid for your model") + } + + let(:invalid_attributes) { + skip("Add a hash of attributes invalid for your model") + } + + # This should return the minimal set of values that should be in the session + # in order to pass any filters (e.g. authentication) defined in + # SeiProcessesController. Be sure to keep this updated too. + let(:valid_session) { {} } + + describe "GET #index" do + it "returns a success response" do + SeiProcess.create! valid_attributes + get :index, params: {}, session: valid_session + expect(response).to be_successful + end + end + + describe "GET #show" do + it "returns a success response" do + sei_process = SeiProcess.create! valid_attributes + get :show, params: {id: sei_process.to_param}, session: valid_session + expect(response).to be_successful + end + end + + describe "GET #new" do + it "returns a success response" do + get :new, params: {}, session: valid_session + expect(response).to be_successful + end + end + + describe "GET #edit" do + it "returns a success response" do + sei_process = SeiProcess.create! valid_attributes + get :edit, params: {id: sei_process.to_param}, session: valid_session + expect(response).to be_successful + end + end + + describe "POST #create" do + context "with valid params" do + it "creates a new SeiProcess" do + expect { + post :create, params: {sei_process: valid_attributes}, session: valid_session + }.to change(SeiProcess, :count).by(1) + end + + it "redirects to the created sei_process" do + post :create, params: {sei_process: valid_attributes}, session: valid_session + expect(response).to redirect_to(SeiProcess.last) + end + end + + context "with invalid params" do + it "returns a success response (i.e. to display the 'new' template)" do + post :create, params: {sei_process: invalid_attributes}, session: valid_session + expect(response).to be_successful + end + end + end + + describe "PUT #update" do + context "with valid params" do + let(:new_attributes) { + skip("Add a hash of attributes valid for your model") + } + + it "updates the requested sei_process" do + sei_process = SeiProcess.create! valid_attributes + put :update, params: {id: sei_process.to_param, sei_process: new_attributes}, session: valid_session + sei_process.reload + skip("Add assertions for updated state") + end + + it "redirects to the sei_process" do + sei_process = SeiProcess.create! valid_attributes + put :update, params: {id: sei_process.to_param, sei_process: valid_attributes}, session: valid_session + expect(response).to redirect_to(sei_process) + end + end + + context "with invalid params" do + it "returns a success response (i.e. to display the 'edit' template)" do + sei_process = SeiProcess.create! valid_attributes + put :update, params: {id: sei_process.to_param, sei_process: invalid_attributes}, session: valid_session + expect(response).to be_successful + end + end + end + + describe "DELETE #destroy" do + it "destroys the requested sei_process" do + sei_process = SeiProcess.create! valid_attributes + expect { + delete :destroy, params: {id: sei_process.to_param}, session: valid_session + }.to change(SeiProcess, :count).by(-1) + end + + it "redirects to the sei_processes list" do + sei_process = SeiProcess.create! valid_attributes + delete :destroy, params: {id: sei_process.to_param}, session: valid_session + expect(response).to redirect_to(sei_processes_url) + end + end + +end diff --git a/spec/fixtures/activities.yml b/spec/fixtures/activities.yml deleted file mode 100644 index 8c00c3c8..00000000 --- a/spec/fixtures/activities.yml +++ /dev/null @@ -1,4 +0,0 @@ -accreditation: - id: 1 - title: 'Accreditation Request' - status: 'waiting' \ No newline at end of file diff --git a/spec/fixtures/activity_types.yml b/spec/fixtures/activity_types.yml deleted file mode 100644 index 6695aad0..00000000 --- a/spec/fixtures/activity_types.yml +++ /dev/null @@ -1,3 +0,0 @@ -accreditation: - id: 1 - title: 'Accreditation' \ No newline at end of file diff --git a/spec/fixtures/users.yml b/spec/fixtures/users.yml deleted file mode 100644 index e708224a..00000000 --- a/spec/fixtures/users.yml +++ /dev/null @@ -1,11 +0,0 @@ -admin: - id: 1 - full_name: 'Administrator' - role: 'administrator' - email: 'admin@admin.com' - -prof: - id: 2 - full_name: 'Professor' - role: 'professor' - email: 'professor@professor.com' \ No newline at end of file diff --git a/spec/helpers/accreditations_helper_spec.rb b/spec/helpers/accreditations_helper_spec.rb new file mode 100644 index 00000000..ef5ec4f9 --- /dev/null +++ b/spec/helpers/accreditations_helper_spec.rb @@ -0,0 +1,15 @@ +require 'rails_helper' + +# Specs in this file have access to a helper object that includes +# the AccreditationsHelper. For example: +# +# describe AccreditationsHelper do +# describe "string concat" do +# it "concats two strings with spaces" do +# expect(helper.concat_strings("this","that")).to eq("this that") +# end +# end +# end +RSpec.describe AccreditationsHelper, type: :helper do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/helpers/requirements_helper_spec.rb b/spec/helpers/requirements_helper_spec.rb new file mode 100644 index 00000000..56f186ef --- /dev/null +++ b/spec/helpers/requirements_helper_spec.rb @@ -0,0 +1,15 @@ +require 'rails_helper' + +# Specs in this file have access to a helper object that includes +# the RequirementsHelper. For example: +# +# describe RequirementsHelper do +# describe "string concat" do +# it "concats two strings with spaces" do +# expect(helper.concat_strings("this","that")).to eq("this that") +# end +# end +# end +RSpec.describe RequirementsHelper, type: :helper do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/helpers/sei_processes_helper_spec.rb b/spec/helpers/sei_processes_helper_spec.rb new file mode 100644 index 00000000..5bdfa905 --- /dev/null +++ b/spec/helpers/sei_processes_helper_spec.rb @@ -0,0 +1,15 @@ +require 'rails_helper' + +# Specs in this file have access to a helper object that includes +# the SeiProcessesHelper. For example: +# +# describe SeiProcessesHelper do +# describe "string concat" do +# it "concats two strings with spaces" do +# expect(helper.concat_strings("this","that")).to eq("this that") +# end +# end +# end +RSpec.describe SeiProcessesHelper, type: :helper do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/models/accreditation_spec.rb b/spec/models/accreditation_spec.rb new file mode 100644 index 00000000..64cf38c7 --- /dev/null +++ b/spec/models/accreditation_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe Accreditation, type: :model do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/models/requirement_spec.rb b/spec/models/requirement_spec.rb new file mode 100644 index 00000000..73bc0c89 --- /dev/null +++ b/spec/models/requirement_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe Requirement, type: :model do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/models/sei_process_spec.rb b/spec/models/sei_process_spec.rb new file mode 100644 index 00000000..afb8155d --- /dev/null +++ b/spec/models/sei_process_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe SeiProcess, type: :model do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/rails_helper.rb b/spec/rails_helper.rb index 00345af7..b06351ba 100644 --- a/spec/rails_helper.rb +++ b/spec/rails_helper.rb @@ -1,7 +1,9 @@ # This file is copied to spec/ when you run 'rails generate rspec:install' require 'spec_helper' ENV['RAILS_ENV'] ||= 'test' + require File.expand_path('../config/environment', __dir__) + # Prevent database truncation if the environment is production abort("The Rails environment is running in production mode!") if Rails.env.production? require 'rspec/rails' @@ -20,7 +22,7 @@ # directory. Alternatively, in the individual `*_spec.rb` files, manually # require only the support files necessary. # -# Dir[Rails.root.join('spec', 'support', '**', '*.rb')].sort.each { |f| require f } +# Dir[Rails.root.join('spec', 'support', '**', '*.rb')].each { |f| require f } # Checks for pending migrations and applies them before tests are run. # If you are not using ActiveRecord, you can remove these lines. @@ -39,9 +41,6 @@ # instead of true. config.use_transactional_fixtures = true - # You can uncomment this line to turn off ActiveRecord support entirely. - # config.use_active_record = false - # RSpec Rails can automatically mix in different behaviours to your tests # based on their file location, for example enabling you to call `get` and # `post` in specs under `spec/controllers`. @@ -49,7 +48,7 @@ # You can disable this behaviour by removing the line below, and instead # explicitly tag your specs with their type, e.g.: # - # RSpec.describe UsersController, type: :controller do + # RSpec.describe UsersController, :type => :controller do # # ... # end # diff --git a/spec/requests/accreditations_spec.rb b/spec/requests/accreditations_spec.rb new file mode 100644 index 00000000..ce707660 --- /dev/null +++ b/spec/requests/accreditations_spec.rb @@ -0,0 +1,10 @@ +require 'rails_helper' + +RSpec.describe "Accreditations", type: :request do + describe "GET /accreditations" do + it "works! (now write some real specs)" do + get accreditations_path + expect(response).to have_http_status(200) + end + end +end diff --git a/spec/requests/requirements_spec.rb b/spec/requests/requirements_spec.rb new file mode 100644 index 00000000..8385b9f4 --- /dev/null +++ b/spec/requests/requirements_spec.rb @@ -0,0 +1,10 @@ +require 'rails_helper' + +RSpec.describe "Requirements", type: :request do + describe "GET /requirements" do + it "works! (now write some real specs)" do + get requirements_path + expect(response).to have_http_status(200) + end + end +end diff --git a/spec/requests/sei_processes_spec.rb b/spec/requests/sei_processes_spec.rb new file mode 100644 index 00000000..a68a3630 --- /dev/null +++ b/spec/requests/sei_processes_spec.rb @@ -0,0 +1,10 @@ +require 'rails_helper' + +RSpec.describe "SeiProcesses", type: :request do + describe "GET /sei_processes" do + it "works! (now write some real specs)" do + get sei_processes_path + expect(response).to have_http_status(200) + end + end +end diff --git a/spec/routing/accreditations_routing_spec.rb b/spec/routing/accreditations_routing_spec.rb new file mode 100644 index 00000000..fe8a17b7 --- /dev/null +++ b/spec/routing/accreditations_routing_spec.rb @@ -0,0 +1,38 @@ +require "rails_helper" + +RSpec.describe AccreditationsController, type: :routing do + describe "routing" do + it "routes to #index" do + expect(:get => "/accreditations").to route_to("accreditations#index") + end + + it "routes to #new" do + expect(:get => "/accreditations/new").to route_to("accreditations#new") + end + + it "routes to #show" do + expect(:get => "/accreditations/1").to route_to("accreditations#show", :id => "1") + end + + it "routes to #edit" do + expect(:get => "/accreditations/1/edit").to route_to("accreditations#edit", :id => "1") + end + + + it "routes to #create" do + expect(:post => "/accreditations").to route_to("accreditations#create") + end + + it "routes to #update via PUT" do + expect(:put => "/accreditations/1").to route_to("accreditations#update", :id => "1") + end + + it "routes to #update via PATCH" do + expect(:patch => "/accreditations/1").to route_to("accreditations#update", :id => "1") + end + + it "routes to #destroy" do + expect(:delete => "/accreditations/1").to route_to("accreditations#destroy", :id => "1") + end + end +end diff --git a/spec/routing/requirements_routing_spec.rb b/spec/routing/requirements_routing_spec.rb new file mode 100644 index 00000000..8ce5d654 --- /dev/null +++ b/spec/routing/requirements_routing_spec.rb @@ -0,0 +1,38 @@ +require "rails_helper" + +RSpec.describe RequirementsController, type: :routing do + describe "routing" do + it "routes to #index" do + expect(:get => "/requirements").to route_to("requirements#index") + end + + it "routes to #new" do + expect(:get => "/requirements/new").to route_to("requirements#new") + end + + it "routes to #show" do + expect(:get => "/requirements/1").to route_to("requirements#show", :id => "1") + end + + it "routes to #edit" do + expect(:get => "/requirements/1/edit").to route_to("requirements#edit", :id => "1") + end + + + it "routes to #create" do + expect(:post => "/requirements").to route_to("requirements#create") + end + + it "routes to #update via PUT" do + expect(:put => "/requirements/1").to route_to("requirements#update", :id => "1") + end + + it "routes to #update via PATCH" do + expect(:patch => "/requirements/1").to route_to("requirements#update", :id => "1") + end + + it "routes to #destroy" do + expect(:delete => "/requirements/1").to route_to("requirements#destroy", :id => "1") + end + end +end diff --git a/spec/routing/sei_processes_routing_spec.rb b/spec/routing/sei_processes_routing_spec.rb new file mode 100644 index 00000000..d7e8e8cc --- /dev/null +++ b/spec/routing/sei_processes_routing_spec.rb @@ -0,0 +1,38 @@ +require "rails_helper" + +RSpec.describe SeiProcessesController, type: :routing do + describe "routing" do + it "routes to #index" do + expect(:get => "/sei_processes").to route_to("sei_processes#index") + end + + it "routes to #new" do + expect(:get => "/sei_processes/new").to route_to("sei_processes#new") + end + + it "routes to #show" do + expect(:get => "/sei_processes/1").to route_to("sei_processes#show", :id => "1") + end + + it "routes to #edit" do + expect(:get => "/sei_processes/1/edit").to route_to("sei_processes#edit", :id => "1") + end + + + it "routes to #create" do + expect(:post => "/sei_processes").to route_to("sei_processes#create") + end + + it "routes to #update via PUT" do + expect(:put => "/sei_processes/1").to route_to("sei_processes#update", :id => "1") + end + + it "routes to #update via PATCH" do + expect(:patch => "/sei_processes/1").to route_to("sei_processes#update", :id => "1") + end + + it "routes to #destroy" do + expect(:delete => "/sei_processes/1").to route_to("sei_processes#destroy", :id => "1") + end + end +end diff --git a/spec/views/accreditations/edit.html.erb_spec.rb b/spec/views/accreditations/edit.html.erb_spec.rb new file mode 100644 index 00000000..a8d817ec --- /dev/null +++ b/spec/views/accreditations/edit.html.erb_spec.rb @@ -0,0 +1,18 @@ +require 'rails_helper' + +RSpec.describe "accreditations/edit", type: :view do + before(:each) do + @accreditation = assign(:accreditation, Accreditation.create!( + :user => nil + )) + end + + it "renders the edit accreditation form" do + render + + assert_select "form[action=?][method=?]", accreditation_path(@accreditation), "post" do + + assert_select "input[name=?]", "accreditation[user_id]" + end + end +end diff --git a/spec/views/accreditations/index.html.erb_spec.rb b/spec/views/accreditations/index.html.erb_spec.rb new file mode 100644 index 00000000..f06c58fe --- /dev/null +++ b/spec/views/accreditations/index.html.erb_spec.rb @@ -0,0 +1,19 @@ +require 'rails_helper' + +RSpec.describe "accreditations/index", type: :view do + before(:each) do + assign(:accreditations, [ + Accreditation.create!( + :user => nil + ), + Accreditation.create!( + :user => nil + ) + ]) + end + + it "renders a list of accreditations" do + render + assert_select "tr>td", :text => nil.to_s, :count => 2 + end +end diff --git a/spec/views/accreditations/new.html.erb_spec.rb b/spec/views/accreditations/new.html.erb_spec.rb new file mode 100644 index 00000000..c6921eed --- /dev/null +++ b/spec/views/accreditations/new.html.erb_spec.rb @@ -0,0 +1,18 @@ +require 'rails_helper' + +RSpec.describe "accreditations/new", type: :view do + before(:each) do + assign(:accreditation, Accreditation.new( + :user => nil + )) + end + + it "renders new accreditation form" do + render + + assert_select "form[action=?][method=?]", accreditations_path, "post" do + + assert_select "input[name=?]", "accreditation[user_id]" + end + end +end diff --git a/spec/views/accreditations/show.html.erb_spec.rb b/spec/views/accreditations/show.html.erb_spec.rb new file mode 100644 index 00000000..7a594d96 --- /dev/null +++ b/spec/views/accreditations/show.html.erb_spec.rb @@ -0,0 +1,14 @@ +require 'rails_helper' + +RSpec.describe "accreditations/show", type: :view do + before(:each) do + @accreditation = assign(:accreditation, Accreditation.create!( + :user => nil + )) + end + + it "renders attributes in

" do + render + expect(rendered).to match(//) + end +end diff --git a/spec/views/requirements/edit.html.erb_spec.rb b/spec/views/requirements/edit.html.erb_spec.rb new file mode 100644 index 00000000..e6e58848 --- /dev/null +++ b/spec/views/requirements/edit.html.erb_spec.rb @@ -0,0 +1,21 @@ +require 'rails_helper' + +RSpec.describe "requirements/edit", type: :view do + before(:each) do + @requirement = assign(:requirement, Requirement.create!( + :title => "MyString", + :content => "MyText" + )) + end + + it "renders the edit requirement form" do + render + + assert_select "form[action=?][method=?]", requirement_path(@requirement), "post" do + + assert_select "input[name=?]", "requirement[title]" + + assert_select "textarea[name=?]", "requirement[content]" + end + end +end diff --git a/spec/views/requirements/index.html.erb_spec.rb b/spec/views/requirements/index.html.erb_spec.rb new file mode 100644 index 00000000..6f4ce689 --- /dev/null +++ b/spec/views/requirements/index.html.erb_spec.rb @@ -0,0 +1,22 @@ +require 'rails_helper' + +RSpec.describe "requirements/index", type: :view do + before(:each) do + assign(:requirements, [ + Requirement.create!( + :title => "Title", + :content => "MyText" + ), + Requirement.create!( + :title => "Title", + :content => "MyText" + ) + ]) + end + + it "renders a list of requirements" do + render + assert_select "tr>td", :text => "Title".to_s, :count => 2 + assert_select "tr>td", :text => "MyText".to_s, :count => 2 + end +end diff --git a/spec/views/requirements/new.html.erb_spec.rb b/spec/views/requirements/new.html.erb_spec.rb new file mode 100644 index 00000000..4292120f --- /dev/null +++ b/spec/views/requirements/new.html.erb_spec.rb @@ -0,0 +1,21 @@ +require 'rails_helper' + +RSpec.describe "requirements/new", type: :view do + before(:each) do + assign(:requirement, Requirement.new( + :title => "MyString", + :content => "MyText" + )) + end + + it "renders new requirement form" do + render + + assert_select "form[action=?][method=?]", requirements_path, "post" do + + assert_select "input[name=?]", "requirement[title]" + + assert_select "textarea[name=?]", "requirement[content]" + end + end +end diff --git a/spec/views/requirements/show.html.erb_spec.rb b/spec/views/requirements/show.html.erb_spec.rb new file mode 100644 index 00000000..39cd138e --- /dev/null +++ b/spec/views/requirements/show.html.erb_spec.rb @@ -0,0 +1,16 @@ +require 'rails_helper' + +RSpec.describe "requirements/show", type: :view do + before(:each) do + @requirement = assign(:requirement, Requirement.create!( + :title => "Title", + :content => "MyText" + )) + end + + it "renders attributes in

" do + render + expect(rendered).to match(/Title/) + expect(rendered).to match(/MyText/) + end +end diff --git a/spec/views/sei_processes/edit.html.erb_spec.rb b/spec/views/sei_processes/edit.html.erb_spec.rb new file mode 100644 index 00000000..42e919f8 --- /dev/null +++ b/spec/views/sei_processes/edit.html.erb_spec.rb @@ -0,0 +1,24 @@ +require 'rails_helper' + +RSpec.describe "sei_processes/edit", type: :view do + before(:each) do + @sei_process = assign(:sei_process, SeiProcess.create!( + :user => nil, + :status => 1, + :code => "MyString" + )) + end + + it "renders the edit sei_process form" do + render + + assert_select "form[action=?][method=?]", sei_process_path(@sei_process), "post" do + + assert_select "input[name=?]", "sei_process[user_id]" + + assert_select "input[name=?]", "sei_process[status]" + + assert_select "input[name=?]", "sei_process[code]" + end + end +end diff --git a/spec/views/sei_processes/index.html.erb_spec.rb b/spec/views/sei_processes/index.html.erb_spec.rb new file mode 100644 index 00000000..62e3580c --- /dev/null +++ b/spec/views/sei_processes/index.html.erb_spec.rb @@ -0,0 +1,25 @@ +require 'rails_helper' + +RSpec.describe "sei_processes/index", type: :view do + before(:each) do + assign(:sei_processes, [ + SeiProcess.create!( + :user => nil, + :status => 2, + :code => "Code" + ), + SeiProcess.create!( + :user => nil, + :status => 2, + :code => "Code" + ) + ]) + end + + it "renders a list of sei_processes" do + render + assert_select "tr>td", :text => nil.to_s, :count => 2 + assert_select "tr>td", :text => 2.to_s, :count => 2 + assert_select "tr>td", :text => "Code".to_s, :count => 2 + end +end diff --git a/spec/views/sei_processes/new.html.erb_spec.rb b/spec/views/sei_processes/new.html.erb_spec.rb new file mode 100644 index 00000000..3fa87601 --- /dev/null +++ b/spec/views/sei_processes/new.html.erb_spec.rb @@ -0,0 +1,24 @@ +require 'rails_helper' + +RSpec.describe "sei_processes/new", type: :view do + before(:each) do + assign(:sei_process, SeiProcess.new( + :user => nil, + :status => 1, + :code => "MyString" + )) + end + + it "renders new sei_process form" do + render + + assert_select "form[action=?][method=?]", sei_processes_path, "post" do + + assert_select "input[name=?]", "sei_process[user_id]" + + assert_select "input[name=?]", "sei_process[status]" + + assert_select "input[name=?]", "sei_process[code]" + end + end +end diff --git a/spec/views/sei_processes/show.html.erb_spec.rb b/spec/views/sei_processes/show.html.erb_spec.rb new file mode 100644 index 00000000..d6a94c85 --- /dev/null +++ b/spec/views/sei_processes/show.html.erb_spec.rb @@ -0,0 +1,18 @@ +require 'rails_helper' + +RSpec.describe "sei_processes/show", type: :view do + before(:each) do + @sei_process = assign(:sei_process, SeiProcess.create!( + :user => nil, + :status => 2, + :code => "Code" + )) + end + + it "renders attributes in

" do + render + expect(rendered).to match(//) + expect(rendered).to match(/2/) + expect(rendered).to match(/Code/) + end +end From 45abb26b55682bb4163f6ede0a02677d898e7f91 Mon Sep 17 00:00:00 2001 From: Gabriel Preihs Date: Sat, 14 Nov 2020 11:57:26 -0300 Subject: [PATCH 22/82] Beginning requirement space with documents --- Gemfile.lock | 8 ++++++++ app/controllers/requirements_controller.rb | 6 ++++-- app/models/requirement.rb | 1 + app/views/requirements/edit.html.erb | 10 +++++++++- app/views/requirements/new.html.erb | 10 +++++++++- app/views/requirements/show.html.erb | 8 ++++++++ config/database.yml | 8 +++++--- spec/rails_helper.rb | 9 +++++---- spec/spec_helper.rb | 4 ++++ 9 files changed, 53 insertions(+), 11 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index d8f780f6..41c3f9b3 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -119,6 +119,7 @@ GEM erubi (1.10.0) execjs (2.7.0) ffi (1.13.1) + ffi (1.13.1-x64-mingw32) globalid (0.4.2) activesupport (>= 4.2.0) i18n (1.8.5) @@ -148,12 +149,16 @@ GEM mini_portile2 (2.4.0) minitest (5.14.2) msgpack (1.3.3) + msgpack (1.3.3-x64-mingw32) multi_test (0.1.2) nio4r (2.5.4) nokogiri (1.10.10) mini_portile2 (~> 2.4.0) + nokogiri (1.10.10-x64-mingw32) + mini_portile2 (~> 2.4.0) orm_adapter (0.5.0) pg (1.2.3) + pg (1.2.3-x64-mingw32) protobuf-cucumber (3.10.8) activesupport (>= 3.2) middleware @@ -252,6 +257,8 @@ GEM turbolinks-source (5.2.0) tzinfo (1.2.8) thread_safe (~> 0.1) + tzinfo-data (1.2020.4) + tzinfo (>= 1.0.0) uglifier (4.2.0) execjs (>= 0.3.0, < 3) warden (1.2.9) @@ -273,6 +280,7 @@ GEM PLATFORMS ruby + x64-mingw32 DEPENDENCIES bootsnap (>= 1.1.0) diff --git a/app/controllers/requirements_controller.rb b/app/controllers/requirements_controller.rb index b5d814b1..980f5785 100644 --- a/app/controllers/requirements_controller.rb +++ b/app/controllers/requirements_controller.rb @@ -25,7 +25,7 @@ def edit # POST /requirements.json def create @requirement = Requirement.new(requirement_params) - + respond_to do |format| if @requirement.save format.html { redirect_to @requirement, notice: 'Requirement was successfully created.' } @@ -35,6 +35,8 @@ def create format.json { render json: @requirement.errors, status: :unprocessable_entity } end end + # requirement = Requirement.create!(requirement_params) + # redirect_to requirement end # PATCH/PUT /requirements/1 @@ -69,6 +71,6 @@ def set_requirement # Never trust parameters from the scary internet, only allow the white list through. def requirement_params - params.require(:requirement).permit(:title, :content) + params.require(:requirement).permit(:title, :content, :documents) end end diff --git a/app/models/requirement.rb b/app/models/requirement.rb index b4b4c21c..6ae6949c 100644 --- a/app/models/requirement.rb +++ b/app/models/requirement.rb @@ -1,3 +1,4 @@ class Requirement < ApplicationRecord validates :title, presence: true + has_many_attached :documents end diff --git a/app/views/requirements/edit.html.erb b/app/views/requirements/edit.html.erb index b0f4687e..60e4ecf3 100644 --- a/app/views/requirements/edit.html.erb +++ b/app/views/requirements/edit.html.erb @@ -1,6 +1,14 @@

Editing Requirement

-<%= render 'form', requirement: @requirement %> +<%= form_for @requirement, html: { multipart: true } do |f| %> + <%= f.label "Título" %> + <%= f.text_field :title %> + <%= f.label "Conteúdo" %> + <%= f.text_field :title %> + <%= f.label "documentos" %> + <%= f.file_field :documents %> + <%= f.submit "Save", class: "btn btn-primary" %> +<% end %> <%= link_to 'Show', @requirement %> | <%= link_to 'Back', requirements_path %> diff --git a/app/views/requirements/new.html.erb b/app/views/requirements/new.html.erb index 22a9c0bd..979da25d 100644 --- a/app/views/requirements/new.html.erb +++ b/app/views/requirements/new.html.erb @@ -1,5 +1,13 @@

New Requirement

-<%= render 'form', requirement: @requirement %> +<%= form_for @requirement, html: { multipart: true } do |f| %> + <%= f.label "Título" %> + <%= f.text_field :title %> + <%= f.label "Conteúdo" %> + <%= f.text_field :content %> + <%= f.label :documents %> + <%= f.file_field :documents %> + <%= f.submit "Save", class: "btn btn-primary" %> +<% end %> <%= link_to 'Back', requirements_path %> diff --git a/app/views/requirements/show.html.erb b/app/views/requirements/show.html.erb index 4c90f729..c913e26d 100644 --- a/app/views/requirements/show.html.erb +++ b/app/views/requirements/show.html.erb @@ -10,5 +10,13 @@ <%= @requirement.content %>

+

documents:

+<% if @requirement.documents.attached? %> +

existem documentos acoplados

+ <% @requirement.documents.each do | document | %> + <%= link_to document.filename, rails_blob_path(document, disposition: 'attachment') %> + <% end %> +<% end %> + <%= link_to 'Edit', edit_requirement_path(@requirement) %> | <%= link_to 'Back', requirements_path %> diff --git a/config/database.yml b/config/database.yml index bbc24623..5501a631 100644 --- a/config/database.yml +++ b/config/database.yml @@ -20,6 +20,7 @@ default: &default # For details on connection pooling, see Rails configuration guide # http://guides.rubyonrails.org/configuring.html#database-pooling pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> + password: postgres development: <<: *default @@ -29,10 +30,10 @@ development: # To create additional roles in postgres see `$ createuser --help`. # When left blank, postgres will use the default role. This is # the same name as the operating system user that initialized the database. - #username: secretaria_ppgi + # username: postgres # The password associated with the postgres role (username). - #password: + password: postgres # Connect on a TCP socket. Omitted by default since the client uses a # domain socket that doesn't need configuration. Windows does not have @@ -70,7 +71,8 @@ test: # # On Heroku and other platform providers, you may have a full connection URL # available as an environment variable. For example: -# +# username: postgres +password: postgres # DATABASE_URL="postgres://myuser:mypass@localhost/somedatabase" # # You can use this database configuration with: diff --git a/spec/rails_helper.rb b/spec/rails_helper.rb index b06351ba..00345af7 100644 --- a/spec/rails_helper.rb +++ b/spec/rails_helper.rb @@ -1,9 +1,7 @@ # This file is copied to spec/ when you run 'rails generate rspec:install' require 'spec_helper' ENV['RAILS_ENV'] ||= 'test' - require File.expand_path('../config/environment', __dir__) - # Prevent database truncation if the environment is production abort("The Rails environment is running in production mode!") if Rails.env.production? require 'rspec/rails' @@ -22,7 +20,7 @@ # directory. Alternatively, in the individual `*_spec.rb` files, manually # require only the support files necessary. # -# Dir[Rails.root.join('spec', 'support', '**', '*.rb')].each { |f| require f } +# Dir[Rails.root.join('spec', 'support', '**', '*.rb')].sort.each { |f| require f } # Checks for pending migrations and applies them before tests are run. # If you are not using ActiveRecord, you can remove these lines. @@ -41,6 +39,9 @@ # instead of true. config.use_transactional_fixtures = true + # You can uncomment this line to turn off ActiveRecord support entirely. + # config.use_active_record = false + # RSpec Rails can automatically mix in different behaviours to your tests # based on their file location, for example enabling you to call `get` and # `post` in specs under `spec/controllers`. @@ -48,7 +49,7 @@ # You can disable this behaviour by removing the line below, and instead # explicitly tag your specs with their type, e.g.: # - # RSpec.describe UsersController, :type => :controller do + # RSpec.describe UsersController, type: :controller do # # ... # end # diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index ce33d66d..75cc2ced 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -66,6 +66,10 @@ # - http://rspec.info/blog/2014/05/notable-changes-in-rspec-3/#zero-monkey-patching-mode config.disable_monkey_patching! + # This setting enables warnings. It's recommended, but in some cases may + # be too noisy due to issues in dependencies. + config.warnings = true + # Many RSpec users commonly either run the entire suite or an individual # file, and it's useful to allow more verbose output when running an # individual spec file. From f70597d37491e5c4e36fc321da9872d55b6e15fc Mon Sep 17 00:00:00 2001 From: Gabriel Preihs Date: Sat, 14 Nov 2020 15:11:15 -0300 Subject: [PATCH 23/82] Permiting multiple documents --- app/controllers/requirements_controller.rb | 13 ++++++++++++- app/views/requirements/edit.html.erb | 15 ++++++++++++++- app/views/requirements/new.html.erb | 4 ++-- app/views/requirements/show.html.erb | 13 ++++++++----- config/routes.rb | 5 +++++ 5 files changed, 41 insertions(+), 9 deletions(-) diff --git a/app/controllers/requirements_controller.rb b/app/controllers/requirements_controller.rb index 980f5785..92512ac0 100644 --- a/app/controllers/requirements_controller.rb +++ b/app/controllers/requirements_controller.rb @@ -39,6 +39,17 @@ def create # redirect_to requirement end + # def delete_document_attachment + # puts "entrou" + # @document = ActiveStorage::Blob.find_signed(params[:id]) + # puts @document + # @document.purge_later + # respond_to do |format| + # format.html { redirect_to requirements_url, notice: 'O documento foi excluido com sucesso !' } + # format.json { head :no_content } + # end + # end + # PATCH/PUT /requirements/1 # PATCH/PUT /requirements/1.json def update @@ -71,6 +82,6 @@ def set_requirement # Never trust parameters from the scary internet, only allow the white list through. def requirement_params - params.require(:requirement).permit(:title, :content, :documents) + params.require(:requirement).permit(:title, :content, documents: []) end end diff --git a/app/views/requirements/edit.html.erb b/app/views/requirements/edit.html.erb index 60e4ecf3..505893b9 100644 --- a/app/views/requirements/edit.html.erb +++ b/app/views/requirements/edit.html.erb @@ -6,9 +6,22 @@ <%= f.label "Conteúdo" %> <%= f.text_field :title %> <%= f.label "documentos" %> - <%= f.file_field :documents %> + <%= f.file_field :documents, multiple: true %> <%= f.submit "Save", class: "btn btn-primary" %> <% end %> +<% if @requirement.documents.attached? %> +
Existem documentos anexados:
+ <% @requirement.documents.each do | document | %> +
+ <%= link_to document.filename, rails_blob_path(document, disposition: 'attachment') %> + <%# <%= link_to 'Remover', delete_document_attachment_requirement_url(document.signed_id), + method: :delete, + data: { } + %> +
+ <% end %> +<% end %> +
<%= link_to 'Show', @requirement %> | <%= link_to 'Back', requirements_path %> diff --git a/app/views/requirements/new.html.erb b/app/views/requirements/new.html.erb index 979da25d..bca8b6b3 100644 --- a/app/views/requirements/new.html.erb +++ b/app/views/requirements/new.html.erb @@ -5,8 +5,8 @@ <%= f.text_field :title %> <%= f.label "Conteúdo" %> <%= f.text_field :content %> - <%= f.label :documents %> - <%= f.file_field :documents %> + <%= f.label "documentos" %> + <%= f.file_field :documents, multiple: true %> <%= f.submit "Save", class: "btn btn-primary" %> <% end %> diff --git a/app/views/requirements/show.html.erb b/app/views/requirements/show.html.erb index c913e26d..499982a0 100644 --- a/app/views/requirements/show.html.erb +++ b/app/views/requirements/show.html.erb @@ -10,12 +10,15 @@ <%= @requirement.content %>

-

documents:

<% if @requirement.documents.attached? %> -

existem documentos acoplados

- <% @requirement.documents.each do | document | %> - <%= link_to document.filename, rails_blob_path(document, disposition: 'attachment') %> - <% end %> +

+ existem documentos acoplados + <% @requirement.documents.each do | document | %> +

+ <%= link_to document.filename, rails_blob_path(document, disposition: 'attachment') %> +
+ <% end %> +

<% end %> <%= link_to 'Edit', edit_requirement_path(@requirement) %> | diff --git a/config/routes.rb b/config/routes.rb index ce4d105f..c398526f 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -4,6 +4,11 @@ resources :accreditations resources :sei_processes resources :requirements + # resources :requirements do + # member do + # delete :delete_document_attachment + # end + # end get 'home/index' devise_for :users # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html From 97d36256474a29098c7b4b6966fa469c972fe0e4 Mon Sep 17 00:00:00 2001 From: Gabriel Preihs Date: Sat, 14 Nov 2020 16:21:39 -0300 Subject: [PATCH 24/82] Deleting specific attachments --- app/controllers/requirements_controller.rb | 18 ++++++------------ app/views/requirements/edit.html.erb | 6 ++++-- config/routes.rb | 10 +++++----- 3 files changed, 15 insertions(+), 19 deletions(-) diff --git a/app/controllers/requirements_controller.rb b/app/controllers/requirements_controller.rb index 92512ac0..ddfd0e6d 100644 --- a/app/controllers/requirements_controller.rb +++ b/app/controllers/requirements_controller.rb @@ -35,20 +35,14 @@ def create format.json { render json: @requirement.errors, status: :unprocessable_entity } end end - # requirement = Requirement.create!(requirement_params) - # redirect_to requirement end - # def delete_document_attachment - # puts "entrou" - # @document = ActiveStorage::Blob.find_signed(params[:id]) - # puts @document - # @document.purge_later - # respond_to do |format| - # format.html { redirect_to requirements_url, notice: 'O documento foi excluido com sucesso !' } - # format.json { head :no_content } - # end - # end + def delete_document_attachment + @document = ActiveStorage::Attachment.find_by(id: params[:id]) + @document&.purge + # @asset = ActiveStorage::Attachment.find_by(id: params[:id]) + redirect_to :edit + end # PATCH/PUT /requirements/1 # PATCH/PUT /requirements/1.json diff --git a/app/views/requirements/edit.html.erb b/app/views/requirements/edit.html.erb index 505893b9..a8706164 100644 --- a/app/views/requirements/edit.html.erb +++ b/app/views/requirements/edit.html.erb @@ -10,18 +10,20 @@ <%= f.submit "Save", class: "btn btn-primary" %> <% end %> +
<% if @requirement.documents.attached? %>
Existem documentos anexados:
<% @requirement.documents.each do | document | %>
<%= link_to document.filename, rails_blob_path(document, disposition: 'attachment') %> - <%# <%= link_to 'Remover', delete_document_attachment_requirement_url(document.signed_id), + <%= link_to 'Remover', delete_document_attachment_requirement_url(document.id, @requirement), method: :delete, data: { } - %> + %>
<% end %> <% end %> +
<%= link_to 'Show', @requirement %> | <%= link_to 'Back', requirements_path %> diff --git a/config/routes.rb b/config/routes.rb index c398526f..a570c3a9 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -4,11 +4,11 @@ resources :accreditations resources :sei_processes resources :requirements - # resources :requirements do - # member do - # delete :delete_document_attachment - # end - # end + resources :requirements do + member do + delete :delete_document_attachment + end + end get 'home/index' devise_for :users # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html From 6017eb6dfedfcfb17ff736ab7761f10959da064a Mon Sep 17 00:00:00 2001 From: ngsylar Date: Sat, 14 Nov 2020 18:09:52 -0300 Subject: [PATCH 25/82] Accreditation and SEI Processes --- app/controllers/accreditations_controller.rb | 8 +- app/controllers/sei_processes_controller.rb | 19 +- app/models/accreditation.rb | 1 + .../_accreditation.json.jbuilder | 2 +- app/views/accreditations/_form.html.erb | 5 + app/views/accreditations/edit.html.erb | 16 +- app/views/accreditations/index.html.erb | 7 +- app/views/accreditations/new.html.erb | 12 +- app/views/accreditations/show.html.erb | 5 + app/views/home/index.html.erb | 16 +- app/views/sei_processes/edit.html.erb | 33 +- app/views/sei_processes/index.html.erb | 51 +- app/views/sei_processes/new.html.erb | 13 +- app/views/sei_processes/show.html.erb | 5 +- config/database.yml | 10 +- config/routes.rb | 1 + ...> 20201114202425_create_accreditations.rb} | 1 + db/schema.rb | 5 +- features.html | 953 ++++++++---------- .../credenciamento_professores_steps.rb | 3 +- report.json | 2 +- spec/requests/accreditations_spec.rb | 131 ++- spec/routing/accreditations_routing_spec.rb | 16 +- .../accreditations/edit.html.erb_spec.rb | 18 - .../accreditations/index.html.erb_spec.rb | 19 - .../views/accreditations/new.html.erb_spec.rb | 18 - .../accreditations/show.html.erb_spec.rb | 14 - spec/views/requirements/edit.html.erb_spec.rb | 21 - .../views/requirements/index.html.erb_spec.rb | 22 - spec/views/requirements/new.html.erb_spec.rb | 21 - spec/views/requirements/show.html.erb_spec.rb | 16 - .../views/sei_processes/edit.html.erb_spec.rb | 24 - .../sei_processes/index.html.erb_spec.rb | 25 - spec/views/sei_processes/new.html.erb_spec.rb | 24 - .../views/sei_processes/show.html.erb_spec.rb | 18 - 35 files changed, 730 insertions(+), 825 deletions(-) rename db/migrate/{20201113222237_create_accreditations.rb => 20201114202425_create_accreditations.rb} (82%) delete mode 100644 spec/views/accreditations/edit.html.erb_spec.rb delete mode 100644 spec/views/accreditations/index.html.erb_spec.rb delete mode 100644 spec/views/accreditations/new.html.erb_spec.rb delete mode 100644 spec/views/accreditations/show.html.erb_spec.rb delete mode 100644 spec/views/requirements/edit.html.erb_spec.rb delete mode 100644 spec/views/requirements/index.html.erb_spec.rb delete mode 100644 spec/views/requirements/new.html.erb_spec.rb delete mode 100644 spec/views/requirements/show.html.erb_spec.rb delete mode 100644 spec/views/sei_processes/edit.html.erb_spec.rb delete mode 100644 spec/views/sei_processes/index.html.erb_spec.rb delete mode 100644 spec/views/sei_processes/new.html.erb_spec.rb delete mode 100644 spec/views/sei_processes/show.html.erb_spec.rb diff --git a/app/controllers/accreditations_controller.rb b/app/controllers/accreditations_controller.rb index db8f25a1..52d333e7 100644 --- a/app/controllers/accreditations_controller.rb +++ b/app/controllers/accreditations_controller.rb @@ -14,7 +14,7 @@ def show # GET /accreditations/new def new - @accreditation = Accreditation.new + @accreditation = Accreditation.new(sei_proccess_id: 0) end # GET /accreditations/1/edit @@ -28,7 +28,7 @@ def create respond_to do |format| if @accreditation.save - format.html { redirect_to @accreditation, notice: 'Accreditation was successfully created.' } + format.html { redirect_to accreditations_url, notice: 'Accreditation was successfully created.' } format.json { render :show, status: :created, location: @accreditation } else format.html { render :new } @@ -42,7 +42,7 @@ def create def update respond_to do |format| if @accreditation.update(accreditation_params) - format.html { redirect_to @accreditation, notice: 'Accreditation was successfully updated.' } + format.html { redirect_to accreditations_url, notice: 'Accreditation was successfully updated.' } format.json { render :show, status: :ok, location: @accreditation } else format.html { render :edit } @@ -69,6 +69,6 @@ def set_accreditation # Never trust parameters from the scary internet, only allow the white list through. def accreditation_params - params.require(:accreditation).permit(:user_id, :start_date, :end_date) + params.require(:accreditation).permit(:user_id, :start_date, :end_date, :sei_proccess_id) end end diff --git a/app/controllers/sei_processes_controller.rb b/app/controllers/sei_processes_controller.rb index 1ef9a796..c9fd913c 100644 --- a/app/controllers/sei_processes_controller.rb +++ b/app/controllers/sei_processes_controller.rb @@ -14,7 +14,7 @@ def show # GET /sei_processes/new def new - @sei_process = SeiProcess.new + @sei_process = SeiProcess.new(user_id: current_user.id, status: 'Espera', code: '0') end # GET /sei_processes/1/edit @@ -28,8 +28,8 @@ def create respond_to do |format| if @sei_process.save - format.html { redirect_to @sei_process, notice: 'Sei process was successfully created.' } - format.json { render :show, status: :created, location: @sei_process } + format.html { redirect_to sei_processes_url, notice: 'Processo aberto com sucesso!' } + format.json { render :index, status: :created, location: @sei_process } else format.html { render :new } format.json { render json: @sei_process.errors, status: :unprocessable_entity } @@ -42,8 +42,13 @@ def create def update respond_to do |format| if @sei_process.update(sei_process_params) - format.html { redirect_to @sei_process, notice: 'Sei process was successfully updated.' } - format.json { render :show, status: :ok, location: @sei_process } + format.html { redirect_to sei_processes_url, notice: 'Processo atualizado com sucesso!' } + format.json { render :index, status: :ok, location: @sei_process } + + if (@sei_process.status == 'Aprovado') && @sei_process.documents.attached? + Accreditation.create!(user_id: @sei_process.user_id, sei_process_id: @sei_process.id) + end + else format.html { render :edit } format.json { render json: @sei_process.errors, status: :unprocessable_entity } @@ -56,7 +61,7 @@ def update def destroy @sei_process.destroy respond_to do |format| - format.html { redirect_to sei_processes_url, notice: 'Sei process was successfully destroyed.' } + format.html { redirect_to sei_processes_url, notice: 'Processo excluído com sucesso!' } format.json { head :no_content } end end @@ -69,6 +74,6 @@ def set_sei_process # Never trust parameters from the scary internet, only allow the white list through. def sei_process_params - params.require(:sei_process).permit(:user_id, :status, :code) + params.require(:sei_process).permit(:user_id, :status, :code, documents: []) end end diff --git a/app/models/accreditation.rb b/app/models/accreditation.rb index 559b2c5a..e0d49a5b 100644 --- a/app/models/accreditation.rb +++ b/app/models/accreditation.rb @@ -1,3 +1,4 @@ class Accreditation < ApplicationRecord belongs_to :user + belongs_to :sei_process end diff --git a/app/views/accreditations/_accreditation.json.jbuilder b/app/views/accreditations/_accreditation.json.jbuilder index bd6bafce..3e22c1cd 100644 --- a/app/views/accreditations/_accreditation.json.jbuilder +++ b/app/views/accreditations/_accreditation.json.jbuilder @@ -1,2 +1,2 @@ -json.extract! accreditation, :id, :user_id, :start_date, :end_date, :created_at, :updated_at +json.extract! accreditation, :id, :user_id, :start_date, :end_date, :sei_process_id, :created_at, :updated_at json.url accreditation_url(accreditation, format: :json) diff --git a/app/views/accreditations/_form.html.erb b/app/views/accreditations/_form.html.erb index ae8fd1b1..15eb94da 100644 --- a/app/views/accreditations/_form.html.erb +++ b/app/views/accreditations/_form.html.erb @@ -26,6 +26,11 @@ <%= form.date_select :end_date %>
+
+ <%= form.label :sei_process_id %> + <%= form.text_field :sei_process_id %> +
+
<%= form.submit %>
diff --git a/app/views/accreditations/edit.html.erb b/app/views/accreditations/edit.html.erb index c4124125..2e359887 100644 --- a/app/views/accreditations/edit.html.erb +++ b/app/views/accreditations/edit.html.erb @@ -1,6 +1,20 @@

Editing Accreditation

-<%= render 'form', accreditation: @accreditation %> +<%= form_for @accreditation, html: { multipart: true } do |f| %> + User: + <%= f.number_field :user_id %> + Start date: + <%= f.date_field :start_date %> + End date: + <%= f.date_field :end_date %> +
+ <%= f.submit "Save", class: "btn btn-primary" %> +<% end %> + <%= link_to 'Show', @accreditation %> | <%= link_to 'Back', accreditations_path %> + + + + diff --git a/app/views/accreditations/index.html.erb b/app/views/accreditations/index.html.erb index 67d1741b..4ae74a9b 100644 --- a/app/views/accreditations/index.html.erb +++ b/app/views/accreditations/index.html.erb @@ -1,4 +1,4 @@ -

<%= notice %>

+

Accreditations

@@ -15,7 +15,8 @@ <% @accreditations.each do |accreditation| %> - <%= accreditation.user %> + <%= accreditation.user.full_name %> + <%= accreditation.sei_process_id %> <%= accreditation.start_date %> <%= accreditation.end_date %> <%= link_to 'Show', accreditation %> @@ -28,4 +29,4 @@
-<%= link_to 'New Accreditation', new_accreditation_path %> +<%= link_to 'New Accreditation', new_accreditation_path %> \ No newline at end of file diff --git a/app/views/accreditations/new.html.erb b/app/views/accreditations/new.html.erb index 5022b9bd..53a1b29d 100644 --- a/app/views/accreditations/new.html.erb +++ b/app/views/accreditations/new.html.erb @@ -1,5 +1,11 @@

New Accreditation

+<%= form_for @accreditation, html: { multipart: true } do |f| %> + <%= f.hidden_field :user_id %> + <%= f.hidden_field :start_date %> + <%= f.hidden_field :end_date %> +
+ <%= f.submit "Save", class: "btn btn-primary" %> +<% end %> -<%= render 'form', accreditation: @accreditation %> - -<%= link_to 'Back', accreditations_path %> +
+<%= link_to 'Back', accreditations_path %> \ No newline at end of file diff --git a/app/views/accreditations/show.html.erb b/app/views/accreditations/show.html.erb index 36b9544a..a4f86280 100644 --- a/app/views/accreditations/show.html.erb +++ b/app/views/accreditations/show.html.erb @@ -15,5 +15,10 @@ <%= @accreditation.end_date %>

+

+ Sei process: + <%= @accreditation.sei_process %> +

+ <%= link_to 'Edit', edit_accreditation_path(@accreditation) %> | <%= link_to 'Back', accreditations_path %> diff --git a/app/views/home/index.html.erb b/app/views/home/index.html.erb index 33ba387d..14a0c3e8 100644 --- a/app/views/home/index.html.erb +++ b/app/views/home/index.html.erb @@ -1,4 +1,4 @@ -

Home#index

+

Início

Find me in app/views/home/index.html.erb

<% if user_signed_in? %> @@ -6,7 +6,19 @@

Nome: <%= current_user.full_name %>

Email: <%= current_user.email %>

Cargo: <%= current_user.role %>

- <%= link_to "Sair", destroy_user_session_path, method: :delete %> + + <% if current_user.role == "administrator" %> + + <%= link_to "Atualizar Requisitos", requirements_path %> + <%= link_to "Processos Abertos", sei_processes_path %> + <%= link_to "Lista de Credenciamentos", accreditations_path %> +
+ <%= link_to "Sair", destroy_user_session_path, method: :delete %> + + <% else %> + <%= link_to "Sair", destroy_user_session_path, method: :delete %> + <% end %> + <% else %>

Entre para acessar o sistema!

Você também pode se registrar ou pegar uma conta no arquivo db/seeds.rb

diff --git a/app/views/sei_processes/edit.html.erb b/app/views/sei_processes/edit.html.erb index c486a333..53c15b17 100644 --- a/app/views/sei_processes/edit.html.erb +++ b/app/views/sei_processes/edit.html.erb @@ -1,6 +1,31 @@ -

Editing Sei Process

+

<%= "Processo #{@sei_process.id}" %>

-<%= render 'form', sei_process: @sei_process %> +

+ Nome: + <%= @sei_process.user.full_name %> +

+

+ Matrícula: + <%= @sei_process.user.registration %> +

-<%= link_to 'Show', @sei_process %> | -<%= link_to 'Back', sei_processes_path %> +<% if @sei_process.documents.attached? %> +

+ Documentos Anexados + <% @sei_process.documents.each do | document | %> +

+ <%= link_to document.filename, rails_blob_path(document, disposition: 'attachment') %> +
+ <% end %> +

+<% end %> + +<%= form_for @sei_process, html: { multipart: true } do |f| %> + <%= f.label "Avaliar" %> + <%= f.radio_button :status, 'Aprovado', :checked => true %> Aprovado + <%= f.radio_button :status, 'Rejeitado' %> Rejeitado + <%= f.submit "Save", class: "btn btn-primary" %> +<% end %> + +
+<%= link_to 'Voltar', sei_processes_path %> diff --git a/app/views/sei_processes/index.html.erb b/app/views/sei_processes/index.html.erb index af8b06eb..a6b72490 100644 --- a/app/views/sei_processes/index.html.erb +++ b/app/views/sei_processes/index.html.erb @@ -1,31 +1,34 @@ -

<%= notice %>

+

-

Sei Processes

+

SEI Processos

- - - - - - - - - - - - <% @sei_processes.each do |sei_process| %> +<% if user_signed_in? && (current_user.role == "administrator") %> +
UserStatusCode
+ - - - - - - + + + + + - <% end %> - -
<%= sei_process.user %><%= sei_process.status %><%= sei_process.code %><%= link_to 'Show', sei_process %><%= link_to 'Edit', edit_sei_process_path(sei_process) %><%= link_to 'Destroy', sei_process, method: :delete, data: { confirm: 'Are you sure?' } %>NomeMatrículaCódigo do ProcessoStatus
+ + + + <% @sei_processes.each do |sei_process| %> + + <%= sei_process.user.full_name %> + <%= sei_process.user.registration %> + <%= sei_process.id %> + <%= sei_process.status %> + <%= link_to 'Gerenciar', edit_sei_process_path(sei_process) %> + <%= link_to 'Excluir', sei_process, method: :delete, data: { confirm: 'Are you sure?' } %> + + <% end %> + + +<% end %>
-<%= link_to 'New Sei Process', new_sei_process_path %> +<%= link_to 'Abrir Processo', new_sei_process_path %> diff --git a/app/views/sei_processes/new.html.erb b/app/views/sei_processes/new.html.erb index ab5b00bf..d4331717 100644 --- a/app/views/sei_processes/new.html.erb +++ b/app/views/sei_processes/new.html.erb @@ -1,5 +1,14 @@ -

New Sei Process

+

Abrir Processo

-<%= render 'form', sei_process: @sei_process %> +<%= form_for @sei_process, html: { multipart: true } do |f| %> + <%= f.hidden_field :user_id %> + <%= f.hidden_field :status %> + <%= f.hidden_field :code %> + <%= f.label "Anexar Documentos" %> + <%= f.file_field :documents, multiple: true %> +
+ <%= f.submit "Save", class: "btn btn-primary" %> +<% end %> +
<%= link_to 'Back', sei_processes_path %> diff --git a/app/views/sei_processes/show.html.erb b/app/views/sei_processes/show.html.erb index e074d3f0..a8e9e4fc 100644 --- a/app/views/sei_processes/show.html.erb +++ b/app/views/sei_processes/show.html.erb @@ -1,4 +1,4 @@ -

<%= notice %>

+

<%= notice %>

User: @@ -12,8 +12,7 @@

Code: - <%= @sei_process.code %> + <%= @sei_process.id %>

-<%= link_to 'Edit', edit_sei_process_path(@sei_process) %> | <%= link_to 'Back', sei_processes_path %> diff --git a/config/database.yml b/config/database.yml index 5501a631..9930ddf5 100644 --- a/config/database.yml +++ b/config/database.yml @@ -20,7 +20,6 @@ default: &default # For details on connection pooling, see Rails configuration guide # http://guides.rubyonrails.org/configuring.html#database-pooling pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> - password: postgres development: <<: *default @@ -30,10 +29,10 @@ development: # To create additional roles in postgres see `$ createuser --help`. # When left blank, postgres will use the default role. This is # the same name as the operating system user that initialized the database. - # username: postgres + #username: secretaria_ppgi # The password associated with the postgres role (username). - password: postgres + #password: # Connect on a TCP socket. Omitted by default since the client uses a # domain socket that doesn't need configuration. Windows does not have @@ -71,8 +70,7 @@ test: # # On Heroku and other platform providers, you may have a full connection URL # available as an environment variable. For example: -# username: postgres -password: postgres +# # DATABASE_URL="postgres://myuser:mypass@localhost/somedatabase" # # You can use this database configuration with: @@ -84,4 +82,4 @@ production: <<: *default database: secretaria_ppgi_production username: secretaria_ppgi - password: <%= ENV['SECRETARIA_PPGI_DATABASE_PASSWORD'] %> + password: <%= ENV['SECRETARIA_PPGI_DATABASE_PASSWORD'] %> \ No newline at end of file diff --git a/config/routes.rb b/config/routes.rb index a570c3a9..805204cf 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -1,6 +1,7 @@ # frozen_string_literal: true Rails.application.routes.draw do + resources :accreditations resources :accreditations resources :sei_processes resources :requirements diff --git a/db/migrate/20201113222237_create_accreditations.rb b/db/migrate/20201114202425_create_accreditations.rb similarity index 82% rename from db/migrate/20201113222237_create_accreditations.rb rename to db/migrate/20201114202425_create_accreditations.rb index 8f7f7e22..7de196f9 100644 --- a/db/migrate/20201113222237_create_accreditations.rb +++ b/db/migrate/20201114202425_create_accreditations.rb @@ -4,6 +4,7 @@ def change t.belongs_to :user, foreign_key: true t.date :start_date t.date :end_date + t.references :sei_process, foreign_key: true t.timestamps end diff --git a/db/schema.rb b/db/schema.rb index ccead4b8..f4d4f7ca 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 2020_11_13_222556) do +ActiveRecord::Schema.define(version: 2020_11_14_202425) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -19,8 +19,10 @@ t.bigint "user_id" t.date "start_date" t.date "end_date" + t.bigint "sei_process_id" t.datetime "created_at", null: false t.datetime "updated_at", null: false + t.index ["sei_process_id"], name: "index_accreditations_on_sei_process_id" t.index ["user_id"], name: "index_accreditations_on_user_id" end @@ -76,6 +78,7 @@ t.index ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true end + add_foreign_key "accreditations", "sei_processes" add_foreign_key "accreditations", "users" add_foreign_key "active_storage_attachments", "active_storage_blobs", column: "blob_id" add_foreign_key "sei_processes", "users" diff --git a/features.html b/features.html index 0c37612d..061ff6af 100644 --- a/features.html +++ b/features.html @@ -1,559 +1,498 @@ -Cucumber +

Cucumber Features

Expand All

Collapse All

# language: pt
#encoding: utf-8

Funcionalidade: Abrir solicitação de credenciamento

Como professor autenticado no sistema,
Quero poder abrir uma solicitação de credenciamento
Para que eu possa ser um professor credenciado

Contexto

  1. Dado que eu estou cadastrado e logado como "Lucas", "lucas@professor.com", "lucas123", "professor", "200000000"
    features/step_definitions/credenciamento_professores_steps.rb:8
  2. E que eu estou na página de abrir solicitação de credenciamento
    features/step_definitions/credenciamento_professores_steps.rb:30
    Can't find mapping from "de abrir solicitação de credenciamento" to a path.
    -Now, go and add a mapping in /mnt/c/Users/Fontenelle/Desktop/UnB/9 semestre/Engenharia de Software/secretaria_ppgi/features/support/paths.rb
    ./features/support/paths.rb:31:in `rescue in path_to'
    -./features/support/paths.rb:26:in `path_to'
    -./features/step_definitions/credenciamento_professores_steps.rb:31:in `/^que eu estou na página (.+)$/'
    -features/abrir_solicitacao_credenciamento.feature:11:in `E que eu estou na página de abrir solicitação de credenciamento'
    29        self.send(path_components.push('path').join('_').to_sym)
    -30      rescue NoMethodError, ArgumentError
    -31        raise "Can't find mapping from \"#{page_name}\" to a path.\n" +
    -32          "Now, go and add a mapping in #{__FILE__}"
    -33      end
    -34# gem install syntax to get syntax highlighting
features/abrir_solicitacao_credenciamento.feature:13

Cenário: Solicitação enviada com sucesso

  1. Quando eu anexo o arquivo "Formulário de Credenciamento.pdf" no campo 'Formulario'
    features/abrir_solicitacao_credenciamento.feature:14
    Quando("eu anexo o arquivo {string} no campo {string}") do |string, string2|
    -  pending # Write code here that turns the phrase above into concrete actions
    -end
  2. E eu anexo o arquivo "CV Lattes.pdf" em 'CV Lattes'
    features/step_definitions/credenciamento_professores_steps.rb:34
  3. E eu clico em 'Enviar'
    features/step_definitions/credenciamento_professores_steps.rb:38
  4. Então eu devo ver "Solicitação enviada com sucesso"
    features/step_definitions/credenciamento_professores_steps.rb:67
  5. Print maroto :)
      -
    undefined method `manage' for #<Capybara::RackTest::Browser:0x00007fffcd7263a0> (NoMethodError)
    ./features/support/hooks.rb:22:in `add_browser_logs'
    -./features/support/hooks.rb:5:in `After'
    20    current_url = Capybara.current_url.to_s
    -21    # Gather browser logs
    -22    logs = page.driver.browser.manage.logs.get(:browser).map {|line| [line.level, line.message]}
    
    -23   # Remove warnings and info messages
    -24    logs.reject! { |line| ['WARNING', 'INFO'].include?(line.first) }
    -25# gem install syntax to get syntax highlighting
features/abrir_solicitacao_credenciamento.feature:19

Cenário: Solicitação não enviada (campo obrigatório em branco)

  1. Quando eu anexo o arquivo "Formulário de Credenciamento.pdf" no campo 'Formulario'
    features/abrir_solicitacao_credenciamento.feature:20
    Quando("eu anexo o arquivo {string} no campo {string}") do |string, string2|
    -  pending # Write code here that turns the phrase above into concrete actions
    -end
  2. E eu clico em 'Enviar'
    features/step_definitions/credenciamento_professores_steps.rb:38
  3. Então eu devo ver "Solicitação não enviada (campo obrigatório* em branco)"
    features/step_definitions/credenciamento_professores_steps.rb:67
  4. Print maroto :)
      -
    undefined method `manage' for #<Capybara::RackTest::Browser:0x00007fffce93fbb8> (NoMethodError)
    ./features/support/hooks.rb:22:in `add_browser_logs'
    -./features/support/hooks.rb:5:in `After'
    20    current_url = Capybara.current_url.to_s
    -21    # Gather browser logs
    -22    logs = page.driver.browser.manage.logs.get(:browser).map {|line| [line.level, line.message]}
    
    -23   # Remove warnings and info messages
    -24    logs.reject! { |line| ['WARNING', 'INFO'].include?(line.first) }
    -25# gem install syntax to get syntax highlighting
# language: pt
#encoding: utf-8

Funcionalidade: Definir o prazo de credenciamento dos professores

Como um administrador,
para que eu possa credenciar os professores,
eu gostaria de definir o prazo de credenciamento dos professores

Contexto

  1. Dado que eu esteja autenticado como usuario "admin"
    features/credenciamento_periodo.feature:10
    Dado("que eu esteja autenticado como usuario {string}") do |string|
    -  pending # Write code here that turns the phrase above into concrete actions
    -end
  2. E que esteja na página de credenciamento
    features/credenciamento_periodo.feature:11
    Dado("que esteja na página de credenciamento") do
    -  pending # Write code here that turns the phrase above into concrete actions
    -end
features/credenciamento_periodo.feature:13

Cenário: Definir prazo de credenciamento sem data

  1. Quando eu aperto o botão "Definir prazo de credenciamento"
    features/credenciamento_periodo.feature:14
    Quando("eu aperto o botão {string}") do |string|
    -  pending # Write code here that turns the phrase above into concrete actions
    -end
  2. E eu aperto o botão "Salvar período"
    features/credenciamento_periodo.feature:15
    Quando("eu aperto o botão {string}") do |string|
    -  pending # Write code here that turns the phrase above into concrete actions
    -end
  3. Então eu espero ver a mensagem "Insira uma data de início e uma data de término válidas."
    features/credenciamento_periodo.feature:16
    Então("eu espero ver a mensagem {string}") do |string|
    -  pending # Write code here that turns the phrase above into concrete actions
    -end
  4. Print maroto :)
      -
features/credenciamento_periodo.feature:18

Cenário: Definir prazo de credenciamento com data

  1. Quando eu aperto o botão "Definir prazo de credenciamento"
    features/credenciamento_periodo.feature:19
    Quando("eu aperto o botão {string}") do |string|
    -  pending # Write code here that turns the phrase above into concrete actions
    -end
  2. Quando eu adiciono um valor "Início" para "Data de Início"
    features/credenciamento_periodo.feature:20
    Quando("eu adiciono um valor {string} para {string}") do |string, string2|
    -  pending # Write code here that turns the phrase above into concrete actions
    -end
  3. E eu adiciono um valor "Término" para "Data de Término"
    features/credenciamento_periodo.feature:21
    Quando("eu adiciono um valor {string} para {string}") do |string, string2|
    -  pending # Write code here that turns the phrase above into concrete actions
    -end
  4. E eu aperto o botão "Salvar período"
    features/credenciamento_periodo.feature:22
    Quando("eu aperto o botão {string}") do |string|
    -  pending # Write code here that turns the phrase above into concrete actions
    -end
  5. Então eu espero ver a mensagem "Prazo cadastrado com sucesso."
    features/credenciamento_periodo.feature:23
    Então("eu espero ver a mensagem {string}") do |string|
    -  pending # Write code here that turns the phrase above into concrete actions
    -end
  6. Print maroto :)
      -
# language: pt
#encoding: utf-8

Funcionalidade: Gerenciar solicitações de credenciamento

Como um admnistrador do sistema
Quero visualizar uma solicitação de credencimento em aberto
Para decidir se vou aceitar ou recusar tal solicitação

Contexto

  1. Dado que as seguintes solicitações estejam pendentes:
    features/step_definitions/credenciamento_professores_steps.rb:1
    title
    due_date
    activity_type_id
    Solicitação 1
    02-Jan-2021
    Solicitação de credenciamento
    Solicitação 2
    02-Jan-2021
    Solicitação de credenciamento
    Solicitação 3
    02-Jan-2021
    Solicitação de credenciamento
    Solicitação 4
    02-Jan-2021
    Solicitação de credenciamento
    TODO (Cucumber::Pending)
    ./features/step_definitions/credenciamento_professores_steps.rb:2:in `"que as seguintes solicitações estejam pendentes:"'
    -features/gerenciar_solicitacoes_credenciamento.feature:10:in `Dado que as seguintes solicitações estejam pendentes:'
    0Dado "que as seguintes solicitações estejam pendentes:" do |table|
    -1    pending
    -2    # table.hashes.each do |row|
    
    -3    #     Activity.create!(row)
    -4# gem install syntax to get syntax highlighting
  2. E que eu estou cadastrado e logado como "Gabriel", "gabriel@admin.com", "gabriel123", "administrator", "200000000"
    features/step_definitions/credenciamento_professores_steps.rb:8
  3. E que eu estou na página de solicitações de credenciamento
    features/step_definitions/credenciamento_professores_steps.rb:30
features/gerenciar_solicitacoes_credenciamento.feature:20

Cenário: Aceitar uma solicitação de credenciamento

  1. Quando eu clico em "Solicitação 1"
    features/gerenciar_solicitacoes_credenciamento.feature:21
    Quando("eu clico em {string}") do |string|
    -  pending # Write code here that turns the phrase above into concrete actions
    -end
  2. Então eu devo estar na página da "Solicitação 1"
    features/step_definitions/credenciamento_professores_steps.rb:42
  3. Quando eu clico em 'Aprovar'
    features/step_definitions/credenciamento_professores_steps.rb:38
  4. Então eu devo estar na página de solicitações de credenciamento
    features/step_definitions/credenciamento_professores_steps.rb:42
  5. Quando eu desmarco os seguintes estados: Rejeitadas, Reformulação
    features/gerenciar_solicitacoes_credenciamento.feature:25
    Quando("eu desmarco os seguintes estados: Rejeitadas, Reformulação") do
    -  pending # Write code here that turns the phrase above into concrete actions
    -end
  6. E eu marco os seguintes estados: Aprovadas
    features/gerenciar_solicitacoes_credenciamento.feature:26
    Quando("eu marco os seguintes estados: Aprovadas") do
    -  pending # Write code here that turns the phrase above into concrete actions
    -end
  7. E eu aperto 'Atualizar'
    features/step_definitions/credenciamento_professores_steps.rb:63
  8. Então eu devo ver "Solicitação 1"
    features/step_definitions/credenciamento_professores_steps.rb:67
  9. Print maroto :)
      -
features/gerenciar_solicitacoes_credenciamento.feature:30

Cenário: Recusar uma solicitação de credenciamento

  1. Quando eu clico em "Solicitação 2"
    features/gerenciar_solicitacoes_credenciamento.feature:31
    Quando("eu clico em {string}") do |string|
    -  pending # Write code here that turns the phrase above into concrete actions
    -end
  2. Então eu devo estar na página da "Solicitação 2"
    features/step_definitions/credenciamento_professores_steps.rb:42
  3. Quando eu clico em 'Rejeitar'
    features/step_definitions/credenciamento_professores_steps.rb:38
  4. Então eu devo estar na página de solicitações de credenciamento
    features/step_definitions/credenciamento_professores_steps.rb:42
  5. Quando eu desmarco os seguintes estados: Aprovadas, Reformulação
    features/gerenciar_solicitacoes_credenciamento.feature:35
    Quando("eu desmarco os seguintes estados: Aprovadas, Reformulação") do
    -  pending # Write code here that turns the phrase above into concrete actions
    -end
  6. E eu marco os seguintes estados: Rejeitadas
    features/gerenciar_solicitacoes_credenciamento.feature:36
    Quando("eu marco os seguintes estados: Rejeitadas") do
    -  pending # Write code here that turns the phrase above into concrete actions
    -end
  7. E eu aperto 'Atualizar'
    features/step_definitions/credenciamento_professores_steps.rb:63
  8. Então eu devo ver "Solicitação 2"
    features/step_definitions/credenciamento_professores_steps.rb:67
  9. Print maroto :)
      -
# language: pt
#encoding: utf-8

Funcionalidade: Disponibilizar os requisitos necessarios para credenciamento de professores

Como administrador autenticado no sistema,
Quero poder disponibilizar para os professores os requisitos necessários para o credenciamento
Para que eles possam dar procedimento ao credenciamento

Contexto

  1. Dado que eu esteja logado como administrador de email "gp@admin.com" e senha "123"
    features/requisitos_necessarios.feature:10
    Dado("que eu esteja logado como administrador de email {string} e senha {string}") do |string, string2|
    -  pending # Write code here that turns the phrase above into concrete actions
    -end
  2. E não existem requisitos selecionados na página principal
    features/requisitos_necessarios.feature:11
    Dado("não existem requisitos selecionados na página principal") do
    -  pending # Write code here that turns the phrase above into concrete actions
    -end
  3. Quando o administrador clicou no link para alterar documentos necessários para credenciamento
    features/requisitos_necessarios.feature:12
    Quando("o administrador clicou no link para alterar documentos necessários para credenciamento") do
    -  pending # Write code here that turns the phrase above into concrete actions
    -end
features/requisitos_necessarios.feature:14

Cenário: Os campos puderam ser selecionados

  1. Quando eu selecionar os campos
    features/requisitos_necessarios.feature:15
    Quando("eu selecionar os campos") do
    -  pending # Write code here that turns the phrase above into concrete actions
    -end
  2. E eu clicar no botão atualizar requisitos
    features/requisitos_necessarios.feature:16
    Quando("eu clicar no botão atualizar requisitos") do
    -  pending # Write code here that turns the phrase above into concrete actions
    -end
  3. Então eu devo voltar para a página principal aonde aparece meus requisitos selecionados
    features/requisitos_necessarios.feature:17
    Então("eu devo voltar para a página principal aonde aparece meus requisitos selecionados") do
    -  pending # Write code here that turns the phrase above into concrete actions
    -end
  4. Print maroto :)
      -
features/requisitos_necessarios.feature:19

Cenário: Não houveram mudanças feitas

  1. Quando eu não selecionar os campos
    features/requisitos_necessarios.feature:20
    Quando("eu não selecionar os campos") do
    -  pending # Write code here that turns the phrase above into concrete actions
    -end
  2. E eu clicar no botão atualizar requisitos
    features/requisitos_necessarios.feature:21
    Quando("eu clicar no botão atualizar requisitos") do
    -  pending # Write code here that turns the phrase above into concrete actions
    -end
  3. Então eu recebo uma mensagem dizendo que "não houveram mudanças"
    features/requisitos_necessarios.feature:22
    Então("eu recebo uma mensagem dizendo que {string}") do |string|
    -  pending # Write code here that turns the phrase above into concrete actions
    -end
  4. Print maroto :)
      -
# language: pt
#encoding: utf-8

Funcionalidade: Testar

features/spike.feature:5

Cenário:

  1. Dado que eu estou cadastrado e logado como "Gabriel", "gabriel@admin.com", "gabriel123", "administrator", "200000000"
    features/step_definitions/credenciamento_professores_steps.rb:8
  2. Print maroto :)
      -
\ No newline at end of file + + + diff --git a/features/step_definitions/credenciamento_professores_steps.rb b/features/step_definitions/credenciamento_professores_steps.rb index 2fead544..0ec1ba5a 100644 --- a/features/step_definitions/credenciamento_professores_steps.rb +++ b/features/step_definitions/credenciamento_professores_steps.rb @@ -17,7 +17,6 @@ def with_scope(locator) end Dado "que existam os seguintes credenciamentos sem prazo definido:" do |table| - type_id = ActivityType.create!(title: 'Credenciamento').id pending # table.hashes.each do |row| # end @@ -92,7 +91,7 @@ def with_scope(locator) # select_date(date, :from => field) end -ndo /^eu seleciono uma data anterior a atual em '([^']*)'$/ do |field| +Quando /^eu seleciono uma data anterior a atual em '([^']*)'$/ do |field| pending # select_date(date, :from => field) end diff --git a/report.json b/report.json index 43b1702d..bbecf57f 100644 --- a/report.json +++ b/report.json @@ -1 +1 @@ -[{"uri":"features/abrir_solicitacao_credenciamento.feature","id":"abrir-solicitação-de-credenciamento","keyword":"Funcionalidade","name":"Abrir solicitação de credenciamento","description":" Como professor autenticado no sistema,\n Quero poder abrir uma solicitação de credenciamento\n Para que eu possa ser um professor credenciado","line":4,"comments":[{"value":"#encoding: utf-8","line":2}],"elements":[{"keyword":"Contexto","name":"","description":"","line":9,"type":"background","before":[{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:14"},"result":{"status":"passed","duration":31300}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:22"},"result":{"status":"passed","duration":19200}}],"steps":[{"keyword":"Dado ","name":"que eu estou cadastrado e logado como \"Lucas\", \"lucas@professor.com\", \"lucas123\", \"professor\", \"200000000\"","line":10,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:8"},"result":{"status":"passed","duration":2212292400}},{"keyword":"E ","name":"que eu estou na página de abrir solicitação de credenciamento","line":11,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:30"},"result":{"status":"failed","error_message":"Can't find mapping from \"de abrir solicitação de credenciamento\" to a path.\nNow, go and add a mapping in /mnt/c/Users/Fontenelle/Desktop/UnB/9 semestre/Engenharia de Software/secretaria_ppgi/features/support/paths.rb (RuntimeError)\n./features/support/paths.rb:31:in `rescue in path_to'\n./features/support/paths.rb:26:in `path_to'\n./features/step_definitions/credenciamento_professores_steps.rb:31:in `/^que eu estou na página (.+)$/'\nfeatures/abrir_solicitacao_credenciamento.feature:11:in `E que eu estou na página de abrir solicitação de credenciamento'","duration":163700}}]},{"id":"abrir-solicitação-de-credenciamento;solicitação-enviada-com-sucesso","keyword":"Cenário","name":"Solicitação enviada com sucesso","description":"","line":13,"type":"scenario","steps":[{"keyword":"Quando ","name":"eu anexo o arquivo \"Formulário de Credenciamento.pdf\" no campo 'Formulario'","line":14,"match":{"location":"features/abrir_solicitacao_credenciamento.feature:14"},"result":{"status":"undefined"}},{"keyword":"E ","name":"eu anexo o arquivo \"CV Lattes.pdf\" em 'CV Lattes'","line":15,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:34"},"result":{"status":"skipped"}},{"keyword":"E ","name":"eu clico em 'Enviar'","line":16,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:38"},"result":{"status":"skipped"}},{"keyword":"Então ","name":"eu devo ver \"Solicitação enviada com sucesso\"","line":17,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:67"},"result":{"status":"skipped"}}],"after":[{"embeddings":[{"mime_type":"image/png","data":"bG9nL3NjcmVlbnNob3RzL3NvbGljaXRhb2VudmlhZGFjb21zdWNlc3NvLnBuZw=="}],"match":{"location":"features/support/hooks.rb:1"},"result":{"status":"failed","error_message":"undefined method `manage' for #\u003cCapybara::RackTest::Browser:0x00007fffcd7263a0\u003e (NoMethodError)\n./features/support/hooks.rb:22:in `add_browser_logs'\n./features/support/hooks.rb:5:in `After'","duration":367500}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:10"},"result":{"status":"passed","duration":24900}}]},{"keyword":"Contexto","name":"","description":"","line":9,"type":"background","before":[{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:14"},"result":{"status":"passed","duration":11000}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:22"},"result":{"status":"passed","duration":9200}}],"steps":[{"keyword":"Dado ","name":"que eu estou cadastrado e logado como \"Lucas\", \"lucas@professor.com\", \"lucas123\", \"professor\", \"200000000\"","line":10,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:8"},"result":{"status":"passed","duration":36932100}},{"keyword":"E ","name":"que eu estou na página de abrir solicitação de credenciamento","line":11,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:30"},"result":{"status":"failed","error_message":"Can't find mapping from \"de abrir solicitação de credenciamento\" to a path.\nNow, go and add a mapping in /mnt/c/Users/Fontenelle/Desktop/UnB/9 semestre/Engenharia de Software/secretaria_ppgi/features/support/paths.rb (RuntimeError)\n./features/support/paths.rb:31:in `rescue in path_to'\n./features/support/paths.rb:26:in `path_to'\n./features/step_definitions/credenciamento_professores_steps.rb:31:in `/^que eu estou na página (.+)$/'\nfeatures/abrir_solicitacao_credenciamento.feature:11:in `E que eu estou na página de abrir solicitação de credenciamento'","duration":125900}}]},{"id":"abrir-solicitação-de-credenciamento;solicitação-não-enviada-(campo-obrigatório-em-branco)","keyword":"Cenário","name":"Solicitação não enviada (campo obrigatório em branco)","description":"","line":19,"type":"scenario","steps":[{"keyword":"Quando ","name":"eu anexo o arquivo \"Formulário de Credenciamento.pdf\" no campo 'Formulario'","line":20,"match":{"location":"features/abrir_solicitacao_credenciamento.feature:20"},"result":{"status":"undefined"}},{"keyword":"E ","name":"eu clico em 'Enviar'","line":21,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:38"},"result":{"status":"skipped"}},{"keyword":"Então ","name":"eu devo ver \"Solicitação não enviada (campo obrigatório* em branco)\"","line":22,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:67"},"result":{"status":"skipped"}}],"after":[{"embeddings":[{"mime_type":"image/png","data":"bG9nL3NjcmVlbnNob3RzL3NvbGljaXRhb25vZW52aWFkYWNhbXBvb2JyaWdhdHJpb2VtYnJhbmNvLnBuZw=="}],"match":{"location":"features/support/hooks.rb:1"},"result":{"status":"failed","error_message":"undefined method `manage' for #\u003cCapybara::RackTest::Browser:0x00007fffce93fbb8\u003e (NoMethodError)\n./features/support/hooks.rb:22:in `add_browser_logs'\n./features/support/hooks.rb:5:in `After'","duration":1180900}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:10"},"result":{"status":"passed","duration":20800}}]}]},{"uri":"features/credenciamento_periodo.feature","id":"definir-o-prazo-de-credenciamento-dos-professores","keyword":"Funcionalidade","name":"Definir o prazo de credenciamento dos professores","description":" Como um administrador,\n para que eu possa credenciar os professores,\n eu gostaria de definir o prazo de credenciamento dos professores","line":4,"comments":[{"value":"#encoding: utf-8","line":2}],"elements":[{"keyword":"Contexto","name":"","description":"","line":9,"type":"background","before":[{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:14"},"result":{"status":"passed","duration":11000}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:22"},"result":{"status":"passed","duration":8700}}],"steps":[{"keyword":"Dado ","name":"que eu esteja autenticado como usuario \"admin\"","line":10,"match":{"location":"features/credenciamento_periodo.feature:10"},"result":{"status":"undefined"}},{"keyword":"E ","name":"que esteja na página de credenciamento","line":11,"match":{"location":"features/credenciamento_periodo.feature:11"},"result":{"status":"undefined"}}]},{"id":"definir-o-prazo-de-credenciamento-dos-professores;definir-prazo-de-credenciamento-sem-data","keyword":"Cenário","name":"Definir prazo de credenciamento sem data","description":"","line":13,"type":"scenario","steps":[{"keyword":"Quando ","name":"eu aperto o botão \"Definir prazo de credenciamento\"","line":14,"match":{"location":"features/credenciamento_periodo.feature:14"},"result":{"status":"undefined"}},{"keyword":"E ","name":"eu aperto o botão \"Salvar período\"","line":15,"match":{"location":"features/credenciamento_periodo.feature:15"},"result":{"status":"undefined"}},{"keyword":"Então ","name":"eu espero ver a mensagem \"Insira uma data de início e uma data de término válidas.\"","line":16,"match":{"location":"features/credenciamento_periodo.feature:16"},"result":{"status":"undefined"}}],"after":[{"embeddings":[{"mime_type":"image/png","data":"bG9nL3NjcmVlbnNob3RzL2RlZmluaXJwcmF6b2RlY3JlZGVuY2lhbWVudG9zZW1kYXRhLnBuZw=="}],"match":{"location":"features/support/hooks.rb:1"},"result":{"status":"passed","duration":217700}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:10"},"result":{"status":"passed","duration":34100}}]},{"keyword":"Contexto","name":"","description":"","line":9,"type":"background","before":[{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:14"},"result":{"status":"passed","duration":12100}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:22"},"result":{"status":"passed","duration":21000}}],"steps":[{"keyword":"Dado ","name":"que eu esteja autenticado como usuario \"admin\"","line":10,"match":{"location":"features/credenciamento_periodo.feature:10"},"result":{"status":"undefined"}},{"keyword":"E ","name":"que esteja na página de credenciamento","line":11,"match":{"location":"features/credenciamento_periodo.feature:11"},"result":{"status":"undefined"}}]},{"id":"definir-o-prazo-de-credenciamento-dos-professores;definir-prazo-de-credenciamento-com-data","keyword":"Cenário","name":"Definir prazo de credenciamento com data","description":"","line":18,"type":"scenario","steps":[{"keyword":"Quando ","name":"eu aperto o botão \"Definir prazo de credenciamento\"","line":19,"match":{"location":"features/credenciamento_periodo.feature:19"},"result":{"status":"undefined"}},{"keyword":"Quando ","name":"eu adiciono um valor \"Início\" para \"Data de Início\"","line":20,"match":{"location":"features/credenciamento_periodo.feature:20"},"result":{"status":"undefined"}},{"keyword":"E ","name":"eu adiciono um valor \"Término\" para \"Data de Término\"","line":21,"match":{"location":"features/credenciamento_periodo.feature:21"},"result":{"status":"undefined"}},{"keyword":"E ","name":"eu aperto o botão \"Salvar período\"","line":22,"match":{"location":"features/credenciamento_periodo.feature:22"},"result":{"status":"undefined"}},{"keyword":"Então ","name":"eu espero ver a mensagem \"Prazo cadastrado com sucesso.\"","line":23,"match":{"location":"features/credenciamento_periodo.feature:23"},"result":{"status":"undefined"}}],"after":[{"embeddings":[{"mime_type":"image/png","data":"bG9nL3NjcmVlbnNob3RzL2RlZmluaXJwcmF6b2RlY3JlZGVuY2lhbWVudG9jb21kYXRhLnBuZw=="}],"match":{"location":"features/support/hooks.rb:1"},"result":{"status":"passed","duration":219300}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:10"},"result":{"status":"passed","duration":23100}}]}]},{"uri":"features/gerenciar_solicitacoes_credenciamento.feature","id":"gerenciar-solicitações-de-credenciamento","keyword":"Funcionalidade","name":"Gerenciar solicitações de credenciamento","description":" Como um admnistrador do sistema\n Quero visualizar uma solicitação de credencimento em aberto\n Para decidir se vou aceitar ou recusar tal solicitação","line":4,"comments":[{"value":"#encoding: utf-8","line":2}],"elements":[{"keyword":"Contexto","name":"","description":"","line":9,"type":"background","before":[{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:14"},"result":{"status":"passed","duration":12900}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:22"},"result":{"status":"passed","duration":9800}}],"steps":[{"keyword":"Dado ","name":"que as seguintes solicitações estejam pendentes:","line":10,"rows":[{"cells":["title","due_date","activity_type_id"]},{"cells":["Solicitação 1","02-Jan-2021","Solicitação de credenciamento"]},{"cells":["Solicitação 2","02-Jan-2021","Solicitação de credenciamento"]},{"cells":["Solicitação 3","02-Jan-2021","Solicitação de credenciamento"]},{"cells":["Solicitação 4","02-Jan-2021","Solicitação de credenciamento"]}],"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:1"},"result":{"status":"pending","error_message":"TODO (Cucumber::Pending)\n./features/step_definitions/credenciamento_professores_steps.rb:2:in `\"que as seguintes solicitações estejam pendentes:\"'\nfeatures/gerenciar_solicitacoes_credenciamento.feature:10:in `Dado que as seguintes solicitações estejam pendentes:'","duration":496800}},{"keyword":"E ","name":"que eu estou cadastrado e logado como \"Gabriel\", \"gabriel@admin.com\", \"gabriel123\", \"administrator\", \"200000000\"","line":17,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:8"},"result":{"status":"skipped"}},{"keyword":"E ","name":"que eu estou na página de solicitações de credenciamento","line":18,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:30"},"result":{"status":"skipped"}}]},{"id":"gerenciar-solicitações-de-credenciamento;aceitar-uma-solicitação-de-credenciamento","keyword":"Cenário","name":"Aceitar uma solicitação de credenciamento","description":"","line":20,"type":"scenario","steps":[{"keyword":"Quando ","name":"eu clico em \"Solicitação 1\"","line":21,"match":{"location":"features/gerenciar_solicitacoes_credenciamento.feature:21"},"result":{"status":"undefined"}},{"keyword":"Então ","name":"eu devo estar na página da \"Solicitação 1\"","line":22,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:42"},"result":{"status":"skipped"}},{"keyword":"Quando ","name":"eu clico em 'Aprovar'","line":23,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:38"},"result":{"status":"skipped"}},{"keyword":"Então ","name":"eu devo estar na página de solicitações de credenciamento","line":24,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:42"},"result":{"status":"skipped"}},{"keyword":"Quando ","name":"eu desmarco os seguintes estados: Rejeitadas, Reformulação","line":25,"match":{"location":"features/gerenciar_solicitacoes_credenciamento.feature:25"},"result":{"status":"undefined"}},{"keyword":"E ","name":"eu marco os seguintes estados: Aprovadas","line":26,"match":{"location":"features/gerenciar_solicitacoes_credenciamento.feature:26"},"result":{"status":"undefined"}},{"keyword":"E ","name":"eu aperto 'Atualizar'","line":27,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:63"},"result":{"status":"skipped"}},{"keyword":"Então ","name":"eu devo ver \"Solicitação 1\"","line":28,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:67"},"result":{"status":"skipped"}}],"after":[{"embeddings":[{"mime_type":"image/png","data":"bG9nL3NjcmVlbnNob3RzL2FjZWl0YXJ1bWFzb2xpY2l0YW9kZWNyZWRlbmNpYW1lbnRvLnBuZw=="}],"match":{"location":"features/support/hooks.rb:1"},"result":{"status":"passed","duration":220200}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:10"},"result":{"status":"passed","duration":25200}}]},{"keyword":"Contexto","name":"","description":"","line":9,"type":"background","before":[{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:14"},"result":{"status":"passed","duration":15900}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:22"},"result":{"status":"passed","duration":12000}}],"steps":[{"keyword":"Dado ","name":"que as seguintes solicitações estejam pendentes:","line":10,"rows":[{"cells":["title","due_date","activity_type_id"]},{"cells":["Solicitação 1","02-Jan-2021","Solicitação de credenciamento"]},{"cells":["Solicitação 2","02-Jan-2021","Solicitação de credenciamento"]},{"cells":["Solicitação 3","02-Jan-2021","Solicitação de credenciamento"]},{"cells":["Solicitação 4","02-Jan-2021","Solicitação de credenciamento"]}],"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:1"},"result":{"status":"pending","error_message":"TODO (Cucumber::Pending)\n./features/step_definitions/credenciamento_professores_steps.rb:2:in `\"que as seguintes solicitações estejam pendentes:\"'\nfeatures/gerenciar_solicitacoes_credenciamento.feature:10:in `Dado que as seguintes solicitações estejam pendentes:'","duration":147300}},{"keyword":"E ","name":"que eu estou cadastrado e logado como \"Gabriel\", \"gabriel@admin.com\", \"gabriel123\", \"administrator\", \"200000000\"","line":17,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:8"},"result":{"status":"skipped"}},{"keyword":"E ","name":"que eu estou na página de solicitações de credenciamento","line":18,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:30"},"result":{"status":"skipped"}}]},{"id":"gerenciar-solicitações-de-credenciamento;recusar-uma-solicitação-de-credenciamento","keyword":"Cenário","name":"Recusar uma solicitação de credenciamento","description":"","line":30,"type":"scenario","steps":[{"keyword":"Quando ","name":"eu clico em \"Solicitação 2\"","line":31,"match":{"location":"features/gerenciar_solicitacoes_credenciamento.feature:31"},"result":{"status":"undefined"}},{"keyword":"Então ","name":"eu devo estar na página da \"Solicitação 2\"","line":32,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:42"},"result":{"status":"skipped"}},{"keyword":"Quando ","name":"eu clico em 'Rejeitar'","line":33,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:38"},"result":{"status":"skipped"}},{"keyword":"Então ","name":"eu devo estar na página de solicitações de credenciamento","line":34,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:42"},"result":{"status":"skipped"}},{"keyword":"Quando ","name":"eu desmarco os seguintes estados: Aprovadas, Reformulação","line":35,"match":{"location":"features/gerenciar_solicitacoes_credenciamento.feature:35"},"result":{"status":"undefined"}},{"keyword":"E ","name":"eu marco os seguintes estados: Rejeitadas","line":36,"match":{"location":"features/gerenciar_solicitacoes_credenciamento.feature:36"},"result":{"status":"undefined"}},{"keyword":"E ","name":"eu aperto 'Atualizar'","line":37,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:63"},"result":{"status":"skipped"}},{"keyword":"Então ","name":"eu devo ver \"Solicitação 2\"","line":38,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:67"},"result":{"status":"skipped"}}],"after":[{"embeddings":[{"mime_type":"image/png","data":"bG9nL3NjcmVlbnNob3RzL3JlY3VzYXJ1bWFzb2xpY2l0YW9kZWNyZWRlbmNpYW1lbnRvLnBuZw=="}],"match":{"location":"features/support/hooks.rb:1"},"result":{"status":"passed","duration":191900}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:10"},"result":{"status":"passed","duration":25600}}]}]},{"uri":"features/requisitos_necessarios.feature","id":"disponibilizar-os-requisitos-necessarios-para-credenciamento-de-professores","keyword":"Funcionalidade","name":"Disponibilizar os requisitos necessarios para credenciamento de professores","description":" Como administrador autenticado no sistema,\n Quero poder disponibilizar para os professores os requisitos necessários para o credenciamento\n Para que eles possam dar procedimento ao credenciamento","line":4,"comments":[{"value":"#encoding: utf-8","line":2}],"elements":[{"keyword":"Contexto","name":"","description":"","line":9,"type":"background","before":[{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:14"},"result":{"status":"passed","duration":12000}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:22"},"result":{"status":"passed","duration":12700}}],"steps":[{"keyword":"Dado ","name":"que eu esteja logado como administrador de email \"gp@admin.com\" e senha \"123\"","line":10,"match":{"location":"features/requisitos_necessarios.feature:10"},"result":{"status":"undefined"}},{"keyword":"E ","name":"não existem requisitos selecionados na página principal","line":11,"match":{"location":"features/requisitos_necessarios.feature:11"},"result":{"status":"undefined"}},{"keyword":"Quando ","name":"o administrador clicou no link para alterar documentos necessários para credenciamento","line":12,"match":{"location":"features/requisitos_necessarios.feature:12"},"result":{"status":"undefined"}}]},{"id":"disponibilizar-os-requisitos-necessarios-para-credenciamento-de-professores;os-campos-puderam-ser-selecionados","keyword":"Cenário","name":"Os campos puderam ser selecionados","description":"","line":14,"type":"scenario","steps":[{"keyword":"Quando ","name":"eu selecionar os campos","line":15,"match":{"location":"features/requisitos_necessarios.feature:15"},"result":{"status":"undefined"}},{"keyword":"E ","name":"eu clicar no botão atualizar requisitos","line":16,"match":{"location":"features/requisitos_necessarios.feature:16"},"result":{"status":"undefined"}},{"keyword":"Então ","name":"eu devo voltar para a página principal aonde aparece meus requisitos selecionados","line":17,"match":{"location":"features/requisitos_necessarios.feature:17"},"result":{"status":"undefined"}}],"after":[{"embeddings":[{"mime_type":"image/png","data":"bG9nL3NjcmVlbnNob3RzL29zY2FtcG9zcHVkZXJhbXNlcnNlbGVjaW9uYWRvcy5wbmc="}],"match":{"location":"features/support/hooks.rb:1"},"result":{"status":"passed","duration":2373100}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:10"},"result":{"status":"passed","duration":40300}}]},{"keyword":"Contexto","name":"","description":"","line":9,"type":"background","before":[{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:14"},"result":{"status":"passed","duration":15100}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:22"},"result":{"status":"passed","duration":9600}}],"steps":[{"keyword":"Dado ","name":"que eu esteja logado como administrador de email \"gp@admin.com\" e senha \"123\"","line":10,"match":{"location":"features/requisitos_necessarios.feature:10"},"result":{"status":"undefined"}},{"keyword":"E ","name":"não existem requisitos selecionados na página principal","line":11,"match":{"location":"features/requisitos_necessarios.feature:11"},"result":{"status":"undefined"}},{"keyword":"Quando ","name":"o administrador clicou no link para alterar documentos necessários para credenciamento","line":12,"match":{"location":"features/requisitos_necessarios.feature:12"},"result":{"status":"undefined"}}]},{"id":"disponibilizar-os-requisitos-necessarios-para-credenciamento-de-professores;não-houveram-mudanças-feitas","keyword":"Cenário","name":"Não houveram mudanças feitas","description":"","line":19,"type":"scenario","steps":[{"keyword":"Quando ","name":"eu não selecionar os campos","line":20,"match":{"location":"features/requisitos_necessarios.feature:20"},"result":{"status":"undefined"}},{"keyword":"E ","name":"eu clicar no botão atualizar requisitos","line":21,"match":{"location":"features/requisitos_necessarios.feature:21"},"result":{"status":"undefined"}},{"keyword":"Então ","name":"eu recebo uma mensagem dizendo que \"não houveram mudanças\"","line":22,"match":{"location":"features/requisitos_necessarios.feature:22"},"result":{"status":"undefined"}}],"after":[{"embeddings":[{"mime_type":"image/png","data":"bG9nL3NjcmVlbnNob3RzL25vaG91dmVyYW1tdWRhbmFzZmVpdGFzLnBuZw=="}],"match":{"location":"features/support/hooks.rb:1"},"result":{"status":"passed","duration":214700}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:10"},"result":{"status":"passed","duration":18600}}]}]},{"uri":"features/spike.feature","id":"testar","keyword":"Funcionalidade","name":"Testar","description":"","line":4,"comments":[{"value":"#encoding: utf-8","line":2}],"elements":[{"id":"testar;","keyword":"Cenário","name":"","description":"","line":5,"type":"scenario","before":[{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:14"},"result":{"status":"passed","duration":18600}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:22"},"result":{"status":"passed","duration":13400}}],"steps":[{"keyword":"Dado ","name":"que eu estou cadastrado e logado como \"Gabriel\", \"gabriel@admin.com\", \"gabriel123\", \"administrator\", \"200000000\"","line":6,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:8"},"result":{"status":"passed","duration":39523000}}],"after":[{"embeddings":[{"mime_type":"image/png","data":"bG9nL3NjcmVlbnNob3RzLy5wbmc="}],"match":{"location":"features/support/hooks.rb:1"},"result":{"status":"passed","duration":223700}},{"match":{"location":"capybara-3.29.0/lib/capybara/cucumber.rb:10"},"result":{"status":"passed","duration":19100}}]}]}] \ No newline at end of file +[{"id":"testar","uri":"features/spike.feature","keyword":"Funcionalidade","name":"Testar","description":"","line":4,"elements":[{"id":"testar;","keyword":"Cenário","name":"","description":"","line":5,"type":"scenario","before":[{"match":{"location":"capybara-3.33.0/lib/capybara/cucumber.rb:14"},"result":{"status":"passed","duration":42500}},{"match":{"location":"capybara-3.33.0/lib/capybara/cucumber.rb:22"},"result":{"status":"passed","duration":19800}}],"steps":[{"keyword":"Dado ","name":"que eu esteja cadastrado e logado como \"Gabriel\", \"gabriel@admin.com\", \"gabriel123\", \"administrator\", \"200000000\"","line":6,"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:25"},"result":{"status":"passed","duration":263059700}},{"keyword":"E ","name":"que existam os seguintes credenciamentos sem prazo definido:","line":7,"rows":[{"cells":["activity_title","user_full_name"]},{"cells":["Credenciamento 1","Adalberto"]},{"cells":["Credenciamento 2","Mariano"]},{"cells":["Credenciamento 3","Joel"]}],"match":{"location":"features/step_definitions/credenciamento_professores_steps.rb:19"},"result":{"status":"pending","error_message":"TODO (Cucumber::Pending)\n./features/step_definitions/credenciamento_professores_steps.rb:20:in `\"que existam os seguintes credenciamentos sem prazo definido:\"'\nfeatures/spike.feature:7:in `que existam os seguintes credenciamentos sem prazo definido:'","duration":165600}}],"after":[{"embeddings":[{"mime_type":"image/png","data":"bG9nL3NjcmVlbnNob3RzLy5wbmc="}],"match":{"location":"features/support/hooks.rb:1"},"result":{"status":"passed","duration":332000}},{"match":{"location":"capybara-3.33.0/lib/capybara/cucumber.rb:10"},"result":{"status":"passed","duration":21700}}]}]}] \ No newline at end of file diff --git a/spec/requests/accreditations_spec.rb b/spec/requests/accreditations_spec.rb index ce707660..d3bfc23d 100644 --- a/spec/requests/accreditations_spec.rb +++ b/spec/requests/accreditations_spec.rb @@ -1,10 +1,129 @@ -require 'rails_helper' + require 'rails_helper' -RSpec.describe "Accreditations", type: :request do - describe "GET /accreditations" do - it "works! (now write some real specs)" do - get accreditations_path - expect(response).to have_http_status(200) +# This spec was generated by rspec-rails when you ran the scaffold generator. +# It demonstrates how one might use RSpec to test the controller code that +# was generated by Rails when you ran the scaffold generator. +# +# It assumes that the implementation code is generated by the rails scaffold +# generator. If you are using any extension libraries to generate different +# controller code, this generated spec may or may not pass. +# +# It only uses APIs available in rails and/or rspec-rails. There are a number +# of tools you can use to make these specs even more expressive, but we're +# sticking to rails and rspec-rails APIs to keep things simple and stable. + +RSpec.describe "/accreditations", type: :request do + # Accreditation. As you add validations to Accreditation, be sure to + # adjust the attributes here as well. + let(:valid_attributes) { + skip("Add a hash of attributes valid for your model") + } + + let(:invalid_attributes) { + skip("Add a hash of attributes invalid for your model") + } + + describe "GET /index" do + it "renders a successful response" do + Accreditation.create! valid_attributes + get accreditations_url + expect(response).to be_successful + end + end + + describe "GET /show" do + it "renders a successful response" do + accreditation = Accreditation.create! valid_attributes + get accreditation_url(accreditation) + expect(response).to be_successful + end + end + + describe "GET /new" do + it "renders a successful response" do + get new_accreditation_url + expect(response).to be_successful + end + end + + describe "GET /edit" do + it "render a successful response" do + accreditation = Accreditation.create! valid_attributes + get edit_accreditation_url(accreditation) + expect(response).to be_successful + end + end + + describe "POST /create" do + context "with valid parameters" do + it "creates a new Accreditation" do + expect { + post accreditations_url, params: { accreditation: valid_attributes } + }.to change(Accreditation, :count).by(1) + end + + it "redirects to the created accreditation" do + post accreditations_url, params: { accreditation: valid_attributes } + expect(response).to redirect_to(accreditation_url(Accreditation.last)) + end + end + + context "with invalid parameters" do + it "does not create a new Accreditation" do + expect { + post accreditations_url, params: { accreditation: invalid_attributes } + }.to change(Accreditation, :count).by(0) + end + + it "renders a successful response (i.e. to display the 'new' template)" do + post accreditations_url, params: { accreditation: invalid_attributes } + expect(response).to be_successful + end + end + end + + describe "PATCH /update" do + context "with valid parameters" do + let(:new_attributes) { + skip("Add a hash of attributes valid for your model") + } + + it "updates the requested accreditation" do + accreditation = Accreditation.create! valid_attributes + patch accreditation_url(accreditation), params: { accreditation: new_attributes } + accreditation.reload + skip("Add assertions for updated state") + end + + it "redirects to the accreditation" do + accreditation = Accreditation.create! valid_attributes + patch accreditation_url(accreditation), params: { accreditation: new_attributes } + accreditation.reload + expect(response).to redirect_to(accreditation_url(accreditation)) + end + end + + context "with invalid parameters" do + it "renders a successful response (i.e. to display the 'edit' template)" do + accreditation = Accreditation.create! valid_attributes + patch accreditation_url(accreditation), params: { accreditation: invalid_attributes } + expect(response).to be_successful + end + end + end + + describe "DELETE /destroy" do + it "destroys the requested accreditation" do + accreditation = Accreditation.create! valid_attributes + expect { + delete accreditation_url(accreditation) + }.to change(Accreditation, :count).by(-1) + end + + it "redirects to the accreditations list" do + accreditation = Accreditation.create! valid_attributes + delete accreditation_url(accreditation) + expect(response).to redirect_to(accreditations_url) end end end diff --git a/spec/routing/accreditations_routing_spec.rb b/spec/routing/accreditations_routing_spec.rb index fe8a17b7..e77cf77a 100644 --- a/spec/routing/accreditations_routing_spec.rb +++ b/spec/routing/accreditations_routing_spec.rb @@ -3,36 +3,36 @@ RSpec.describe AccreditationsController, type: :routing do describe "routing" do it "routes to #index" do - expect(:get => "/accreditations").to route_to("accreditations#index") + expect(get: "/accreditations").to route_to("accreditations#index") end it "routes to #new" do - expect(:get => "/accreditations/new").to route_to("accreditations#new") + expect(get: "/accreditations/new").to route_to("accreditations#new") end it "routes to #show" do - expect(:get => "/accreditations/1").to route_to("accreditations#show", :id => "1") + expect(get: "/accreditations/1").to route_to("accreditations#show", id: "1") end it "routes to #edit" do - expect(:get => "/accreditations/1/edit").to route_to("accreditations#edit", :id => "1") + expect(get: "/accreditations/1/edit").to route_to("accreditations#edit", id: "1") end it "routes to #create" do - expect(:post => "/accreditations").to route_to("accreditations#create") + expect(post: "/accreditations").to route_to("accreditations#create") end it "routes to #update via PUT" do - expect(:put => "/accreditations/1").to route_to("accreditations#update", :id => "1") + expect(put: "/accreditations/1").to route_to("accreditations#update", id: "1") end it "routes to #update via PATCH" do - expect(:patch => "/accreditations/1").to route_to("accreditations#update", :id => "1") + expect(patch: "/accreditations/1").to route_to("accreditations#update", id: "1") end it "routes to #destroy" do - expect(:delete => "/accreditations/1").to route_to("accreditations#destroy", :id => "1") + expect(delete: "/accreditations/1").to route_to("accreditations#destroy", id: "1") end end end diff --git a/spec/views/accreditations/edit.html.erb_spec.rb b/spec/views/accreditations/edit.html.erb_spec.rb deleted file mode 100644 index a8d817ec..00000000 --- a/spec/views/accreditations/edit.html.erb_spec.rb +++ /dev/null @@ -1,18 +0,0 @@ -require 'rails_helper' - -RSpec.describe "accreditations/edit", type: :view do - before(:each) do - @accreditation = assign(:accreditation, Accreditation.create!( - :user => nil - )) - end - - it "renders the edit accreditation form" do - render - - assert_select "form[action=?][method=?]", accreditation_path(@accreditation), "post" do - - assert_select "input[name=?]", "accreditation[user_id]" - end - end -end diff --git a/spec/views/accreditations/index.html.erb_spec.rb b/spec/views/accreditations/index.html.erb_spec.rb deleted file mode 100644 index f06c58fe..00000000 --- a/spec/views/accreditations/index.html.erb_spec.rb +++ /dev/null @@ -1,19 +0,0 @@ -require 'rails_helper' - -RSpec.describe "accreditations/index", type: :view do - before(:each) do - assign(:accreditations, [ - Accreditation.create!( - :user => nil - ), - Accreditation.create!( - :user => nil - ) - ]) - end - - it "renders a list of accreditations" do - render - assert_select "tr>td", :text => nil.to_s, :count => 2 - end -end diff --git a/spec/views/accreditations/new.html.erb_spec.rb b/spec/views/accreditations/new.html.erb_spec.rb deleted file mode 100644 index c6921eed..00000000 --- a/spec/views/accreditations/new.html.erb_spec.rb +++ /dev/null @@ -1,18 +0,0 @@ -require 'rails_helper' - -RSpec.describe "accreditations/new", type: :view do - before(:each) do - assign(:accreditation, Accreditation.new( - :user => nil - )) - end - - it "renders new accreditation form" do - render - - assert_select "form[action=?][method=?]", accreditations_path, "post" do - - assert_select "input[name=?]", "accreditation[user_id]" - end - end -end diff --git a/spec/views/accreditations/show.html.erb_spec.rb b/spec/views/accreditations/show.html.erb_spec.rb deleted file mode 100644 index 7a594d96..00000000 --- a/spec/views/accreditations/show.html.erb_spec.rb +++ /dev/null @@ -1,14 +0,0 @@ -require 'rails_helper' - -RSpec.describe "accreditations/show", type: :view do - before(:each) do - @accreditation = assign(:accreditation, Accreditation.create!( - :user => nil - )) - end - - it "renders attributes in

" do - render - expect(rendered).to match(//) - end -end diff --git a/spec/views/requirements/edit.html.erb_spec.rb b/spec/views/requirements/edit.html.erb_spec.rb deleted file mode 100644 index e6e58848..00000000 --- a/spec/views/requirements/edit.html.erb_spec.rb +++ /dev/null @@ -1,21 +0,0 @@ -require 'rails_helper' - -RSpec.describe "requirements/edit", type: :view do - before(:each) do - @requirement = assign(:requirement, Requirement.create!( - :title => "MyString", - :content => "MyText" - )) - end - - it "renders the edit requirement form" do - render - - assert_select "form[action=?][method=?]", requirement_path(@requirement), "post" do - - assert_select "input[name=?]", "requirement[title]" - - assert_select "textarea[name=?]", "requirement[content]" - end - end -end diff --git a/spec/views/requirements/index.html.erb_spec.rb b/spec/views/requirements/index.html.erb_spec.rb deleted file mode 100644 index 6f4ce689..00000000 --- a/spec/views/requirements/index.html.erb_spec.rb +++ /dev/null @@ -1,22 +0,0 @@ -require 'rails_helper' - -RSpec.describe "requirements/index", type: :view do - before(:each) do - assign(:requirements, [ - Requirement.create!( - :title => "Title", - :content => "MyText" - ), - Requirement.create!( - :title => "Title", - :content => "MyText" - ) - ]) - end - - it "renders a list of requirements" do - render - assert_select "tr>td", :text => "Title".to_s, :count => 2 - assert_select "tr>td", :text => "MyText".to_s, :count => 2 - end -end diff --git a/spec/views/requirements/new.html.erb_spec.rb b/spec/views/requirements/new.html.erb_spec.rb deleted file mode 100644 index 4292120f..00000000 --- a/spec/views/requirements/new.html.erb_spec.rb +++ /dev/null @@ -1,21 +0,0 @@ -require 'rails_helper' - -RSpec.describe "requirements/new", type: :view do - before(:each) do - assign(:requirement, Requirement.new( - :title => "MyString", - :content => "MyText" - )) - end - - it "renders new requirement form" do - render - - assert_select "form[action=?][method=?]", requirements_path, "post" do - - assert_select "input[name=?]", "requirement[title]" - - assert_select "textarea[name=?]", "requirement[content]" - end - end -end diff --git a/spec/views/requirements/show.html.erb_spec.rb b/spec/views/requirements/show.html.erb_spec.rb deleted file mode 100644 index 39cd138e..00000000 --- a/spec/views/requirements/show.html.erb_spec.rb +++ /dev/null @@ -1,16 +0,0 @@ -require 'rails_helper' - -RSpec.describe "requirements/show", type: :view do - before(:each) do - @requirement = assign(:requirement, Requirement.create!( - :title => "Title", - :content => "MyText" - )) - end - - it "renders attributes in

" do - render - expect(rendered).to match(/Title/) - expect(rendered).to match(/MyText/) - end -end diff --git a/spec/views/sei_processes/edit.html.erb_spec.rb b/spec/views/sei_processes/edit.html.erb_spec.rb deleted file mode 100644 index 42e919f8..00000000 --- a/spec/views/sei_processes/edit.html.erb_spec.rb +++ /dev/null @@ -1,24 +0,0 @@ -require 'rails_helper' - -RSpec.describe "sei_processes/edit", type: :view do - before(:each) do - @sei_process = assign(:sei_process, SeiProcess.create!( - :user => nil, - :status => 1, - :code => "MyString" - )) - end - - it "renders the edit sei_process form" do - render - - assert_select "form[action=?][method=?]", sei_process_path(@sei_process), "post" do - - assert_select "input[name=?]", "sei_process[user_id]" - - assert_select "input[name=?]", "sei_process[status]" - - assert_select "input[name=?]", "sei_process[code]" - end - end -end diff --git a/spec/views/sei_processes/index.html.erb_spec.rb b/spec/views/sei_processes/index.html.erb_spec.rb deleted file mode 100644 index 62e3580c..00000000 --- a/spec/views/sei_processes/index.html.erb_spec.rb +++ /dev/null @@ -1,25 +0,0 @@ -require 'rails_helper' - -RSpec.describe "sei_processes/index", type: :view do - before(:each) do - assign(:sei_processes, [ - SeiProcess.create!( - :user => nil, - :status => 2, - :code => "Code" - ), - SeiProcess.create!( - :user => nil, - :status => 2, - :code => "Code" - ) - ]) - end - - it "renders a list of sei_processes" do - render - assert_select "tr>td", :text => nil.to_s, :count => 2 - assert_select "tr>td", :text => 2.to_s, :count => 2 - assert_select "tr>td", :text => "Code".to_s, :count => 2 - end -end diff --git a/spec/views/sei_processes/new.html.erb_spec.rb b/spec/views/sei_processes/new.html.erb_spec.rb deleted file mode 100644 index 3fa87601..00000000 --- a/spec/views/sei_processes/new.html.erb_spec.rb +++ /dev/null @@ -1,24 +0,0 @@ -require 'rails_helper' - -RSpec.describe "sei_processes/new", type: :view do - before(:each) do - assign(:sei_process, SeiProcess.new( - :user => nil, - :status => 1, - :code => "MyString" - )) - end - - it "renders new sei_process form" do - render - - assert_select "form[action=?][method=?]", sei_processes_path, "post" do - - assert_select "input[name=?]", "sei_process[user_id]" - - assert_select "input[name=?]", "sei_process[status]" - - assert_select "input[name=?]", "sei_process[code]" - end - end -end diff --git a/spec/views/sei_processes/show.html.erb_spec.rb b/spec/views/sei_processes/show.html.erb_spec.rb deleted file mode 100644 index d6a94c85..00000000 --- a/spec/views/sei_processes/show.html.erb_spec.rb +++ /dev/null @@ -1,18 +0,0 @@ -require 'rails_helper' - -RSpec.describe "sei_processes/show", type: :view do - before(:each) do - @sei_process = assign(:sei_process, SeiProcess.create!( - :user => nil, - :status => 2, - :code => "Code" - )) - end - - it "renders attributes in

" do - render - expect(rendered).to match(//) - expect(rendered).to match(/2/) - expect(rendered).to match(/Code/) - end -end From df05f960b47d28f5afc547bff4d127662cc8c6a1 Mon Sep 17 00:00:00 2001 From: afgmlff Date: Sat, 14 Nov 2020 18:46:55 -0300 Subject: [PATCH 26/82] updated start_date at creation (sei_process_controller.rb) and small accreditations index view changes --- app/controllers/sei_processes_controller.rb | 2 +- app/views/accreditations/index.html.erb | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/app/controllers/sei_processes_controller.rb b/app/controllers/sei_processes_controller.rb index c9fd913c..4469ccbd 100644 --- a/app/controllers/sei_processes_controller.rb +++ b/app/controllers/sei_processes_controller.rb @@ -46,7 +46,7 @@ def update format.json { render :index, status: :ok, location: @sei_process } if (@sei_process.status == 'Aprovado') && @sei_process.documents.attached? - Accreditation.create!(user_id: @sei_process.user_id, sei_process_id: @sei_process.id) + Accreditation.create!(user_id: @sei_process.user_id, sei_process_id: @sei_process.id, start_date: Date.current) end else diff --git a/app/views/accreditations/index.html.erb b/app/views/accreditations/index.html.erb index 4ae74a9b..0a5878c5 100644 --- a/app/views/accreditations/index.html.erb +++ b/app/views/accreditations/index.html.erb @@ -6,6 +6,7 @@ User + Sei Process ID Start date End date @@ -16,7 +17,7 @@ <% @accreditations.each do |accreditation| %> <%= accreditation.user.full_name %> - <%= accreditation.sei_process_id %> + <%= accreditation.sei_process_id %> <%= accreditation.start_date %> <%= accreditation.end_date %> <%= link_to 'Show', accreditation %> From df109ebde9da7757f80c8f4a622ff12828fc10e1 Mon Sep 17 00:00:00 2001 From: Gabriel Preihs Date: Sat, 14 Nov 2020 19:07:22 -0300 Subject: [PATCH 27/82] Returning to edit page on edit --- app/controllers/requirements_controller.rb | 4 ++-- app/views/requirements/edit.html.erb | 4 ++-- config/database.yml | 8 ++++++-- public/TestImage.png | Bin 0 -> 13849 bytes .../controllers/requirements_controller_spec.rb | 16 ++++++++++++++-- 5 files changed, 24 insertions(+), 8 deletions(-) create mode 100644 public/TestImage.png diff --git a/app/controllers/requirements_controller.rb b/app/controllers/requirements_controller.rb index ddfd0e6d..75d04d15 100644 --- a/app/controllers/requirements_controller.rb +++ b/app/controllers/requirements_controller.rb @@ -39,9 +39,9 @@ def create def delete_document_attachment @document = ActiveStorage::Attachment.find_by(id: params[:id]) + @requirement_id = params[:requirement_id] @document&.purge - # @asset = ActiveStorage::Attachment.find_by(id: params[:id]) - redirect_to :edit + redirect_to edit_requirement_path(@requirement_id) end # PATCH/PUT /requirements/1 diff --git a/app/views/requirements/edit.html.erb b/app/views/requirements/edit.html.erb index a8706164..4eba3e5d 100644 --- a/app/views/requirements/edit.html.erb +++ b/app/views/requirements/edit.html.erb @@ -4,7 +4,7 @@ <%= f.label "Título" %> <%= f.text_field :title %> <%= f.label "Conteúdo" %> - <%= f.text_field :title %> + <%= f.text_field :content %> <%= f.label "documentos" %> <%= f.file_field :documents, multiple: true %> <%= f.submit "Save", class: "btn btn-primary" %> @@ -16,7 +16,7 @@ <% @requirement.documents.each do | document | %>

<%= link_to document.filename, rails_blob_path(document, disposition: 'attachment') %> - <%= link_to 'Remover', delete_document_attachment_requirement_url(document.id, @requirement), + <%= link_to 'Remover', delete_document_attachment_requirement_url(document.id, requirement_id: @requirement.id), method: :delete, data: { } %> diff --git a/config/database.yml b/config/database.yml index 9930ddf5..8d527fda 100644 --- a/config/database.yml +++ b/config/database.yml @@ -19,6 +19,7 @@ default: &default encoding: unicode # For details on connection pooling, see Rails configuration guide # http://guides.rubyonrails.org/configuring.html#database-pooling + password: postgres pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> development: @@ -29,11 +30,11 @@ development: # To create additional roles in postgres see `$ createuser --help`. # When left blank, postgres will use the default role. This is # the same name as the operating system user that initialized the database. - #username: secretaria_ppgi + username: postgresql # The password associated with the postgres role (username). #password: - + password: postgres # Connect on a TCP socket. Omitted by default since the client uses a # domain socket that doesn't need configuration. Windows does not have # domain sockets, so uncomment these lines. @@ -59,6 +60,9 @@ test: <<: *default database: secretaria_ppgi_test + username: postgresql + password: postgres + # As with config/secrets.yml, you never want to store sensitive information, # like your database password, in your source code. If your source code is # ever seen by anyone, they now have access to your database. diff --git a/public/TestImage.png b/public/TestImage.png new file mode 100644 index 0000000000000000000000000000000000000000..b379c072733af999a6a23e81cb110a26f878efcc GIT binary patch literal 13849 zcmeHOeN)^YE4orii(xhIceocsJKLt5^OfXB;?|p zbIvMNTc`v`Pf_WL7_GH5@{u5m)Ix}W@|BnbDG4lu1VTP;ZgTJLg|o9af9`Cavp?=1 zIdAU0Z=UCQpZE9vp67Y<-ZQ`6mAZ7%3yS~%OSf-J*$qIn7=XyK1wSC~{5gN#9*g@*q*X!Pf?cR ziK9L%^~39fU#CTN$L-rJIJC3$itPPsHq+17oYCe!esBk0^LiEIrymY1$ZHCg67xuT zphUsXkD|Us5_TN2r+qgt>cn-)R) zg2n~86zDZV^92cmXT+UKFO%Y1X-Yk}pxj#Dhf+js$vGT4(U>T_)5V}3GSln~I>)jM}YubAPk%fm%xmAj{s2HR`mo|6N>bhzWatJdc9}X2u)1o_SN|&}9OT<{ zDL%tJ-+^d_3J&qbFlsO79&@(n5!B%m7Fy(?eqk`JB@t-idviKgpPJo`(662k{JjcE zzJ4Lst{+q>CHKqIi^qvJA-8c6VqZ+OBho+*GXnTy{&C@VkUD$SiVC99%&9U|B06Kx z<8DBlinuQ$fb44ZJ5b4Wb5OzjS$A8ja>{VoSBYqiK}U=nu|44fi@E-E8MH}p-P2qs zDc#`u%r&J#8`VuLc|-})T%8FE>*;s43}M`WL%k+omthYYPBHYlth^|Y)qe>dk{7MZ zbdz2nz2z}TCi|6?Z-N$43EhWJXMc6iIoWA*!(GhmPzvS z@yXglMYm!>(U#Kqn&&5bnjUZ9);tg19zCt-5Bkcjgq}B0NsL>hx%u7$3Ba{!W?sUM z;n}^MgdGtjTV!jKh|WhrBGCP5NWb;TO402Ya#*D`f=}R)PlaCcTN<0W{=6|{x@uYH z?2tGY<8t7!YagpTSg+TNT=Li2tj>^^8n>zUWG6J0$G*YyorTdhb?C-)f2^JK_0fHkyuxRrCg_ON^4UTv7yDjxQjHk*S?oz5IP z+iByC+6u@b>F>?5Hve~4F<*#dBKNJBx(I-u6W@Tgxirx}byE@|6yh(|In7mbstVXc zu&Nx4$CIml6;nL3oai%7Xi1cf*oXNLZkYxa&)w|1=scsvgmaEg8biZ+3^ml6&MHxv z1mGRqzw@f)>VzZ-i2?uX;(M?`r@cCl$9lFUI!lNj5xEPw4Q-SwQ+qadK~uu{647?( zR&8~v*Rc>xYn2-|0L_osHrVc!SVogkdccDZ8-q_`(rTxpu|j-S&XKGp$waqxuh%WXcXZ5HBJayb0PE^2?MlTPTZ$# zDV-oKw$zM;V{fo9%hT)=yHAkaOvYfSbygp9Q+g6?@WYnoMw3M6lXKh5{^xM(tmT}$ z)kk1`w~8gln(wIM(1p0yII+2sB$fK`C6!0mnYBmxPCQz4yOl)mx8iGIfbcm~zVA#@ z{(HDUJfWu6(+FqPm;ij@T`WtJHO>NhTn~;EIn`JvRFiRf%ozYKqC>K zhi#2A8{~*?KwLD8530~YAF&JoSylA`NYl-GKJz3ybo_@lZqrkZF?g~SoiRs{vF>pK zOl)QT$-Y3ly}7opPiZE05fkjEBquYd2|Zt(4a>XFh_bB|*?s2Ea2s>q(L?!oH)AYe zJt)bT@vjS`_{3!56*E54P^p%oGoinsf<9voEOl{U2JI+UB4bD#!soS+!9Ip> z<%YbMgi94wawM@)q9v!f->!mV8WudKMgJ1%T&$>;BQxccMfj*V7xwNBo|+IlUqz&A zQ_XHcrGgZdjO|=xICrZs?Q1QJxs-rIUZ>tard9M*hv-|CJMB zJX#3p0oo@tPUy8mQvpo{)S)msWYA%hPA%xHfTjZKJQST#(^UptApF-^!GCa=aQ09l zr>u`Tw|`5nLEyUe6|UJ|5lwxk50F2z1EKVJeEQvlXLQz>h87Ji8e0F;*P;A}2~ "test", "content" => "", "documents" => [file]} } let(:invalid_attributes) { - skip("Add a hash of attributes invalid for your model") + {"title" => ""} } # This should return the minimal set of values that should be in the session @@ -123,6 +124,17 @@ end end + describe "Documents Management"do + it 'purges a specific file' do + requirement = Requirement.create! valid_attributes + requirement.documents.each do | document | + expect { + delete :delete_document_attachment, params: { id: document.id } + }.to change(ActiveStorage::Attachment, :count).by(-1) + end + end + end + describe "DELETE #destroy" do it "destroys the requested requirement" do requirement = Requirement.create! valid_attributes From 90dbde31a6e2083ff8cf3c3b34bdeb51e37eb297 Mon Sep 17 00:00:00 2001 From: Gabriel Preihs Date: Sat, 14 Nov 2020 19:10:11 -0300 Subject: [PATCH 28/82] Solving missing id error --- spec/controllers/requirements_controller_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/controllers/requirements_controller_spec.rb b/spec/controllers/requirements_controller_spec.rb index 2ee12bc9..ee3eb7f9 100644 --- a/spec/controllers/requirements_controller_spec.rb +++ b/spec/controllers/requirements_controller_spec.rb @@ -129,7 +129,7 @@ requirement = Requirement.create! valid_attributes requirement.documents.each do | document | expect { - delete :delete_document_attachment, params: { id: document.id } + delete :delete_document_attachment, params: { id: document.id, requirement_id: requirement.id } }.to change(ActiveStorage::Attachment, :count).by(-1) end end From 2fa1a60411bc4bd37abf1989a1542896ebdcbab1 Mon Sep 17 00:00:00 2001 From: ngsylar Date: Sat, 14 Nov 2020 21:20:10 -0300 Subject: [PATCH 29/82] Accreditation Requirements is shown when opening a process --- app/controllers/sei_processes_controller.rb | 7 ++++++- app/models/requirement.rb | 2 +- app/views/home/index.html.erb | 12 +++++------ app/views/requirements/edit.html.erb | 3 ++- app/views/requirements/index.html.erb | 2 -- app/views/requirements/new.html.erb | 3 ++- app/views/sei_processes/index.html.erb | 23 +++++++++++++++++++-- app/views/sei_processes/new.html.erb | 16 ++++++++++++++ config/database.yml | 8 ++----- config/routes.rb | 3 ++- 10 files changed, 58 insertions(+), 21 deletions(-) diff --git a/app/controllers/sei_processes_controller.rb b/app/controllers/sei_processes_controller.rb index 4469ccbd..f88e8b19 100644 --- a/app/controllers/sei_processes_controller.rb +++ b/app/controllers/sei_processes_controller.rb @@ -4,7 +4,11 @@ class SeiProcessesController < ApplicationController # GET /sei_processes # GET /sei_processes.json def index - @sei_processes = SeiProcess.all + if current_user.role == "administrator" + @sei_processes = SeiProcess.all + else + @my_processes = SeiProcess.where(user_id: current_user.id) + end end # GET /sei_processes/1 @@ -14,6 +18,7 @@ def show # GET /sei_processes/new def new + @requirements = Requirement.find_by(title: 'Requisitos de Credenciamento') @sei_process = SeiProcess.new(user_id: current_user.id, status: 'Espera', code: '0') end diff --git a/app/models/requirement.rb b/app/models/requirement.rb index 6ae6949c..98106d97 100644 --- a/app/models/requirement.rb +++ b/app/models/requirement.rb @@ -1,4 +1,4 @@ class Requirement < ApplicationRecord - validates :title, presence: true + validates :title, presence: true, uniqueness: true has_many_attached :documents end diff --git a/app/views/home/index.html.erb b/app/views/home/index.html.erb index 14a0c3e8..ce5ab415 100644 --- a/app/views/home/index.html.erb +++ b/app/views/home/index.html.erb @@ -8,16 +8,16 @@

Cargo: <%= current_user.role %>

<% if current_user.role == "administrator" %> - <%= link_to "Atualizar Requisitos", requirements_path %> - <%= link_to "Processos Abertos", sei_processes_path %> + <%= link_to "Lista de Processos", sei_processes_path %> <%= link_to "Lista de Credenciamentos", accreditations_path %> -
- <%= link_to "Sair", destroy_user_session_path, method: :delete %> - + <% else %> - <%= link_to "Sair", destroy_user_session_path, method: :delete %> + <%= link_to "Meus Processos Abertos", sei_processes_path %> <% end %> + +
+ <%= link_to "Sair", destroy_user_session_path, method: :delete %> <% else %>

Entre para acessar o sistema!

diff --git a/app/views/requirements/edit.html.erb b/app/views/requirements/edit.html.erb index 4eba3e5d..589cca49 100644 --- a/app/views/requirements/edit.html.erb +++ b/app/views/requirements/edit.html.erb @@ -4,9 +4,10 @@ <%= f.label "Título" %> <%= f.text_field :title %> <%= f.label "Conteúdo" %> - <%= f.text_field :content %> + <%= f.text_area :content %> <%= f.label "documentos" %> <%= f.file_field :documents, multiple: true %> +
<%= f.submit "Save", class: "btn btn-primary" %> <% end %> diff --git a/app/views/requirements/index.html.erb b/app/views/requirements/index.html.erb index e2257557..a586f082 100644 --- a/app/views/requirements/index.html.erb +++ b/app/views/requirements/index.html.erb @@ -6,7 +6,6 @@ Title - Content @@ -15,7 +14,6 @@ <% @requirements.each do |requirement| %> <%= requirement.title %> - <%= requirement.content %> <%= link_to 'Show', requirement %> <%= link_to 'Edit', edit_requirement_path(requirement) %> <%= link_to 'Destroy', requirement, method: :delete, data: { confirm: 'Are you sure?' } %> diff --git a/app/views/requirements/new.html.erb b/app/views/requirements/new.html.erb index bca8b6b3..c566d2c1 100644 --- a/app/views/requirements/new.html.erb +++ b/app/views/requirements/new.html.erb @@ -4,9 +4,10 @@ <%= f.label "Título" %> <%= f.text_field :title %> <%= f.label "Conteúdo" %> - <%= f.text_field :content %> + <%= f.text_area :content %> <%= f.label "documentos" %> <%= f.file_field :documents, multiple: true %> +
<%= f.submit "Save", class: "btn btn-primary" %> <% end %> diff --git a/app/views/sei_processes/index.html.erb b/app/views/sei_processes/index.html.erb index a6b72490..4e9b3081 100644 --- a/app/views/sei_processes/index.html.erb +++ b/app/views/sei_processes/index.html.erb @@ -2,7 +2,7 @@

SEI Processos

-<% if user_signed_in? && (current_user.role == "administrator") %> +<% if current_user.role == "administrator" %> @@ -27,8 +27,27 @@ <% end %>
+ +<% else %> + + + + + + + + + + + <% @my_processes.each do |sei_process| %> + + + + + <% end %> + +
Código do ProcessoStatus
<%= sei_process.id %><%= sei_process.status %>
<% end %>
- <%= link_to 'Abrir Processo', new_sei_process_path %> diff --git a/app/views/sei_processes/new.html.erb b/app/views/sei_processes/new.html.erb index d4331717..d1f7f235 100644 --- a/app/views/sei_processes/new.html.erb +++ b/app/views/sei_processes/new.html.erb @@ -1,5 +1,21 @@

Abrir Processo

+<% if @requirements != nil %> +

<%= @requirements.title %>

+ <%= @requirements.content %> + + <% if @requirements.documents.attached? %> +

+ Documentos Necessários: + <% @requirements.documents.each do | document | %> +

+ <%= link_to document.filename, rails_blob_path(document, disposition: 'attachment') %> +
+ <% end %> +

+ <% end %> +<% end %> + <%= form_for @sei_process, html: { multipart: true } do |f| %> <%= f.hidden_field :user_id %> <%= f.hidden_field :status %> diff --git a/config/database.yml b/config/database.yml index 8d527fda..9930ddf5 100644 --- a/config/database.yml +++ b/config/database.yml @@ -19,7 +19,6 @@ default: &default encoding: unicode # For details on connection pooling, see Rails configuration guide # http://guides.rubyonrails.org/configuring.html#database-pooling - password: postgres pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> development: @@ -30,11 +29,11 @@ development: # To create additional roles in postgres see `$ createuser --help`. # When left blank, postgres will use the default role. This is # the same name as the operating system user that initialized the database. - username: postgresql + #username: secretaria_ppgi # The password associated with the postgres role (username). #password: - password: postgres + # Connect on a TCP socket. Omitted by default since the client uses a # domain socket that doesn't need configuration. Windows does not have # domain sockets, so uncomment these lines. @@ -60,9 +59,6 @@ test: <<: *default database: secretaria_ppgi_test - username: postgresql - password: postgres - # As with config/secrets.yml, you never want to store sensitive information, # like your database password, in your source code. If your source code is # ever seen by anyone, they now have access to your database. diff --git a/config/routes.rb b/config/routes.rb index 805204cf..506310d8 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -4,12 +4,13 @@ resources :accreditations resources :accreditations resources :sei_processes - resources :requirements + resources :requirements do member do delete :delete_document_attachment end end + get 'home/index' devise_for :users # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html From 296f50f4edfc6e40bd90f64136837523912a9185 Mon Sep 17 00:00:00 2001 From: ngsylar Date: Sat, 14 Nov 2020 22:44:45 -0300 Subject: [PATCH 30/82] Adjustments to Requirements and Processes views --- app/controllers/requirements_controller.rb | 6 ++-- app/views/home/index.html.erb | 3 +- app/views/requirements/edit.html.erb | 38 ++++++++++++---------- app/views/requirements/index.html.erb | 19 ++++++----- app/views/requirements/new.html.erb | 10 +++--- app/views/requirements/show.html.erb | 14 ++++---- app/views/sei_processes/edit.html.erb | 2 +- app/views/sei_processes/index.html.erb | 13 +++++--- app/views/sei_processes/new.html.erb | 2 +- app/views/sei_processes/show.html.erb | 28 +++++++++++----- 10 files changed, 76 insertions(+), 59 deletions(-) diff --git a/app/controllers/requirements_controller.rb b/app/controllers/requirements_controller.rb index 75d04d15..fbe65d66 100644 --- a/app/controllers/requirements_controller.rb +++ b/app/controllers/requirements_controller.rb @@ -28,7 +28,7 @@ def create respond_to do |format| if @requirement.save - format.html { redirect_to @requirement, notice: 'Requirement was successfully created.' } + format.html { redirect_to @requirement, notice: 'Requisitos criados com sucesso!' } format.json { render :show, status: :created, location: @requirement } else format.html { render :new } @@ -49,7 +49,7 @@ def delete_document_attachment def update respond_to do |format| if @requirement.update(requirement_params) - format.html { redirect_to @requirement, notice: 'Requirement was successfully updated.' } + format.html { redirect_to @requirement, notice: 'Requisitos atualizados com sucesso!' } format.json { render :show, status: :ok, location: @requirement } else format.html { render :edit } @@ -63,7 +63,7 @@ def update def destroy @requirement.destroy respond_to do |format| - format.html { redirect_to requirements_url, notice: 'Requirement was successfully destroyed.' } + format.html { redirect_to requirements_url, notice: 'Requisitos excluídos com sucesso!' } format.json { head :no_content } end end diff --git a/app/views/home/index.html.erb b/app/views/home/index.html.erb index ce5ab415..24d2b84e 100644 --- a/app/views/home/index.html.erb +++ b/app/views/home/index.html.erb @@ -1,5 +1,4 @@

Início

-

Find me in app/views/home/index.html.erb

<% if user_signed_in? %>

Usuário atual

@@ -8,7 +7,7 @@

Cargo: <%= current_user.role %>

<% if current_user.role == "administrator" %> - <%= link_to "Atualizar Requisitos", requirements_path %> + <%= link_to "Lista de Requisitos", requirements_path %> <%= link_to "Lista de Processos", sei_processes_path %> <%= link_to "Lista de Credenciamentos", accreditations_path %> diff --git a/app/views/requirements/edit.html.erb b/app/views/requirements/edit.html.erb index 589cca49..097c6c14 100644 --- a/app/views/requirements/edit.html.erb +++ b/app/views/requirements/edit.html.erb @@ -1,30 +1,32 @@ -

Editing Requirement

+

Editar Requisitos

<%= form_for @requirement, html: { multipart: true } do |f| %> - <%= f.label "Título" %> + <%= f.label "Tipo dos Requisitos" %> <%= f.text_field :title %> <%= f.label "Conteúdo" %> <%= f.text_area :content %> - <%= f.label "documentos" %> + + <% if @requirement.documents.attached? %> +
Documentos anexados:
+ <% @requirement.documents.each do | document | %> +
+ <%= link_to document.filename, rails_blob_path(document, disposition: 'attachment') %> + <%= link_to 'Remover', delete_document_attachment_requirement_url(document.id, requirement_id: @requirement.id), + method: :delete, + data: { } + %> +
+ <% end %> + <% end %> +
+ <%= f.label "Adicionar documentos:" %> <%= f.file_field :documents, multiple: true %>
- <%= f.submit "Save", class: "btn btn-primary" %> + <%= f.submit "Salvar", class: "btn btn-primary" %> <% end %>
-<% if @requirement.documents.attached? %> -
Existem documentos anexados:
- <% @requirement.documents.each do | document | %> -
- <%= link_to document.filename, rails_blob_path(document, disposition: 'attachment') %> - <%= link_to 'Remover', delete_document_attachment_requirement_url(document.id, requirement_id: @requirement.id), - method: :delete, - data: { } - %> -
- <% end %> -<% end %>
-<%= link_to 'Show', @requirement %> | -<%= link_to 'Back', requirements_path %> +<%= link_to 'Mostrar', @requirement %> | +<%= link_to 'Voltar', requirements_path %> diff --git a/app/views/requirements/index.html.erb b/app/views/requirements/index.html.erb index a586f082..d11e2de3 100644 --- a/app/views/requirements/index.html.erb +++ b/app/views/requirements/index.html.erb @@ -1,11 +1,11 @@ -

<%= notice %>

+

-

Requirements

+

Informações de Requisitos

- + @@ -14,14 +14,15 @@ <% @requirements.each do |requirement| %> - - - + + + <% end %>
TitleTipo de Requisito
<%= requirement.title %><%= link_to 'Show', requirement %><%= link_to 'Edit', edit_requirement_path(requirement) %><%= link_to 'Destroy', requirement, method: :delete, data: { confirm: 'Are you sure?' } %><%= link_to 'Mostrar', requirement %><%= link_to 'Editar', edit_requirement_path(requirement) %><%= link_to 'Excluir', requirement, method: :delete, data: { confirm: 'Tem certeza que deseja excluir essa Informação?' } %>
-
- -<%= link_to 'New Requirement', new_requirement_path %> +
+<%= link_to 'Adicionar Informação de Requisitos', new_requirement_path %> +
+<%= link_to 'Página Inicial', home_index_path %> diff --git a/app/views/requirements/new.html.erb b/app/views/requirements/new.html.erb index c566d2c1..1f08de21 100644 --- a/app/views/requirements/new.html.erb +++ b/app/views/requirements/new.html.erb @@ -1,14 +1,14 @@ -

New Requirement

+

Nova Informação de Requisitos

<%= form_for @requirement, html: { multipart: true } do |f| %> - <%= f.label "Título" %> + <%= f.label "Tipo dos Requisitos" %> <%= f.text_field :title %> <%= f.label "Conteúdo" %> <%= f.text_area :content %> - <%= f.label "documentos" %> + <%= f.label "Anexar documentos:" %> <%= f.file_field :documents, multiple: true %>
- <%= f.submit "Save", class: "btn btn-primary" %> + <%= f.submit "Salvar", class: "btn btn-primary" %> <% end %> -<%= link_to 'Back', requirements_path %> +<%= link_to 'Voltar', requirements_path %> diff --git a/app/views/requirements/show.html.erb b/app/views/requirements/show.html.erb index 499982a0..cec4f83b 100644 --- a/app/views/requirements/show.html.erb +++ b/app/views/requirements/show.html.erb @@ -1,19 +1,19 @@ -

<%= notice %>

+

- Title: + Tipo dos Requisitos: <%= @requirement.title %>

- Content: + Conteúdo: <%= @requirement.content %>

<% if @requirement.documents.attached? %>

- existem documentos acoplados - <% @requirement.documents.each do | document | %> + Documentos anexados + <% @requirement.documents.each do |document| %>

<%= link_to document.filename, rails_blob_path(document, disposition: 'attachment') %>
@@ -21,5 +21,5 @@

<% end %> -<%= link_to 'Edit', edit_requirement_path(@requirement) %> | -<%= link_to 'Back', requirements_path %> +<%= link_to 'Editar', edit_requirement_path(@requirement) %> | +<%= link_to 'Voltar', requirements_path %> diff --git a/app/views/sei_processes/edit.html.erb b/app/views/sei_processes/edit.html.erb index 53c15b17..17111c21 100644 --- a/app/views/sei_processes/edit.html.erb +++ b/app/views/sei_processes/edit.html.erb @@ -11,7 +11,7 @@ <% if @sei_process.documents.attached? %>

- Documentos Anexados + Documentos anexados: <% @sei_process.documents.each do | document | %>

<%= link_to document.filename, rails_blob_path(document, disposition: 'attachment') %> diff --git a/app/views/sei_processes/index.html.erb b/app/views/sei_processes/index.html.erb index 4e9b3081..610644f0 100644 --- a/app/views/sei_processes/index.html.erb +++ b/app/views/sei_processes/index.html.erb @@ -10,7 +10,7 @@ Matrícula Código do Processo Status - + @@ -21,8 +21,11 @@ <%= sei_process.user.registration %> <%= sei_process.id %> <%= sei_process.status %> - <%= link_to 'Gerenciar', edit_sei_process_path(sei_process) %> - <%= link_to 'Excluir', sei_process, method: :delete, data: { confirm: 'Are you sure?' } %> + <% if sei_process.status == 'Aprovado' %> + <%= link_to 'Mostrar', sei_process_path(sei_process) %> + <% else %> + <%= link_to 'Avaliar', edit_sei_process_path(sei_process) %> + <% end %> <% end %> @@ -49,5 +52,7 @@ <% end %> -
+
<%= link_to 'Abrir Processo', new_sei_process_path %> +
+<%= link_to 'Página Inicial', home_index_path %> diff --git a/app/views/sei_processes/new.html.erb b/app/views/sei_processes/new.html.erb index d1f7f235..39c16a63 100644 --- a/app/views/sei_processes/new.html.erb +++ b/app/views/sei_processes/new.html.erb @@ -27,4 +27,4 @@ <% end %>
-<%= link_to 'Back', sei_processes_path %> +<%= link_to 'Voltar', sei_processes_path %> diff --git a/app/views/sei_processes/show.html.erb b/app/views/sei_processes/show.html.erb index a8e9e4fc..6dc27079 100644 --- a/app/views/sei_processes/show.html.erb +++ b/app/views/sei_processes/show.html.erb @@ -1,18 +1,28 @@ -

<%= notice %>

+

<%= "Processo #{@sei_process.id}" %>

- User: - <%= @sei_process.user %> + Nome: + <%= @sei_process.user.full_name %>

-

- Status: - <%= @sei_process.status %> + Matrícula: + <%= @sei_process.user.registration %>

+<% if @sei_process.documents.attached? %> +

+ Documentos anexados: + <% @sei_process.documents.each do | document | %> +

+ <%= link_to document.filename, rails_blob_path(document, disposition: 'attachment') %> +
+ <% end %> +

+<% end %> +

- Code: - <%= @sei_process.id %> + Status: + <%= @sei_process.status %>

-<%= link_to 'Back', sei_processes_path %> +<%= link_to 'Voltar', sei_processes_path %> From 070ff368209659697ecbdcde7587d88e8a072a36 Mon Sep 17 00:00:00 2001 From: ngsylar Date: Sat, 14 Nov 2020 23:36:25 -0300 Subject: [PATCH 31/82] Adjustments to Accreditation views --- app/controllers/accreditations_controller.rb | 1 - app/controllers/sei_processes_controller.rb | 2 +- app/views/accreditations/edit.html.erb | 54 +++++++++++++++----- app/views/accreditations/index.html.erb | 27 +++++----- app/views/accreditations/new.html.erb | 11 ---- app/views/accreditations/show.html.erb | 41 ++++++++++----- 6 files changed, 85 insertions(+), 51 deletions(-) delete mode 100644 app/views/accreditations/new.html.erb diff --git a/app/controllers/accreditations_controller.rb b/app/controllers/accreditations_controller.rb index 52d333e7..a10545b4 100644 --- a/app/controllers/accreditations_controller.rb +++ b/app/controllers/accreditations_controller.rb @@ -14,7 +14,6 @@ def show # GET /accreditations/new def new - @accreditation = Accreditation.new(sei_proccess_id: 0) end # GET /accreditations/1/edit diff --git a/app/controllers/sei_processes_controller.rb b/app/controllers/sei_processes_controller.rb index f88e8b19..b0ae0b4e 100644 --- a/app/controllers/sei_processes_controller.rb +++ b/app/controllers/sei_processes_controller.rb @@ -51,7 +51,7 @@ def update format.json { render :index, status: :ok, location: @sei_process } if (@sei_process.status == 'Aprovado') && @sei_process.documents.attached? - Accreditation.create!(user_id: @sei_process.user_id, sei_process_id: @sei_process.id, start_date: Date.current) + Accreditation.create!(user_id: @sei_process.user_id, sei_process_id: @sei_process.id) end else diff --git a/app/views/accreditations/edit.html.erb b/app/views/accreditations/edit.html.erb index 2e359887..5307b75f 100644 --- a/app/views/accreditations/edit.html.erb +++ b/app/views/accreditations/edit.html.erb @@ -1,20 +1,48 @@ -

Editing Accreditation

+

Definir Prazo de Credenciamento

+ +

+ Código do Processo SEI: + <%= @accreditation.sei_process_id %> +

+

+ Nome: + <%= @accreditation.user.full_name %> +

+

+ Matrícula: + <%= @accreditation.user.registration %> +

+ +<% if @accreditation.sei_process.documents.attached? %> +

+ Documentos anexados: + <% @accreditation.sei_process.documents.each do | document | %> +

+ <%= link_to document.filename, rails_blob_path(document, disposition: 'attachment') %> +
+ <% end %> +

+<% end %> +
+ +<% if @accreditation.start_date != nil %> +

+ Data de Início: + <%= @accreditation.start_date %> +

+<% end %> <%= form_for @accreditation, html: { multipart: true } do |f| %> - User: - <%= f.number_field :user_id %> - Start date: - <%= f.date_field :start_date %> - End date: + <% if @accreditation.start_date == nil %> + <%= f.label "Data de Início" %> + <%= f.date_field :start_date, value: Date.current %> + <% end %> + <%= f.label "Data de Fim" %> <%= f.date_field :end_date %>
<%= f.submit "Save", class: "btn btn-primary" %> <% end %> - -<%= link_to 'Show', @accreditation %> | -<%= link_to 'Back', accreditations_path %> - - - - +
+<%= link_to 'Mostrar', @accreditation %> | +<%= link_to 'Voltar', accreditations_path %> diff --git a/app/views/accreditations/index.html.erb b/app/views/accreditations/index.html.erb index 0a5878c5..e8a7a3a2 100644 --- a/app/views/accreditations/index.html.erb +++ b/app/views/accreditations/index.html.erb @@ -1,15 +1,16 @@

-

Accreditations

+

Credenciamentos

- - - - - + + + + + + @@ -17,17 +18,19 @@ <% @accreditations.each do |accreditation| %> + - - - + <% if accreditation.start_date != nil && accreditation.end_date != nil %> + + <% else %> + + <% end %> <% end %>
UserSei Process IDStart dateEnd dateNomeMatrículaCódigo SEIData de InícioData de Fim
<%= accreditation.user.full_name %><%= accreditation.user.registration %> <%= accreditation.sei_process_id %> <%= accreditation.start_date %> <%= accreditation.end_date %><%= link_to 'Show', accreditation %><%= link_to 'Edit', edit_accreditation_path(accreditation) %><%= link_to 'Destroy', accreditation, method: :delete, data: { confirm: 'Are you sure?' } %><%= link_to 'Mostrar', accreditation %><%= link_to 'Definir Prazo', edit_accreditation_path(accreditation) %>
-
- -<%= link_to 'New Accreditation', new_accreditation_path %> \ No newline at end of file +
+<%= link_to 'Página Inicial', home_index_path %> diff --git a/app/views/accreditations/new.html.erb b/app/views/accreditations/new.html.erb deleted file mode 100644 index 53a1b29d..00000000 --- a/app/views/accreditations/new.html.erb +++ /dev/null @@ -1,11 +0,0 @@ -

New Accreditation

-<%= form_for @accreditation, html: { multipart: true } do |f| %> - <%= f.hidden_field :user_id %> - <%= f.hidden_field :start_date %> - <%= f.hidden_field :end_date %> -
- <%= f.submit "Save", class: "btn btn-primary" %> -<% end %> - -
-<%= link_to 'Back', accreditations_path %> \ No newline at end of file diff --git a/app/views/accreditations/show.html.erb b/app/views/accreditations/show.html.erb index a4f86280..83e41451 100644 --- a/app/views/accreditations/show.html.erb +++ b/app/views/accreditations/show.html.erb @@ -1,24 +1,39 @@ -

<%= notice %>

+

+ +

Credenciamento

- User: - <%= @accreditation.user %> + Código do Processo SEI: + <%= @accreditation.sei_process_id %>

-

- Start date: + Nome: + <%= @accreditation.user.full_name %> +

+

+ Matrícula: + <%= @accreditation.user.registration %> +

+

+ Data de Início: <%= @accreditation.start_date %>

-

- End date: + Data de Fim: <%= @accreditation.end_date %>

-

- Sei process: - <%= @accreditation.sei_process %> -

+<% if @accreditation.sei_process.documents.attached? %> +

+ Documentos anexados: + <% @accreditation.sei_process.documents.each do | document | %> +

+ <%= link_to document.filename, rails_blob_path(document, disposition: 'attachment') %> +
+ <% end %> +

+<% end %> +
-<%= link_to 'Edit', edit_accreditation_path(@accreditation) %> | -<%= link_to 'Back', accreditations_path %> +<%= link_to 'Editar', edit_accreditation_path(@accreditation) %> | +<%= link_to 'Voltar', accreditations_path %> From dd56640507cba2635c9a6fe761f0e41b7751cee3 Mon Sep 17 00:00:00 2001 From: ngsylar Date: Sun, 15 Nov 2020 04:23:41 -0300 Subject: [PATCH 32/82] Requirements BDD done --- .rake_tasks~ | 55 +++++++ app/controllers/accreditations_controller.rb | 1 + .../{_form.html.erb => _form_new.html.erb} | 0 app/views/accreditations/new.html.erb | 5 + app/views/requirements/_form_edit.html.erb | 46 ++++++ .../{_form.html.erb => _form_new.html.erb} | 11 +- app/views/requirements/edit.html.erb | 28 +--- app/views/requirements/new.html.erb | 11 +- config/routes.rb | 1 - features.html | 141 ++++++++++-------- features/requisitos_necessarios.feature | 12 +- .../Formul\303\241rio de Credenciamento.doc" | Bin 0 -> 44544 bytes features/spike.feature | 9 +- .../credenciamento_professores_steps.rb | 15 +- features/support/paths.rb | 8 +- report.json | 2 +- 16 files changed, 216 insertions(+), 129 deletions(-) create mode 100644 .rake_tasks~ rename app/views/accreditations/{_form.html.erb => _form_new.html.erb} (100%) create mode 100644 app/views/accreditations/new.html.erb create mode 100644 app/views/requirements/_form_edit.html.erb rename app/views/requirements/{_form.html.erb => _form_new.html.erb} (69%) create mode 100644 "features/resources/Formul\303\241rio de Credenciamento.doc" diff --git a/.rake_tasks~ b/.rake_tasks~ new file mode 100644 index 00000000..c00fc44b --- /dev/null +++ b/.rake_tasks~ @@ -0,0 +1,55 @@ +about +active_storage:install +app:template +app:update +assets:clean[keep] +assets:clobber +assets:environment +assets:precompile +cache_digests:dependencies +cache_digests:nested_dependencies +cucumber +cucumber:all +cucumber:ok +cucumber:rerun +cucumber:wip +db:create +db:drop +db:environment:set +db:fixtures:load +db:migrate +db:migrate:status +db:rollback +db:schema:cache:clear +db:schema:cache:dump +db:schema:dump +db:schema:load +db:seed +db:setup +db:structure:dump +db:structure:load +db:version +dev:cache +initializers +log:clear +middleware +notes +notes:custom +restart +routes +secret +spec +spec:controllers +spec:helpers +spec:models +spec:requests +spec:routing +spec:views +stats +test +test:db +test:system +time:zones[country_or_offset] +tmp:clear +tmp:create +yarn:install diff --git a/app/controllers/accreditations_controller.rb b/app/controllers/accreditations_controller.rb index a10545b4..ccc79d5b 100644 --- a/app/controllers/accreditations_controller.rb +++ b/app/controllers/accreditations_controller.rb @@ -14,6 +14,7 @@ def show # GET /accreditations/new def new + @accreditation = Accreditation.new end # GET /accreditations/1/edit diff --git a/app/views/accreditations/_form.html.erb b/app/views/accreditations/_form_new.html.erb similarity index 100% rename from app/views/accreditations/_form.html.erb rename to app/views/accreditations/_form_new.html.erb diff --git a/app/views/accreditations/new.html.erb b/app/views/accreditations/new.html.erb new file mode 100644 index 00000000..c5413d5d --- /dev/null +++ b/app/views/accreditations/new.html.erb @@ -0,0 +1,5 @@ +

New Accreditation

+ +<%= render 'form_new', accreditation: @accreditation %> + +<%= link_to 'Back', accreditations_path %> \ No newline at end of file diff --git a/app/views/requirements/_form_edit.html.erb b/app/views/requirements/_form_edit.html.erb new file mode 100644 index 00000000..95a4d603 --- /dev/null +++ b/app/views/requirements/_form_edit.html.erb @@ -0,0 +1,46 @@ +<%= form_with(model: requirement, local: true) do |form| %> + <% if requirement.errors.any? %> +
+

<%= pluralize(requirement.errors.count, "error") %> prohibited this requirement from being saved:

+ +
    + <% requirement.errors.full_messages.each do |message| %> +
  • <%= message %>
  • + <% end %> +
+
+ <% end %> + +
+ <%= form.label :title, "Título" %> + <%= form.text_field :title %> +
+ +
+ <%= form.label :content, "Conteúdo" %> + <%= form.text_area :content %> +
+ + <% if @requirement.documents.attached? %> +
Documentos anexados:
+ <% @requirement.documents.each do | document | %> +
+ <%= link_to document.filename, rails_blob_path(document, disposition: 'attachment') %> + <%= link_to 'Remover', delete_document_attachment_requirement_url(document.id, requirement_id: @requirement.id), + method: :delete, + data: { } + %> +
+ <% end %> + <% end %> +
+ +
+ <%= form.label :documents, "Documentos" %> + <%= form.file_field :documents, multiple: true %> +
+ +
+ <%= form.submit "Salvar" %> +
+<% end %> diff --git a/app/views/requirements/_form.html.erb b/app/views/requirements/_form_new.html.erb similarity index 69% rename from app/views/requirements/_form.html.erb rename to app/views/requirements/_form_new.html.erb index f98ebbc6..4fdb5112 100644 --- a/app/views/requirements/_form.html.erb +++ b/app/views/requirements/_form_new.html.erb @@ -12,16 +12,21 @@ <% end %>
- <%= form.label :title %> + <%= form.label :title, "Título" %> <%= form.text_field :title %>
- <%= form.label :content %> + <%= form.label :content, "Conteúdo" %> <%= form.text_area :content %>
+
+ <%= form.label :documents, "Documentos" %> + <%= form.file_field :documents, multiple: true %> +
+
- <%= form.submit %> + <%= form.submit "Enviar" %>
<% end %> diff --git a/app/views/requirements/edit.html.erb b/app/views/requirements/edit.html.erb index 097c6c14..1e0ff4ca 100644 --- a/app/views/requirements/edit.html.erb +++ b/app/views/requirements/edit.html.erb @@ -1,32 +1,6 @@

Editar Requisitos

-<%= form_for @requirement, html: { multipart: true } do |f| %> - <%= f.label "Tipo dos Requisitos" %> - <%= f.text_field :title %> - <%= f.label "Conteúdo" %> - <%= f.text_area :content %> +<%= render 'form_edit', requirement: @requirement %> - <% if @requirement.documents.attached? %> -
Documentos anexados:
- <% @requirement.documents.each do | document | %> -
- <%= link_to document.filename, rails_blob_path(document, disposition: 'attachment') %> - <%= link_to 'Remover', delete_document_attachment_requirement_url(document.id, requirement_id: @requirement.id), - method: :delete, - data: { } - %> -
- <% end %> - <% end %> -
- <%= f.label "Adicionar documentos:" %> - <%= f.file_field :documents, multiple: true %> -
- <%= f.submit "Salvar", class: "btn btn-primary" %> -<% end %> - -
- -
<%= link_to 'Mostrar', @requirement %> | <%= link_to 'Voltar', requirements_path %> diff --git a/app/views/requirements/new.html.erb b/app/views/requirements/new.html.erb index 1f08de21..ad004d74 100644 --- a/app/views/requirements/new.html.erb +++ b/app/views/requirements/new.html.erb @@ -1,14 +1,5 @@

Nova Informação de Requisitos

-<%= form_for @requirement, html: { multipart: true } do |f| %> - <%= f.label "Tipo dos Requisitos" %> - <%= f.text_field :title %> - <%= f.label "Conteúdo" %> - <%= f.text_area :content %> - <%= f.label "Anexar documentos:" %> - <%= f.file_field :documents, multiple: true %> -
- <%= f.submit "Salvar", class: "btn btn-primary" %> -<% end %> +<%= render 'form_new', requirement: @requirement %> <%= link_to 'Voltar', requirements_path %> diff --git a/config/routes.rb b/config/routes.rb index 506310d8..e0f4a3df 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true Rails.application.routes.draw do - resources :accreditations resources :accreditations resources :sei_processes diff --git a/features.html b/features.html index 061ff6af..1d231820 100644 --- a/features.html +++ b/features.html @@ -303,71 +303,82 @@ + + + + + + +
+ loading +
+
+
Generated 2020-11-20T21:40:05-03:00
+
    + +
    +
    +

    + All Files + ( + + 90.09% + + + + covered at + + + 1.29 + + hits/line + ) +

    + + + +
    + 24 files in total. +
    + +
    + 111 relevant lines, + 100 lines covered and + 11 lines missed. + ( + 90.09% + +) +
    + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    File% coveredLinesRelevant LinesLines coveredLines missedAvg. Hits / Line
    app/helpers/accreditations_helper.rb100.00 %21101.00
    app/helpers/application_helper.rb100.00 %21101.00
    app/helpers/home_helper.rb100.00 %21101.00
    app/helpers/requirements_helper.rb100.00 %21101.00
    app/helpers/sei_processes_helper.rb100.00 %21101.00
    app/models/accreditation.rb91.30 %34232122.39
    app/models/application_record.rb100.00 %32201.00
    app/models/sei_process.rb62.50 %40241590.96
    app/models/user.rb100.00 %135501.00
    config/application.rb100.00 %196601.00
    config/boot.rb100.00 %43301.00
    config/environment.rb100.00 %52201.00
    config/environments/test.rb100.00 %46131301.00
    config/initializers/application_controller_renderer.rb100.00 %80000.00
    config/initializers/assets.rb100.00 %142201.00
    config/initializers/backtrace_silencers.rb100.00 %70000.00
    config/initializers/content_security_policy.rb100.00 %250000.00
    config/initializers/cookies_serializer.rb100.00 %51101.00
    config/initializers/devise.rb100.00 %299131301.00
    config/initializers/filter_parameter_logging.rb100.00 %41101.00
    config/initializers/inflections.rb100.00 %160000.00
    config/initializers/mime_types.rb100.00 %40000.00
    config/initializers/wrap_parameters.rb100.00 %142201.50
    config/routes.rb100.00 %179901.00
    +
    +
    + + + +
    + + + +
    + +
    +
    +

    app/helpers/accreditations_helper.rb

    +

    + + 100.0% + + + lines covered +

    + + + +
    + 1 relevant lines. + 1 lines covered and + 0 lines missed. +
    + + + +
    + +
    +    
      + +
      +
    1. + 1 + + + + + module AccreditationsHelper +
    2. +
      + +
      +
    3. + + + + + + end +
    4. +
      + +
    +
    +
    + + +
    +
    +

    app/helpers/application_helper.rb

    +

    + + 100.0% + + + lines covered +

    + + + +
    + 1 relevant lines. + 1 lines covered and + 0 lines missed. +
    + + + +
    + +
    +    
      + +
      +
    1. + 1 + + + + + module ApplicationHelper +
    2. +
      + +
      +
    3. + + + + + + end +
    4. +
      + +
    +
    +
    + + +
    +
    +

    app/helpers/home_helper.rb

    +

    + + 100.0% + + + lines covered +

    + + + +
    + 1 relevant lines. + 1 lines covered and + 0 lines missed. +
    + + + +
    + +
    +    
      + +
      +
    1. + 1 + + + + + module HomeHelper +
    2. +
      + +
      +
    3. + + + + + + end +
    4. +
      + +
    +
    +
    + + +
    +
    +

    app/helpers/requirements_helper.rb

    +

    + + 100.0% + + + lines covered +

    + + + +
    + 1 relevant lines. + 1 lines covered and + 0 lines missed. +
    + + + +
    + +
    +    
      + +
      +
    1. + 1 + + + + + module RequirementsHelper +
    2. +
      + +
      +
    3. + + + + + + end +
    4. +
      + +
    +
    +
    + + +
    +
    +

    app/helpers/sei_processes_helper.rb

    +

    + + 100.0% + + + lines covered +

    + + + +
    + 1 relevant lines. + 1 lines covered and + 0 lines missed. +
    + + + +
    + +
    +    
      + +
      +
    1. + 1 + + + + + module SeiProcessesHelper +
    2. +
      + +
      +
    3. + + + + + + end +
    4. +
      + +
    +
    +
    + + +
    +
    +

    app/models/accreditation.rb

    +

    + + 91.3% + + + lines covered +

    + + + +
    + 23 relevant lines. + 21 lines covered and + 2 lines missed. +
    + + + +
    + +
    +    
      + +
      +
    1. + 1 + + + + + class Accreditation < ApplicationRecord +
    2. +
      + +
      +
    3. + 1 + + + + + belongs_to :user +
    4. +
      + +
      +
    5. + 1 + + + + + belongs_to :sei_process +
    6. +
      + +
      +
    7. + 1 + + + + + validates :sei_process, uniqueness: true +
    8. +
      + +
      +
    9. + + + + + + +
    10. +
      + +
      +
    11. + 1 + + + + + validate :check_role, on: [:create, :update] +
    12. +
      + +
      +
    13. + 1 + + + + + def current_user_is_admin +
    14. +
      + +
      +
    15. + 10 + + + + + Current.user != nil && Current.user.role == 'administrator' +
    16. +
      + +
      +
    17. + + + + + + end +
    18. +
      + +
      +
    19. + 1 + + + + + def check_role +
    20. +
      + +
      +
    21. + 10 + + + + + unless current_user_is_admin +
    22. +
      + +
      +
    23. + 2 + + + + + self.errors.add(:base, 'Usuário sem permissão') +
    24. +
      + +
      +
    25. + 2 + + + + + return false +
    26. +
      + +
      +
    27. + + + + + + end +
    28. +
      + +
      +
    29. + 8 + + + + + true +
    30. +
      + +
      +
    31. + + + + + + end +
    32. +
      + +
      +
    33. + + + + + + +
    34. +
      + +
      +
    35. + 1 + + + + + validate :check_date, on: :update +
    36. +
      + +
      +
    37. + 1 + + + + + def check_date +
    38. +
      + +
      +
    39. + 4 + + + + + if (start_date == nil) || (end_date == nil) || (end_date < start_date) +
    40. +
      + +
      +
    41. + 3 + + + + + self.errors.add(:end_date, 'inválida') +
    42. +
      + +
      +
    43. + 3 + + + + + return false +
    44. +
      + +
      +
    45. + + + + + + end +
    46. +
      + +
      +
    47. + 1 + + + + + true +
    48. +
      + +
      +
    49. + + + + + + end +
    50. +
      + +
      +
    51. + + + + + + +
    52. +
      + +
      +
    53. + 1 + + + + + before_destroy :check_permission +
    54. +
      + +
      +
    55. + 1 + + + + + def allow_deletion! +
    56. +
      + +
      +
    57. + + + + + + @allow_deletion = true +
    58. +
      + +
      +
    59. + + + + + + end +
    60. +
      + +
      +
    61. + 1 + + + + + def check_permission +
    62. +
      + +
      +
    63. + + + + + + throw(:abort) unless @allow_deletion || current_user_is_admin +
    64. +
      + +
      +
    65. + + + + + + end +
    66. +
      + +
      +
    67. + + + + + + end +
    68. +
      + +
    +
    +
    + + +
    +
    +

    app/models/application_record.rb

    +

    + + 100.0% + + + lines covered +

    + + + +
    + 2 relevant lines. + 2 lines covered and + 0 lines missed. +
    + + + +
    + +
    +    
      + +
      +
    1. + 1 + + + + + class ApplicationRecord < ActiveRecord::Base +
    2. +
      + +
      +
    3. + 1 + + + + + self.abstract_class = true +
    4. +
      + +
      +
    5. + + + + + + end +
    6. +
      + +
    +
    +
    + + +
    +
    +

    app/models/sei_process.rb

    +

    + + 62.5% + + + lines covered +

    + + + +
    + 24 relevant lines. + 15 lines covered and + 9 lines missed. +
    + + + +
    + +
    +    
      + +
      +
    1. + 1 + + + + + class SeiProcess < ApplicationRecord +
    2. +
      + +
      +
    3. + 1 + + + + + belongs_to :user +
    4. +
      + +
      +
    5. + 1 + + + + + has_many_attached :documents +
    6. +
      + +
      +
    7. + 1 + + + + + validates :documents, attached: true +
    8. +
      + +
      +
    9. + + + + + + +
    10. +
      + +
      +
    11. + 1 + + + + + enum status: { +
    12. +
      + +
      +
    13. + + + + + + Espera: 0, +
    14. +
      + +
      +
    15. + + + + + + Aprovado: 1, +
    16. +
      + +
      +
    17. + + + + + + Rejeitado: 2 +
    18. +
      + +
      +
    19. + + + + + + } +
    20. +
      + +
      +
    21. + + + + + + +
    22. +
      + +
      +
    23. + 1 + + + + + validate :check_signed_in, on: :create +
    24. +
      + +
      +
    25. + 1 + + + + + def check_signed_in +
    26. +
      + +
      +
    27. + 5 + + + + + if Current.user == nil +
    28. +
      + +
      +
    29. + + + + + + self.errors.add(:base, 'Usuário sem permissão') +
    30. +
      + +
      +
    31. + + + + + + return false +
    32. +
      + +
      +
    33. + + + + + + end +
    34. +
      + +
      +
    35. + 5 + + + + + true +
    36. +
      + +
      +
    37. + + + + + + end +
    38. +
      + +
      +
    39. + + + + + + +
    40. +
      + +
      +
    41. + 1 + + + + + validate :check_role, on: :update +
    42. +
      + +
      +
    43. + 1 + + + + + def current_user_is_admin +
    44. +
      + +
      +
    45. + + + + + + Current.user != nil && Current.user.role == 'administrator' +
    46. +
      + +
      +
    47. + + + + + + end +
    48. +
      + +
      +
    49. + 1 + + + + + def check_role +
    50. +
      + +
      +
    51. + + + + + + unless current_user_is_admin +
    52. +
      + +
      +
    53. + + + + + + self.errors.add(:base, 'Usuário sem permissão') +
    54. +
      + +
      +
    55. + + + + + + return false +
    56. +
      + +
      +
    57. + + + + + + end +
    58. +
      + +
      +
    59. + + + + + + true +
    60. +
      + +
      +
    61. + + + + + + end +
    62. +
      + +
      +
    63. + + + + + + +
    64. +
      + +
      +
    65. + 1 + + + + + before_destroy :check_permission +
    66. +
      + +
      +
    67. + 1 + + + + + def allow_deletion! +
    68. +
      + +
      +
    69. + + + + + + @allow_deletion = true +
    70. +
      + +
      +
    71. + + + + + + end +
    72. +
      + +
      +
    73. + 1 + + + + + def check_permission +
    74. +
      + +
      +
    75. + + + + + + throw(:abort) unless @allow_deletion || current_user_is_admin +
    76. +
      + +
      +
    77. + + + + + + end +
    78. +
      + +
      +
    79. + + + + + + end +
    80. +
      + +
    +
    +
    + + +
    +
    +

    app/models/user.rb

    +

    + + 100.0% + + + lines covered +

    + + + +
    + 5 relevant lines. + 5 lines covered and + 0 lines missed. +
    + + + +
    + +
    +    
      + +
      +
    1. + + + + + + # frozen_string_literal: true +
    2. +
      + +
      +
    3. + + + + + + +
    4. +
      + +
      +
    5. + 1 + + + + + class User < ApplicationRecord +
    6. +
      + +
      +
    7. + 1 + + + + + validates :full_name, presence: true +
    8. +
      + +
      +
    9. + 1 + + + + + validates :role, presence: true +
    10. +
      + +
      +
    11. + + + + + + +
    12. +
      + +
      +
    13. + + + + + + # Include default devise modules. Others available are: +
    14. +
      + +
      +
    15. + + + + + + # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable +
    16. +
      + +
      +
    17. + 1 + + + + + devise :database_authenticatable, :registerable, +
    18. +
      + +
      +
    19. + + + + + + :recoverable, :rememberable, :validatable +
    20. +
      + +
      +
    21. + + + + + + +
    22. +
      + +
      +
    23. + 1 + + + + + enum role: %i[administrator secretary professor student] +
    24. +
      + +
      +
    25. + + + + + + end +
    26. +
      + +
    +
    +
    + + +
    +
    +

    config/application.rb

    +

    + + 100.0% + + + lines covered +

    + + + +
    + 6 relevant lines. + 6 lines covered and + 0 lines missed. +
    + + + +
    + +
    +    
      + +
      +
    1. + 1 + + + + + require_relative 'boot' +
    2. +
      + +
      +
    3. + + + + + + +
    4. +
      + +
      +
    5. + 1 + + + + + require 'rails/all' +
    6. +
      + +
      +
    7. + + + + + + +
    8. +
      + +
      +
    9. + + + + + + # Require the gems listed in Gemfile, including any gems +
    10. +
      + +
      +
    11. + + + + + + # you've limited to :test, :development, or :production. +
    12. +
      + +
      +
    13. + 1 + + + + + Bundler.require(*Rails.groups) +
    14. +
      + +
      +
    15. + + + + + + +
    16. +
      + +
      +
    17. + 1 + + + + + module SecretariaPpgi +
    18. +
      + +
      +
    19. + 1 + + + + + class Application < Rails::Application +
    20. +
      + +
      +
    21. + + + + + + # Initialize configuration defaults for originally generated Rails version. +
    22. +
      + +
      +
    23. + 1 + + + + + config.load_defaults 5.2 +
    24. +
      + +
      +
    25. + + + + + + +
    26. +
      + +
      +
    27. + + + + + + # Settings in config/environments/* take precedence over those specified here. +
    28. +
      + +
      +
    29. + + + + + + # Application configuration can go into files in config/initializers +
    30. +
      + +
      +
    31. + + + + + + # -- all .rb files in that directory are automatically loaded after loading +
    32. +
      + +
      +
    33. + + + + + + # the framework and any gems in your application. +
    34. +
      + +
      +
    35. + + + + + + end +
    36. +
      + +
      +
    37. + + + + + + end +
    38. +
      + +
    +
    +
    + + +
    +
    +

    config/boot.rb

    +

    + + 100.0% + + + lines covered +

    + + + +
    + 3 relevant lines. + 3 lines covered and + 0 lines missed. +
    + + + +
    + +
    +    
      + +
      +
    1. + 1 + + + + + ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../Gemfile', __dir__) +
    2. +
      + +
      +
    3. + + + + + + +
    4. +
      + +
      +
    5. + 1 + + + + + require 'bundler/setup' # Set up gems listed in the Gemfile. +
    6. +
      + +
      +
    7. + 1 + + + + + require 'bootsnap/setup' # Speed up boot time by caching expensive operations. +
    8. +
      + +
    +
    +
    + + +
    +
    +

    config/environment.rb

    +

    + + 100.0% + + + lines covered +

    + + + +
    + 2 relevant lines. + 2 lines covered and + 0 lines missed. +
    + + + +
    + +
    +    
      + +
      +
    1. + + + + + + # Load the Rails application. +
    2. +
      + +
      +
    3. + 1 + + + + + require_relative 'application' +
    4. +
      + +
      +
    5. + + + + + + +
    6. +
      + +
      +
    7. + + + + + + # Initialize the Rails application. +
    8. +
      + +
      +
    9. + 1 + + + + + Rails.application.initialize! +
    10. +
      + +
    +
    +
    + + +
    +
    +

    config/environments/test.rb

    +

    + + 100.0% + + + lines covered +

    + + + +
    + 13 relevant lines. + 13 lines covered and + 0 lines missed. +
    + + + +
    + +
    +    
      + +
      +
    1. + 1 + + + + + Rails.application.configure do +
    2. +
      + +
      +
    3. + + + + + + # Settings specified here will take precedence over those in config/application.rb. +
    4. +
      + +
      +
    5. + + + + + + +
    6. +
      + +
      +
    7. + + + + + + # The test environment is used exclusively to run your application's +
    8. +
      + +
      +
    9. + + + + + + # test suite. You never need to work with it otherwise. Remember that +
    10. +
      + +
      +
    11. + + + + + + # your test database is "scratch space" for the test suite and is wiped +
    12. +
      + +
      +
    13. + + + + + + # and recreated between test runs. Don't rely on the data there! +
    14. +
      + +
      +
    15. + 1 + + + + + config.cache_classes = true +
    16. +
      + +
      +
    17. + + + + + + +
    18. +
      + +
      +
    19. + + + + + + # Do not eager load code on boot. This avoids loading your whole application +
    20. +
      + +
      +
    21. + + + + + + # just for the purpose of running a single test. If you are using a tool that +
    22. +
      + +
      +
    23. + + + + + + # preloads Rails for running tests, you may have to set it to true. +
    24. +
      + +
      +
    25. + 1 + + + + + config.eager_load = false +
    26. +
      + +
      +
    27. + + + + + + +
    28. +
      + +
      +
    29. + + + + + + # Configure public file server for tests with Cache-Control for performance. +
    30. +
      + +
      +
    31. + 1 + + + + + config.public_file_server.enabled = true +
    32. +
      + +
      +
    33. + 1 + + + + + config.public_file_server.headers = { +
    34. +
      + +
      +
    35. + + + + + + 'Cache-Control' => "public, max-age=#{1.hour.to_i}" +
    36. +
      + +
      +
    37. + + + + + + } +
    38. +
      + +
      +
    39. + + + + + + +
    40. +
      + +
      +
    41. + + + + + + # Show full error reports and disable caching. +
    42. +
      + +
      +
    43. + 1 + + + + + config.consider_all_requests_local = true +
    44. +
      + +
      +
    45. + 1 + + + + + config.action_controller.perform_caching = false +
    46. +
      + +
      +
    47. + + + + + + +
    48. +
      + +
      +
    49. + + + + + + # Raise exceptions instead of rendering exception templates. +
    50. +
      + +
      +
    51. + 1 + + + + + config.action_dispatch.show_exceptions = false +
    52. +
      + +
      +
    53. + + + + + + +
    54. +
      + +
      +
    55. + + + + + + # Disable request forgery protection in test environment. +
    56. +
      + +
      +
    57. + 1 + + + + + config.action_controller.allow_forgery_protection = false +
    58. +
      + +
      +
    59. + + + + + + +
    60. +
      + +
      +
    61. + + + + + + # Store uploaded files on the local file system in a temporary directory +
    62. +
      + +
      +
    63. + 1 + + + + + config.active_storage.service = :test +
    64. +
      + +
      +
    65. + + + + + + +
    66. +
      + +
      +
    67. + 1 + + + + + config.action_mailer.perform_caching = false +
    68. +
      + +
      +
    69. + + + + + + +
    70. +
      + +
      +
    71. + + + + + + # Tell Action Mailer not to deliver emails to the real world. +
    72. +
      + +
      +
    73. + + + + + + # The :test delivery method accumulates sent emails in the +
    74. +
      + +
      +
    75. + + + + + + # ActionMailer::Base.deliveries array. +
    76. +
      + +
      +
    77. + 1 + + + + + config.action_mailer.delivery_method = :test +
    78. +
      + +
      +
    79. + + + + + + +
    80. +
      + +
      +
    81. + + + + + + # Print deprecation notices to the stderr. +
    82. +
      + +
      +
    83. + 1 + + + + + config.active_support.deprecation = :stderr +
    84. +
      + +
      +
    85. + + + + + + +
    86. +
      + +
      +
    87. + + + + + + # Raises error for missing translations +
    88. +
      + +
      +
    89. + + + + + + # config.action_view.raise_on_missing_translations = true +
    90. +
      + +
      +
    91. + + + + + + end +
    92. +
      + +
    +
    +
    + + +
    +
    +

    config/initializers/application_controller_renderer.rb

    +

    + + 100.0% + + + lines covered +

    + + + +
    + 0 relevant lines. + 0 lines covered and + 0 lines missed. +
    + + + +
    + +
    +    
      + +
      +
    1. + + + + + + # Be sure to restart your server when you modify this file. +
    2. +
      + +
      +
    3. + + + + + + +
    4. +
      + +
      +
    5. + + + + + + # ActiveSupport::Reloader.to_prepare do +
    6. +
      + +
      +
    7. + + + + + + # ApplicationController.renderer.defaults.merge!( +
    8. +
      + +
      +
    9. + + + + + + # http_host: 'example.org', +
    10. +
      + +
      +
    11. + + + + + + # https: false +
    12. +
      + +
      +
    13. + + + + + + # ) +
    14. +
      + +
      +
    15. + + + + + + # end +
    16. +
      + +
    +
    +
    + + +
    +
    +

    config/initializers/assets.rb

    +

    + + 100.0% + + + lines covered +

    + + + +
    + 2 relevant lines. + 2 lines covered and + 0 lines missed. +
    + + + +
    + +
    +    
      + +
      +
    1. + + + + + + # Be sure to restart your server when you modify this file. +
    2. +
      + +
      +
    3. + + + + + + +
    4. +
      + +
      +
    5. + + + + + + # Version of your assets, change this if you want to expire all your assets. +
    6. +
      + +
      +
    7. + 1 + + + + + Rails.application.config.assets.version = '1.0' +
    8. +
      + +
      +
    9. + + + + + + +
    10. +
      + +
      +
    11. + + + + + + # Add additional assets to the asset load path. +
    12. +
      + +
      +
    13. + + + + + + # Rails.application.config.assets.paths << Emoji.images_path +
    14. +
      + +
      +
    15. + + + + + + # Add Yarn node_modules folder to the asset load path. +
    16. +
      + +
      +
    17. + 1 + + + + + Rails.application.config.assets.paths << Rails.root.join('node_modules') +
    18. +
      + +
      +
    19. + + + + + + +
    20. +
      + +
      +
    21. + + + + + + # Precompile additional assets. +
    22. +
      + +
      +
    23. + + + + + + # application.js, application.css, and all non-JS/CSS in the app/assets +
    24. +
      + +
      +
    25. + + + + + + # folder are already added. +
    26. +
      + +
      +
    27. + + + + + + # Rails.application.config.assets.precompile += %w( admin.js admin.css ) +
    28. +
      + +
    +
    +
    + + +
    +
    +

    config/initializers/backtrace_silencers.rb

    +

    + + 100.0% + + + lines covered +

    + + + +
    + 0 relevant lines. + 0 lines covered and + 0 lines missed. +
    + + + +
    + +
    +    
      + +
      +
    1. + + + + + + # Be sure to restart your server when you modify this file. +
    2. +
      + +
      +
    3. + + + + + + +
    4. +
      + +
      +
    5. + + + + + + # You can add backtrace silencers for libraries that you're using but don't wish to see in your backtraces. +
    6. +
      + +
      +
    7. + + + + + + # Rails.backtrace_cleaner.add_silencer { |line| line =~ /my_noisy_library/ } +
    8. +
      + +
      +
    9. + + + + + + +
    10. +
      + +
      +
    11. + + + + + + # You can also remove all the silencers if you're trying to debug a problem that might stem from framework code. +
    12. +
      + +
      +
    13. + + + + + + # Rails.backtrace_cleaner.remove_silencers! +
    14. +
      + +
    +
    +
    + + +
    +
    +

    config/initializers/content_security_policy.rb

    +

    + + 100.0% + + + lines covered +

    + + + +
    + 0 relevant lines. + 0 lines covered and + 0 lines missed. +
    + + + +
    + +
    +    
      + +
      +
    1. + + + + + + # Be sure to restart your server when you modify this file. +
    2. +
      + +
      +
    3. + + + + + + +
    4. +
      + +
      +
    5. + + + + + + # Define an application-wide content security policy +
    6. +
      + +
      +
    7. + + + + + + # For further information see the following documentation +
    8. +
      + +
      +
    9. + + + + + + # https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy +
    10. +
      + +
      +
    11. + + + + + + +
    12. +
      + +
      +
    13. + + + + + + # Rails.application.config.content_security_policy do |policy| +
    14. +
      + +
      +
    15. + + + + + + # policy.default_src :self, :https +
    16. +
      + +
      +
    17. + + + + + + # policy.font_src :self, :https, :data +
    18. +
      + +
      +
    19. + + + + + + # policy.img_src :self, :https, :data +
    20. +
      + +
      +
    21. + + + + + + # policy.object_src :none +
    22. +
      + +
      +
    23. + + + + + + # policy.script_src :self, :https +
    24. +
      + +
      +
    25. + + + + + + # policy.style_src :self, :https +
    26. +
      + +
      +
    27. + + + + + + +
    28. +
      + +
      +
    29. + + + + + + # # Specify URI for violation reports +
    30. +
      + +
      +
    31. + + + + + + # # policy.report_uri "/csp-violation-report-endpoint" +
    32. +
      + +
      +
    33. + + + + + + # end +
    34. +
      + +
      +
    35. + + + + + + +
    36. +
      + +
      +
    37. + + + + + + # If you are using UJS then enable automatic nonce generation +
    38. +
      + +
      +
    39. + + + + + + # Rails.application.config.content_security_policy_nonce_generator = -> request { SecureRandom.base64(16) } +
    40. +
      + +
      +
    41. + + + + + + +
    42. +
      + +
      +
    43. + + + + + + # Report CSP violations to a specified URI +
    44. +
      + +
      +
    45. + + + + + + # For further information see the following documentation: +
    46. +
      + +
      +
    47. + + + + + + # https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy-Report-Only +
    48. +
      + +
      +
    49. + + + + + + # Rails.application.config.content_security_policy_report_only = true +
    50. +
      + +
    +
    +
    + + +
    +
    +

    config/initializers/cookies_serializer.rb

    +

    + + 100.0% + + + lines covered +

    + + + +
    + 1 relevant lines. + 1 lines covered and + 0 lines missed. +
    + + + +
    + +
    +    
      + +
      +
    1. + + + + + + # Be sure to restart your server when you modify this file. +
    2. +
      + +
      +
    3. + + + + + + +
    4. +
      + +
      +
    5. + + + + + + # Specify a serializer for the signed and encrypted cookie jars. +
    6. +
      + +
      +
    7. + + + + + + # Valid options are :json, :marshal, and :hybrid. +
    8. +
      + +
      +
    9. + 1 + + + + + Rails.application.config.action_dispatch.cookies_serializer = :json +
    10. +
      + +
    +
    +
    + + +
    +
    +

    config/initializers/devise.rb

    +

    + + 100.0% + + + lines covered +

    + + + +
    + 13 relevant lines. + 13 lines covered and + 0 lines missed. +
    + + + +
    + +
    +    
      + +
      +
    1. + + + + + + # frozen_string_literal: true +
    2. +
      + +
      +
    3. + + + + + + +
    4. +
      + +
      +
    5. + + + + + + # Use this hook to configure devise mailer, warden hooks and so forth. +
    6. +
      + +
      +
    7. + + + + + + # Many of these configuration options can be set straight in your model. +
    8. +
      + +
      +
    9. + 1 + + + + + Devise.setup do |config| +
    10. +
      + +
      +
    11. + + + + + + # The secret key used by Devise. Devise uses this key to generate +
    12. +
      + +
      +
    13. + + + + + + # random tokens. Changing this key will render invalid all existing +
    14. +
      + +
      +
    15. + + + + + + # confirmation, reset password and unlock tokens in the database. +
    16. +
      + +
      +
    17. + + + + + + # Devise will use the `secret_key_base` as its `secret_key` +
    18. +
      + +
      +
    19. + + + + + + # by default. You can change it below and use your own secret key. +
    20. +
      + +
      +
    21. + + + + + + # config.secret_key = '53c9f741be418fcb535205b1faaad3062f2fb772dcf8b618c3fe37a03164092b11cce7e2fd0b2f88d17ebece35eac91546f6f987a3c739ff3681aa5721b55f8a' +
    22. +
      + +
      +
    23. + + + + + + +
    24. +
      + +
      +
    25. + + + + + + # ==> Controller configuration +
    26. +
      + +
      +
    27. + + + + + + # Configure the parent class to the devise controllers. +
    28. +
      + +
      +
    29. + + + + + + # config.parent_controller = 'DeviseController' +
    30. +
      + +
      +
    31. + + + + + + +
    32. +
      + +
      +
    33. + + + + + + # ==> Mailer Configuration +
    34. +
      + +
      +
    35. + + + + + + # Configure the e-mail address which will be shown in Devise::Mailer, +
    36. +
      + +
      +
    37. + + + + + + # note that it will be overwritten if you use your own mailer class +
    38. +
      + +
      +
    39. + + + + + + # with default "from" parameter. +
    40. +
      + +
      +
    41. + 1 + + + + + config.mailer_sender = 'please-change-me-at-config-initializers-devise@example.com' +
    42. +
      + +
      +
    43. + + + + + + +
    44. +
      + +
      +
    45. + + + + + + # Configure the class responsible to send e-mails. +
    46. +
      + +
      +
    47. + + + + + + # config.mailer = 'Devise::Mailer' +
    48. +
      + +
      +
    49. + + + + + + +
    50. +
      + +
      +
    51. + + + + + + # Configure the parent class responsible to send e-mails. +
    52. +
      + +
      +
    53. + + + + + + # config.parent_mailer = 'ActionMailer::Base' +
    54. +
      + +
      +
    55. + + + + + + +
    56. +
      + +
      +
    57. + + + + + + # ==> ORM configuration +
    58. +
      + +
      +
    59. + + + + + + # Load and configure the ORM. Supports :active_record (default) and +
    60. +
      + +
      +
    61. + + + + + + # :mongoid (bson_ext recommended) by default. Other ORMs may be +
    62. +
      + +
      +
    63. + + + + + + # available as additional gems. +
    64. +
      + +
      +
    65. + 1 + + + + + require 'devise/orm/active_record' +
    66. +
      + +
      +
    67. + + + + + + +
    68. +
      + +
      +
    69. + + + + + + # ==> Configuration for any authentication mechanism +
    70. +
      + +
      +
    71. + + + + + + # Configure which keys are used when authenticating a user. The default is +
    72. +
      + +
      +
    73. + + + + + + # just :email. You can configure it to use [:username, :subdomain], so for +
    74. +
      + +
      +
    75. + + + + + + # authenticating a user, both parameters are required. Remember that those +
    76. +
      + +
      +
    77. + + + + + + # parameters are used only when authenticating and not when retrieving from +
    78. +
      + +
      +
    79. + + + + + + # session. If you need permissions, you should implement that in a before filter. +
    80. +
      + +
      +
    81. + + + + + + # You can also supply a hash where the value is a boolean determining whether +
    82. +
      + +
      +
    83. + + + + + + # or not authentication should be aborted when the value is not present. +
    84. +
      + +
      +
    85. + + + + + + # config.authentication_keys = [:email] +
    86. +
      + +
      +
    87. + + + + + + +
    88. +
      + +
      +
    89. + + + + + + # Configure parameters from the request object used for authentication. Each entry +
    90. +
      + +
      +
    91. + + + + + + # given should be a request method and it will automatically be passed to the +
    92. +
      + +
      +
    93. + + + + + + # find_for_authentication method and considered in your model lookup. For instance, +
    94. +
      + +
      +
    95. + + + + + + # if you set :request_keys to [:subdomain], :subdomain will be used on authentication. +
    96. +
      + +
      +
    97. + + + + + + # The same considerations mentioned for authentication_keys also apply to request_keys. +
    98. +
      + +
      +
    99. + + + + + + # config.request_keys = [] +
    100. +
      + +
      +
    101. + + + + + + +
    102. +
      + +
      +
    103. + + + + + + # Configure which authentication keys should be case-insensitive. +
    104. +
      + +
      +
    105. + + + + + + # These keys will be downcased upon creating or modifying a user and when used +
    106. +
      + +
      +
    107. + + + + + + # to authenticate or find a user. Default is :email. +
    108. +
      + +
      +
    109. + 1 + + + + + config.case_insensitive_keys = [:email] +
    110. +
      + +
      +
    111. + + + + + + +
    112. +
      + +
      +
    113. + + + + + + # Configure which authentication keys should have whitespace stripped. +
    114. +
      + +
      +
    115. + + + + + + # These keys will have whitespace before and after removed upon creating or +
    116. +
      + +
      +
    117. + + + + + + # modifying a user and when used to authenticate or find a user. Default is :email. +
    118. +
      + +
      +
    119. + 1 + + + + + config.strip_whitespace_keys = [:email] +
    120. +
      + +
      +
    121. + + + + + + +
    122. +
      + +
      +
    123. + + + + + + # Tell if authentication through request.params is enabled. True by default. +
    124. +
      + +
      +
    125. + + + + + + # It can be set to an array that will enable params authentication only for the +
    126. +
      + +
      +
    127. + + + + + + # given strategies, for example, `config.params_authenticatable = [:database]` will +
    128. +
      + +
      +
    129. + + + + + + # enable it only for database (email + password) authentication. +
    130. +
      + +
      +
    131. + + + + + + # config.params_authenticatable = true +
    132. +
      + +
      +
    133. + + + + + + +
    134. +
      + +
      +
    135. + + + + + + # Tell if authentication through HTTP Auth is enabled. False by default. +
    136. +
      + +
      +
    137. + + + + + + # It can be set to an array that will enable http authentication only for the +
    138. +
      + +
      +
    139. + + + + + + # given strategies, for example, `config.http_authenticatable = [:database]` will +
    140. +
      + +
      +
    141. + + + + + + # enable it only for database authentication. The supported strategies are: +
    142. +
      + +
      +
    143. + + + + + + # :database = Support basic authentication with authentication key + password +
    144. +
      + +
      +
    145. + + + + + + # config.http_authenticatable = false +
    146. +
      + +
      +
    147. + + + + + + +
    148. +
      + +
      +
    149. + + + + + + # If 401 status code should be returned for AJAX requests. True by default. +
    150. +
      + +
      +
    151. + + + + + + # config.http_authenticatable_on_xhr = true +
    152. +
      + +
      +
    153. + + + + + + +
    154. +
      + +
      +
    155. + + + + + + # The realm used in Http Basic Authentication. 'Application' by default. +
    156. +
      + +
      +
    157. + + + + + + # config.http_authentication_realm = 'Application' +
    158. +
      + +
      +
    159. + + + + + + +
    160. +
      + +
      +
    161. + + + + + + # It will change confirmation, password recovery and other workflows +
    162. +
      + +
      +
    163. + + + + + + # to behave the same regardless if the e-mail provided was right or wrong. +
    164. +
      + +
      +
    165. + + + + + + # Does not affect registerable. +
    166. +
      + +
      +
    167. + + + + + + # config.paranoid = true +
    168. +
      + +
      +
    169. + + + + + + +
    170. +
      + +
      +
    171. + + + + + + # By default Devise will store the user in session. You can skip storage for +
    172. +
      + +
      +
    173. + + + + + + # particular strategies by setting this option. +
    174. +
      + +
      +
    175. + + + + + + # Notice that if you are skipping storage for all authentication paths, you +
    176. +
      + +
      +
    177. + + + + + + # may want to disable generating routes to Devise's sessions controller by +
    178. +
      + +
      +
    179. + + + + + + # passing skip: :sessions to `devise_for` in your config/routes.rb +
    180. +
      + +
      +
    181. + 1 + + + + + config.skip_session_storage = [:http_auth] +
    182. +
      + +
      +
    183. + + + + + + +
    184. +
      + +
      +
    185. + + + + + + # By default, Devise cleans up the CSRF token on authentication to +
    186. +
      + +
      +
    187. + + + + + + # avoid CSRF token fixation attacks. This means that, when using AJAX +
    188. +
      + +
      +
    189. + + + + + + # requests for sign in and sign up, you need to get a new CSRF token +
    190. +
      + +
      +
    191. + + + + + + # from the server. You can disable this option at your own risk. +
    192. +
      + +
      +
    193. + + + + + + # config.clean_up_csrf_token_on_authentication = true +
    194. +
      + +
      +
    195. + + + + + + +
    196. +
      + +
      +
    197. + + + + + + # When false, Devise will not attempt to reload routes on eager load. +
    198. +
      + +
      +
    199. + + + + + + # This can reduce the time taken to boot the app but if your application +
    200. +
      + +
      +
    201. + + + + + + # requires the Devise mappings to be loaded during boot time the application +
    202. +
      + +
      +
    203. + + + + + + # won't boot properly. +
    204. +
      + +
      +
    205. + + + + + + # config.reload_routes = true +
    206. +
      + +
      +
    207. + + + + + + +
    208. +
      + +
      +
    209. + + + + + + # ==> Configuration for :database_authenticatable +
    210. +
      + +
      +
    211. + + + + + + # For bcrypt, this is the cost for hashing the password and defaults to 11. If +
    212. +
      + +
      +
    213. + + + + + + # using other algorithms, it sets how many times you want the password to be hashed. +
    214. +
      + +
      +
    215. + + + + + + # +
    216. +
      + +
      +
    217. + + + + + + # Limiting the stretches to just one in testing will increase the performance of +
    218. +
      + +
      +
    219. + + + + + + # your test suite dramatically. However, it is STRONGLY RECOMMENDED to not use +
    220. +
      + +
      +
    221. + + + + + + # a value less than 10 in other environments. Note that, for bcrypt (the default +
    222. +
      + +
      +
    223. + + + + + + # algorithm), the cost increases exponentially with the number of stretches (e.g. +
    224. +
      + +
      +
    225. + + + + + + # a value of 20 is already extremely slow: approx. 60 seconds for 1 calculation). +
    226. +
      + +
      +
    227. + 1 + + + + + config.stretches = Rails.env.test? ? 1 : 11 +
    228. +
      + +
      +
    229. + + + + + + +
    230. +
      + +
      +
    231. + + + + + + # Set up a pepper to generate the hashed password. +
    232. +
      + +
      +
    233. + + + + + + # config.pepper = '30f4c027405b92d0b7d5f25895b625a97791988e1867e0b79fb3d5c05b0ffff2ace19181de61c481bdb477e1c2fff8be2203afd78336ce261b97e9296f2259e9' +
    234. +
      + +
      +
    235. + + + + + + +
    236. +
      + +
      +
    237. + + + + + + # Send a notification to the original email when the user's email is changed. +
    238. +
      + +
      +
    239. + + + + + + # config.send_email_changed_notification = false +
    240. +
      + +
      +
    241. + + + + + + +
    242. +
      + +
      +
    243. + + + + + + # Send a notification email when the user's password is changed. +
    244. +
      + +
      +
    245. + + + + + + # config.send_password_change_notification = false +
    246. +
      + +
      +
    247. + + + + + + +
    248. +
      + +
      +
    249. + + + + + + # ==> Configuration for :confirmable +
    250. +
      + +
      +
    251. + + + + + + # A period that the user is allowed to access the website even without +
    252. +
      + +
      +
    253. + + + + + + # confirming their account. For instance, if set to 2.days, the user will be +
    254. +
      + +
      +
    255. + + + + + + # able to access the website for two days without confirming their account, +
    256. +
      + +
      +
    257. + + + + + + # access will be blocked just in the third day. +
    258. +
      + +
      +
    259. + + + + + + # You can also set it to nil, which will allow the user to access the website +
    260. +
      + +
      +
    261. + + + + + + # without confirming their account. +
    262. +
      + +
      +
    263. + + + + + + # Default is 0.days, meaning the user cannot access the website without +
    264. +
      + +
      +
    265. + + + + + + # confirming their account. +
    266. +
      + +
      +
    267. + + + + + + # config.allow_unconfirmed_access_for = 2.days +
    268. +
      + +
      +
    269. + + + + + + +
    270. +
      + +
      +
    271. + + + + + + # A period that the user is allowed to confirm their account before their +
    272. +
      + +
      +
    273. + + + + + + # token becomes invalid. For example, if set to 3.days, the user can confirm +
    274. +
      + +
      +
    275. + + + + + + # their account within 3 days after the mail was sent, but on the fourth day +
    276. +
      + +
      +
    277. + + + + + + # their account can't be confirmed with the token any more. +
    278. +
      + +
      +
    279. + + + + + + # Default is nil, meaning there is no restriction on how long a user can take +
    280. +
      + +
      +
    281. + + + + + + # before confirming their account. +
    282. +
      + +
      +
    283. + + + + + + # config.confirm_within = 3.days +
    284. +
      + +
      +
    285. + + + + + + +
    286. +
      + +
      +
    287. + + + + + + # If true, requires any email changes to be confirmed (exactly the same way as +
    288. +
      + +
      +
    289. + + + + + + # initial account confirmation) to be applied. Requires additional unconfirmed_email +
    290. +
      + +
      +
    291. + + + + + + # db field (see migrations). Until confirmed, new email is stored in +
    292. +
      + +
      +
    293. + + + + + + # unconfirmed_email column, and copied to email column on successful confirmation. +
    294. +
      + +
      +
    295. + 1 + + + + + config.reconfirmable = true +
    296. +
      + +
      +
    297. + + + + + + +
    298. +
      + +
      +
    299. + + + + + + # Defines which key will be used when confirming an account +
    300. +
      + +
      +
    301. + + + + + + # config.confirmation_keys = [:email] +
    302. +
      + +
      +
    303. + + + + + + +
    304. +
      + +
      +
    305. + + + + + + # ==> Configuration for :rememberable +
    306. +
      + +
      +
    307. + + + + + + # The time the user will be remembered without asking for credentials again. +
    308. +
      + +
      +
    309. + + + + + + # config.remember_for = 2.weeks +
    310. +
      + +
      +
    311. + + + + + + +
    312. +
      + +
      +
    313. + + + + + + # Invalidates all the remember me tokens when the user signs out. +
    314. +
      + +
      +
    315. + 1 + + + + + config.expire_all_remember_me_on_sign_out = true +
    316. +
      + +
      +
    317. + + + + + + +
    318. +
      + +
      +
    319. + + + + + + # If true, extends the user's remember period when remembered via cookie. +
    320. +
      + +
      +
    321. + + + + + + # config.extend_remember_period = false +
    322. +
      + +
      +
    323. + + + + + + +
    324. +
      + +
      +
    325. + + + + + + # Options to be passed to the created cookie. For instance, you can set +
    326. +
      + +
      +
    327. + + + + + + # secure: true in order to force SSL only cookies. +
    328. +
      + +
      +
    329. + + + + + + # config.rememberable_options = {} +
    330. +
      + +
      +
    331. + + + + + + +
    332. +
      + +
      +
    333. + + + + + + # ==> Configuration for :validatable +
    334. +
      + +
      +
    335. + + + + + + # Range for password length. +
    336. +
      + +
      +
    337. + 1 + + + + + config.password_length = 6..128 +
    338. +
      + +
      +
    339. + + + + + + +
    340. +
      + +
      +
    341. + + + + + + # Email regex used to validate email formats. It simply asserts that +
    342. +
      + +
      +
    343. + + + + + + # one (and only one) @ exists in the given string. This is mainly +
    344. +
      + +
      +
    345. + + + + + + # to give user feedback and not to assert the e-mail validity. +
    346. +
      + +
      +
    347. + 1 + + + + + config.email_regexp = /\A[^@\s]+@[^@\s]+\z/ +
    348. +
      + +
      +
    349. + + + + + + +
    350. +
      + +
      +
    351. + + + + + + # ==> Configuration for :timeoutable +
    352. +
      + +
      +
    353. + + + + + + # The time you want to timeout the user session without activity. After this +
    354. +
      + +
      +
    355. + + + + + + # time the user will be asked for credentials again. Default is 30 minutes. +
    356. +
      + +
      +
    357. + + + + + + # config.timeout_in = 30.minutes +
    358. +
      + +
      +
    359. + + + + + + +
    360. +
      + +
      +
    361. + + + + + + # ==> Configuration for :lockable +
    362. +
      + +
      +
    363. + + + + + + # Defines which strategy will be used to lock an account. +
    364. +
      + +
      +
    365. + + + + + + # :failed_attempts = Locks an account after a number of failed attempts to sign in. +
    366. +
      + +
      +
    367. + + + + + + # :none = No lock strategy. You should handle locking by yourself. +
    368. +
      + +
      +
    369. + + + + + + # config.lock_strategy = :failed_attempts +
    370. +
      + +
      +
    371. + + + + + + +
    372. +
      + +
      +
    373. + + + + + + # Defines which key will be used when locking and unlocking an account +
    374. +
      + +
      +
    375. + + + + + + # config.unlock_keys = [:email] +
    376. +
      + +
      +
    377. + + + + + + +
    378. +
      + +
      +
    379. + + + + + + # Defines which strategy will be used to unlock an account. +
    380. +
      + +
      +
    381. + + + + + + # :email = Sends an unlock link to the user email +
    382. +
      + +
      +
    383. + + + + + + # :time = Re-enables login after a certain amount of time (see :unlock_in below) +
    384. +
      + +
      +
    385. + + + + + + # :both = Enables both strategies +
    386. +
      + +
      +
    387. + + + + + + # :none = No unlock strategy. You should handle unlocking by yourself. +
    388. +
      + +
      +
    389. + + + + + + # config.unlock_strategy = :both +
    390. +
      + +
      +
    391. + + + + + + +
    392. +
      + +
      +
    393. + + + + + + # Number of authentication tries before locking an account if lock_strategy +
    394. +
      + +
      +
    395. + + + + + + # is failed attempts. +
    396. +
      + +
      +
    397. + + + + + + # config.maximum_attempts = 20 +
    398. +
      + +
      +
    399. + + + + + + +
    400. +
      + +
      +
    401. + + + + + + # Time interval to unlock the account if :time is enabled as unlock_strategy. +
    402. +
      + +
      +
    403. + + + + + + # config.unlock_in = 1.hour +
    404. +
      + +
      +
    405. + + + + + + +
    406. +
      + +
      +
    407. + + + + + + # Warn on the last attempt before the account is locked. +
    408. +
      + +
      +
    409. + + + + + + # config.last_attempt_warning = true +
    410. +
      + +
      +
    411. + + + + + + +
    412. +
      + +
      +
    413. + + + + + + # ==> Configuration for :recoverable +
    414. +
      + +
      +
    415. + + + + + + # +
    416. +
      + +
      +
    417. + + + + + + # Defines which key will be used when recovering the password for an account +
    418. +
      + +
      +
    419. + + + + + + # config.reset_password_keys = [:email] +
    420. +
      + +
      +
    421. + + + + + + +
    422. +
      + +
      +
    423. + + + + + + # Time interval you can reset your password with a reset password key. +
    424. +
      + +
      +
    425. + + + + + + # Don't put a too small interval or your users won't have the time to +
    426. +
      + +
      +
    427. + + + + + + # change their passwords. +
    428. +
      + +
      +
    429. + 1 + + + + + config.reset_password_within = 6.hours +
    430. +
      + +
      +
    431. + + + + + + +
    432. +
      + +
      +
    433. + + + + + + # When set to false, does not sign a user in automatically after their password is +
    434. +
      + +
      +
    435. + + + + + + # reset. Defaults to true, so a user is signed in automatically after a reset. +
    436. +
      + +
      +
    437. + + + + + + # config.sign_in_after_reset_password = true +
    438. +
      + +
      +
    439. + + + + + + +
    440. +
      + +
      +
    441. + + + + + + # ==> Configuration for :encryptable +
    442. +
      + +
      +
    443. + + + + + + # Allow you to use another hashing or encryption algorithm besides bcrypt (default). +
    444. +
      + +
      +
    445. + + + + + + # You can use :sha1, :sha512 or algorithms from others authentication tools as +
    446. +
      + +
      +
    447. + + + + + + # :clearance_sha1, :authlogic_sha512 (then you should set stretches above to 20 +
    448. +
      + +
      +
    449. + + + + + + # for default behavior) and :restful_authentication_sha1 (then you should set +
    450. +
      + +
      +
    451. + + + + + + # stretches to 10, and copy REST_AUTH_SITE_KEY to pepper). +
    452. +
      + +
      +
    453. + + + + + + # +
    454. +
      + +
      +
    455. + + + + + + # Require the `devise-encryptable` gem when using anything other than bcrypt +
    456. +
      + +
      +
    457. + + + + + + # config.encryptor = :sha512 +
    458. +
      + +
      +
    459. + + + + + + +
    460. +
      + +
      +
    461. + + + + + + # ==> Scopes configuration +
    462. +
      + +
      +
    463. + + + + + + # Turn scoped views on. Before rendering "sessions/new", it will first check for +
    464. +
      + +
      +
    465. + + + + + + # "users/sessions/new". It's turned off by default because it's slower if you +
    466. +
      + +
      +
    467. + + + + + + # are using only default views. +
    468. +
      + +
      +
    469. + + + + + + # config.scoped_views = false +
    470. +
      + +
      +
    471. + + + + + + +
    472. +
      + +
      +
    473. + + + + + + # Configure the default scope given to Warden. By default it's the first +
    474. +
      + +
      +
    475. + + + + + + # devise role declared in your routes (usually :user). +
    476. +
      + +
      +
    477. + + + + + + # config.default_scope = :user +
    478. +
      + +
      +
    479. + + + + + + +
    480. +
      + +
      +
    481. + + + + + + # Set this configuration to false if you want /users/sign_out to sign out +
    482. +
      + +
      +
    483. + + + + + + # only the current scope. By default, Devise signs out all scopes. +
    484. +
      + +
      +
    485. + + + + + + # config.sign_out_all_scopes = true +
    486. +
      + +
      +
    487. + + + + + + +
    488. +
      + +
      +
    489. + + + + + + # ==> Navigation configuration +
    490. +
      + +
      +
    491. + + + + + + # Lists the formats that should be treated as navigational. Formats like +
    492. +
      + +
      +
    493. + + + + + + # :html, should redirect to the sign in page when the user does not have +
    494. +
      + +
      +
    495. + + + + + + # access, but formats like :xml or :json, should return 401. +
    496. +
      + +
      +
    497. + + + + + + # +
    498. +
      + +
      +
    499. + + + + + + # If you have any extra navigational formats, like :iphone or :mobile, you +
    500. +
      + +
      +
    501. + + + + + + # should add them to the navigational formats lists. +
    502. +
      + +
      +
    503. + + + + + + # +
    504. +
      + +
      +
    505. + + + + + + # The "*/*" below is required to match Internet Explorer requests. +
    506. +
      + +
      +
    507. + + + + + + # config.navigational_formats = ['*/*', :html] +
    508. +
      + +
      +
    509. + + + + + + +
    510. +
      + +
      +
    511. + + + + + + # The default HTTP method used to sign out a resource. Default is :delete. +
    512. +
      + +
      +
    513. + 1 + + + + + config.sign_out_via = :delete +
    514. +
      + +
      +
    515. + + + + + + +
    516. +
      + +
      +
    517. + + + + + + # ==> OmniAuth +
    518. +
      + +
      +
    519. + + + + + + # Add a new OmniAuth provider. Check the wiki for more information on setting +
    520. +
      + +
      +
    521. + + + + + + # up on your models and hooks. +
    522. +
      + +
      +
    523. + + + + + + # config.omniauth :github, 'APP_ID', 'APP_SECRET', scope: 'user,public_repo' +
    524. +
      + +
      +
    525. + + + + + + +
    526. +
      + +
      +
    527. + + + + + + # ==> Warden configuration +
    528. +
      + +
      +
    529. + + + + + + # If you want to use other strategies, that are not supported by Devise, or +
    530. +
      + +
      +
    531. + + + + + + # change the failure app, you can configure them inside the config.warden block. +
    532. +
      + +
      +
    533. + + + + + + # +
    534. +
      + +
      +
    535. + + + + + + # config.warden do |manager| +
    536. +
      + +
      +
    537. + + + + + + # manager.intercept_401 = false +
    538. +
      + +
      +
    539. + + + + + + # manager.default_strategies(scope: :user).unshift :some_external_strategy +
    540. +
      + +
      +
    541. + + + + + + # end +
    542. +
      + +
      +
    543. + + + + + + +
    544. +
      + +
      +
    545. + + + + + + # ==> Mountable engine configurations +
    546. +
      + +
      +
    547. + + + + + + # When using Devise inside an engine, let's call it `MyEngine`, and this engine +
    548. +
      + +
      +
    549. + + + + + + # is mountable, there are some extra configurations to be taken into account. +
    550. +
      + +
      +
    551. + + + + + + # The following options are available, assuming the engine is mounted as: +
    552. +
      + +
      +
    553. + + + + + + # +
    554. +
      + +
      +
    555. + + + + + + # mount MyEngine, at: '/my_engine' +
    556. +
      + +
      +
    557. + + + + + + # +
    558. +
      + +
      +
    559. + + + + + + # The router that invoked `devise_for`, in the example above, would be: +
    560. +
      + +
      +
    561. + + + + + + # config.router_name = :my_engine +
    562. +
      + +
      +
    563. + + + + + + # +
    564. +
      + +
      +
    565. + + + + + + # When using OmniAuth, Devise cannot automatically set OmniAuth path, +
    566. +
      + +
      +
    567. + + + + + + # so you need to do it manually. For the users scope, it would be: +
    568. +
      + +
      +
    569. + + + + + + # config.omniauth_path_prefix = '/my_engine/users/auth' +
    570. +
      + +
      +
    571. + + + + + + +
    572. +
      + +
      +
    573. + + + + + + # ==> Turbolinks configuration +
    574. +
      + +
      +
    575. + + + + + + # If your app is using Turbolinks, Turbolinks::Controller needs to be included to make redirection work correctly: +
    576. +
      + +
      +
    577. + + + + + + # +
    578. +
      + +
      +
    579. + + + + + + # ActiveSupport.on_load(:devise_failure_app) do +
    580. +
      + +
      +
    581. + + + + + + # include Turbolinks::Controller +
    582. +
      + +
      +
    583. + + + + + + # end +
    584. +
      + +
      +
    585. + + + + + + +
    586. +
      + +
      +
    587. + + + + + + # ==> Configuration for :registerable +
    588. +
      + +
      +
    589. + + + + + + +
    590. +
      + +
      +
    591. + + + + + + # When set to false, does not sign a user in automatically after their password is +
    592. +
      + +
      +
    593. + + + + + + # changed. Defaults to true, so a user is signed in automatically after changing a password. +
    594. +
      + +
      +
    595. + + + + + + # config.sign_in_after_change_password = true +
    596. +
      + +
      +
    597. + + + + + + end +
    598. +
      + +
    +
    +
    + + +
    +
    +

    config/initializers/filter_parameter_logging.rb

    +

    + + 100.0% + + + lines covered +

    + + + +
    + 1 relevant lines. + 1 lines covered and + 0 lines missed. +
    + + + +
    + +
    +    
      + +
      +
    1. + + + + + + # Be sure to restart your server when you modify this file. +
    2. +
      + +
      +
    3. + + + + + + +
    4. +
      + +
      +
    5. + + + + + + # Configure sensitive parameters which will be filtered from the log file. +
    6. +
      + +
      +
    7. + 1 + + + + + Rails.application.config.filter_parameters += [:password] +
    8. +
      + +
    +
    +
    + + +
    +
    +

    config/initializers/inflections.rb

    +

    + + 100.0% + + + lines covered +

    + + + +
    + 0 relevant lines. + 0 lines covered and + 0 lines missed. +
    + + + +
    + +
    +    
      + +
      +
    1. + + + + + + # Be sure to restart your server when you modify this file. +
    2. +
      + +
      +
    3. + + + + + + +
    4. +
      + +
      +
    5. + + + + + + # Add new inflection rules using the following format. Inflections +
    6. +
      + +
      +
    7. + + + + + + # are locale specific, and you may define rules for as many different +
    8. +
      + +
      +
    9. + + + + + + # locales as you wish. All of these examples are active by default: +
    10. +
      + +
      +
    11. + + + + + + # ActiveSupport::Inflector.inflections(:en) do |inflect| +
    12. +
      + +
      +
    13. + + + + + + # inflect.plural /^(ox)$/i, '\1en' +
    14. +
      + +
      +
    15. + + + + + + # inflect.singular /^(ox)en/i, '\1' +
    16. +
      + +
      +
    17. + + + + + + # inflect.irregular 'person', 'people' +
    18. +
      + +
      +
    19. + + + + + + # inflect.uncountable %w( fish sheep ) +
    20. +
      + +
      +
    21. + + + + + + # end +
    22. +
      + +
      +
    23. + + + + + + +
    24. +
      + +
      +
    25. + + + + + + # These inflection rules are supported but not enabled by default: +
    26. +
      + +
      +
    27. + + + + + + # ActiveSupport::Inflector.inflections(:en) do |inflect| +
    28. +
      + +
      +
    29. + + + + + + # inflect.acronym 'RESTful' +
    30. +
      + +
      +
    31. + + + + + + # end +
    32. +
      + +
    +
    +
    + + +
    +
    +

    config/initializers/mime_types.rb

    +

    + + 100.0% + + + lines covered +

    + + + +
    + 0 relevant lines. + 0 lines covered and + 0 lines missed. +
    + + + +
    + +
    +    
      + +
      +
    1. + + + + + + # Be sure to restart your server when you modify this file. +
    2. +
      + +
      +
    3. + + + + + + +
    4. +
      + +
      +
    5. + + + + + + # Add new mime types for use in respond_to blocks: +
    6. +
      + +
      +
    7. + + + + + + # Mime::Type.register "text/richtext", :rtf +
    8. +
      + +
    +
    +
    + + +
    +
    +

    config/initializers/wrap_parameters.rb

    +

    + + 100.0% + + + lines covered +

    + + + +
    + 2 relevant lines. + 2 lines covered and + 0 lines missed. +
    + + + +
    + +
    +    
      + +
      +
    1. + + + + + + # Be sure to restart your server when you modify this file. +
    2. +
      + +
      +
    3. + + + + + + +
    4. +
      + +
      +
    5. + + + + + + # This file contains settings for ActionController::ParamsWrapper which +
    6. +
      + +
      +
    7. + + + + + + # is enabled by default. +
    8. +
      + +
      +
    9. + + + + + + +
    10. +
      + +
      +
    11. + + + + + + # Enable parameter wrapping for JSON. You can disable this by setting :format to an empty array. +
    12. +
      + +
      +
    13. + 1 + + + + + ActiveSupport.on_load(:action_controller) do +
    14. +
      + +
      +
    15. + 2 + + + + + wrap_parameters format: [:json] +
    16. +
      + +
      +
    17. + + + + + + end +
    18. +
      + +
      +
    19. + + + + + + +
    20. +
      + +
      +
    21. + + + + + + # To enable root element in JSON for ActiveRecord objects. +
    22. +
      + +
      +
    23. + + + + + + # ActiveSupport.on_load(:active_record) do +
    24. +
      + +
      +
    25. + + + + + + # self.include_root_in_json = true +
    26. +
      + +
      +
    27. + + + + + + # end +
    28. +
      + +
    +
    +
    + + +
    +
    +

    config/routes.rb

    +

    + + 100.0% + + + lines covered +

    + + + +
    + 9 relevant lines. + 9 lines covered and + 0 lines missed. +
    + + + +
    + +
    +    
      + +
      +
    1. + + + + + + # frozen_string_literal: true +
    2. +
      + +
      +
    3. + + + + + + +
    4. +
      + +
      +
    5. + 1 + + + + + Rails.application.routes.draw do +
    6. +
      + +
      +
    7. + 1 + + + + + resources :accreditations +
    8. +
      + +
      +
    9. + 1 + + + + + resources :sei_processes +
    10. +
      + +
      +
    11. + + + + + + +
    12. +
      + +
      +
    13. + 1 + + + + + resources :requirements do +
    14. +
      + +
      +
    15. + 1 + + + + + member do +
    16. +
      + +
      +
    17. + 1 + + + + + delete :delete_document_attachment +
    18. +
      + +
      +
    19. + + + + + + end +
    20. +
      + +
      +
    21. + + + + + + end +
    22. +
      + +
      +
    23. + + + + + + +
    24. +
      + +
      +
    25. + 1 + + + + + get 'home/index' +
    26. +
      + +
      +
    27. + 1 + + + + + devise_for :users +
    28. +
      + +
      +
    29. + + + + + + # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html +
    30. +
      + +
      +
    31. + 1 + + + + + root to: 'home#index' +
    32. +
      + +
      +
    33. + + + + + + end +
    34. +
      + +
    +
    +
    + + +
    +
    + + diff --git a/features.html b/features.html index 492d2b87..ec57bd82 100644 --- a/features.html +++ b/features.html @@ -302,336 +302,336 @@
    - + @@ -14,7 +14,7 @@ loading
    -
    Generated 2020-11-21T05:39:14-02:00
    +
    Generated 2020-11-21T09:09:46-02:00
      @@ -22,15 +22,15 @@

      All Files ( - - 92.13% + + 89.25% covered at - 1.09 + 1.72 hits/line ) @@ -39,15 +39,15 @@

      - 23 files in total. + 27 files in total.
      - 89 relevant lines, - 82 lines covered and - 7 lines missed. - ( - 92.13% + 186 relevant lines, + 166 lines covered and + 20 lines missed. + ( + 89.25% )
      @@ -70,6 +70,28 @@

      + + app/controllers/application_controller.rb + 91.67 % + 24 + 12 + 11 + 1 + 4.67 + + + + + app/controllers/sei_processes_controller.rb + 100.00 % + 97 + 46 + 46 + 0 + 2.39 + + + app/helpers/accreditations_helper.rb 100.00 % @@ -125,6 +147,17 @@

      + + app/models/accreditation.rb + 65.22 % + 34 + 23 + 15 + 8 + 0.65 + + + app/models/application_record.rb 100.00 % @@ -136,14 +169,25 @@

      + + app/models/requirement.rb + 52.94 % + 26 + 17 + 9 + 8 + 0.53 + + + app/models/sei_process.rb - 72.00 % - 42 - 25 - 18 - 7 - 1.28 + 87.50 % + 41 + 24 + 21 + 3 + 2.67 @@ -340,12 +384,12 @@

      -
      +
      -

      app/helpers/accreditations_helper.rb

      +

      app/controllers/application_controller.rb

      - 100.0% + 91.67% lines covered @@ -354,9 +398,9 @@

      - 1 relevant lines. - 1 lines covered and - 0 lines missed. + 12 relevant lines. + 11 lines covered and + 1 lines missed.
      @@ -367,13 +411,13 @@

        -
      1. - 1 +
      2. + - module AccreditationsHelper + # frozen_string_literal: true
      3. @@ -384,277 +428,2392 @@

        + + +

      + +
      +
    • + 1 + + + + + module Current +
    • +
      + +
      +
    • + 1 + + + + + thread_mattr_accessor :user +
    • +
      + +
      +
    • + + + + + end
    • - - -
      +
      +
    • + + + + + +
    • +
      -
      -
      -

      app/helpers/application_helper.rb

      -

      - - 100.0% - +
      +
    • + 1 + - lines covered -
    • + - + class ApplicationController < ActionController::Base + +
      + +
      +
    • + 1 + -
      - 1 relevant lines. - 1 lines covered and - 0 lines missed. -
      + - + before_action :configure_permitted_parameters, if: :devise_controller? +
    • +
      + +
      +
    • + + -
    • + -
      -    
        + + +
      + +
      +
    • + 1 + + + + + around_action :set_current_user +
    • +
      + +
      +
    • + 1 + + + + + def set_current_user +
    • +
      + +
      +
    • + 16 + + + + + Current.user = current_user +
    • +
      + +
      +
    • + 16 + + + + + yield +
    • +
      + +
      +
    • + + + + + + ensure +
    • +
      + +
      +
    • + + + + + + # to address the thread variable leak issues in Puma/Thin webserver +
    • +
      + +
      +
    • + 16 + + + + + Current.user = nil +
    • +
      + +
      +
    • + + + + + + end +
    • +
      + +
      +
    • + + + + + + +
    • +
      + +
      +
    • + 1 + + + + + protected +
    • +
      + +
      +
    • + + + + + + +
    • +
      + +
      +
    • + 1 + + + + + def configure_permitted_parameters +
    • +
      + +
      +
    • + + + + + + devise_parameter_sanitizer.permit(:sign_up, keys: %i[full_name role]) +
    • +
      + +
      +
    • + + + + + + end +
    • +
      + +
      +
    • + + + + + + end +
    • +
      + + + +
      + + +
      +
      +

      app/controllers/sei_processes_controller.rb

      +

      + + 100.0% + + + lines covered +

      + + + +
      + 46 relevant lines. + 46 lines covered and + 0 lines missed. +
      + + + +
      + +
      +    
        + +
        +
      1. + 1 + + + + + class SeiProcessesController < ApplicationController +
      2. +
        + +
        +
      3. + 1 + + + + + before_action :set_sei_process, only: [:show, :edit, :update, :destroy] +
      4. +
        + +
        +
      5. + + + + + + +
      6. +
        + +
        +
      7. + + + + + + # GET /sei_processes +
      8. +
        + +
        +
      9. + + + + + + # GET /sei_processes.json +
      10. +
        + +
        +
      11. + 1 + + + + + def index +
      12. +
        + +
        +
      13. + 2 + + + + + @all_statuses = %w[Espera Aprovado Rejeitado] +
      14. +
        + +
        +
      15. + + + + + + +
      16. +
        + +
        +
      17. + 2 + + + + + session[:statuses] = params[:statuses] || session[:statuses] || @all_statuses.zip([]).to_h +
      18. +
        + +
        +
      19. + 2 + + + + + @status_filter = session[:statuses].keys +
      20. +
        + +
        +
      21. + + + + + + +
      22. +
        + +
        +
      23. + 2 + + + + + if current_user.role == "administrator" +
      24. +
        + +
        +
      25. + 1 + + + + + @sei_processes = SeiProcess.where(status: @status_filter) +
      26. +
        + +
        +
      27. + + + + + + else +
      28. +
        + +
        +
      29. + 1 + + + + + @my_processes = SeiProcess.where(user_id: current_user.id, status: @status_filter) +
      30. +
        + +
        +
      31. + + + + + + end +
      32. +
        + +
        +
      33. + + + + + + end +
      34. +
        + +
        +
      35. + + + + + + +
      36. +
        + +
        +
      37. + + + + + + # GET /sei_processes/1 +
      38. +
        + +
        +
      39. + + + + + + # GET /sei_processes/1.json +
      40. +
        + +
        +
      41. + 1 + + + + + def show +
      42. +
        + +
        +
      43. + + + + + + end +
      44. +
        + +
        +
      45. + + + + + + +
      46. +
        + +
        +
      47. + + + + + + # GET /sei_processes/new +
      48. +
        + +
        +
      49. + 1 + + + + + def new +
      50. +
        + +
        +
      51. + 1 + + + + + @requirements = Requirement.find_by(title: 'Requisitos de Credenciamento') +
      52. +
        + +
        +
      53. + 1 + + + + + @sei_process = SeiProcess.new +
      54. +
        + +
        +
      55. + + + + + + end +
      56. +
        + +
        +
      57. + + + + + + +
      58. +
        + +
        +
      59. + + + + + + # GET /sei_processes/1/edit +
      60. +
        + +
        +
      61. + 1 + + + + + def edit +
      62. +
        + +
        +
      63. + + + + + + end +
      64. +
        + +
        +
      65. + + + + + + +
      66. +
        + +
        +
      67. + + + + + + # POST /sei_processes +
      68. +
        + +
        +
      69. + + + + + + # POST /sei_processes.json +
      70. +
        + +
        +
      71. + 1 + + + + + def create +
      72. +
        + +
        +
      73. + 4 + + + + + mandatory_params = {'user_id' => current_user.id, 'status' => 'Espera', 'code' => '0'} +
      74. +
        + +
        +
      75. + 4 + + + + + @sei_process = SeiProcess.new(sei_process_params.merge(mandatory_params)) +
      76. +
        + +
        +
      77. + + + + + + +
      78. +
        + +
        +
      79. + 4 + + + + + respond_to do |format| +
      80. +
        + +
        +
      81. + 4 + + + + + if @sei_process.save +
      82. +
        + +
        +
      83. + 6 + + + + + format.html { redirect_to sei_processes_url, notice: 'Processo aberto com sucesso!' } +
      84. +
        + +
        +
      85. + 3 + + + + + format.json { render :index, status: :created, location: @sei_process } +
      86. +
        + +
        +
      87. + + + + + + else +
      88. +
        + +
        +
      89. + 2 + + + + + format.html { render :new } +
      90. +
        + +
        +
      91. + 1 + + + + + format.json { render json: @sei_process.errors, status: :unprocessable_entity } +
      92. +
        + +
        +
      93. + + + + + + end +
      94. +
        + +
        +
      95. + + + + + + end +
      96. +
        + +
        +
      97. + + + + + + end +
      98. +
        + +
        +
      99. + + + + + + +
      100. +
        + +
        +
      101. + + + + + + # PATCH/PUT /sei_processes/1 +
      102. +
        + +
        +
      103. + + + + + + # PATCH/PUT /sei_processes/1.json +
      104. +
        + +
        +
      105. + 1 + + + + + def update +
      106. +
        + +
        +
      107. + 4 + + + + + respond_to do |format| +
      108. +
        + +
        +
      109. + 4 + + + + + if @sei_process.update(sei_process_params) +
      110. +
        + +
        +
      111. + 6 + + + + + format.html { redirect_to sei_processes_url, notice: 'Processo atualizado com sucesso!' } +
      112. +
        + +
        +
      113. + 3 + + + + + format.json { render :index, status: :ok, location: @sei_process } +
      114. +
        + +
        +
      115. + + + + + + +
      116. +
        + +
        +
      117. + 3 + + + + + if (@sei_process.status == 'Aprovado') && @sei_process.documents.attached? +
      118. +
        + +
        +
      119. + 1 + + + + + accreditation_instance = Accreditation.find_by(sei_process: @sei_process.id) +
      120. +
        + +
        +
      121. + 1 + + + + + if accreditation_instance == nil +
      122. +
        + +
        +
      123. + 1 + + + + + Accreditation.create!(user_id: @sei_process.user_id, sei_process_id: @sei_process.id) +
      124. +
        + +
        +
      125. + + + + + + end +
      126. +
        + +
        +
      127. + + + + + + end +
      128. +
        + +
        +
      129. + + + + + + +
      130. +
        + +
        +
      131. + + + + + + else +
      132. +
        + +
        +
      133. + 2 + + + + + format.html { render :edit } +
      134. +
        + +
        +
      135. + 1 + + + + + format.json { render json: @sei_process.errors, status: :unprocessable_entity } +
      136. +
        + +
        +
      137. + + + + + + end +
      138. +
        + +
        +
      139. + + + + + + end +
      140. +
        + +
        +
      141. + + + + + + end +
      142. +
        + +
        +
      143. + + + + + + +
      144. +
        + +
        +
      145. + + + + + + # DELETE /sei_processes/1 +
      146. +
        + +
        +
      147. + + + + + + # DELETE /sei_processes/1.json +
      148. +
        + +
        +
      149. + 1 + + + + + def destroy +
      150. +
        + +
        +
      151. + 3 + + + + + respond_to do |format| +
      152. +
        + +
        +
      153. + 3 + + + + + if @sei_process.destroy +
      154. +
        + +
        +
      155. + 4 + + + + + format.html { redirect_to sei_processes_url, notice: 'Processo excluído com sucesso!' } +
      156. +
        + +
        +
      157. + 2 + + + + + format.json { head :no_content } +
      158. +
        + +
        +
      159. + + + + + + else +
      160. +
        + +
        +
      161. + 2 + + + + + format.html { redirect_to sei_processes_url, notice: 'Erro: não foi possível excluir o processo!' } +
      162. +
        + +
        +
      163. + 1 + + + + + format.json { head :no_content } +
      164. +
        + +
        +
      165. + + + + + + end +
      166. +
        + +
        +
      167. + + + + + + end +
      168. +
        + +
        +
      169. + + + + + + end +
      170. +
        + +
        +
      171. + + + + + + +
      172. +
        + +
        +
      173. + 1 + + + + + private +
      174. +
        + +
        +
      175. + + + + + + # Use callbacks to share common setup or constraints between actions. +
      176. +
        + +
        +
      177. + 1 + + + + + def set_sei_process +
      178. +
        + +
        +
      179. + 9 + + + + + @sei_process = SeiProcess.find(params[:id]) +
      180. +
        + +
        +
      181. + + + + + + end +
      182. +
        + +
        +
      183. + + + + + + +
      184. +
        + +
        +
      185. + + + + + + # Never trust parameters from the scary internet, only allow the white list through. +
      186. +
        + +
        +
      187. + 1 + + + + + def sei_process_params +
      188. +
        + +
        +
      189. + 8 + + + + + params.require(:sei_process).permit(:user_id, :status, :code, documents: []) +
      190. +
        + +
        +
      191. + + + + + + end +
      192. +
        + +
        +
      193. + + + + + + end +
      194. +
        + +
      +
      +
      + + +
      +
      +

      app/helpers/accreditations_helper.rb

      +

      + + 100.0% + + + lines covered +

      + + + +
      + 1 relevant lines. + 1 lines covered and + 0 lines missed. +
      + + + +
      + +
      +    
        + +
        +
      1. + 1 + + + + + module AccreditationsHelper +
      2. +
        + +
        +
      3. + + + + + + end +
      4. +
        + +
      +
      +
      + + +
      +
      +

      app/helpers/application_helper.rb

      +

      + + 100.0% + + + lines covered +

      + + + +
      + 1 relevant lines. + 1 lines covered and + 0 lines missed. +
      + + + +
      + +
      +    
        + +
        +
      1. + 1 + + + + + module ApplicationHelper +
      2. +
        + +
        +
      3. + + + + + + end +
      4. +
        + +
      +
      +
      + + +
      +
      +

      app/helpers/home_helper.rb

      +

      + + 100.0% + + + lines covered +

      + + + +
      + 1 relevant lines. + 1 lines covered and + 0 lines missed. +
      + + + +
      + +
      +    
        + +
        +
      1. + 1 + + + + + module HomeHelper +
      2. +
        + +
        +
      3. + + + + + + end +
      4. +
        + +
      +
      +
      + + +
      +
      +

      app/helpers/requirements_helper.rb

      +

      + + 100.0% + + + lines covered +

      + + + +
      + 1 relevant lines. + 1 lines covered and + 0 lines missed. +
      + + + +
      + +
      +    
        + +
        +
      1. + 1 + + + + + module RequirementsHelper +
      2. +
        + +
        +
      3. + + + + + + end +
      4. +
        + +
      +
      +
      + + +
      +
      +

      app/helpers/sei_processes_helper.rb

      +

      + + 100.0% + + + lines covered +

      + + + +
      + 1 relevant lines. + 1 lines covered and + 0 lines missed. +
      + + + +
      + +
      +    
        + +
        +
      1. + 1 + + + + + module SeiProcessesHelper +
      2. +
        + +
        +
      3. + + + + + + end +
      4. +
        + +
      +
      +
      + + +
      +
      +

      app/models/accreditation.rb

      +

      + + 65.22% + + + lines covered +

      + + + +
      + 23 relevant lines. + 15 lines covered and + 8 lines missed. +
      + + + +
      + +
      +    
        + +
        +
      1. + 1 + + + + + class Accreditation < ApplicationRecord +
      2. +
        + +
        +
      3. + 1 + + + + + belongs_to :user +
      4. +
        + +
        +
      5. + 1 + + + + + belongs_to :sei_process +
      6. +
        + +
        +
      7. + 1 + + + + + validates :sei_process, uniqueness: true +
      8. +
        + +
        +
      9. + + + + + + +
      10. +
        + +
        +
      11. + 1 + + + + + validate :check_role, on: [:create, :update] +
      12. +
        + +
        +
      13. + 1 + + + + + def current_user_is_admin +
      14. +
        + +
        +
      15. + 1 + + + + + Current.user != nil && Current.user.role == 'administrator' +
      16. +
        + +
        +
      17. + + + + + + end +
      18. +
        + +
        +
      19. + 1 + + + + + def check_role +
      20. +
        + +
        +
      21. + 1 + + + + + unless current_user_is_admin +
      22. +
        + +
        +
      23. + + + + + + self.errors.add(:base, 'Usuário sem permissão') +
      24. +
        + +
        +
      25. + + + + + + return false +
      26. +
        + +
        +
      27. + + + + + + end +
      28. +
        + +
        +
      29. + 1 + + + + + true +
      30. +
        + +
        +
      31. + + + + + + end +
      32. +
        + +
        +
      33. + + + + + + +
      34. +
        + +
        +
      35. + 1 + + + + + validate :check_date, on: :update +
      36. +
        + +
        +
      37. + 1 + + + + + def check_date +
      38. +
        + +
        +
      39. + + + + + + if (start_date == nil) || (end_date == nil) || (end_date < start_date) +
      40. +
        + +
        +
      41. + + + + + + self.errors.add(:end_date, 'inválida') +
      42. +
        + +
        +
      43. + + + + + + return false +
      44. +
        + +
        +
      45. + + + + + + end +
      46. +
        + +
        +
      47. + + + + + + true +
      48. +
        + +
        +
      49. + + + + + + end +
      50. +
        + +
        +
      51. + + + + + + +
      52. +
        + +
        +
      53. + 1 + + + + + before_destroy :check_permission +
      54. +
        + +
        +
      55. + 1 + + + + + def allow_deletion! +
      56. +
        + +
        +
      57. + + + + + + @allow_deletion = true +
      58. +
        + +
        +
      59. + + + + + + end +
      60. +
        + +
        +
      61. + 1 + + + + + def check_permission +
      62. +
        + +
        +
      63. + + + + + + throw(:abort) unless @allow_deletion || current_user_is_admin +
      64. +
        + +
        +
      65. + + + + + + end +
      66. +
        + +
        +
      67. + + + + + + end +
      68. +
        + +
      +
      +
      + + +
      +
      +

      app/models/application_record.rb

      +

      + + 100.0% + + + lines covered +

      + + + +
      + 2 relevant lines. + 2 lines covered and + 0 lines missed. +
      + + + +
      + +
      +    
        + +
        +
      1. + 1 + + + + + class ApplicationRecord < ActiveRecord::Base +
      2. +
        + +
        +
      3. + 1 + + + + + self.abstract_class = true +
      4. +
        + +
        +
      5. + + + + + + end +
      6. +
        + +
      +
      +
      + + +
      +
      +

      app/models/requirement.rb

      +

      + + 52.94% + + + lines covered +

      + + + +
      + 17 relevant lines. + 9 lines covered and + 8 lines missed. +
      + + + +
      + +
      +    
        + +
        +
      1. + 1 + + + + + class Requirement < ApplicationRecord +
      2. +
        + +
        +
      3. + 1 + + + + + validates :title, presence: true, uniqueness: true +
      4. +
        + +
        +
      5. + 1 + + + + + has_many_attached :documents +
      6. +
        + +
        +
      7. + + + + + + +
      8. +
        + +
        +
      9. + 1 + + + + + validate :check_role, on: [:create, :update] +
      10. +
        -
      11. +
      12. 1 - module ApplicationHelper + def current_user_is_admin
      13. -
      14. +
      15. - end + Current.user != nil && Current.user.role == 'administrator'
      16. -
      -
      -
      - - -
      -
      -

      app/helpers/home_helper.rb

      -

      - - 100.0% - - - lines covered -

      - - - -
      - 1 relevant lines. - 1 lines covered and - 0 lines missed. -
      - - +
      +
    • + + -
    • + -
      -    
        + end + +
      -
    • +
    • 1 - module HomeHelper + def check_role
    • -
    • +
    • - end + unless current_user_is_admin
    • - - -
      - - -
      -
      -

      app/helpers/requirements_helper.rb

      -

      - - 100.0% - - - lines covered -

      - - - -
      - 1 relevant lines. - 1 lines covered and - 0 lines missed. -
      - - +
      +
    • + + -
    • + -
      -    
        + self.errors.add(:base, 'Usuário sem permissão') + +
      -
    • - 1 +
    • + - module RequirementsHelper + return false
    • -
    • +
    • - end + end
    • - - -
      +
      +
    • + + + + + true +
    • +
      -
      -
      -

      app/helpers/sei_processes_helper.rb

      -

      - - 100.0% - +
      +
    • + + - lines covered -
    • + - + end + +
      + +
      +
    • + + -
      - 1 relevant lines. - 1 lines covered and - 0 lines missed. -
      + - + +
    • +
      + +
      +
    • + 1 + -
    • + -
      -    
        + before_destroy :check_permission + +
      -
    • +
    • 1 - module SeiProcessesHelper + def allow_deletion!
    • -
    • +
    • - end + @allow_deletion = true
    • - - -
      +
      +
    • + + + + + end +
    • +
      -
      -
      -

      app/models/application_record.rb

      -

      - - 100.0% - +
      +
    • + 1 + - lines covered -
    • + - + def check_permission + +
      + +
      +
    • + + -
      - 2 relevant lines. - 2 lines covered and - 0 lines missed. -
      + - + unless @allow_deletion || current_user_is_admin +
    • +
      + +
      +
    • + + -
    • + -
      -    
        + throw(:abort) + +
      -
    • - 1 +
    • + - class ApplicationRecord < ActiveRecord::Base + end
    • -
    • - 1 +
    • + - self.abstract_class = true + end
    • -
    • +
    • @@ -673,8 +2832,8 @@

      app/models/sei_process.rb

      - - 72.0% + + 87.5% lines covered @@ -683,9 +2842,9 @@

      - 25 relevant lines. - 18 lines covered and - 7 lines missed. + 24 relevant lines. + 21 lines covered and + 3 lines missed.
      @@ -828,8 +2987,8 @@

      -
    • - 5 +
    • + 9 @@ -883,19 +3042,19 @@

    • -
    • - 6 +
    • + 13 - if (Current.user == nil) || ((!current_user_is_admin) && (status != 'Espera')) + if Current.user == nil
    • -
    • - 2 +
    • + @@ -905,8 +3064,8 @@

    • -
    • - 2 +
    • + @@ -927,8 +3086,8 @@

    • -
    • - 4 +
    • + 13 @@ -982,19 +3141,8 @@

    • -
    • - - - - - - print "check_role" -
    • -
      - -
      -
    • - +
    • + 6 @@ -1004,8 +3152,8 @@

    • -
    • - +
    • + 1 @@ -1015,8 +3163,8 @@

    • -
    • - +
    • + 1 @@ -1026,7 +3174,7 @@

    • -
    • +
    • @@ -1037,8 +3185,8 @@

    • -
    • - +
    • + 5 @@ -1048,7 +3196,7 @@

    • -
    • +
    • @@ -1059,7 +3207,7 @@

    • -
    • +
    • @@ -1070,7 +3218,7 @@

    • -
    • +
    • 1 @@ -1081,7 +3229,7 @@

    • -
    • +
    • 1 @@ -1092,7 +3240,7 @@

    • -
    • +
    • @@ -1103,7 +3251,7 @@

    • -
    • +
    • @@ -1114,7 +3262,7 @@

    • -
    • +
    • 1 @@ -1125,8 +3273,8 @@

    • -
    • - +
    • + 3 @@ -1136,7 +3284,7 @@

    • -
    • +
    • @@ -1147,7 +3295,7 @@

    • -
    • +
    • diff --git a/features.html b/features.html index 24737ede..a5e5f138 100644 --- a/features.html +++ b/features.html @@ -303,335 +303,414 @@ - + @@ -14,7 +14,7 @@ loading
    • -
      Generated 2020-11-21T09:09:46-02:00
      +
      Generated 2020-11-21T10:12:49-02:00
        @@ -22,15 +22,15 @@

        All Files ( - - 89.25% + + 93.83% covered at - 1.72 + 1.06 hits/line ) @@ -39,15 +39,15 @@

        - 27 files in total. + 23 files in total.
        - 186 relevant lines, - 166 lines covered and - 20 lines missed. - ( - 89.25% + 81 relevant lines, + 76 lines covered and + 5 lines missed. + ( + 93.83% )
        @@ -70,28 +70,6 @@

        - - app/controllers/application_controller.rb - 91.67 % - 24 - 12 - 11 - 1 - 4.67 - - - - - app/controllers/sei_processes_controller.rb - 100.00 % - 97 - 46 - 46 - 0 - 2.39 - - - app/helpers/accreditations_helper.rb 100.00 % @@ -147,17 +125,6 @@

        - - app/models/accreditation.rb - 65.22 % - 34 - 23 - 15 - 8 - 0.65 - - - app/models/application_record.rb 100.00 % @@ -171,23 +138,12 @@

        app/models/requirement.rb - 52.94 % + 70.59 % 26 17 - 9 - 8 - 0.53 - - - - - app/models/sei_process.rb - 87.50 % - 41 - 24 - 21 - 3 - 2.67 + 12 + 5 + 1.24 @@ -384,12 +340,12 @@

        -
        +
        -

        app/controllers/application_controller.rb

        +

        app/helpers/accreditations_helper.rb

        - 91.67% + 100.0% lines covered @@ -398,9 +354,9 @@

        - 12 relevant lines. - 11 lines covered and - 1 lines missed. + 1 relevant lines. + 1 lines covered and + 0 lines missed.
        @@ -411,13 +367,13 @@

          -
        1. - +
        2. + 1 - # frozen_string_literal: true + module AccreditationsHelper
        3. @@ -428,34 +384,54 @@

          - + end

        -
        -
      • - 1 - + + +
      • - + +
        +
        +

        app/helpers/application_helper.rb

        +

        + + 100.0% + - module Current -

      • -
        + lines covered +

        + + + +
        + 1 relevant lines. + 1 lines covered and + 0 lines missed. +
        + + + +

        + +
        +    
          -
        1. +
        2. 1 - thread_mattr_accessor :user + module ApplicationHelper
        3. -
        4. +
        5. @@ -465,2355 +441,220 @@

        6. -
          -
        7. - - - - +
        +
        +
        - - -
        -
        -
      • - 1 - +
        +
        +

        app/helpers/home_helper.rb

        +

        + + 100.0% + - + lines covered +

        - class ApplicationController < ActionController::Base -
      • -
        + + +
        + 1 relevant lines. + 1 lines covered and + 0 lines missed. +
        + + + +
        + +
        +    
          -
        1. +
        2. 1 - before_action :configure_permitted_parameters, if: :devise_controller? + module HomeHelper
        3. -
        4. +
        5. - + end
        6. -
          -
        7. - 1 - +
        +
        +
        - + +
        +
        +

        app/helpers/requirements_helper.rb

        +

        + + 100.0% + - around_action :set_current_user - -

        + lines covered + + + + +
        + 1 relevant lines. + 1 lines covered and + 0 lines missed. +
        + + + +
        + +
        +    
          -
        1. +
        2. 1 - def set_current_user + module RequirementsHelper
        3. -
        4. - 16 +
        5. + - Current.user = current_user + end
        6. -
          -
        7. - 16 - +
        +
        +
        - + +
        +
        +

        app/helpers/sei_processes_helper.rb

        +

        + + 100.0% + - yield - -

        + lines covered + + + + +
        + 1 relevant lines. + 1 lines covered and + 0 lines missed. +
        + + + +
        + +
        +    
          -
        1. - +
        2. + 1 - ensure + module SeiProcessesHelper
        3. -
        4. +
        5. - # to address the thread variable leak issues in Puma/Thin webserver + end
        6. +
        +
        +
        + + +
        +
        +

        app/models/application_record.rb

        +

        + + 100.0% + + + lines covered +

        + + + +
        + 2 relevant lines. + 2 lines covered and + 0 lines missed. +
        + + + +
        + +
        +    
          +
          -
        1. - 16 +
        2. + 1 - Current.user = nil + class ApplicationRecord < ActiveRecord::Base
        3. -
        4. - +
        5. + 1 - end + self.abstract_class = true
        6. -
        7. - - - - - - -
        8. -
          - -
          -
        9. - 1 - - - - - protected -
        10. -
          - -
          -
        11. - - - - - - -
        12. -
          - -
          -
        13. - 1 - - - - - def configure_permitted_parameters -
        14. -
          - -
          -
        15. - - - - - - devise_parameter_sanitizer.permit(:sign_up, keys: %i[full_name role]) -
        16. -
          - -
          -
        17. - - - - - - end -
        18. -
          - -
          -
        19. - - - - - - end -
        20. -
          - -
        -
        -
        - - -
        -
        -

        app/controllers/sei_processes_controller.rb

        -

        - - 100.0% - - - lines covered -

        - - - -
        - 46 relevant lines. - 46 lines covered and - 0 lines missed. -
        - - - -
        - -
        -    
          - -
          -
        1. - 1 - - - - - class SeiProcessesController < ApplicationController -
        2. -
          - -
          -
        3. - 1 - - - - - before_action :set_sei_process, only: [:show, :edit, :update, :destroy] -
        4. -
          - -
          -
        5. - - - - - - -
        6. -
          - -
          -
        7. - - - - - - # GET /sei_processes -
        8. -
          - -
          -
        9. - - - - - - # GET /sei_processes.json -
        10. -
          - -
          -
        11. - 1 - - - - - def index -
        12. -
          - -
          -
        13. - 2 - - - - - @all_statuses = %w[Espera Aprovado Rejeitado] -
        14. -
          - -
          -
        15. - - - - - - -
        16. -
          - -
          -
        17. - 2 - - - - - session[:statuses] = params[:statuses] || session[:statuses] || @all_statuses.zip([]).to_h -
        18. -
          - -
          -
        19. - 2 - - - - - @status_filter = session[:statuses].keys -
        20. -
          - -
          -
        21. - - - - - - -
        22. -
          - -
          -
        23. - 2 - - - - - if current_user.role == "administrator" -
        24. -
          - -
          -
        25. - 1 - - - - - @sei_processes = SeiProcess.where(status: @status_filter) -
        26. -
          - -
          -
        27. - - - - - - else -
        28. -
          - -
          -
        29. - 1 - - - - - @my_processes = SeiProcess.where(user_id: current_user.id, status: @status_filter) -
        30. -
          - -
          -
        31. - - - - - - end -
        32. -
          - -
          -
        33. - - - - - - end -
        34. -
          - -
          -
        35. - - - - - - -
        36. -
          - -
          -
        37. - - - - - - # GET /sei_processes/1 -
        38. -
          - -
          -
        39. - - - - - - # GET /sei_processes/1.json -
        40. -
          - -
          -
        41. - 1 - - - - - def show -
        42. -
          - -
          -
        43. - - - - - - end -
        44. -
          - -
          -
        45. - - - - - - -
        46. -
          - -
          -
        47. - - - - - - # GET /sei_processes/new -
        48. -
          - -
          -
        49. - 1 - - - - - def new -
        50. -
          - -
          -
        51. - 1 - - - - - @requirements = Requirement.find_by(title: 'Requisitos de Credenciamento') -
        52. -
          - -
          -
        53. - 1 - - - - - @sei_process = SeiProcess.new -
        54. -
          - -
          -
        55. - - - - - - end -
        56. -
          - -
          -
        57. - - - - - - -
        58. -
          - -
          -
        59. - - - - - - # GET /sei_processes/1/edit -
        60. -
          - -
          -
        61. - 1 - - - - - def edit -
        62. -
          - -
          -
        63. - - - - - - end -
        64. -
          - -
          -
        65. - - - - - - -
        66. -
          - -
          -
        67. - - - - - - # POST /sei_processes -
        68. -
          - -
          -
        69. - - - - - - # POST /sei_processes.json -
        70. -
          - -
          -
        71. - 1 - - - - - def create -
        72. -
          - -
          -
        73. - 4 - - - - - mandatory_params = {'user_id' => current_user.id, 'status' => 'Espera', 'code' => '0'} -
        74. -
          - -
          -
        75. - 4 - - - - - @sei_process = SeiProcess.new(sei_process_params.merge(mandatory_params)) -
        76. -
          - -
          -
        77. - - - - - - -
        78. -
          - -
          -
        79. - 4 - - - - - respond_to do |format| -
        80. -
          - -
          -
        81. - 4 - - - - - if @sei_process.save -
        82. -
          - -
          -
        83. - 6 - - - - - format.html { redirect_to sei_processes_url, notice: 'Processo aberto com sucesso!' } -
        84. -
          - -
          -
        85. - 3 - - - - - format.json { render :index, status: :created, location: @sei_process } -
        86. -
          - -
          -
        87. - - - - - - else -
        88. -
          - -
          -
        89. - 2 - - - - - format.html { render :new } -
        90. -
          - -
          -
        91. - 1 - - - - - format.json { render json: @sei_process.errors, status: :unprocessable_entity } -
        92. -
          - -
          -
        93. - - - - - - end -
        94. -
          - -
          -
        95. - - - - - - end -
        96. -
          - -
          -
        97. - - - - - - end -
        98. -
          - -
          -
        99. - - - - - - -
        100. -
          - -
          -
        101. - - - - - - # PATCH/PUT /sei_processes/1 -
        102. -
          - -
          -
        103. - - - - - - # PATCH/PUT /sei_processes/1.json -
        104. -
          - -
          -
        105. - 1 - - - - - def update -
        106. -
          - -
          -
        107. - 4 - - - - - respond_to do |format| -
        108. -
          - -
          -
        109. - 4 - - - - - if @sei_process.update(sei_process_params) -
        110. -
          - -
          -
        111. - 6 - - - - - format.html { redirect_to sei_processes_url, notice: 'Processo atualizado com sucesso!' } -
        112. -
          - -
          -
        113. - 3 - - - - - format.json { render :index, status: :ok, location: @sei_process } -
        114. -
          - -
          -
        115. - - - - - - -
        116. -
          - -
          -
        117. - 3 - - - - - if (@sei_process.status == 'Aprovado') && @sei_process.documents.attached? -
        118. -
          - -
          -
        119. - 1 - - - - - accreditation_instance = Accreditation.find_by(sei_process: @sei_process.id) -
        120. -
          - -
          -
        121. - 1 - - - - - if accreditation_instance == nil -
        122. -
          - -
          -
        123. - 1 - - - - - Accreditation.create!(user_id: @sei_process.user_id, sei_process_id: @sei_process.id) -
        124. -
          - -
          -
        125. - - - - - - end -
        126. -
          - -
          -
        127. - - - - - - end -
        128. -
          - -
          -
        129. - - - - - - -
        130. -
          - -
          -
        131. - - - - - - else -
        132. -
          - -
          -
        133. - 2 - - - - - format.html { render :edit } -
        134. -
          - -
          -
        135. - 1 - - - - - format.json { render json: @sei_process.errors, status: :unprocessable_entity } -
        136. -
          - -
          -
        137. - - - - - - end -
        138. -
          - -
          -
        139. - - - - - - end -
        140. -
          - -
          -
        141. - - - - - - end -
        142. -
          - -
          -
        143. - - - - - - -
        144. -
          - -
          -
        145. - - - - - - # DELETE /sei_processes/1 -
        146. -
          - -
          -
        147. - - - - - - # DELETE /sei_processes/1.json -
        148. -
          - -
          -
        149. - 1 - - - - - def destroy -
        150. -
          - -
          -
        151. - 3 - - - - - respond_to do |format| -
        152. -
          - -
          -
        153. - 3 - - - - - if @sei_process.destroy -
        154. -
          - -
          -
        155. - 4 - - - - - format.html { redirect_to sei_processes_url, notice: 'Processo excluído com sucesso!' } -
        156. -
          - -
          -
        157. - 2 - - - - - format.json { head :no_content } -
        158. -
          - -
          -
        159. - - - - - - else -
        160. -
          - -
          -
        161. - 2 - - - - - format.html { redirect_to sei_processes_url, notice: 'Erro: não foi possível excluir o processo!' } -
        162. -
          - -
          -
        163. - 1 - - - - - format.json { head :no_content } -
        164. -
          - -
          -
        165. - - - - - - end -
        166. -
          - -
          -
        167. - - - - - - end -
        168. -
          - -
          -
        169. - - - - - - end -
        170. -
          - -
          -
        171. - - - - - - -
        172. -
          - -
          -
        173. - 1 - - - - - private -
        174. -
          - -
          -
        175. - - - - - - # Use callbacks to share common setup or constraints between actions. -
        176. -
          - -
          -
        177. - 1 - - - - - def set_sei_process -
        178. -
          - -
          -
        179. - 9 - - - - - @sei_process = SeiProcess.find(params[:id]) -
        180. -
          - -
          -
        181. - - - - - - end -
        182. -
          - -
          -
        183. - - - - - - -
        184. -
          - -
          -
        185. - - - - - - # Never trust parameters from the scary internet, only allow the white list through. -
        186. -
          - -
          -
        187. - 1 - - - - - def sei_process_params -
        188. -
          - -
          -
        189. - 8 - - - - - params.require(:sei_process).permit(:user_id, :status, :code, documents: []) -
        190. -
          - -
          -
        191. - - - - - - end -
        192. -
          - -
          -
        193. - - - - - - end -
        194. -
          - -
        -
        -
        - - -
        -
        -

        app/helpers/accreditations_helper.rb

        -

        - - 100.0% - - - lines covered -

        - - - -
        - 1 relevant lines. - 1 lines covered and - 0 lines missed. -
        - - - -
        - -
        -    
          - -
          -
        1. - 1 - - - - - module AccreditationsHelper -
        2. -
          - -
          -
        3. - - - - - - end -
        4. -
          - -
        -
        -
        - - -
        -
        -

        app/helpers/application_helper.rb

        -

        - - 100.0% - - - lines covered -

        - - - -
        - 1 relevant lines. - 1 lines covered and - 0 lines missed. -
        - - - -
        - -
        -    
          - -
          -
        1. - 1 - - - - - module ApplicationHelper -
        2. -
          - -
          -
        3. - - - - - - end -
        4. -
          - -
        -
        -
        - - -
        -
        -

        app/helpers/home_helper.rb

        -

        - - 100.0% - - - lines covered -

        - - - -
        - 1 relevant lines. - 1 lines covered and - 0 lines missed. -
        - - - -
        - -
        -    
          - -
          -
        1. - 1 - - - - - module HomeHelper -
        2. -
          - -
          -
        3. - - - - - - end -
        4. -
          - -
        -
        -
        - - -
        -
        -

        app/helpers/requirements_helper.rb

        -

        - - 100.0% - - - lines covered -

        - - - -
        - 1 relevant lines. - 1 lines covered and - 0 lines missed. -
        - - - -
        - -
        -    
          - -
          -
        1. - 1 - - - - - module RequirementsHelper -
        2. -
          - -
          -
        3. - - - - - - end -
        4. -
          - -
        -
        -
        - - -
        -
        -

        app/helpers/sei_processes_helper.rb

        -

        - - 100.0% - - - lines covered -

        - - - -
        - 1 relevant lines. - 1 lines covered and - 0 lines missed. -
        - - - -
        - -
        -    
          - -
          -
        1. - 1 - - - - - module SeiProcessesHelper -
        2. -
          - -
          -
        3. - - - - - - end -
        4. -
          - -
        -
        -
        - - -
        -
        -

        app/models/accreditation.rb

        -

        - - 65.22% - - - lines covered -

        - - - -
        - 23 relevant lines. - 15 lines covered and - 8 lines missed. -
        - - - -
        - -
        -    
          - -
          -
        1. - 1 - - - - - class Accreditation < ApplicationRecord -
        2. -
          - -
          -
        3. - 1 - - - - - belongs_to :user -
        4. -
          - -
          -
        5. - 1 - - - - - belongs_to :sei_process -
        6. -
          - -
          -
        7. - 1 - - - - - validates :sei_process, uniqueness: true -
        8. -
          - -
          -
        9. - - - - - - -
        10. -
          - -
          -
        11. - 1 - - - - - validate :check_role, on: [:create, :update] -
        12. -
          - -
          -
        13. - 1 - - - - - def current_user_is_admin -
        14. -
          - -
          -
        15. - 1 - - - - - Current.user != nil && Current.user.role == 'administrator' -
        16. -
          - -
          -
        17. - - - - - - end -
        18. -
          - -
          -
        19. - 1 - - - - - def check_role -
        20. -
          - -
          -
        21. - 1 - - - - - unless current_user_is_admin -
        22. -
          - -
          -
        23. - - - - - - self.errors.add(:base, 'Usuário sem permissão') -
        24. -
          - -
          -
        25. - - - - - - return false -
        26. -
          - -
          -
        27. - - - - - - end -
        28. -
          - -
          -
        29. - 1 - - - - - true -
        30. -
          - -
          -
        31. - - - - - - end -
        32. -
          - -
          -
        33. - - - - - - -
        34. -
          - -
          -
        35. - 1 - - - - - validate :check_date, on: :update -
        36. -
          - -
          -
        37. - 1 - - - - - def check_date -
        38. -
          - -
          -
        39. - - - - - - if (start_date == nil) || (end_date == nil) || (end_date < start_date) -
        40. -
          - -
          -
        41. - - - - - - self.errors.add(:end_date, 'inválida') -
        42. -
          - -
          -
        43. - - - - - - return false -
        44. -
          - -
          -
        45. - - - - - - end -
        46. -
          - -
          -
        47. - - - - - - true -
        48. -
          - -
          -
        49. - - - - - - end -
        50. -
          - -
          -
        51. - - - - - - -
        52. -
          - -
          -
        53. - 1 - - - - - before_destroy :check_permission -
        54. -
          - -
          -
        55. - 1 - - - - - def allow_deletion! -
        56. -
          - -
          -
        57. - - - - - - @allow_deletion = true -
        58. -
          - -
          -
        59. - - - - - - end -
        60. -
          - -
          -
        61. - 1 - - - - - def check_permission -
        62. -
          - -
          -
        63. - - - - - - throw(:abort) unless @allow_deletion || current_user_is_admin -
        64. -
          - -
          -
        65. - - - - - - end -
        66. -
          - -
          -
        67. - - - - - - end -
        68. -
          - -
        -
        -
        - - -
        -
        -

        app/models/application_record.rb

        -

        - - 100.0% - - - lines covered -

        - - - -
        - 2 relevant lines. - 2 lines covered and - 0 lines missed. -
        - - - -
        - -
        -    
          - -
          -
        1. - 1 - - - - - class ApplicationRecord < ActiveRecord::Base -
        2. -
          - -
          -
        3. - 1 - - - - - self.abstract_class = true -
        4. -
          - -
          -
        5. - - - - - - end -
        6. -
          - -
        -
        -
        - - -
        -
        -

        app/models/requirement.rb

        -

        - - 52.94% - - - lines covered -

        - - - -
        - 17 relevant lines. - 9 lines covered and - 8 lines missed. -
        - - - -
        - -
        -    
          - -
          -
        1. - 1 - - - - - class Requirement < ApplicationRecord -
        2. -
          - -
          -
        3. - 1 - - - - - validates :title, presence: true, uniqueness: true -
        4. -
          - -
          -
        5. - 1 - - - - - has_many_attached :documents -
        6. -
          - -
          -
        7. - - - - - - -
        8. -
          - -
          -
        9. - 1 - - - - - validate :check_role, on: [:create, :update] -
        10. -
          - -
          -
        11. - 1 - - - - - def current_user_is_admin -
        12. -
          - -
          -
        13. - - - - - - Current.user != nil && Current.user.role == 'administrator' -
        14. -
          - -
          -
        15. - - - - - - end -
        16. -
          - -
          -
        17. - 1 - - - - - def check_role -
        18. -
          - -
          -
        19. - - - - - - unless current_user_is_admin -
        20. -
          - -
          -
        21. - - - - - - self.errors.add(:base, 'Usuário sem permissão') -
        22. -
          - -
          -
        23. - - - - - - return false -
        24. -
          - -
          -
        25. - - - - - - end -
        26. -
          - -
          -
        27. - - - - - - true -
        28. -
          - -
          -
        29. - - - - - - end -
        30. -
          - -
          -
        31. - - - - - - -
        32. -
          - -
          -
        33. - 1 - - - - - before_destroy :check_permission -
        34. -
          - -
          -
        35. - 1 - - - - - def allow_deletion! -
        36. -
          - -
          -
        37. - - - - - - @allow_deletion = true -
        38. -
          - -
          -
        39. - - - - - - end -
        40. -
          - -
          -
        41. - 1 - - - - - def check_permission -
        42. -
          - -
          -
        43. - - - - - - unless @allow_deletion || current_user_is_admin -
        44. -
          - -
          -
        45. - - - - - - throw(:abort) -
        46. -
          - -
          -
        47. - - - - - - end -
        48. -
          - -
          -
        49. - - - - - - end -
        50. -
          - -
          -
        51. +
        52. @@ -2828,12 +669,12 @@

        53. -
          +
          -

          app/models/sei_process.rb

          +

          app/models/requirement.rb

          - - 87.5% + + 70.59% lines covered @@ -2842,9 +683,9 @@

          - 24 relevant lines. - 21 lines covered and - 3 lines missed. + 17 relevant lines. + 12 lines covered and + 5 lines missed.
          @@ -2861,7 +702,7 @@

          - class SeiProcess < ApplicationRecord + class Requirement < ApplicationRecord

          @@ -2872,7 +713,7 @@

          - belongs_to :user + validates :title, presence: true, uniqueness: true

          @@ -2883,23 +724,12 @@

          - has_many_attached :documents - -

          - -
          -
        54. - 1 - - - - - validates :documents, attached: true + has_many_attached :documents
        55. -
        56. +
        57. @@ -2910,205 +740,128 @@

        58. -
        59. +
        60. 1 - enum status: { -
        61. -
          - -
          -
        62. - - - - - - Espera: 0, -
        63. -
          - -
          -
        64. - - - - - - Aprovado: 1, -
        65. -
          - -
          -
        66. - - - - - - Rejeitado: 2 -
        67. -
          - -
          -
        68. - - - - - - } -
        69. -
          - -
          -
        70. - - - - - - + validate :check_role, on: [:create, :update]
        71. -
        72. +
        73. 1 - def current_user_is_admin -
        74. -
          - -
          -
        75. - 9 - - - - - Current.user != nil && Current.user.role == 'administrator' + def current_user_is_admin
        76. -
        77. - +
        78. + 4 - end + Current.user != nil && Current.user.role == 'administrator'
        79. -
        80. - - - +
        81. - - -
        82. -
          - -
          -
        83. - 1 - validate :check_signed_in, on: :create + end
        84. -
        85. +
        86. 1 - def check_signed_in + def check_role
        87. -
        88. - 13 +
        89. + 4 - if Current.user == nil + unless current_user_is_admin
        90. -
        91. +
        92. - self.errors.add(:base, 'Usuário sem permissão') + self.errors.add(:base, 'Usuário sem permissão')
        93. -
        94. +
        95. - return false + return false
        96. -
        97. +
        98. - end + end
        99. -
        100. - 13 +
        101. + 4 - true + true
        102. -
        103. +
        104. - end + end
        105. -
        106. +
        107. @@ -3119,62 +872,40 @@

        108. -
        109. +
        110. 1 - validate :check_role, on: :update + before_destroy :check_permission
        111. -
        112. +
        113. 1 - def check_role -
        114. -
          - -
          -
        115. - 6 - - - - - unless current_user_is_admin + def allow_deletion!
        116. -
        117. - 1 - - +
        118. - - self.errors.add(:base, 'Usuário sem permissão') -
        119. -
          - -
          -
        120. - 1 - return false + @allow_deletion = true
        121. -
        122. +
        123. @@ -3185,117 +916,62 @@

        124. -
        125. - 5 - - - - - true -
        126. -
          - -
          -
        127. - - - - - - end -
        128. -
          - -
          -
        129. - - - - - - -
        130. -
          - -
          -
        131. - 1 - - - - - before_destroy :check_permission -
        132. -
          - -
          -
        133. +
        134. 1 - def allow_deletion! + def check_permission
        135. -
        136. +
        137. - @allow_deletion = true + unless @allow_deletion || current_user_is_admin
        138. -
        139. +
        140. - end + throw(:abort)
        141. -
        142. - 1 - - +
        143. - - def check_permission -
        144. -
          - -
          -
        145. - 3 - throw(:abort) unless @allow_deletion || current_user_is_admin + end
        146. -
        147. +
        148. - end + end
        149. -
        150. +
        151. diff --git a/features.html b/features.html index a5e5f138..29a55b09 100644 --- a/features.html +++ b/features.html @@ -303,414 +303,414 @@ - + @@ -14,7 +14,7 @@ loading
        152. -
          Generated 2020-11-21T10:12:49-02:00
          +
          Generated 2020-11-21T11:03:46-02:00
            @@ -22,15 +22,15 @@

            All Files ( - - 93.83% + + 84.68% covered at - 1.06 + 1.02 hits/line ) @@ -39,15 +39,15 @@

            - 23 files in total. + 24 files in total.
            - 81 relevant lines, - 76 lines covered and - 5 lines missed. - ( - 93.83% + 111 relevant lines, + 94 lines covered and + 17 lines missed. + ( + 84.68% )
            @@ -125,6 +125,17 @@

            + + app/models/accreditation.rb + 65.22 % + 34 + 23 + 15 + 8 + 1.17 + + + app/models/application_record.rb 100.00 % @@ -137,13 +148,13 @@

            - app/models/requirement.rb - 70.59 % - 26 - 17 - 12 - 5 - 1.24 + app/models/sei_process.rb + 62.50 % + 41 + 24 + 15 + 9 + 0.88 @@ -605,12 +616,12 @@

            -
            +
            -

            app/models/application_record.rb

            +

            app/models/accreditation.rb

            - - 100.0% + + 65.22% lines covered @@ -619,9 +630,9 @@

            - 2 relevant lines. - 2 lines covered and - 0 lines missed. + 23 relevant lines. + 15 lines covered and + 8 lines missed.
            @@ -638,7 +649,7 @@

            - class ApplicationRecord < ActiveRecord::Base + class Accreditation < ApplicationRecord

            @@ -649,219 +660,265 @@

            - self.abstract_class = true + belongs_to :user

            -
          • +
          • + 1 + + + + belongs_to :sei_process +
          • +
            + +
            +
          • + 1 - end + validates :sei_process, uniqueness: true
          • -
          -
          -
          +
          +
        153. + + + + + +
        154. +
          -
          -
          -

          app/models/requirement.rb

          -

          - - 70.59% - +
          +
        155. + 1 + - lines covered -
        156. + - + validate :check_role, on: [:create, :update] + +
          + +
          +
        157. + 1 + -
          - 17 relevant lines. - 12 lines covered and - 5 lines missed. -
          + - + def current_user_is_admin +
        158. +
          + +
          +
        159. + 5 + -
        160. + -
          -    
            + Current.user != nil && Current.user.role == 'administrator' + +
          -
        161. - 1 +
        162. + - class Requirement < ApplicationRecord + end
        163. -
        164. +
        165. 1 - validates :title, presence: true, uniqueness: true + def check_role
        166. -
        167. - 1 +
        168. + 5 - has_many_attached :documents + unless current_user_is_admin
        169. -
        170. +
        171. - + self.errors.add(:base, 'Usuário sem permissão')
        172. -
        173. - 1 +
        174. + - validate :check_role, on: [:create, :update] + return false
        175. -
        176. - 1 +
        177. + - def current_user_is_admin + end
        178. -
        179. - 4 +
        180. + 5 - Current.user != nil && Current.user.role == 'administrator' + true
        181. -
        182. +
        183. - end + end
        184. -
        185. +
        186. + + + + + + +
        187. +
          + +
          +
        188. 1 - def check_role + validate :check_date, on: :update
        189. -
        190. - 4 +
        191. + 1 - unless current_user_is_admin + def check_date
        192. -
        193. +
        194. - self.errors.add(:base, 'Usuário sem permissão') + if (start_date == nil) || (end_date == nil) || (end_date < start_date)
        195. -
        196. +
        197. - return false + self.errors.add(:end_date, 'inválida')
        198. -
        199. +
        200. - end + return false
        201. -
        202. - 4 +
        203. + - true + end
        204. -
        205. +
        206. - end + true
        207. -
        208. +
        209. + + + + + + end +
        210. +
          + +
          +
        211. @@ -872,106 +929,630 @@

        212. -
        213. +
        214. 1 - before_destroy :check_permission + before_destroy :check_permission
        215. -
        216. +
        217. 1 - def allow_deletion! + def allow_deletion!
        218. -
        219. +
        220. - @allow_deletion = true + @allow_deletion = true
        221. -
        222. +
        223. - end + end
        224. -
        225. +
        226. 1 - def check_permission + def check_permission
        227. -
        228. +
        229. - unless @allow_deletion || current_user_is_admin + throw(:abort) unless @allow_deletion || current_user_is_admin
        230. -
        231. +
        232. - throw(:abort) + end
        233. -
        234. +
        235. - end + end
        236. + + +
          + + +
          +
          +

          app/models/application_record.rb

          +

          + + 100.0% + + + lines covered +

          + + + +
          + 2 relevant lines. + 2 lines covered and + 0 lines missed. +
          + + + +
          + +
          +    
            +
            -
          1. +
          2. + 1 + + + + + class ApplicationRecord < ActiveRecord::Base +
          3. +
            + +
            +
          4. + 1 + + self.abstract_class = true +
          5. +
            + +
            +
          6. + - end + + + end +
          7. +
            + +
          +
          +
          + + +
          +
          +

          app/models/sei_process.rb

          +

          + + 62.5% + + + lines covered +

          + + + +
          + 24 relevant lines. + 15 lines covered and + 9 lines missed. +
          + + + +
          + +
          +    
            + +
            +
          1. + 1 + + + + + class SeiProcess < ApplicationRecord
          2. -
          3. +
          4. + 1 + + + + + belongs_to :user +
          5. +
            + +
            +
          6. + 1 + + + + + has_many_attached :documents +
          7. +
            + +
            +
          8. + 1 + + + + + validates :documents, attached: true +
          9. +
            + +
            +
          10. + + + + + + +
          11. +
            + +
            +
          12. + 1 + + + + + enum status: { +
          13. +
            + +
            +
          14. + + + + + + Espera: 0, +
          15. +
            + +
            +
          16. + + + + + + Aprovado: 1, +
          17. +
            + +
            +
          18. + + + + + + Rejeitado: 2 +
          19. +
            + +
            +
          20. + + + + + + } +
          21. +
            + +
            +
          22. + + + + + + +
          23. +
            + +
            +
          24. + 1 + + + + + def current_user_is_admin +
          25. +
            + +
            +
          26. + + + + + + Current.user != nil && Current.user.role == 'administrator' +
          27. +
            + +
            +
          28. + + + + + + end +
          29. +
            + +
            +
          30. + + + + + + +
          31. +
            + +
            +
          32. + 1 + + + + + validate :check_signed_in, on: :create +
          33. +
            + +
            +
          34. + 1 + + + + + def check_signed_in +
          35. +
            + +
            +
          36. + 4 + + + + + if Current.user == nil +
          37. +
            + +
            +
          38. + + + + + + self.errors.add(:base, 'Usuário sem permissão') +
          39. +
            + +
            +
          40. + + + + + + return false +
          41. +
            + +
            +
          42. + + + + + + end +
          43. +
            + +
            +
          44. + 4 + + + + + true +
          45. +
            + +
            +
          46. + + + + + + end +
          47. +
            + +
            +
          48. + + + + + + +
          49. +
            + +
            +
          50. + 1 + + + + + validate :check_role, on: :update +
          51. +
            + +
            +
          52. + 1 + + + + + def check_role +
          53. +
            + +
            +
          54. + + + + + + unless current_user_is_admin +
          55. +
            + +
            +
          56. + + + + + + self.errors.add(:base, 'Usuário sem permissão') +
          57. +
            + +
            +
          58. + + + + + + return false +
          59. +
            + +
            +
          60. + + + + + + end +
          61. +
            + +
            +
          62. + + + + + + true +
          63. +
            + +
            +
          64. + + + + + + end +
          65. +
            + +
            +
          66. + + + + + + +
          67. +
            + +
            +
          68. + 1 + + + + + before_destroy :check_permission +
          69. +
            + +
            +
          70. + 1 + + + + + def allow_deletion! +
          71. +
            + +
            +
          72. + + + + + + @allow_deletion = true +
          73. +
            + +
            +
          74. + + + + + + end +
          75. +
            + +
            +
          76. + 1 + + + + + def check_permission +
          77. +
            + +
            +
          78. + + + + + + throw(:abort) unless @allow_deletion || current_user_is_admin +
          79. +
            + +
            +
          80. + + + + + + end +
          81. +
            + +
            +
          82. diff --git a/spec/helpers/accreditations_helper_spec.rb b/spec/helpers/accreditations_helper_spec.rb deleted file mode 100644 index ef5ec4f9..00000000 --- a/spec/helpers/accreditations_helper_spec.rb +++ /dev/null @@ -1,15 +0,0 @@ -require 'rails_helper' - -# Specs in this file have access to a helper object that includes -# the AccreditationsHelper. For example: -# -# describe AccreditationsHelper do -# describe "string concat" do -# it "concats two strings with spaces" do -# expect(helper.concat_strings("this","that")).to eq("this that") -# end -# end -# end -RSpec.describe AccreditationsHelper, type: :helper do - pending "add some examples to (or delete) #{__FILE__}" -end diff --git a/spec/helpers/home_helper_spec.rb b/spec/helpers/home_helper_spec.rb index e537d8d9..a41ff36c 100644 --- a/spec/helpers/home_helper_spec.rb +++ b/spec/helpers/home_helper_spec.rb @@ -1,15 +1,15 @@ -require 'rails_helper' +# require 'rails_helper' -# Specs in this file have access to a helper object that includes -# the HomeHelper. For example: -# -# describe HomeHelper do -# describe "string concat" do -# it "concats two strings with spaces" do -# expect(helper.concat_strings("this","that")).to eq("this that") -# end -# end +# # Specs in this file have access to a helper object that includes +# # the HomeHelper. For example: +# # +# # describe HomeHelper do +# # describe "string concat" do +# # it "concats two strings with spaces" do +# # expect(helper.concat_strings("this","that")).to eq("this that") +# # end +# # end +# # end +# RSpec.describe HomeHelper, type: :helper do +# pending "add some examples to (or delete) #{__FILE__}" # end -RSpec.describe HomeHelper, type: :helper do - pending "add some examples to (or delete) #{__FILE__}" -end diff --git a/spec/helpers/requirements_helper_spec.rb b/spec/helpers/requirements_helper_spec.rb deleted file mode 100644 index 56f186ef..00000000 --- a/spec/helpers/requirements_helper_spec.rb +++ /dev/null @@ -1,15 +0,0 @@ -require 'rails_helper' - -# Specs in this file have access to a helper object that includes -# the RequirementsHelper. For example: -# -# describe RequirementsHelper do -# describe "string concat" do -# it "concats two strings with spaces" do -# expect(helper.concat_strings("this","that")).to eq("this that") -# end -# end -# end -RSpec.describe RequirementsHelper, type: :helper do - pending "add some examples to (or delete) #{__FILE__}" -end diff --git a/spec/helpers/sei_processes_helper_spec.rb b/spec/helpers/sei_processes_helper_spec.rb deleted file mode 100644 index 5bdfa905..00000000 --- a/spec/helpers/sei_processes_helper_spec.rb +++ /dev/null @@ -1,15 +0,0 @@ -require 'rails_helper' - -# Specs in this file have access to a helper object that includes -# the SeiProcessesHelper. For example: -# -# describe SeiProcessesHelper do -# describe "string concat" do -# it "concats two strings with spaces" do -# expect(helper.concat_strings("this","that")).to eq("this that") -# end -# end -# end -RSpec.describe SeiProcessesHelper, type: :helper do - pending "add some examples to (or delete) #{__FILE__}" -end diff --git a/spec/models/accreditation_spec.rb b/spec/models/accreditation_spec.rb index 791fae27..a4f03db4 100644 --- a/spec/models/accreditation_spec.rb +++ b/spec/models/accreditation_spec.rb @@ -1,51 +1,56 @@ require 'rails_helper' RSpec.describe Accreditation, type: :model do + fixtures :users - before(:each) do - @admin = User.find_by(email: "sower@admin.com") - @admin = User.create!( - full_name: "Sower", - email: "sower@admin.com", - password: "admin123", - role: "administrator", - registration: "000000000" - ) if @admin == nil - sign_in @admin - Current.user = @admin - - - @sei_process = SeiProcess.create!( - user_id: @admin.id, - code: 0, - documents: Rack::Test::UploadedFile.new(Rails.root.join("features/resources/ship.jpg")) - ) - end + let(:file) { + fixture_file_upload(Rails.root.join('public', 'TestImage.png'), 'image/png') + } + let(:valid_prof_params) { + {user_id: users(:admin).id, status: 'Espera', code: 0, documents: [file]} + } + let(:valid_attributes){ - {user_id: @admin.id, start_date: '2020-11-15', end_date: '2021-11-15', sei_process_id: @sei_process.id} + {user_id: users(:admin).id, sei_process_id: @process.id} } - it "is valid with valid attributes" do - expect(Accreditation.create(valid_attributes)).to be_valid - end - - it "is not valid with invalid role" do - sign_out @admin - Current.user = nil - expect(Accreditation.create(valid_attributes)).to_not be_valid - end + before(:each) do + sign_in users(:prof) + Current.user = users(:prof) + @process = SeiProcess.create! valid_prof_params - it "is not valid with start_date later than end_date" do - expect(Accreditation.create(user_id: @admin.id, start_date: '2021-11-15', end_date: '2020-11-15', sei_process_id: @sei_process.id)).to_not be_valid + sign_out users(:prof) + sign_in users(:admin) + Current.user = users(:admin) end - - it "is not valid with no start_date" do - expect(Accreditation.create(user_id: @admin.id, start_date: nil, end_date: '2020-11-15', sei_process_id: @sei_process.id)).to_not be_valid + + context "valid record" do + it "has valid attributes" do + expect( + Accreditation.new(valid_attributes) + ).to be_valid + end end - it "is not valid with no end_date" do - expect(Accreditation.create(user_id: @admin.id, start_date: '2020-11-15', end_date: nil, sei_process_id: @sei_process.id)).to_not be_valid + context "invalid record" do + it "has no user" do + expect( + Accreditation.new(sei_process_id: @process.id) + ).to_not be_valid + end + + it "has no process" do + expect( + Accreditation.new(user_id: users(:admin).id) + ).to_not be_valid + end + + it "has an unavailable process" do + Accreditation.create!(valid_attributes) + expect( + Accreditation.new(valid_attributes) + ).to_not be_valid + end end - end diff --git a/spec/models/sei_process_spec.rb b/spec/models/sei_process_spec.rb index 64344ca0..a3e5e5e5 100644 --- a/spec/models/sei_process_spec.rb +++ b/spec/models/sei_process_spec.rb @@ -63,12 +63,6 @@ end context 'when an invalid record' do - it 'has invalid attributes' do - expect( - SeiProcess.new(invalid_status_params) - ).to_not be_valid - end - it 'has no attached documents' do expect( SeiProcess.new(invalid_docs_params_by_prof) diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb index 47a31bb4..31a92f9e 100644 --- a/spec/models/user_spec.rb +++ b/spec/models/user_spec.rb @@ -1,5 +1,5 @@ -require 'rails_helper' +# require 'rails_helper' -RSpec.describe User, type: :model do - pending "add some examples to (or delete) #{__FILE__}" -end +# RSpec.describe User, type: :model do +# pending "add some examples to (or delete) #{__FILE__}" +# end diff --git a/spec/requests/accreditations_spec.rb b/spec/requests/accreditations_spec.rb deleted file mode 100644 index d3bfc23d..00000000 --- a/spec/requests/accreditations_spec.rb +++ /dev/null @@ -1,129 +0,0 @@ - require 'rails_helper' - -# This spec was generated by rspec-rails when you ran the scaffold generator. -# It demonstrates how one might use RSpec to test the controller code that -# was generated by Rails when you ran the scaffold generator. -# -# It assumes that the implementation code is generated by the rails scaffold -# generator. If you are using any extension libraries to generate different -# controller code, this generated spec may or may not pass. -# -# It only uses APIs available in rails and/or rspec-rails. There are a number -# of tools you can use to make these specs even more expressive, but we're -# sticking to rails and rspec-rails APIs to keep things simple and stable. - -RSpec.describe "/accreditations", type: :request do - # Accreditation. As you add validations to Accreditation, be sure to - # adjust the attributes here as well. - let(:valid_attributes) { - skip("Add a hash of attributes valid for your model") - } - - let(:invalid_attributes) { - skip("Add a hash of attributes invalid for your model") - } - - describe "GET /index" do - it "renders a successful response" do - Accreditation.create! valid_attributes - get accreditations_url - expect(response).to be_successful - end - end - - describe "GET /show" do - it "renders a successful response" do - accreditation = Accreditation.create! valid_attributes - get accreditation_url(accreditation) - expect(response).to be_successful - end - end - - describe "GET /new" do - it "renders a successful response" do - get new_accreditation_url - expect(response).to be_successful - end - end - - describe "GET /edit" do - it "render a successful response" do - accreditation = Accreditation.create! valid_attributes - get edit_accreditation_url(accreditation) - expect(response).to be_successful - end - end - - describe "POST /create" do - context "with valid parameters" do - it "creates a new Accreditation" do - expect { - post accreditations_url, params: { accreditation: valid_attributes } - }.to change(Accreditation, :count).by(1) - end - - it "redirects to the created accreditation" do - post accreditations_url, params: { accreditation: valid_attributes } - expect(response).to redirect_to(accreditation_url(Accreditation.last)) - end - end - - context "with invalid parameters" do - it "does not create a new Accreditation" do - expect { - post accreditations_url, params: { accreditation: invalid_attributes } - }.to change(Accreditation, :count).by(0) - end - - it "renders a successful response (i.e. to display the 'new' template)" do - post accreditations_url, params: { accreditation: invalid_attributes } - expect(response).to be_successful - end - end - end - - describe "PATCH /update" do - context "with valid parameters" do - let(:new_attributes) { - skip("Add a hash of attributes valid for your model") - } - - it "updates the requested accreditation" do - accreditation = Accreditation.create! valid_attributes - patch accreditation_url(accreditation), params: { accreditation: new_attributes } - accreditation.reload - skip("Add assertions for updated state") - end - - it "redirects to the accreditation" do - accreditation = Accreditation.create! valid_attributes - patch accreditation_url(accreditation), params: { accreditation: new_attributes } - accreditation.reload - expect(response).to redirect_to(accreditation_url(accreditation)) - end - end - - context "with invalid parameters" do - it "renders a successful response (i.e. to display the 'edit' template)" do - accreditation = Accreditation.create! valid_attributes - patch accreditation_url(accreditation), params: { accreditation: invalid_attributes } - expect(response).to be_successful - end - end - end - - describe "DELETE /destroy" do - it "destroys the requested accreditation" do - accreditation = Accreditation.create! valid_attributes - expect { - delete accreditation_url(accreditation) - }.to change(Accreditation, :count).by(-1) - end - - it "redirects to the accreditations list" do - accreditation = Accreditation.create! valid_attributes - delete accreditation_url(accreditation) - expect(response).to redirect_to(accreditations_url) - end - end -end diff --git a/spec/requests/requirements_spec.rb b/spec/requests/requirements_spec.rb deleted file mode 100644 index 8385b9f4..00000000 --- a/spec/requests/requirements_spec.rb +++ /dev/null @@ -1,10 +0,0 @@ -require 'rails_helper' - -RSpec.describe "Requirements", type: :request do - describe "GET /requirements" do - it "works! (now write some real specs)" do - get requirements_path - expect(response).to have_http_status(200) - end - end -end diff --git a/spec/requests/sei_processes_spec.rb b/spec/requests/sei_processes_spec.rb deleted file mode 100644 index a68a3630..00000000 --- a/spec/requests/sei_processes_spec.rb +++ /dev/null @@ -1,10 +0,0 @@ -require 'rails_helper' - -RSpec.describe "SeiProcesses", type: :request do - describe "GET /sei_processes" do - it "works! (now write some real specs)" do - get sei_processes_path - expect(response).to have_http_status(200) - end - end -end diff --git a/spec/views/home/index.html.erb_spec.rb b/spec/views/home/index.html.erb_spec.rb index 75bb045b..d69e1d70 100644 --- a/spec/views/home/index.html.erb_spec.rb +++ b/spec/views/home/index.html.erb_spec.rb @@ -1,5 +1,5 @@ -require 'rails_helper' +# require 'rails_helper' -RSpec.describe "home/index.html.erb", type: :view do - pending "add some examples to (or delete) #{__FILE__}" -end +# RSpec.describe "home/index.html.erb", type: :view do +# pending "add some examples to (or delete) #{__FILE__}" +# end From 886568c2360e20375da904a2b3a42cec598bbb2a Mon Sep 17 00:00:00 2001 From: ngsylar Date: Sat, 21 Nov 2020 11:07:57 -0300 Subject: [PATCH 60/82] Accreditation Controller Spec adjustments --- coverage/.last_run.json | 2 +- coverage/.resultset.json | 1175 +- coverage/index.html | 16567 ++++++++++++++-- features.html | 808 +- report.json | 2 +- .../accreditations_controller_spec.rb | 73 +- spec/models/accreditation_spec.rb | 2 +- 7 files changed, 16088 insertions(+), 2541 deletions(-) diff --git a/coverage/.last_run.json b/coverage/.last_run.json index 3b978dd7..c0e66657 100644 --- a/coverage/.last_run.json +++ b/coverage/.last_run.json @@ -1,5 +1,5 @@ { "result": { - "covered_percent": 84.68 + "covered_percent": 98.61 } } diff --git a/coverage/.resultset.json b/coverage/.resultset.json index 05195e91..0e6a4a90 100644 --- a/coverage/.resultset.json +++ b/coverage/.resultset.json @@ -602,41 +602,1030 @@ null ] }, + "/mnt/c/Users/Fontenelle/Desktop/UnB/9 semestre/Engenharia de Software/secretaria_ppgi/app/controllers/accreditations_controller.rb": { + "lines": [ + 1, + 1, + null, + null, + null, + 1, + 1, + 1, + null, + 0, + null, + null, + null, + null, + null, + 1, + null, + null, + null, + 1, + null, + null, + null, + 1, + null, + null, + null, + null, + 1, + null, + null, + null, + null, + 1, + 2, + 2, + 2, + 1, + null, + 2, + 1, + null, + null, + null, + null, + null, + null, + 1, + 3, + 3, + 4, + 2, + null, + 2, + 1, + null, + null, + null, + null, + 1, + null, + 1, + 7, + null, + null, + null, + 1, + 2, + null, + null, + null + ] + }, + "/mnt/c/Users/Fontenelle/Desktop/UnB/9 semestre/Engenharia de Software/secretaria_ppgi/app/controllers/application_controller.rb": { + "lines": [ + null, + null, + 1, + 1, + null, + null, + 1, + 1, + null, + 1, + 1, + 41, + 41, + null, + null, + 41, + null, + null, + 1, + null, + 1, + 0, + null, + null + ] + }, + "/mnt/c/Users/Fontenelle/Desktop/UnB/9 semestre/Engenharia de Software/secretaria_ppgi/spec/controllers/home_controller_spec.rb": { + "lines": [ + 1, + null, + 1, + null, + 1, + 1, + 1, + 1, + null, + null, + null, + null + ] + }, + "/mnt/c/Users/Fontenelle/Desktop/UnB/9 semestre/Engenharia de Software/secretaria_ppgi/app/controllers/home_controller.rb": { + "lines": [ + 1, + 1, + null, + null + ] + }, + "/mnt/c/Users/Fontenelle/Desktop/UnB/9 semestre/Engenharia de Software/secretaria_ppgi/spec/controllers/requirements_controller_spec.rb": { + "lines": [ + 1, + null, + 1, + 1, + null, + 1, + 14, + 14, + null, + null, + 1, + 2, + null, + null, + 16, + null, + 1, + 1, + 4, + 4, + null, + null, + 1, + 1, + 1, + 1, + 1, + null, + null, + null, + 1, + 1, + 1, + 1, + 1, + null, + null, + null, + 1, + 1, + 1, + 1, + null, + null, + null, + 1, + 1, + 1, + 1, + 1, + null, + null, + null, + null, + 1, + 1, + 1, + 2, + 2, + null, + null, + 1, + 1, + 1, + null, + null, + null, + 1, + 1, + 1, + null, + null, + null, + 1, + 1, + 1, + 1, + null, + null, + 1, + 1, + 1, + null, + null, + null, + 1, + 1, + 1, + 1, + null, + null, + 1, + 1, + 1, + null, + null, + null, + null, + null, + 1, + 1, + 2, + 2, + null, + null, + 1, + 1, + 2, + 2, + null, + null, + 1, + 1, + 1, + 1, + 1, + 1, + null, + null, + 1, + 1, + 1, + 1, + null, + null, + null, + 1, + 1, + 1, + 1, + null, + null, + 1, + 1, + 1, + 1, + null, + null, + null, + 1, + 1, + 1, + 1, + 1, + null, + 1, + 1, + 1, + null, + null, + 1, + 1, + 1, + 1, + 1, + null, + null, + null, + null, + 1, + 1, + 1, + 1, + null, + null, + 1, + 1, + 1, + 1, + 1, + null, + null, + null, + null, + null, + 1, + 1, + 1, + 2, + 2, + null, + null, + 1, + 1, + 1, + 1, + null, + null, + null, + 1, + 1, + 1, + 1, + null, + null, + null, + 1, + 1, + 1, + 1, + 1, + null, + 1, + 1, + 1, + null, + null, + 1, + 1, + 1, + null, + null, + null, + null, + null, + null + ] + }, + "/mnt/c/Users/Fontenelle/Desktop/UnB/9 semestre/Engenharia de Software/secretaria_ppgi/app/controllers/requirements_controller.rb": { + "lines": [ + 1, + 1, + null, + null, + null, + 1, + 1, + null, + null, + null, + null, + 1, + null, + null, + null, + 1, + 1, + null, + null, + null, + 1, + null, + null, + null, + null, + 1, + 4, + null, + 4, + 4, + 4, + 2, + null, + 4, + 2, + null, + null, + null, + null, + 1, + 1, + 1, + 1, + 1, + null, + null, + null, + null, + 1, + 4, + 4, + 4, + 2, + null, + 4, + 2, + null, + null, + null, + null, + null, + null, + 1, + 3, + 3, + 4, + 2, + null, + 2, + 1, + null, + null, + null, + null, + 1, + null, + 1, + 9, + null, + null, + null, + 1, + 8, + null, + null + ] + }, + "/mnt/c/Users/Fontenelle/Desktop/UnB/9 semestre/Engenharia de Software/secretaria_ppgi/spec/controllers/sei_processes_controller_spec.rb": { + "lines": [ + 1, + null, + 1, + 1, + null, + 1, + 12, + null, + null, + 1, + 2, + null, + null, + 1, + 10, + null, + null, + 1, + 1, + null, + null, + 1, + 0, + null, + null, + 1, + 1, + null, + null, + 1, + 6, + null, + null, + 17, + null, + 1, + 1, + 1, + 1, + 1, + null, + null, + 1, + 1, + 1, + null, + null, + null, + 1, + 1, + 1, + 1, + null, + null, + 1, + 1, + 1, + null, + null, + null, + null, + 1, + 1, + 1, + 1, + null, + null, + 1, + 1, + 1, + null, + null, + null, + 1, + 1, + 1, + 1, + null, + null, + 1, + 1, + 1, + null, + null, + null, + 1, + 1, + 1, + 1, + null, + null, + 1, + 1, + 1, + null, + null, + null, + 1, + 1, + 4, + 4, + null, + null, + 1, + 1, + 1, + 1, + null, + null, + null, + 1, + 1, + 1, + null, + null, + 1, + 1, + 1, + null, + null, + null, + 1, + 1, + 1, + 1, + null, + null, + null, + null, + null, + 1, + 1, + 2, + null, + null, + 1, + 2, + null, + null, + 1, + 1, + 3, + 3, + null, + null, + 1, + 1, + 1, + 1, + null, + null, + 1, + 1, + 1, + null, + null, + 1, + 1, + 1, + null, + null, + null, + null, + 1, + 1, + 1, + 1, + null, + null, + 1, + 1, + 1, + 1, + null, + null, + null, + null, + 1, + 1, + 1, + 2, + 2, + null, + null, + 1, + 1, + 1, + null, + 1, + 1, + null, + null, + null, + 1, + 1, + 1, + null, + 1, + 1, + null, + null, + null, + 1, + 1, + 1, + 1, + null, + null, + 1, + 1, + 1, + 1, + null, + null, + null, + null, + null + ] + }, + "/mnt/c/Users/Fontenelle/Desktop/UnB/9 semestre/Engenharia de Software/secretaria_ppgi/app/controllers/sei_processes_controller.rb": { + "lines": [ + 1, + 1, + null, + null, + null, + 1, + 2, + null, + 2, + 2, + null, + 2, + 1, + null, + 1, + null, + null, + null, + null, + null, + 1, + null, + null, + null, + 1, + 1, + 1, + null, + null, + null, + 1, + null, + null, + null, + null, + 1, + 4, + 4, + null, + 4, + 4, + 6, + 3, + null, + 2, + 1, + null, + null, + null, + null, + null, + null, + 1, + 4, + 4, + 6, + 3, + null, + 3, + 1, + 1, + 1, + null, + null, + null, + null, + 2, + 1, + null, + null, + null, + null, + null, + null, + 1, + 3, + 3, + 4, + 2, + null, + 2, + 1, + null, + null, + null, + null, + 1, + null, + 1, + 9, + null, + null, + null, + 1, + 8, + null, + null + ] + }, + "/mnt/c/Users/Fontenelle/Desktop/UnB/9 semestre/Engenharia de Software/secretaria_ppgi/spec/helpers/home_helper_spec.rb": { + "lines": [ + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null + ] + }, + "/mnt/c/Users/Fontenelle/Desktop/UnB/9 semestre/Engenharia de Software/secretaria_ppgi/spec/models/accreditation_spec.rb": { + "lines": [ + 1, + null, + 1, + 1, + null, + 1, + 4, + null, + null, + 1, + 4, + null, + null, + 1, + 2, + null, + null, + 1, + 4, + 4, + 4, + null, + 4, + 4, + 4, + null, + null, + 1, + 1, + 1, + null, + null, + null, + null, + null, + 1, + 1, + 1, + null, + null, + null, + null, + 1, + 1, + null, + null, + null, + null, + 1, + 1, + 1, + null, + null, + null, + null, + null + ] + }, "/mnt/c/Users/Fontenelle/Desktop/UnB/9 semestre/Engenharia de Software/secretaria_ppgi/app/models/accreditation.rb": { "lines": [ 1, 1, 1, - 1, + 1, + null, + 1, + 1, + 19, + null, + 1, + 16, + 0, + 0, + null, + 16, + null, + null, + 1, + 1, + 2, + 1, + 1, + null, + 1, + null, + null, + 1, + 1, + 0, + null, + 1, + 3, + null, + null + ] + }, + "/mnt/c/Users/Fontenelle/Desktop/UnB/9 semestre/Engenharia de Software/secretaria_ppgi/spec/models/requirement_spec.rb": { + "lines": [ + 1, + null, + 1, + 1, + null, + 1, + 3, + 3, + null, + null, + 1, + 1, + 1, + null, + null, + 1, + 1, + 1, + null, + null, + 1, + 1, + 1, + null, + null, + null, + null + ] + }, + "/mnt/c/Users/Fontenelle/Desktop/UnB/9 semestre/Engenharia de Software/secretaria_ppgi/app/models/requirement.rb": { + "lines": [ + 1, + 1, + 1, null, 1, 1, - 5, + 26, null, 1, - 5, - 0, - 0, + 23, + 2, + 2, null, - 5, + 21, null, null, 1, 1, 0, - 0, - 0, null, - 0, + 1, + 3, + 1, null, null, + null + ] + }, + "/mnt/c/Users/Fontenelle/Desktop/UnB/9 semestre/Engenharia de Software/secretaria_ppgi/spec/models/sei_process_spec.rb": { + "lines": [ 1, + null, 1, - 0, + 1, + null, + 1, + 3, + null, + null, + 1, + 2, + null, + null, + 1, + 1, + null, null, 1, 0, null, + null, + 1, + 1, + null, + null, + 1, + 1, + null, + null, + 1, + 1, + 2, + null, + null, + 1, + 1, + 1, + null, + null, + null, + null, + null, + 1, + 1, + 1, + null, + null, + null, + null, + null, + null, + 1, + 1, + 2, + null, + null, + 1, + 1, + 1, + null, + null, + null, + null, + null, + 1, + 1, + 1, + null, + null, + null, + null, + null, + null, + 1, + 1, + 1, + null, + null, + 1, + 1, + 1, + null, + null, + null, + null, + null, null ] }, @@ -654,25 +1643,25 @@ null, null, 1, - 0, + 9, null, null, 1, 1, - 4, - 0, - 0, + 30, + 1, + 1, null, - 4, + 29, null, null, 1, 1, - 0, - 0, - 0, + 6, + 1, + 1, null, - 0, + 5, null, null, 1, @@ -680,12 +1669,156 @@ 0, null, 1, - 0, + 3, + null, + null + ] + }, + "/mnt/c/Users/Fontenelle/Desktop/UnB/9 semestre/Engenharia de Software/secretaria_ppgi/spec/models/user_spec.rb": { + "lines": [ + null, + null, + null, + null, + null + ] + }, + "/mnt/c/Users/Fontenelle/Desktop/UnB/9 semestre/Engenharia de Software/secretaria_ppgi/spec/routing/accreditations_routing_spec.rb": { + "lines": [ + 1, + null, + 1, + 1, + 1, + 1, + null, + null, + 1, + 1, + null, + null, + 1, + 1, + null, + null, + 1, + 1, + null, + null, + null, + 1, + 1, + null, + null, + 1, + 1, + null, + null, + 1, + 1, + null, + null, + 1, + 1, + null, + null, + null + ] + }, + "/mnt/c/Users/Fontenelle/Desktop/UnB/9 semestre/Engenharia de Software/secretaria_ppgi/spec/routing/requirements_routing_spec.rb": { + "lines": [ + 1, + null, + 1, + 1, + 1, + 1, + null, + null, + 1, + 1, + null, + null, + 1, + 1, + null, + null, + 1, + 1, + null, + null, + null, + 1, + 1, + null, + null, + 1, + 1, + null, + null, + 1, + 1, + null, + null, + 1, + 1, + null, + null, + null + ] + }, + "/mnt/c/Users/Fontenelle/Desktop/UnB/9 semestre/Engenharia de Software/secretaria_ppgi/spec/routing/sei_processes_routing_spec.rb": { + "lines": [ + 1, + null, + 1, + 1, + 1, + 1, + null, + null, + 1, + 1, + null, + null, + 1, + 1, + null, + null, + 1, + 1, + null, + null, + null, + 1, + 1, + null, + null, + 1, + 1, + null, + null, + 1, + 1, + null, + null, + 1, + 1, + null, + null, + null + ] + }, + "/mnt/c/Users/Fontenelle/Desktop/UnB/9 semestre/Engenharia de Software/secretaria_ppgi/spec/views/home/index.html.erb_spec.rb": { + "lines": [ + null, + null, + null, null, null ] } }, - "timestamp": 1605963826 + "timestamp": 1605967613 } } diff --git a/coverage/index.html b/coverage/index.html index 92fab5b0..b6e0d5e5 100644 --- a/coverage/index.html +++ b/coverage/index.html @@ -5,7 +5,7 @@ - + @@ -14,7 +14,7 @@ loading
          83. -
            Generated 2020-11-21T11:03:46-02:00
            +
            Generated 2020-11-21T12:06:53-02:00
              @@ -22,15 +22,15 @@

              All Files ( - - 84.68% + + 98.62% covered at - 1.02 + 1.91 hits/line ) @@ -39,15 +39,15 @@

              - 24 files in total. + 42 files in total.
              - 111 relevant lines, - 94 lines covered and - 17 lines missed. - ( - 84.68% + 652 relevant lines, + 643 lines covered and + 9 lines missed. + ( + 98.62% )
              @@ -70,6 +70,61 @@

              + + app/controllers/accreditations_controller.rb + 96.55 % + 71 + 29 + 28 + 1 + 1.66 + + + + + app/controllers/application_controller.rb + 91.67 % + 24 + 12 + 11 + 1 + 10.92 + + + + + app/controllers/home_controller.rb + 100.00 % + 4 + 2 + 2 + 0 + 1.00 + + + + + app/controllers/requirements_controller.rb + 100.00 % + 85 + 40 + 40 + 0 + 2.38 + + + + + app/controllers/sei_processes_controller.rb + 100.00 % + 97 + 46 + 46 + 0 + 2.39 + + + app/helpers/accreditations_helper.rb 100.00 % @@ -127,12 +182,12 @@

              app/models/accreditation.rb - 65.22 % + 86.96 % 34 23 - 15 - 8 - 1.17 + 20 + 3 + 3.09 @@ -147,14 +202,25 @@

              + + app/models/requirement.rb + 94.12 % + 26 + 17 + 16 + 1 + 5.12 + + + app/models/sei_process.rb - 62.50 % + 95.83 % 41 24 - 15 - 9 - 0.88 + 23 + 1 + 4.13 @@ -334,6 +400,138 @@

              + + spec/controllers/home_controller_spec.rb + 100.00 % + 12 + 6 + 6 + 0 + 1.00 + + + + + spec/controllers/requirements_controller_spec.rb + 100.00 % + 216 + 129 + 129 + 0 + 1.43 + + + + + spec/controllers/sei_processes_controller_spec.rb + 99.18 % + 217 + 122 + 121 + 1 + 1.45 + + + + + spec/helpers/home_helper_spec.rb + 100.00 % + 15 + 0 + 0 + 0 + 0.00 + + + + + spec/models/accreditation_spec.rb + 100.00 % + 56 + 27 + 27 + 0 + 1.93 + + + + + spec/models/requirement_spec.rb + 100.00 % + 27 + 15 + 15 + 0 + 1.27 + + + + + spec/models/sei_process_spec.rb + 97.44 % + 87 + 39 + 38 + 1 + 1.10 + + + + + spec/models/user_spec.rb + 100.00 % + 5 + 0 + 0 + 0 + 0.00 + + + + + spec/routing/accreditations_routing_spec.rb + 100.00 % + 38 + 19 + 19 + 0 + 1.00 + + + + + spec/routing/requirements_routing_spec.rb + 100.00 % + 38 + 19 + 19 + 0 + 1.00 + + + + + spec/routing/sei_processes_routing_spec.rb + 100.00 % + 38 + 19 + 19 + 0 + 1.00 + + + + + spec/views/home/index.html.erb_spec.rb + 100.00 % + 5 + 0 + 0 + 0 + 0.00 + + +

              @@ -351,12 +549,12 @@

              -
              +
              -

              app/helpers/accreditations_helper.rb

              +

              app/controllers/accreditations_controller.rb

              - 100.0% + 96.55% lines covered @@ -365,9 +563,9 @@

              - 1 relevant lines. - 1 lines covered and - 0 lines missed. + 29 relevant lines. + 28 lines covered and + 1 lines missed.
              @@ -384,354 +582,265 @@

              - module AccreditationsHelper + class AccreditationsController < ApplicationController

              -
            • - +
            • + 1 - end + before_action :set_accreditation, only: [:show, :edit, :update, :destroy]
            • -

            -
            -
            - - -
            -
            -

            app/helpers/application_helper.rb

            -

            - - 100.0% - - - lines covered -

            - - - -
            - 1 relevant lines. - 1 lines covered and - 0 lines missed. -
            - - +
            +
          84. + + -
          85. + -
            -    
              + + +
            -
          86. - 1 +
          87. + - module ApplicationHelper + # GET /accreditations
          88. -
          89. +
          90. - end + # GET /accreditations.json
          91. - - -
            - - -
            -
            -

            app/helpers/home_helper.rb

            -

            - - 100.0% - - - lines covered -

            - - +
            +
          92. + 1 + -
            - 1 relevant lines. - 1 lines covered and - 0 lines missed. -
            + - + def index +
          93. +
            + +
            +
          94. + 1 + -
          95. + -
            -    
              + if current_user.role == "administrator" + +
            -
          96. +
          97. 1 - module HomeHelper + @accreditations = Accreditation.all
          98. -
          99. +
          100. - end + else
          101. - - -
            +
            +
          102. + + - -
            -
            -

            app/helpers/requirements_helper.rb

            -

            - - 100.0% - - - lines covered -

            - - - -
            - 1 relevant lines. - 1 lines covered and - 0 lines missed. -
            - - - -
            + -
            -    
              + @accreditations = Accreditation.where(user_id: current_user.id) + +
            -
          103. - 1 +
          104. + - module RequirementsHelper + end
          105. -
          106. +
          107. - end + end
          108. - - -
            - - -
            -
            -

            app/helpers/sei_processes_helper.rb

            -

            - - 100.0% - - - lines covered -

            - - - -
            - 1 relevant lines. - 1 lines covered and - 0 lines missed. -
            - - +
            +
          109. + + -
          110. + -
            -    
              + + +
            -
          111. - 1 +
          112. + - module SeiProcessesHelper + # GET /accreditations/1
          113. -
          114. +
          115. - end + # GET /accreditations/1.json
          116. - - -
            - - -
            -
            -

            app/models/accreditation.rb

            -

            - - 65.22% - - - lines covered -

            - - - -
            - 23 relevant lines. - 15 lines covered and - 8 lines missed. -
            - - +
            +
          117. + 1 + -
          118. + -
            -    
              + def show + +
            -
          119. - 1 +
          120. + - class Accreditation < ApplicationRecord + end
          121. -
          122. - 1 +
          123. + - belongs_to :user +
          124. -
          125. - 1 +
          126. + - belongs_to :sei_process + # GET /accreditations/new
          127. -
          128. +
          129. 1 - validates :sei_process, uniqueness: true + def new
          130. -
          131. +
          132. - + end
          133. -
          134. - 1 +
          135. + - validate :check_role, on: [:create, :update] +
          136. -
          137. - 1 +
          138. + - def current_user_is_admin + # GET /accreditations/1/edit
          139. -
          140. - 5 +
          141. + 1 - Current.user != nil && Current.user.role == 'administrator' + def edit
          142. -
          143. +
          144. @@ -742,421 +851,370 @@

          145. -
          146. - 1 +
          147. + - def check_role +
          148. -
          149. - 5 +
          150. + - unless current_user_is_admin + # POST /accreditations
          151. -
          152. +
          153. - self.errors.add(:base, 'Usuário sem permissão') + # POST /accreditations.json
          154. -
          155. - +
          156. + 1 - return false + def create
          157. -
          158. +
          159. - end + end
          160. -
          161. - 5 +
          162. + - true +
          163. -
          164. +
          165. - end + # PATCH/PUT /accreditations/1
          166. -
          167. +
          168. - + # PATCH/PUT /accreditations/1.json
          169. -
          170. +
          171. 1 - validate :check_date, on: :update + def update
          172. -
          173. - 1 +
          174. + 2 - def check_date + respond_to do |format|
          175. -
          176. - +
          177. + 2 - if (start_date == nil) || (end_date == nil) || (end_date < start_date) + if @accreditation.update(accreditation_params)
          178. -
          179. - +
          180. + 2 - self.errors.add(:end_date, 'inválida') + format.html { redirect_to accreditations_url, notice: 'Credenciamento atualizado com sucesso!' }
          181. -
          182. - +
          183. + 1 - return false + format.json { render :show, status: :ok, location: @accreditation }
          184. -
          185. +
          186. - end + else
          187. -
          188. +
          189. + 2 + + format.html { render :edit } +
          190. +
            + +
            +
          191. + 1 - true + + + format.json { render json: @accreditation.errors, status: :unprocessable_entity }
          192. -
          193. +
          194. - end + end
          195. -
          196. +
          197. - + end
          198. -
          199. - 1 +
          200. + - before_destroy :check_permission + end
          201. -
          202. - 1 +
          203. + - def allow_deletion! +
          204. -
          205. +
          206. - @allow_deletion = true + # DELETE /accreditations/1
          207. -
          208. +
          209. - end + # DELETE /accreditations/1.json
          210. -
          211. +
          212. 1 - def check_permission + def destroy
          213. -
          214. - +
          215. + 3 - throw(:abort) unless @allow_deletion || current_user_is_admin + respond_to do |format|
          216. -
          217. - +
          218. + 3 - end + if @accreditation.destroy
          219. -
          220. - +
          221. + 4 - end + format.html { redirect_to accreditations_url, notice: 'Credenciamento excluído com sucesso!' }
          222. - - -
            - - -
            -
            -

            app/models/application_record.rb

            -

            - - 100.0% - - - lines covered -

            - - - -
            - 2 relevant lines. - 2 lines covered and - 0 lines missed. -
            - - - -
            - -
            -    
              -
              -
            1. - 1 +
            2. + 2 - class ApplicationRecord < ActiveRecord::Base + format.json { head :no_content }
            3. -
            4. - 1 +
            5. + - self.abstract_class = true + else
            6. -
            7. - +
            8. + 2 - end + format.html { redirect_to accreditations_url, notice: 'Erro: não foi possível excluir o credenciamento!' }
            9. -
            -
            -
            - - -
            -
            -

            app/models/sei_process.rb

            -

            - - 62.5% - - - lines covered -

            - - - -
            - 24 relevant lines. - 15 lines covered and - 9 lines missed. -
            - - - -
            - -
            -    
              -
              -
            1. +
            2. 1 - class SeiProcess < ApplicationRecord + format.json { head :no_content }
            3. -
            4. - 1 +
            5. + - belongs_to :user + end
            6. -
            7. - 1 +
            8. + - has_many_attached :documents + end
            9. -
            10. - 1 +
            11. + - validates :documents, attached: true + end
            12. -
            13. +
            14. @@ -1167,62 +1225,62 @@

            15. -
            16. +
            17. 1 - enum status: { + private
            18. -
            19. +
            20. - Espera: 0, + # Use callbacks to share common setup or constraints between actions.
            21. -
            22. - +
            23. + 1 - Aprovado: 1, + def set_accreditation
            24. -
            25. - +
            26. + 7 - Rejeitado: 2 + @accreditation = Accreditation.find(params[:id])
            27. -
            28. +
            29. - } + end
            30. -
            31. +
            32. @@ -1233,139 +1291,159 @@

            33. -
            34. - 1 +
            35. + - def current_user_is_admin + # Never trust parameters from the scary internet, only allow the white list through.
            36. -
            37. - +
            38. + 1 - Current.user != nil && Current.user.role == 'administrator' + def accreditation_params
            39. -
            40. - +
            41. + 2 - end + params.require(:accreditation).permit(:user_id, :start_date, :end_date, :sei_proccess_id)
            42. -
            43. +
            44. - + end
            45. -
            46. - 1 +
            47. + - validate :check_signed_in, on: :create + end
            48. -
            49. - 1 +
            50. + - def check_signed_in +
            51. -
              -
            52. - 4 - +
            +
            +
            - + +
            +
            +

            app/controllers/application_controller.rb

            +

            + + 91.67% + - if Current.user == nil - -

            + lines covered + + + + +
            + 12 relevant lines. + 11 lines covered and + 1 lines missed. +
            + + + +
            + +
            +    
              -
            1. +
            2. - self.errors.add(:base, 'Usuário sem permissão') + # frozen_string_literal: true
            3. -
            4. +
            5. - return false +
            6. -
            7. - +
            8. + 1 - end + module Current
            9. -
            10. - 4 +
            11. + 1 - true + thread_mattr_accessor :user
            12. -
            13. +
            14. - end + end
            15. -
            16. +
            17. @@ -1376,172 +1454,183 @@

            18. -
            19. +
            20. 1 - validate :check_role, on: :update + class ApplicationController < ActionController::Base
            21. -
            22. +
            23. 1 - def check_role + before_action :configure_permitted_parameters, if: :devise_controller?
            24. -
            25. +
            26. - unless current_user_is_admin +
            27. -
            28. - +
            29. + 1 - self.errors.add(:base, 'Usuário sem permissão') + around_action :set_current_user
            30. -
            31. - +
            32. + 1 - return false + def set_current_user
            33. -
            34. - +
            35. + 41 - end + Current.user = current_user
            36. -
            37. - +
            38. + 41 - true + yield
            39. -
            40. +
            41. - end + ensure
            42. -
            43. +
            44. - + # to address the thread variable leak issues in Puma/Thin webserver
            45. -
            46. - 1 +
            47. + 41 - before_destroy :check_permission + Current.user = nil
            48. -
            49. - 1 +
            50. + - def allow_deletion! + end
            51. -
            52. +
            53. - @allow_deletion = true +
            54. -
            55. +
            56. + 1 + + + + + protected +
            57. +
              + +
              +
            58. - end +
            59. -
            60. +
            61. 1 - def check_permission + def configure_permitted_parameters
            62. -
            63. +
            64. - throw(:abort) unless @allow_deletion || current_user_is_admin + devise_parameter_sanitizer.permit(:sign_up, keys: %i[full_name role])
            65. -
            66. +
            67. @@ -1552,7 +1641,7 @@

            68. -
            69. +
            70. @@ -1567,9 +1656,9 @@

            71. -
              +
              -

              app/models/user.rb

              +

              app/controllers/home_controller.rb

              100.0% @@ -1581,8 +1670,8 @@

              - 5 relevant lines. - 5 lines covered and + 2 relevant lines. + 2 lines covered and 0 lines missed.
              @@ -1594,62 +1683,104 @@

                -
              1. +
              2. + 1 + + class HomeController < ApplicationController +
              3. +
                + +
                +
              4. + 1 - # frozen_string_literal: true + + + def index
              5. -
              6. +
              7. - + end
              8. -
              9. - 1 +
              10. + - class User < ApplicationRecord + end
              11. +
              +

            +
            + + +
            +
            +

            app/controllers/requirements_controller.rb

            +

            + + 100.0% + + + lines covered +

            + + + +
            + 40 relevant lines. + 40 lines covered and + 0 lines missed. +
            + + + +
            + +
            +    
              +
              -
            1. +
            2. 1 - validates :full_name, presence: true + class RequirementsController < ApplicationController
            3. -
            4. +
            5. 1 - validates :role, presence: true + before_action :set_requirement, only: [:show, :edit, :update, :destroy]
            6. -
            7. +
            8. @@ -1660,192 +1791,172 @@

            9. -
            10. +
            11. - # Include default devise modules. Others available are: + # GET /requirements
            12. -
            13. +
            14. - # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable + # GET /requirements.json
            15. -
            16. +
            17. 1 - devise :database_authenticatable, :registerable, + def index
            18. -
            19. - +
            20. + 1 - :recoverable, :rememberable, :validatable + @requirements = Requirement.all
            21. -
            22. +
            23. - + end
            24. -
            25. - 1 +
            26. + - enum role: %i[administrator secretary professor student] +
            27. -
            28. +
            29. - end + # GET /requirements/1
            30. -
            -
            -
            - - -
            -
            -

            config/application.rb

            -

            - - 100.0% - - - lines covered -

            - - - -
            - 6 relevant lines. - 6 lines covered and - 0 lines missed. -
            - - +
            +
          223. + + -
          224. + -
            -    
              + # GET /requirements/1.json + +
            -
          225. +
          226. 1 - require_relative 'boot' + def show
          227. -
          228. +
          229. - + end
          230. -
          231. - 1 +
          232. + - require 'rails/all' +
          233. -
          234. +
          235. - + # GET /requirements/new
          236. -
          237. - +
          238. + 1 - # Require the gems listed in Gemfile, including any gems + def new
          239. -
          240. - +
          241. + 1 - # you've limited to :test, :development, or :production. + @requirement = Requirement.new
          242. -
          243. - 1 +
          244. + - Bundler.require(*Rails.groups) + end
          245. -
          246. +
          247. @@ -1856,529 +1967,447 @@

          248. -
          249. - 1 +
          250. + - module SecretariaPpgi + # GET /requirements/1/edit
          251. -
          252. +
          253. 1 - class Application < Rails::Application + def edit
          254. -
          255. +
          256. - # Initialize configuration defaults for originally generated Rails version. + end
          257. -
          258. - 1 +
          259. + - config.load_defaults 5.2 +
          260. -
          261. +
          262. - + # POST /requirements
          263. -
          264. +
          265. - # Settings in config/environments/* take precedence over those specified here. + # POST /requirements.json
          266. -
          267. - +
          268. + 1 - # Application configuration can go into files in config/initializers + def create
          269. -
          270. - +
          271. + 4 - # -- all .rb files in that directory are automatically loaded after loading + @requirement = Requirement.new(requirement_params)
          272. -
          273. +
          274. - # the framework and any gems in your application. +
          275. -
          276. - +
          277. + 4 - end + respond_to do |format|
          278. -
          279. - +
          280. + 4 - end + if @requirement.save
          281. - - -
            - - -
            -
            -

            config/boot.rb

            -

            - - 100.0% - - - lines covered -

            - - - -
            - 3 relevant lines. - 3 lines covered and - 0 lines missed. -
            - - +
            +
          282. + 4 + -
          283. + -
            -    
              + format.html { redirect_to @requirement, notice: 'Requisitos criados com sucesso!' } + +
            -
          284. - 1 +
          285. + 2 - ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../Gemfile', __dir__) + format.json { render :show, status: :created, location: @requirement }
          286. -
          287. +
          288. - + else
          289. -
          290. - 1 +
          291. + 4 - require 'bundler/setup' # Set up gems listed in the Gemfile. + format.html { render :new }
          292. -
          293. - 1 +
          294. + 2 - require 'bootsnap/setup' # Speed up boot time by caching expensive operations. + format.json { render json: @requirement.errors, status: :unprocessable_entity }
          295. - - -
            - - -
            -
            -

            config/environment.rb

            -

            - - 100.0% - - - lines covered -

            - - - -
            - 2 relevant lines. - 2 lines covered and - 0 lines missed. -
            - - - -
            - -
            -    
              -
              -
            1. +
            2. - # Load the Rails application. + end
            3. -
            4. - 1 +
            5. + - require_relative 'application' + end
            6. -
            7. +
            8. - + end
            9. -
            10. +
            11. - # Initialize the Rails application. +
            12. -
            13. +
            14. 1 - Rails.application.initialize! + def delete_document_attachment
            15. -
            -
            -
            - - -
            -
            -

            config/environments/test.rb

            -

            - - 100.0% - - - lines covered -

            - - - -
            - 13 relevant lines. - 13 lines covered and - 0 lines missed. -
            - - - -
            - -
            -    
              -
              -
            1. +
            2. 1 - Rails.application.configure do + @document = ActiveStorage::Attachment.find_by(id: params[:id])
            3. -
            4. - +
            5. + 1 - # Settings specified here will take precedence over those in config/application.rb. + @requirement_id = params[:requirement_id]
            6. -
            7. - +
            8. + 1 - + @document&.purge
            9. -
            10. - +
            11. + 1 - # The test environment is used exclusively to run your application's + redirect_to edit_requirement_path(@requirement_id)
            12. -
            13. +
            14. - # test suite. You never need to work with it otherwise. Remember that + end
            15. -
            16. +
            17. - # your test database is "scratch space" for the test suite and is wiped +
            18. -
            19. +
            20. - # and recreated between test runs. Don't rely on the data there! + # PATCH/PUT /requirements/1
            21. -
            22. - 1 +
            23. + - config.cache_classes = true + # PATCH/PUT /requirements/1.json
            24. -
            25. - +
            26. + 1 - + def update
            27. -
            28. - +
            29. + 4 - # Do not eager load code on boot. This avoids loading your whole application + respond_to do |format|
            30. -
            31. - +
            32. + 4 - # just for the purpose of running a single test. If you are using a tool that + if @requirement.update(requirement_params)
            33. -
            34. - +
            35. + 4 - # preloads Rails for running tests, you may have to set it to true. + format.html { redirect_to @requirement, notice: 'Requisitos atualizados com sucesso!' }
            36. -
            37. - 1 +
            38. + 2 - config.eager_load = false + format.json { render :show, status: :ok, location: @requirement }
            39. -
            40. +
            41. - + else
            42. -
            43. - +
            44. + 4 - # Configure public file server for tests with Cache-Control for performance. + format.html { render :edit }
            45. -
            46. - 1 +
            47. + 2 - config.public_file_server.enabled = true + format.json { render json: @requirement.errors, status: :unprocessable_entity }
            48. -
            49. - 1 +
            50. + - config.public_file_server.headers = { + end
            51. -
            52. +
            53. - 'Cache-Control' => "public, max-age=#{1.hour.to_i}" + end
            54. -
            55. +
            56. - } + end
            57. -
            58. +
            59. @@ -2389,161 +2418,150 @@

            60. -
            61. +
            62. - # Show full error reports and disable caching. + # DELETE /requirements/1
            63. -
            64. - 1 +
            65. + - config.consider_all_requests_local = true + # DELETE /requirements/1.json
            66. -
            67. +
            68. 1 - config.action_controller.perform_caching = false + def destroy
            69. -
            70. - +
            71. + 3 - + respond_to do |format|
            72. -
            73. - +
            74. + 3 - # Raise exceptions instead of rendering exception templates. + if @requirement.destroy
            75. -
            76. - 1 +
            77. + 4 - config.action_dispatch.show_exceptions = false + format.html { redirect_to requirements_url, notice: 'Requisitos excluídos com sucesso!' }
            78. -
            79. - +
            80. + 2 - + format.json { head :no_content }
            81. -
            82. +
            83. - # Disable request forgery protection in test environment. + else
            84. -
            85. - 1 +
            86. + 2 - config.action_controller.allow_forgery_protection = false + format.html { redirect_to requirements_url, notice: 'Erro: não foi possível excluir os requisitos!' }
            87. -
            88. - +
            89. + 1 - + format.json { head :no_content }
            90. -
            91. - - - +
            92. - - # Store uploaded files on the local file system in a temporary directory -
            93. -
              - -
              -
            94. - 1 - config.active_storage.service = :test + end
            95. -
            96. +
            97. - + end
            98. -
            99. - 1 +
            100. + - config.action_mailer.perform_caching = false + end
            101. -
            102. +
            103. @@ -2554,117 +2572,117 @@

            104. -
            105. - +
            106. + 1 - # Tell Action Mailer not to deliver emails to the real world. + private
            107. -
            108. +
            109. - # The :test delivery method accumulates sent emails in the + # Use callbacks to share common setup or constraints between actions.
            110. -
            111. - +
            112. + 1 - # ActionMailer::Base.deliveries array. + def set_requirement
            113. -
            114. - 1 +
            115. + 9 - config.action_mailer.delivery_method = :test + @requirement = Requirement.find(params[:id])
            116. -
            117. +
            118. - + end
            119. -
            120. +
            121. - # Print deprecation notices to the stderr. +
            122. -
            123. - 1 +
            124. + - config.active_support.deprecation = :stderr + # Never trust parameters from the scary internet, only allow the white list through.
            125. -
            126. - +
            127. + 1 - + def requirement_params
            128. -
            129. - +
            130. + 8 - # Raises error for missing translations + params.require(:requirement).permit(:title, :content, documents: [])
            131. -
            132. +
            133. - # config.action_view.raise_on_missing_translations = true + end
            134. -
            135. +
            136. @@ -2679,9 +2697,9 @@

            137. -
              +
              -

              config/initializers/application_controller_renderer.rb

              +

              app/controllers/sei_processes_controller.rb

              100.0% @@ -2693,8 +2711,8 @@

              - 0 relevant lines. - 0 lines covered and + 46 relevant lines. + 46 lines covered and 0 lines missed.
              @@ -2706,24 +2724,24 @@

                -
              1. - +
              2. + 1 - # Be sure to restart your server when you modify this file. + class SeiProcessesController < ApplicationController
              3. -
              4. - +
              5. + 1 - + before_action :set_sei_process, only: [:show, :edit, :update, :destroy]
              6. @@ -2734,7 +2752,7 @@

                - # ActiveSupport::Reloader.to_prepare do +

              @@ -2745,7 +2763,7 @@

              - # ApplicationController.renderer.defaults.merge!( + # GET /sei_processes

              @@ -2756,29 +2774,29 @@

              - # http_host: 'example.org', + # GET /sei_processes.json

              -
            138. - +
            139. + 1 - # https: false + def index
            140. -
            141. - +
            142. + 2 - # ) + @all_statuses = %w[Espera Aprovado Rejeitado]
            143. @@ -2789,54 +2807,34 @@

              - # end +

            - - -
            - - -
            -
            -

            config/initializers/assets.rb

            -

            - - 100.0% - - - lines covered -

            - - - -
            - 2 relevant lines. - 2 lines covered and - 0 lines missed. -
            - - +
            +
          296. + 2 + -
          297. + -
            -    
              + session[:statuses] = params[:statuses] || session[:statuses] || @all_statuses.zip([]).to_h + +
            -
          298. - +
          299. + 2 - # Be sure to restart your server when you modify this file. + @status_filter = session[:statuses].keys
          300. -
          301. +
          302. @@ -2847,791 +2845,667 @@

          303. -
          304. - +
          305. + 2 - # Version of your assets, change this if you want to expire all your assets. + if current_user.role == "administrator"
          306. -
          307. +
          308. 1 - Rails.application.config.assets.version = '1.0' + @sei_processes = SeiProcess.where(status: @status_filter)
          309. -
          310. +
          311. - + else
          312. -
          313. - +
          314. + 1 - # Add additional assets to the asset load path. + @my_processes = SeiProcess.where(user_id: current_user.id, status: @status_filter)
          315. -
          316. +
          317. - # Rails.application.config.assets.paths << Emoji.images_path + end
          318. -
          319. +
          320. - # Add Yarn node_modules folder to the asset load path. + end
          321. -
          322. - 1 +
          323. + - Rails.application.config.assets.paths << Rails.root.join('node_modules') +
          324. -
          325. +
          326. - + # GET /sei_processes/1
          327. -
          328. +
          329. - # Precompile additional assets. + # GET /sei_processes/1.json
          330. -
          331. - +
          332. + 1 - # application.js, application.css, and all non-JS/CSS in the app/assets + def show
          333. -
          334. +
          335. - # folder are already added. + end
          336. -
          337. +
          338. - # Rails.application.config.assets.precompile += %w( admin.js admin.css ) +
          339. - - -
            - - -
            -
            -

            config/initializers/backtrace_silencers.rb

            -

            - - 100.0% - - - lines covered -

            - - - -
            - 0 relevant lines. - 0 lines covered and - 0 lines missed. -
            - - - -
            - -
            -    
              -
              -
            1. +
            2. - # Be sure to restart your server when you modify this file. + # GET /sei_processes/new
            3. -
            4. - +
            5. + 1 - + def new
            6. -
            7. - +
            8. + 1 - # You can add backtrace silencers for libraries that you're using but don't wish to see in your backtraces. + @requirements = Requirement.find_by(title: 'Requisitos de Credenciamento')
            9. -
            10. - +
            11. + 1 - # Rails.backtrace_cleaner.add_silencer { |line| line =~ /my_noisy_library/ } + @sei_process = SeiProcess.new
            12. -
            13. +
            14. - + end
            15. -
            16. +
            17. - # You can also remove all the silencers if you're trying to debug a problem that might stem from framework code. +
            18. -
            19. +
            20. - # Rails.backtrace_cleaner.remove_silencers! + # GET /sei_processes/1/edit
            21. -
            -
            -
            - - -
            -
            -

            config/initializers/content_security_policy.rb

            -

            - - 100.0% - - - lines covered -

            - - - -
            - 0 relevant lines. - 0 lines covered and - 0 lines missed. -
            - - - -
            - -
            -    
              -
              -
            1. - +
            2. + 1 - # Be sure to restart your server when you modify this file. + def edit
            3. -
            4. +
            5. - + end
            6. -
            7. +
            8. - # Define an application-wide content security policy +
            9. -
            10. +
            11. - # For further information see the following documentation + # POST /sei_processes
            12. -
            13. +
            14. - # https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy + # POST /sei_processes.json
            15. -
            16. - +
            17. + 1 - + def create
            18. -
            19. - +
            20. + 4 - # Rails.application.config.content_security_policy do |policy| + mandatory_params = {'user_id' => current_user.id, 'status' => 'Espera', 'code' => '0'}
            21. -
            22. - +
            23. + 4 - # policy.default_src :self, :https + @sei_process = SeiProcess.new(sei_process_params.merge(mandatory_params))
            24. -
            25. +
            26. - # policy.font_src :self, :https, :data +
            27. -
            28. - +
            29. + 4 - # policy.img_src :self, :https, :data + respond_to do |format|
            30. -
            31. - +
            32. + 4 - # policy.object_src :none + if @sei_process.save
            33. -
            34. - +
            35. + 6 - # policy.script_src :self, :https + format.html { redirect_to sei_processes_url, notice: 'Processo aberto com sucesso!' }
            36. -
            37. - +
            38. + 3 - # policy.style_src :self, :https + format.json { render :index, status: :created, location: @sei_process }
            39. -
            40. +
            41. - + else
            42. -
            43. - +
            44. + 2 - # # Specify URI for violation reports + format.html { render :new }
            45. -
            46. - +
            47. + 1 - # # policy.report_uri "/csp-violation-report-endpoint" + format.json { render json: @sei_process.errors, status: :unprocessable_entity }
            48. -
            49. +
            50. - # end + end
            51. -
            52. +
            53. - + end
            54. -
            55. +
            56. - # If you are using UJS then enable automatic nonce generation + end
            57. -
            58. +
            59. - # Rails.application.config.content_security_policy_nonce_generator = -> request { SecureRandom.base64(16) } +
            60. -
            61. +
            62. - + # PATCH/PUT /sei_processes/1
            63. -
            64. +
            65. - # Report CSP violations to a specified URI + # PATCH/PUT /sei_processes/1.json
            66. -
            67. - +
            68. + 1 - # For further information see the following documentation: + def update
            69. -
            70. - +
            71. + 4 - # https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy-Report-Only + respond_to do |format|
            72. -
            73. - +
            74. + 4 - # Rails.application.config.content_security_policy_report_only = true + if @sei_process.update(sei_process_params)
            75. -
            -
            -
            - - -
            -
            -

            config/initializers/cookies_serializer.rb

            -

            - - 100.0% - - - lines covered -

            - - - -
            - 1 relevant lines. - 1 lines covered and - 0 lines missed. -
            - - - -
            - -
            -    
              -
              -
            1. - +
            2. + 6 - # Be sure to restart your server when you modify this file. + format.html { redirect_to sei_processes_url, notice: 'Processo atualizado com sucesso!' }
            3. -
            4. - +
            5. + 3 - + format.json { render :index, status: :ok, location: @sei_process }
            6. -
            7. +
            8. - # Specify a serializer for the signed and encrypted cookie jars. +
            9. -
            10. - +
            11. + 3 - # Valid options are :json, :marshal, and :hybrid. + if (@sei_process.status == 'Aprovado') && @sei_process.documents.attached?
            12. -
            13. +
            14. 1 - Rails.application.config.action_dispatch.cookies_serializer = :json + accreditation_instance = Accreditation.find_by(sei_process: @sei_process.id)
            15. -
            -
            -
            - - -
            -
            -

            config/initializers/devise.rb

            -

            - - 100.0% - - - lines covered -

            - - - -
            - 13 relevant lines. - 13 lines covered and - 0 lines missed. -
            - - - -
            - -
            -    
              -
              -
            1. - +
            2. + 1 - # frozen_string_literal: true + if accreditation_instance == nil
            3. -
            4. - +
            5. + 1 - + Accreditation.create!(user_id: @sei_process.user_id, sei_process_id: @sei_process.id)
            6. -
            7. +
            8. - # Use this hook to configure devise mailer, warden hooks and so forth. + end
            9. -
            10. +
            11. - # Many of these configuration options can be set straight in your model. + end
            12. -
            13. - 1 +
            14. + - Devise.setup do |config| +
            15. -
            16. +
            17. - # The secret key used by Devise. Devise uses this key to generate + else
            18. -
            19. - +
            20. + 2 - # random tokens. Changing this key will render invalid all existing + format.html { render :edit }
            21. -
            22. - +
            23. + 1 - # confirmation, reset password and unlock tokens in the database. + format.json { render json: @sei_process.errors, status: :unprocessable_entity }
            24. -
            25. +
            26. - # Devise will use the `secret_key_base` as its `secret_key` + end
            27. -
            28. +
            29. - # by default. You can change it below and use your own secret key. + end
            30. -
            31. +
            32. - # config.secret_key = '53c9f741be418fcb535205b1faaad3062f2fb772dcf8b618c3fe37a03164092b11cce7e2fd0b2f88d17ebece35eac91546f6f987a3c739ff3681aa5721b55f8a' + end
            33. -
            34. +
            35. @@ -3642,348 +3516,12689 @@

            36. -
            37. +
            38. - # ==> Controller configuration + # DELETE /sei_processes/1
            39. -
            40. +
            41. - # Configure the parent class to the devise controllers. + # DELETE /sei_processes/1.json
            42. -
            43. - +
            44. + 1 - # config.parent_controller = 'DeviseController' + def destroy
            45. -
            46. - +
            47. + 3 - + respond_to do |format|
            48. -
            49. - +
            50. + 3 - # ==> Mailer Configuration + if @sei_process.destroy
            51. -
            52. - +
            53. + 4 - # Configure the e-mail address which will be shown in Devise::Mailer, + format.html { redirect_to sei_processes_url, notice: 'Processo excluído com sucesso!' }
            54. -
            55. - +
            56. + 2 - # note that it will be overwritten if you use your own mailer class + format.json { head :no_content }
            57. -
            58. +
            59. - # with default "from" parameter. + else
            60. -
            61. - 1 +
            62. + 2 - config.mailer_sender = 'please-change-me-at-config-initializers-devise@example.com' + format.html { redirect_to sei_processes_url, notice: 'Erro: não foi possível excluir o processo!' }
            63. -
            64. - +
            65. + 1 - + format.json { head :no_content }
            66. -
            67. +
            68. - # Configure the class responsible to send e-mails. + end
            69. -
            70. +
            71. - # config.mailer = 'Devise::Mailer' + end
            72. -
            73. +
            74. - + end
            75. -
            76. +
            77. - # Configure the parent class responsible to send e-mails. +
            78. -
            79. - +
            80. + 1 - # config.parent_mailer = 'ActionMailer::Base' + private
            81. -
            82. +
            83. - + # Use callbacks to share common setup or constraints between actions.
            84. -
            85. - +
            86. + 1 - # ==> ORM configuration + def set_sei_process
            87. -
            88. - +
            89. + 9 - # Load and configure the ORM. Supports :active_record (default) and + @sei_process = SeiProcess.find(params[:id])
            90. -
            91. +
            92. - # :mongoid (bson_ext recommended) by default. Other ORMs may be + end
            93. -
            94. +
            95. - # available as additional gems. +
            96. -
            97. - 1 +
            98. + - require 'devise/orm/active_record' + # Never trust parameters from the scary internet, only allow the white list through.
            99. -
            100. - +
            101. + 1 - + def sei_process_params
            102. -
            103. - +
            104. + 8 - # ==> Configuration for any authentication mechanism + params.require(:sei_process).permit(:user_id, :status, :code, documents: [])
            105. -
            106. +
            107. - # Configure which keys are used when authenticating a user. The default is + end
            108. -
            109. +
            110. - # just :email. You can configure it to use [:username, :subdomain], so for + end
            111. -
              -
            112. +
            +
            +
            + + +
            +
            +

            app/helpers/accreditations_helper.rb

            +

            + + 100.0% + + + lines covered +

            + + + +
            + 1 relevant lines. + 1 lines covered and + 0 lines missed. +
            + + + +
            + +
            +    
              + +
              +
            1. + 1 + + + + + module AccreditationsHelper +
            2. +
              + +
              +
            3. + + + + + + end +
            4. +
              + +
            +
            +
            + + +
            +
            +

            app/helpers/application_helper.rb

            +

            + + 100.0% + + + lines covered +

            + + + +
            + 1 relevant lines. + 1 lines covered and + 0 lines missed. +
            + + + +
            + +
            +    
              + +
              +
            1. + 1 + + + + + module ApplicationHelper +
            2. +
              + +
              +
            3. + + + + + + end +
            4. +
              + +
            +
            +
            + + +
            +
            +

            app/helpers/home_helper.rb

            +

            + + 100.0% + + + lines covered +

            + + + +
            + 1 relevant lines. + 1 lines covered and + 0 lines missed. +
            + + + +
            + +
            +    
              + +
              +
            1. + 1 + + + + + module HomeHelper +
            2. +
              + +
              +
            3. + + + + + + end +
            4. +
              + +
            +
            +
            + + +
            +
            +

            app/helpers/requirements_helper.rb

            +

            + + 100.0% + + + lines covered +

            + + + +
            + 1 relevant lines. + 1 lines covered and + 0 lines missed. +
            + + + +
            + +
            +    
              + +
              +
            1. + 1 + + + + + module RequirementsHelper +
            2. +
              + +
              +
            3. + + + + + + end +
            4. +
              + +
            +
            +
            + + +
            +
            +

            app/helpers/sei_processes_helper.rb

            +

            + + 100.0% + + + lines covered +

            + + + +
            + 1 relevant lines. + 1 lines covered and + 0 lines missed. +
            + + + +
            + +
            +    
              + +
              +
            1. + 1 + + + + + module SeiProcessesHelper +
            2. +
              + +
              +
            3. + + + + + + end +
            4. +
              + +
            +
            +
            + + +
            +
            +

            app/models/accreditation.rb

            +

            + + 86.96% + + + lines covered +

            + + + +
            + 23 relevant lines. + 20 lines covered and + 3 lines missed. +
            + + + +
            + +
            +    
              + +
              +
            1. + 1 + + + + + class Accreditation < ApplicationRecord +
            2. +
              + +
              +
            3. + 1 + + + + + belongs_to :user +
            4. +
              + +
              +
            5. + 1 + + + + + belongs_to :sei_process +
            6. +
              + +
              +
            7. + 1 + + + + + validates :sei_process, uniqueness: true +
            8. +
              + +
              +
            9. + + + + + + +
            10. +
              + +
              +
            11. + 1 + + + + + validate :check_role, on: [:create, :update] +
            12. +
              + +
              +
            13. + 1 + + + + + def current_user_is_admin +
            14. +
              + +
              +
            15. + 19 + + + + + Current.user != nil && Current.user.role == 'administrator' +
            16. +
              + +
              +
            17. + + + + + + end +
            18. +
              + +
              +
            19. + 1 + + + + + def check_role +
            20. +
              + +
              +
            21. + 16 + + + + + unless current_user_is_admin +
            22. +
              + +
              +
            23. + + + + + + self.errors.add(:base, 'Usuário sem permissão') +
            24. +
              + +
              +
            25. + + + + + + return false +
            26. +
              + +
              +
            27. + + + + + + end +
            28. +
              + +
              +
            29. + 16 + + + + + true +
            30. +
              + +
              +
            31. + + + + + + end +
            32. +
              + +
              +
            33. + + + + + + +
            34. +
              + +
              +
            35. + 1 + + + + + validate :check_date, on: :update +
            36. +
              + +
              +
            37. + 1 + + + + + def check_date +
            38. +
              + +
              +
            39. + 2 + + + + + if (start_date == nil) || (end_date == nil) || (end_date < start_date) +
            40. +
              + +
              +
            41. + 1 + + + + + self.errors.add(:end_date, 'inválida') +
            42. +
              + +
              +
            43. + 1 + + + + + return false +
            44. +
              + +
              +
            45. + + + + + + end +
            46. +
              + +
              +
            47. + 1 + + + + + true +
            48. +
              + +
              +
            49. + + + + + + end +
            50. +
              + +
              +
            51. + + + + + + +
            52. +
              + +
              +
            53. + 1 + + + + + before_destroy :check_permission +
            54. +
              + +
              +
            55. + 1 + + + + + def allow_deletion! +
            56. +
              + +
              +
            57. + + + + + + @allow_deletion = true +
            58. +
              + +
              +
            59. + + + + + + end +
            60. +
              + +
              +
            61. + 1 + + + + + def check_permission +
            62. +
              + +
              +
            63. + 3 + + + + + throw(:abort) unless @allow_deletion || current_user_is_admin +
            64. +
              + +
              +
            65. + + + + + + end +
            66. +
              + +
              +
            67. + + + + + + end +
            68. +
              + +
            +
            +
            + + +
            +
            +

            app/models/application_record.rb

            +

            + + 100.0% + + + lines covered +

            + + + +
            + 2 relevant lines. + 2 lines covered and + 0 lines missed. +
            + + + +
            + +
            +    
              + +
              +
            1. + 1 + + + + + class ApplicationRecord < ActiveRecord::Base +
            2. +
              + +
              +
            3. + 1 + + + + + self.abstract_class = true +
            4. +
              + +
              +
            5. + + + + + + end +
            6. +
              + +
            +
            +
            + + +
            +
            +

            app/models/requirement.rb

            +

            + + 94.12% + + + lines covered +

            + + + +
            + 17 relevant lines. + 16 lines covered and + 1 lines missed. +
            + + + +
            + +
            +    
              + +
              +
            1. + 1 + + + + + class Requirement < ApplicationRecord +
            2. +
              + +
              +
            3. + 1 + + + + + validates :title, presence: true, uniqueness: true +
            4. +
              + +
              +
            5. + 1 + + + + + has_many_attached :documents +
            6. +
              + +
              +
            7. + + + + + + +
            8. +
              + +
              +
            9. + 1 + + + + + validate :check_role, on: [:create, :update] +
            10. +
              + +
              +
            11. + 1 + + + + + def current_user_is_admin +
            12. +
              + +
              +
            13. + 26 + + + + + Current.user != nil && Current.user.role == 'administrator' +
            14. +
              + +
              +
            15. + + + + + + end +
            16. +
              + +
              +
            17. + 1 + + + + + def check_role +
            18. +
              + +
              +
            19. + 23 + + + + + unless current_user_is_admin +
            20. +
              + +
              +
            21. + 2 + + + + + self.errors.add(:base, 'Usuário sem permissão') +
            22. +
              + +
              +
            23. + 2 + + + + + return false +
            24. +
              + +
              +
            25. + + + + + + end +
            26. +
              + +
              +
            27. + 21 + + + + + true +
            28. +
              + +
              +
            29. + + + + + + end +
            30. +
              + +
              +
            31. + + + + + + +
            32. +
              + +
              +
            33. + 1 + + + + + before_destroy :check_permission +
            34. +
              + +
              +
            35. + 1 + + + + + def allow_deletion! +
            36. +
              + +
              +
            37. + + + + + + @allow_deletion = true +
            38. +
              + +
              +
            39. + + + + + + end +
            40. +
              + +
              +
            41. + 1 + + + + + def check_permission +
            42. +
              + +
              +
            43. + 3 + + + + + unless @allow_deletion || current_user_is_admin +
            44. +
              + +
              +
            45. + 1 + + + + + throw(:abort) +
            46. +
              + +
              +
            47. + + + + + + end +
            48. +
              + +
              +
            49. + + + + + + end +
            50. +
              + +
              +
            51. + + + + + + end +
            52. +
              + +
            +
            +
            + + +
            +
            +

            app/models/sei_process.rb

            +

            + + 95.83% + + + lines covered +

            + + + +
            + 24 relevant lines. + 23 lines covered and + 1 lines missed. +
            + + + +
            + +
            +    
              + +
              +
            1. + 1 + + + + + class SeiProcess < ApplicationRecord +
            2. +
              + +
              +
            3. + 1 + + + + + belongs_to :user +
            4. +
              + +
              +
            5. + 1 + + + + + has_many_attached :documents +
            6. +
              + +
              +
            7. + 1 + + + + + validates :documents, attached: true +
            8. +
              + +
              +
            9. + + + + + + +
            10. +
              + +
              +
            11. + 1 + + + + + enum status: { +
            12. +
              + +
              +
            13. + + + + + + Espera: 0, +
            14. +
              + +
              +
            15. + + + + + + Aprovado: 1, +
            16. +
              + +
              +
            17. + + + + + + Rejeitado: 2 +
            18. +
              + +
              +
            19. + + + + + + } +
            20. +
              + +
              +
            21. + + + + + + +
            22. +
              + +
              +
            23. + 1 + + + + + def current_user_is_admin +
            24. +
              + +
              +
            25. + 9 + + + + + Current.user != nil && Current.user.role == 'administrator' +
            26. +
              + +
              +
            27. + + + + + + end +
            28. +
              + +
              +
            29. + + + + + + +
            30. +
              + +
              +
            31. + 1 + + + + + validate :check_signed_in, on: :create +
            32. +
              + +
              +
            33. + 1 + + + + + def check_signed_in +
            34. +
              + +
              +
            35. + 30 + + + + + if Current.user == nil +
            36. +
              + +
              +
            37. + 1 + + + + + self.errors.add(:base, 'Usuário sem permissão') +
            38. +
              + +
              +
            39. + 1 + + + + + return false +
            40. +
              + +
              +
            41. + + + + + + end +
            42. +
              + +
              +
            43. + 29 + + + + + true +
            44. +
              + +
              +
            45. + + + + + + end +
            46. +
              + +
              +
            47. + + + + + + +
            48. +
              + +
              +
            49. + 1 + + + + + validate :check_role, on: :update +
            50. +
              + +
              +
            51. + 1 + + + + + def check_role +
            52. +
              + +
              +
            53. + 6 + + + + + unless current_user_is_admin +
            54. +
              + +
              +
            55. + 1 + + + + + self.errors.add(:base, 'Usuário sem permissão') +
            56. +
              + +
              +
            57. + 1 + + + + + return false +
            58. +
              + +
              +
            59. + + + + + + end +
            60. +
              + +
              +
            61. + 5 + + + + + true +
            62. +
              + +
              +
            63. + + + + + + end +
            64. +
              + +
              +
            65. + + + + + + +
            66. +
              + +
              +
            67. + 1 + + + + + before_destroy :check_permission +
            68. +
              + +
              +
            69. + 1 + + + + + def allow_deletion! +
            70. +
              + +
              +
            71. + + + + + + @allow_deletion = true +
            72. +
              + +
              +
            73. + + + + + + end +
            74. +
              + +
              +
            75. + 1 + + + + + def check_permission +
            76. +
              + +
              +
            77. + 3 + + + + + throw(:abort) unless @allow_deletion || current_user_is_admin +
            78. +
              + +
              +
            79. + + + + + + end +
            80. +
              + +
              +
            81. + + + + + + end +
            82. +
              + +
            +
            +
            + + +
            +
            +

            app/models/user.rb

            +

            + + 100.0% + + + lines covered +

            + + + +
            + 5 relevant lines. + 5 lines covered and + 0 lines missed. +
            + + + +
            + +
            +    
              + +
              +
            1. + + + + + + # frozen_string_literal: true +
            2. +
              + +
              +
            3. + + + + + + +
            4. +
              + +
              +
            5. + 1 + + + + + class User < ApplicationRecord +
            6. +
              + +
              +
            7. + 1 + + + + + validates :full_name, presence: true +
            8. +
              + +
              +
            9. + 1 + + + + + validates :role, presence: true +
            10. +
              + +
              +
            11. + + + + + + +
            12. +
              + +
              +
            13. + + + + + + # Include default devise modules. Others available are: +
            14. +
              + +
              +
            15. + + + + + + # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable +
            16. +
              + +
              +
            17. + 1 + + + + + devise :database_authenticatable, :registerable, +
            18. +
              + +
              +
            19. + + + + + + :recoverable, :rememberable, :validatable +
            20. +
              + +
              +
            21. + + + + + + +
            22. +
              + +
              +
            23. + 1 + + + + + enum role: %i[administrator secretary professor student] +
            24. +
              + +
              +
            25. + + + + + + end +
            26. +
              + +
            +
            +
            + + +
            +
            +

            config/application.rb

            +

            + + 100.0% + + + lines covered +

            + + + +
            + 6 relevant lines. + 6 lines covered and + 0 lines missed. +
            + + + +
            + +
            +    
              + +
              +
            1. + 1 + + + + + require_relative 'boot' +
            2. +
              + +
              +
            3. + + + + + + +
            4. +
              + +
              +
            5. + 1 + + + + + require 'rails/all' +
            6. +
              + +
              +
            7. + + + + + + +
            8. +
              + +
              +
            9. + + + + + + # Require the gems listed in Gemfile, including any gems +
            10. +
              + +
              +
            11. + + + + + + # you've limited to :test, :development, or :production. +
            12. +
              + +
              +
            13. + 1 + + + + + Bundler.require(*Rails.groups) +
            14. +
              + +
              +
            15. + + + + + + +
            16. +
              + +
              +
            17. + 1 + + + + + module SecretariaPpgi +
            18. +
              + +
              +
            19. + 1 + + + + + class Application < Rails::Application +
            20. +
              + +
              +
            21. + + + + + + # Initialize configuration defaults for originally generated Rails version. +
            22. +
              + +
              +
            23. + 1 + + + + + config.load_defaults 5.2 +
            24. +
              + +
              +
            25. + + + + + + +
            26. +
              + +
              +
            27. + + + + + + # Settings in config/environments/* take precedence over those specified here. +
            28. +
              + +
              +
            29. + + + + + + # Application configuration can go into files in config/initializers +
            30. +
              + +
              +
            31. + + + + + + # -- all .rb files in that directory are automatically loaded after loading +
            32. +
              + +
              +
            33. + + + + + + # the framework and any gems in your application. +
            34. +
              + +
              +
            35. + + + + + + end +
            36. +
              + +
              +
            37. + + + + + + end +
            38. +
              + +
            +
            +
            + + +
            +
            +

            config/boot.rb

            +

            + + 100.0% + + + lines covered +

            + + + +
            + 3 relevant lines. + 3 lines covered and + 0 lines missed. +
            + + + +
            + +
            +    
              + +
              +
            1. + 1 + + + + + ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../Gemfile', __dir__) +
            2. +
              + +
              +
            3. + + + + + + +
            4. +
              + +
              +
            5. + 1 + + + + + require 'bundler/setup' # Set up gems listed in the Gemfile. +
            6. +
              + +
              +
            7. + 1 + + + + + require 'bootsnap/setup' # Speed up boot time by caching expensive operations. +
            8. +
              + +
            +
            +
            + + +
            +
            +

            config/environment.rb

            +

            + + 100.0% + + + lines covered +

            + + + +
            + 2 relevant lines. + 2 lines covered and + 0 lines missed. +
            + + + +
            + +
            +    
              + +
              +
            1. + + + + + + # Load the Rails application. +
            2. +
              + +
              +
            3. + 1 + + + + + require_relative 'application' +
            4. +
              + +
              +
            5. + + + + + + +
            6. +
              + +
              +
            7. + + + + + + # Initialize the Rails application. +
            8. +
              + +
              +
            9. + 1 + + + + + Rails.application.initialize! +
            10. +
              + +
            +
            +
            + + +
            +
            +

            config/environments/test.rb

            +

            + + 100.0% + + + lines covered +

            + + + +
            + 13 relevant lines. + 13 lines covered and + 0 lines missed. +
            + + + +
            + +
            +    
              + +
              +
            1. + 1 + + + + + Rails.application.configure do +
            2. +
              + +
              +
            3. + + + + + + # Settings specified here will take precedence over those in config/application.rb. +
            4. +
              + +
              +
            5. + + + + + + +
            6. +
              + +
              +
            7. + + + + + + # The test environment is used exclusively to run your application's +
            8. +
              + +
              +
            9. + + + + + + # test suite. You never need to work with it otherwise. Remember that +
            10. +
              + +
              +
            11. + + + + + + # your test database is "scratch space" for the test suite and is wiped +
            12. +
              + +
              +
            13. + + + + + + # and recreated between test runs. Don't rely on the data there! +
            14. +
              + +
              +
            15. + 1 + + + + + config.cache_classes = true +
            16. +
              + +
              +
            17. + + + + + + +
            18. +
              + +
              +
            19. + + + + + + # Do not eager load code on boot. This avoids loading your whole application +
            20. +
              + +
              +
            21. + + + + + + # just for the purpose of running a single test. If you are using a tool that +
            22. +
              + +
              +
            23. + + + + + + # preloads Rails for running tests, you may have to set it to true. +
            24. +
              + +
              +
            25. + 1 + + + + + config.eager_load = false +
            26. +
              + +
              +
            27. + + + + + + +
            28. +
              + +
              +
            29. + + + + + + # Configure public file server for tests with Cache-Control for performance. +
            30. +
              + +
              +
            31. + 1 + + + + + config.public_file_server.enabled = true +
            32. +
              + +
              +
            33. + 1 + + + + + config.public_file_server.headers = { +
            34. +
              + +
              +
            35. + + + + + + 'Cache-Control' => "public, max-age=#{1.hour.to_i}" +
            36. +
              + +
              +
            37. + + + + + + } +
            38. +
              + +
              +
            39. + + + + + + +
            40. +
              + +
              +
            41. + + + + + + # Show full error reports and disable caching. +
            42. +
              + +
              +
            43. + 1 + + + + + config.consider_all_requests_local = true +
            44. +
              + +
              +
            45. + 1 + + + + + config.action_controller.perform_caching = false +
            46. +
              + +
              +
            47. + + + + + + +
            48. +
              + +
              +
            49. + + + + + + # Raise exceptions instead of rendering exception templates. +
            50. +
              + +
              +
            51. + 1 + + + + + config.action_dispatch.show_exceptions = false +
            52. +
              + +
              +
            53. + + + + + + +
            54. +
              + +
              +
            55. + + + + + + # Disable request forgery protection in test environment. +
            56. +
              + +
              +
            57. + 1 + + + + + config.action_controller.allow_forgery_protection = false +
            58. +
              + +
              +
            59. + + + + + + +
            60. +
              + +
              +
            61. + + + + + + # Store uploaded files on the local file system in a temporary directory +
            62. +
              + +
              +
            63. + 1 + + + + + config.active_storage.service = :test +
            64. +
              + +
              +
            65. + + + + + + +
            66. +
              + +
              +
            67. + 1 + + + + + config.action_mailer.perform_caching = false +
            68. +
              + +
              +
            69. + + + + + + +
            70. +
              + +
              +
            71. + + + + + + # Tell Action Mailer not to deliver emails to the real world. +
            72. +
              + +
              +
            73. + + + + + + # The :test delivery method accumulates sent emails in the +
            74. +
              + +
              +
            75. + + + + + + # ActionMailer::Base.deliveries array. +
            76. +
              + +
              +
            77. + 1 + + + + + config.action_mailer.delivery_method = :test +
            78. +
              + +
              +
            79. + + + + + + +
            80. +
              + +
              +
            81. + + + + + + # Print deprecation notices to the stderr. +
            82. +
              + +
              +
            83. + 1 + + + + + config.active_support.deprecation = :stderr +
            84. +
              + +
              +
            85. + + + + + + +
            86. +
              + +
              +
            87. + + + + + + # Raises error for missing translations +
            88. +
              + +
              +
            89. + + + + + + # config.action_view.raise_on_missing_translations = true +
            90. +
              + +
              +
            91. + + + + + + end +
            92. +
              + +
            +
            +
            + + +
            +
            +

            config/initializers/application_controller_renderer.rb

            +

            + + 100.0% + + + lines covered +

            + + + +
            + 0 relevant lines. + 0 lines covered and + 0 lines missed. +
            + + + +
            + +
            +    
              + +
              +
            1. + + + + + + # Be sure to restart your server when you modify this file. +
            2. +
              + +
              +
            3. + + + + + + +
            4. +
              + +
              +
            5. + + + + + + # ActiveSupport::Reloader.to_prepare do +
            6. +
              + +
              +
            7. + + + + + + # ApplicationController.renderer.defaults.merge!( +
            8. +
              + +
              +
            9. + + + + + + # http_host: 'example.org', +
            10. +
              + +
              +
            11. + + + + + + # https: false +
            12. +
              + +
              +
            13. + + + + + + # ) +
            14. +
              + +
              +
            15. + + + + + + # end +
            16. +
              + +
            +
            +
            + + +
            +
            +

            config/initializers/assets.rb

            +

            + + 100.0% + + + lines covered +

            + + + +
            + 2 relevant lines. + 2 lines covered and + 0 lines missed. +
            + + + +
            + +
            +    
              + +
              +
            1. + + + + + + # Be sure to restart your server when you modify this file. +
            2. +
              + +
              +
            3. + + + + + + +
            4. +
              + +
              +
            5. + + + + + + # Version of your assets, change this if you want to expire all your assets. +
            6. +
              + +
              +
            7. + 1 + + + + + Rails.application.config.assets.version = '1.0' +
            8. +
              + +
              +
            9. + + + + + + +
            10. +
              + +
              +
            11. + + + + + + # Add additional assets to the asset load path. +
            12. +
              + +
              +
            13. + + + + + + # Rails.application.config.assets.paths << Emoji.images_path +
            14. +
              + +
              +
            15. + + + + + + # Add Yarn node_modules folder to the asset load path. +
            16. +
              + +
              +
            17. + 1 + + + + + Rails.application.config.assets.paths << Rails.root.join('node_modules') +
            18. +
              + +
              +
            19. + + + + + + +
            20. +
              + +
              +
            21. + + + + + + # Precompile additional assets. +
            22. +
              + +
              +
            23. + + + + + + # application.js, application.css, and all non-JS/CSS in the app/assets +
            24. +
              + +
              +
            25. + + + + + + # folder are already added. +
            26. +
              + +
              +
            27. + + + + + + # Rails.application.config.assets.precompile += %w( admin.js admin.css ) +
            28. +
              + +
            +
            +
            + + +
            +
            +

            config/initializers/backtrace_silencers.rb

            +

            + + 100.0% + + + lines covered +

            + + + +
            + 0 relevant lines. + 0 lines covered and + 0 lines missed. +
            + + + +
            + +
            +    
              + +
              +
            1. + + + + + + # Be sure to restart your server when you modify this file. +
            2. +
              + +
              +
            3. + + + + + + +
            4. +
              + +
              +
            5. + + + + + + # You can add backtrace silencers for libraries that you're using but don't wish to see in your backtraces. +
            6. +
              + +
              +
            7. + + + + + + # Rails.backtrace_cleaner.add_silencer { |line| line =~ /my_noisy_library/ } +
            8. +
              + +
              +
            9. + + + + + + +
            10. +
              + +
              +
            11. + + + + + + # You can also remove all the silencers if you're trying to debug a problem that might stem from framework code. +
            12. +
              + +
              +
            13. + + + + + + # Rails.backtrace_cleaner.remove_silencers! +
            14. +
              + +
            +
            +
            + + +
            +
            +

            config/initializers/content_security_policy.rb

            +

            + + 100.0% + + + lines covered +

            + + + +
            + 0 relevant lines. + 0 lines covered and + 0 lines missed. +
            + + + +
            + +
            +    
              + +
              +
            1. + + + + + + # Be sure to restart your server when you modify this file. +
            2. +
              + +
              +
            3. + + + + + + +
            4. +
              + +
              +
            5. + + + + + + # Define an application-wide content security policy +
            6. +
              + +
              +
            7. + + + + + + # For further information see the following documentation +
            8. +
              + +
              +
            9. + + + + + + # https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy +
            10. +
              + +
              +
            11. + + + + + + +
            12. +
              + +
              +
            13. + + + + + + # Rails.application.config.content_security_policy do |policy| +
            14. +
              + +
              +
            15. + + + + + + # policy.default_src :self, :https +
            16. +
              + +
              +
            17. + + + + + + # policy.font_src :self, :https, :data +
            18. +
              + +
              +
            19. + + + + + + # policy.img_src :self, :https, :data +
            20. +
              + +
              +
            21. + + + + + + # policy.object_src :none +
            22. +
              + +
              +
            23. + + + + + + # policy.script_src :self, :https +
            24. +
              + +
              +
            25. + + + + + + # policy.style_src :self, :https +
            26. +
              + +
              +
            27. + + + + + + +
            28. +
              + +
              +
            29. + + + + + + # # Specify URI for violation reports +
            30. +
              + +
              +
            31. + + + + + + # # policy.report_uri "/csp-violation-report-endpoint" +
            32. +
              + +
              +
            33. + + + + + + # end +
            34. +
              + +
              +
            35. + + + + + + +
            36. +
              + +
              +
            37. + + + + + + # If you are using UJS then enable automatic nonce generation +
            38. +
              + +
              +
            39. + + + + + + # Rails.application.config.content_security_policy_nonce_generator = -> request { SecureRandom.base64(16) } +
            40. +
              + +
              +
            41. + + + + + + +
            42. +
              + +
              +
            43. + + + + + + # Report CSP violations to a specified URI +
            44. +
              + +
              +
            45. + + + + + + # For further information see the following documentation: +
            46. +
              + +
              +
            47. + + + + + + # https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy-Report-Only +
            48. +
              + +
              +
            49. + + + + + + # Rails.application.config.content_security_policy_report_only = true +
            50. +
              + +
            +
            +
            + + +
            +
            +

            config/initializers/cookies_serializer.rb

            +

            + + 100.0% + + + lines covered +

            + + + +
            + 1 relevant lines. + 1 lines covered and + 0 lines missed. +
            + + + +
            + +
            +    
              + +
              +
            1. + + + + + + # Be sure to restart your server when you modify this file. +
            2. +
              + +
              +
            3. + + + + + + +
            4. +
              + +
              +
            5. + + + + + + # Specify a serializer for the signed and encrypted cookie jars. +
            6. +
              + +
              +
            7. + + + + + + # Valid options are :json, :marshal, and :hybrid. +
            8. +
              + +
              +
            9. + 1 + + + + + Rails.application.config.action_dispatch.cookies_serializer = :json +
            10. +
              + +
            +
            +
            + + +
            +
            +

            config/initializers/devise.rb

            +

            + + 100.0% + + + lines covered +

            + + + +
            + 13 relevant lines. + 13 lines covered and + 0 lines missed. +
            + + + +
            + +
            +    
              + +
              +
            1. + + + + + + # frozen_string_literal: true +
            2. +
              + +
              +
            3. + + + + + + +
            4. +
              + +
              +
            5. + + + + + + # Use this hook to configure devise mailer, warden hooks and so forth. +
            6. +
              + +
              +
            7. + + + + + + # Many of these configuration options can be set straight in your model. +
            8. +
              + +
              +
            9. + 1 + + + + + Devise.setup do |config| +
            10. +
              + +
              +
            11. + + + + + + # The secret key used by Devise. Devise uses this key to generate +
            12. +
              + +
              +
            13. + + + + + + # random tokens. Changing this key will render invalid all existing +
            14. +
              + +
              +
            15. + + + + + + # confirmation, reset password and unlock tokens in the database. +
            16. +
              + +
              +
            17. + + + + + + # Devise will use the `secret_key_base` as its `secret_key` +
            18. +
              + +
              +
            19. + + + + + + # by default. You can change it below and use your own secret key. +
            20. +
              + +
              +
            21. + + + + + + # config.secret_key = '53c9f741be418fcb535205b1faaad3062f2fb772dcf8b618c3fe37a03164092b11cce7e2fd0b2f88d17ebece35eac91546f6f987a3c739ff3681aa5721b55f8a' +
            22. +
              + +
              +
            23. + + + + + + +
            24. +
              + +
              +
            25. + + + + + + # ==> Controller configuration +
            26. +
              + +
              +
            27. + + + + + + # Configure the parent class to the devise controllers. +
            28. +
              + +
              +
            29. + + + + + + # config.parent_controller = 'DeviseController' +
            30. +
              + +
              +
            31. + + + + + + +
            32. +
              + +
              +
            33. + + + + + + # ==> Mailer Configuration +
            34. +
              + +
              +
            35. + + + + + + # Configure the e-mail address which will be shown in Devise::Mailer, +
            36. +
              + +
              +
            37. + + + + + + # note that it will be overwritten if you use your own mailer class +
            38. +
              + +
              +
            39. + + + + + + # with default "from" parameter. +
            40. +
              + +
              +
            41. + 1 + + + + + config.mailer_sender = 'please-change-me-at-config-initializers-devise@example.com' +
            42. +
              + +
              +
            43. + + + + + + +
            44. +
              + +
              +
            45. + + + + + + # Configure the class responsible to send e-mails. +
            46. +
              + +
              +
            47. + + + + + + # config.mailer = 'Devise::Mailer' +
            48. +
              + +
              +
            49. + + + + + + +
            50. +
              + +
              +
            51. + + + + + + # Configure the parent class responsible to send e-mails. +
            52. +
              + +
              +
            53. + + + + + + # config.parent_mailer = 'ActionMailer::Base' +
            54. +
              + +
              +
            55. + + + + + + +
            56. +
              + +
              +
            57. + + + + + + # ==> ORM configuration +
            58. +
              + +
              +
            59. + + + + + + # Load and configure the ORM. Supports :active_record (default) and +
            60. +
              + +
              +
            61. + + + + + + # :mongoid (bson_ext recommended) by default. Other ORMs may be +
            62. +
              + +
              +
            63. + + + + + + # available as additional gems. +
            64. +
              + +
              +
            65. + 1 + + + + + require 'devise/orm/active_record' +
            66. +
              + +
              +
            67. + + + + + + +
            68. +
              + +
              +
            69. + + + + + + # ==> Configuration for any authentication mechanism +
            70. +
              + +
              +
            71. + + + + + + # Configure which keys are used when authenticating a user. The default is +
            72. +
              + +
              +
            73. + + + + + + # just :email. You can configure it to use [:username, :subdomain], so for +
            74. +
              + +
              +
            75. + + + + + + # authenticating a user, both parameters are required. Remember that those +
            76. +
              + +
              +
            77. + + + + + + # parameters are used only when authenticating and not when retrieving from +
            78. +
              + +
              +
            79. + + + + + + # session. If you need permissions, you should implement that in a before filter. +
            80. +
              + +
              +
            81. + + + + + + # You can also supply a hash where the value is a boolean determining whether +
            82. +
              + +
              +
            83. + + + + + + # or not authentication should be aborted when the value is not present. +
            84. +
              + +
              +
            85. + + + + + + # config.authentication_keys = [:email] +
            86. +
              + +
              +
            87. + + + + + + +
            88. +
              + +
              +
            89. + + + + + + # Configure parameters from the request object used for authentication. Each entry +
            90. +
              + +
              +
            91. + + + + + + # given should be a request method and it will automatically be passed to the +
            92. +
              + +
              +
            93. + + + + + + # find_for_authentication method and considered in your model lookup. For instance, +
            94. +
              + +
              +
            95. + + + + + + # if you set :request_keys to [:subdomain], :subdomain will be used on authentication. +
            96. +
              + +
              +
            97. + + + + + + # The same considerations mentioned for authentication_keys also apply to request_keys. +
            98. +
              + +
              +
            99. + + + + + + # config.request_keys = [] +
            100. +
              + +
              +
            101. + + + + + + +
            102. +
              + +
              +
            103. + + + + + + # Configure which authentication keys should be case-insensitive. +
            104. +
              + +
              +
            105. + + + + + + # These keys will be downcased upon creating or modifying a user and when used +
            106. +
              + +
              +
            107. + + + + + + # to authenticate or find a user. Default is :email. +
            108. +
              + +
              +
            109. + 1 + + + + + config.case_insensitive_keys = [:email] +
            110. +
              + +
              +
            111. + + + + + + +
            112. +
              + +
              +
            113. + + + + + + # Configure which authentication keys should have whitespace stripped. +
            114. +
              + +
              +
            115. + + + + + + # These keys will have whitespace before and after removed upon creating or +
            116. +
              + +
              +
            117. + + + + + + # modifying a user and when used to authenticate or find a user. Default is :email. +
            118. +
              + +
              +
            119. + 1 + + + + + config.strip_whitespace_keys = [:email] +
            120. +
              + +
              +
            121. + + + + + + +
            122. +
              + +
              +
            123. + + + + + + # Tell if authentication through request.params is enabled. True by default. +
            124. +
              + +
              +
            125. + + + + + + # It can be set to an array that will enable params authentication only for the +
            126. +
              + +
              +
            127. + + + + + + # given strategies, for example, `config.params_authenticatable = [:database]` will +
            128. +
              + +
              +
            129. + + + + + + # enable it only for database (email + password) authentication. +
            130. +
              + +
              +
            131. + + + + + + # config.params_authenticatable = true +
            132. +
              + +
              +
            133. + + + + + + +
            134. +
              + +
              +
            135. + + + + + + # Tell if authentication through HTTP Auth is enabled. False by default. +
            136. +
              + +
              +
            137. + + + + + + # It can be set to an array that will enable http authentication only for the +
            138. +
              + +
              +
            139. + + + + + + # given strategies, for example, `config.http_authenticatable = [:database]` will +
            140. +
              + +
              +
            141. + + + + + + # enable it only for database authentication. The supported strategies are: +
            142. +
              + +
              +
            143. + + + + + + # :database = Support basic authentication with authentication key + password +
            144. +
              + +
              +
            145. + + + + + + # config.http_authenticatable = false +
            146. +
              + +
              +
            147. + + + + + + +
            148. +
              + +
              +
            149. + + + + + + # If 401 status code should be returned for AJAX requests. True by default. +
            150. +
              + +
              +
            151. + + + + + + # config.http_authenticatable_on_xhr = true +
            152. +
              + +
              +
            153. + + + + + + +
            154. +
              + +
              +
            155. + + + + + + # The realm used in Http Basic Authentication. 'Application' by default. +
            156. +
              + +
              +
            157. + + + + + + # config.http_authentication_realm = 'Application' +
            158. +
              + +
              +
            159. + + + + + + +
            160. +
              + +
              +
            161. + + + + + + # It will change confirmation, password recovery and other workflows +
            162. +
              + +
              +
            163. + + + + + + # to behave the same regardless if the e-mail provided was right or wrong. +
            164. +
              + +
              +
            165. + + + + + + # Does not affect registerable. +
            166. +
              + +
              +
            167. + + + + + + # config.paranoid = true +
            168. +
              + +
              +
            169. + + + + + + +
            170. +
              + +
              +
            171. + + + + + + # By default Devise will store the user in session. You can skip storage for +
            172. +
              + +
              +
            173. + + + + + + # particular strategies by setting this option. +
            174. +
              + +
              +
            175. + + + + + + # Notice that if you are skipping storage for all authentication paths, you +
            176. +
              + +
              +
            177. + + + + + + # may want to disable generating routes to Devise's sessions controller by +
            178. +
              + +
              +
            179. + + + + + + # passing skip: :sessions to `devise_for` in your config/routes.rb +
            180. +
              + +
              +
            181. + 1 + + + + + config.skip_session_storage = [:http_auth] +
            182. +
              + +
              +
            183. + + + + + + +
            184. +
              + +
              +
            185. + + + + + + # By default, Devise cleans up the CSRF token on authentication to +
            186. +
              + +
              +
            187. + + + + + + # avoid CSRF token fixation attacks. This means that, when using AJAX +
            188. +
              + +
              +
            189. + + + + + + # requests for sign in and sign up, you need to get a new CSRF token +
            190. +
              + +
              +
            191. + + + + + + # from the server. You can disable this option at your own risk. +
            192. +
              + +
              +
            193. + + + + + + # config.clean_up_csrf_token_on_authentication = true +
            194. +
              + +
              +
            195. + + + + + + +
            196. +
              + +
              +
            197. + + + + + + # When false, Devise will not attempt to reload routes on eager load. +
            198. +
              + +
              +
            199. + + + + + + # This can reduce the time taken to boot the app but if your application +
            200. +
              + +
              +
            201. + + + + + + # requires the Devise mappings to be loaded during boot time the application +
            202. +
              + +
              +
            203. + + + + + + # won't boot properly. +
            204. +
              + +
              +
            205. + + + + + + # config.reload_routes = true +
            206. +
              + +
              +
            207. + + + + + + +
            208. +
              + +
              +
            209. + + + + + + # ==> Configuration for :database_authenticatable +
            210. +
              + +
              +
            211. + + + + + + # For bcrypt, this is the cost for hashing the password and defaults to 11. If +
            212. +
              + +
              +
            213. + + + + + + # using other algorithms, it sets how many times you want the password to be hashed. +
            214. +
              + +
              +
            215. + + + + + + # +
            216. +
              + +
              +
            217. + + + + + + # Limiting the stretches to just one in testing will increase the performance of +
            218. +
              + +
              +
            219. + + + + + + # your test suite dramatically. However, it is STRONGLY RECOMMENDED to not use +
            220. +
              + +
              +
            221. + + + + + + # a value less than 10 in other environments. Note that, for bcrypt (the default +
            222. +
              + +
              +
            223. + + + + + + # algorithm), the cost increases exponentially with the number of stretches (e.g. +
            224. +
              + +
              +
            225. + + + + + + # a value of 20 is already extremely slow: approx. 60 seconds for 1 calculation). +
            226. +
              + +
              +
            227. + 1 + + + + + config.stretches = Rails.env.test? ? 1 : 11 +
            228. +
              + +
              +
            229. + + + + + + +
            230. +
              + +
              +
            231. + + + + + + # Set up a pepper to generate the hashed password. +
            232. +
              + +
              +
            233. + + + + + + # config.pepper = '30f4c027405b92d0b7d5f25895b625a97791988e1867e0b79fb3d5c05b0ffff2ace19181de61c481bdb477e1c2fff8be2203afd78336ce261b97e9296f2259e9' +
            234. +
              + +
              +
            235. + + + + + + +
            236. +
              + +
              +
            237. + + + + + + # Send a notification to the original email when the user's email is changed. +
            238. +
              + +
              +
            239. + + + + + + # config.send_email_changed_notification = false +
            240. +
              + +
              +
            241. + + + + + + +
            242. +
              + +
              +
            243. + + + + + + # Send a notification email when the user's password is changed. +
            244. +
              + +
              +
            245. + + + + + + # config.send_password_change_notification = false +
            246. +
              + +
              +
            247. + + + + + + +
            248. +
              + +
              +
            249. + + + + + + # ==> Configuration for :confirmable +
            250. +
              + +
              +
            251. + + + + + + # A period that the user is allowed to access the website even without +
            252. +
              + +
              +
            253. + + + + + + # confirming their account. For instance, if set to 2.days, the user will be +
            254. +
              + +
              +
            255. + + + + + + # able to access the website for two days without confirming their account, +
            256. +
              + +
              +
            257. + + + + + + # access will be blocked just in the third day. +
            258. +
              + +
              +
            259. + + + + + + # You can also set it to nil, which will allow the user to access the website +
            260. +
              + +
              +
            261. + + + + + + # without confirming their account. +
            262. +
              + +
              +
            263. + + + + + + # Default is 0.days, meaning the user cannot access the website without +
            264. +
              + +
              +
            265. + + + + + + # confirming their account. +
            266. +
              + +
              +
            267. + + + + + + # config.allow_unconfirmed_access_for = 2.days +
            268. +
              + +
              +
            269. + + + + + + +
            270. +
              + +
              +
            271. + + + + + + # A period that the user is allowed to confirm their account before their +
            272. +
              + +
              +
            273. + + + + + + # token becomes invalid. For example, if set to 3.days, the user can confirm +
            274. +
              + +
              +
            275. + + + + + + # their account within 3 days after the mail was sent, but on the fourth day +
            276. +
              + +
              +
            277. + + + + + + # their account can't be confirmed with the token any more. +
            278. +
              + +
              +
            279. + + + + + + # Default is nil, meaning there is no restriction on how long a user can take +
            280. +
              + +
              +
            281. + + + + + + # before confirming their account. +
            282. +
              + +
              +
            283. + + + + + + # config.confirm_within = 3.days +
            284. +
              + +
              +
            285. + + + + + + +
            286. +
              + +
              +
            287. + + + + + + # If true, requires any email changes to be confirmed (exactly the same way as +
            288. +
              + +
              +
            289. + + + + + + # initial account confirmation) to be applied. Requires additional unconfirmed_email +
            290. +
              + +
              +
            291. + + + + + + # db field (see migrations). Until confirmed, new email is stored in +
            292. +
              + +
              +
            293. + + + + + + # unconfirmed_email column, and copied to email column on successful confirmation. +
            294. +
              + +
              +
            295. + 1 + + + + + config.reconfirmable = true +
            296. +
              + +
              +
            297. + + + + + + +
            298. +
              + +
              +
            299. + + + + + + # Defines which key will be used when confirming an account +
            300. +
              + +
              +
            301. + + + + + + # config.confirmation_keys = [:email] +
            302. +
              + +
              +
            303. + + + + + + +
            304. +
              + +
              +
            305. + + + + + + # ==> Configuration for :rememberable +
            306. +
              + +
              +
            307. + + + + + + # The time the user will be remembered without asking for credentials again. +
            308. +
              + +
              +
            309. + + + + + + # config.remember_for = 2.weeks +
            310. +
              + +
              +
            311. + + + + + + +
            312. +
              + +
              +
            313. + + + + + + # Invalidates all the remember me tokens when the user signs out. +
            314. +
              + +
              +
            315. + 1 + + + + + config.expire_all_remember_me_on_sign_out = true +
            316. +
              + +
              +
            317. + + + + + + +
            318. +
              + +
              +
            319. + + + + + + # If true, extends the user's remember period when remembered via cookie. +
            320. +
              + +
              +
            321. + + + + + + # config.extend_remember_period = false +
            322. +
              + +
              +
            323. + + + + + + +
            324. +
              + +
              +
            325. + + + + + + # Options to be passed to the created cookie. For instance, you can set +
            326. +
              + +
              +
            327. + + + + + + # secure: true in order to force SSL only cookies. +
            328. +
              + +
              +
            329. + + + + + + # config.rememberable_options = {} +
            330. +
              + +
              +
            331. + + + + + + +
            332. +
              + +
              +
            333. + + + + + + # ==> Configuration for :validatable +
            334. +
              + +
              +
            335. + + + + + + # Range for password length. +
            336. +
              + +
              +
            337. + 1 + + + + + config.password_length = 6..128 +
            338. +
              + +
              +
            339. + + + + + + +
            340. +
              + +
              +
            341. + + + + + + # Email regex used to validate email formats. It simply asserts that +
            342. +
              + +
              +
            343. + + + + + + # one (and only one) @ exists in the given string. This is mainly +
            344. +
              + +
              +
            345. + + + + + + # to give user feedback and not to assert the e-mail validity. +
            346. +
              + +
              +
            347. + 1 + + + + + config.email_regexp = /\A[^@\s]+@[^@\s]+\z/ +
            348. +
              + +
              +
            349. + + + + + + +
            350. +
              + +
              +
            351. + + + + + + # ==> Configuration for :timeoutable +
            352. +
              + +
              +
            353. + + + + + + # The time you want to timeout the user session without activity. After this +
            354. +
              + +
              +
            355. + + + + + + # time the user will be asked for credentials again. Default is 30 minutes. +
            356. +
              + +
              +
            357. + + + + + + # config.timeout_in = 30.minutes +
            358. +
              + +
              +
            359. + + + + + + +
            360. +
              + +
              +
            361. + + + + + + # ==> Configuration for :lockable +
            362. +
              + +
              +
            363. + + + + + + # Defines which strategy will be used to lock an account. +
            364. +
              + +
              +
            365. + + + + + + # :failed_attempts = Locks an account after a number of failed attempts to sign in. +
            366. +
              + +
              +
            367. + + + + + + # :none = No lock strategy. You should handle locking by yourself. +
            368. +
              + +
              +
            369. + + + + + + # config.lock_strategy = :failed_attempts +
            370. +
              + +
              +
            371. + + + + + + +
            372. +
              + +
              +
            373. + + + + + + # Defines which key will be used when locking and unlocking an account +
            374. +
              + +
              +
            375. + + + + + + # config.unlock_keys = [:email] +
            376. +
              + +
              +
            377. + + + + + + +
            378. +
              + +
              +
            379. + + + + + + # Defines which strategy will be used to unlock an account. +
            380. +
              + +
              +
            381. + + + + + + # :email = Sends an unlock link to the user email +
            382. +
              + +
              +
            383. + + + + + + # :time = Re-enables login after a certain amount of time (see :unlock_in below) +
            384. +
              + +
              +
            385. + + + + + + # :both = Enables both strategies +
            386. +
              + +
              +
            387. + + + + + + # :none = No unlock strategy. You should handle unlocking by yourself. +
            388. +
              + +
              +
            389. + + + + + + # config.unlock_strategy = :both +
            390. +
              + +
              +
            391. + + + + + + +
            392. +
              + +
              +
            393. + + + + + + # Number of authentication tries before locking an account if lock_strategy +
            394. +
              + +
              +
            395. + + + + + + # is failed attempts. +
            396. +
              + +
              +
            397. + + + + + + # config.maximum_attempts = 20 +
            398. +
              + +
              +
            399. + + + + + + +
            400. +
              + +
              +
            401. + + + + + + # Time interval to unlock the account if :time is enabled as unlock_strategy. +
            402. +
              + +
              +
            403. + + + + + + # config.unlock_in = 1.hour +
            404. +
              + +
              +
            405. + + + + + + +
            406. +
              + +
              +
            407. + + + + + + # Warn on the last attempt before the account is locked. +
            408. +
              + +
              +
            409. + + + + + + # config.last_attempt_warning = true +
            410. +
              + +
              +
            411. + + + + + + +
            412. +
              + +
              +
            413. + + + + + + # ==> Configuration for :recoverable +
            414. +
              + +
              +
            415. + + + + + + # +
            416. +
              + +
              +
            417. + + + + + + # Defines which key will be used when recovering the password for an account +
            418. +
              + +
              +
            419. + + + + + + # config.reset_password_keys = [:email] +
            420. +
              + +
              +
            421. + + + + + + +
            422. +
              + +
              +
            423. + + + + + + # Time interval you can reset your password with a reset password key. +
            424. +
              + +
              +
            425. + + + + + + # Don't put a too small interval or your users won't have the time to +
            426. +
              + +
              +
            427. + + + + + + # change their passwords. +
            428. +
              + +
              +
            429. + 1 + + + + + config.reset_password_within = 6.hours +
            430. +
              + +
              +
            431. + + + + + + +
            432. +
              + +
              +
            433. + + + + + + # When set to false, does not sign a user in automatically after their password is +
            434. +
              + +
              +
            435. + + + + + + # reset. Defaults to true, so a user is signed in automatically after a reset. +
            436. +
              + +
              +
            437. + + + + + + # config.sign_in_after_reset_password = true +
            438. +
              + +
              +
            439. + + + + + + +
            440. +
              + +
              +
            441. + + + + + + # ==> Configuration for :encryptable +
            442. +
              + +
              +
            443. + + + + + + # Allow you to use another hashing or encryption algorithm besides bcrypt (default). +
            444. +
              + +
              +
            445. + + + + + + # You can use :sha1, :sha512 or algorithms from others authentication tools as +
            446. +
              + +
              +
            447. + + + + + + # :clearance_sha1, :authlogic_sha512 (then you should set stretches above to 20 +
            448. +
              + +
              +
            449. + + + + + + # for default behavior) and :restful_authentication_sha1 (then you should set +
            450. +
              + +
              +
            451. + + + + + + # stretches to 10, and copy REST_AUTH_SITE_KEY to pepper). +
            452. +
              + +
              +
            453. + + + + + + # +
            454. +
              + +
              +
            455. + + + + + + # Require the `devise-encryptable` gem when using anything other than bcrypt +
            456. +
              + +
              +
            457. + + + + + + # config.encryptor = :sha512 +
            458. +
              + +
              +
            459. + + + + + + +
            460. +
              + +
              +
            461. + + + + + + # ==> Scopes configuration +
            462. +
              + +
              +
            463. + + + + + + # Turn scoped views on. Before rendering "sessions/new", it will first check for +
            464. +
              + +
              +
            465. + + + + + + # "users/sessions/new". It's turned off by default because it's slower if you +
            466. +
              + +
              +
            467. + + + + + + # are using only default views. +
            468. +
              + +
              +
            469. + + + + + + # config.scoped_views = false +
            470. +
              + +
              +
            471. + + + + + + +
            472. +
              + +
              +
            473. + + + + + + # Configure the default scope given to Warden. By default it's the first +
            474. +
              + +
              +
            475. + + + + + + # devise role declared in your routes (usually :user). +
            476. +
              + +
              +
            477. + + + + + + # config.default_scope = :user +
            478. +
              + +
              +
            479. + + + + + + +
            480. +
              + +
              +
            481. + + + + + + # Set this configuration to false if you want /users/sign_out to sign out +
            482. +
              + +
              +
            483. + + + + + + # only the current scope. By default, Devise signs out all scopes. +
            484. +
              + +
              +
            485. + + + + + + # config.sign_out_all_scopes = true +
            486. +
              + +
              +
            487. + + + + + + +
            488. +
              + +
              +
            489. + + + + + + # ==> Navigation configuration +
            490. +
              + +
              +
            491. + + + + + + # Lists the formats that should be treated as navigational. Formats like +
            492. +
              + +
              +
            493. + + + + + + # :html, should redirect to the sign in page when the user does not have +
            494. +
              + +
              +
            495. + + + + + + # access, but formats like :xml or :json, should return 401. +
            496. +
              + +
              +
            497. + + + + + + # +
            498. +
              + +
              +
            499. + + + + + + # If you have any extra navigational formats, like :iphone or :mobile, you +
            500. +
              + +
              +
            501. + + + + + + # should add them to the navigational formats lists. +
            502. +
              + +
              +
            503. + + + + + + # +
            504. +
              + +
              +
            505. + + + + + + # The "*/*" below is required to match Internet Explorer requests. +
            506. +
              + +
              +
            507. + + + + + + # config.navigational_formats = ['*/*', :html] +
            508. +
              + +
              +
            509. + + + + + + +
            510. +
              + +
              +
            511. + + + + + + # The default HTTP method used to sign out a resource. Default is :delete. +
            512. +
              + +
              +
            513. + 1 + + + + + config.sign_out_via = :delete +
            514. +
              + +
              +
            515. + + + + + + +
            516. +
              + +
              +
            517. + + + + + + # ==> OmniAuth +
            518. +
              + +
              +
            519. + + + + + + # Add a new OmniAuth provider. Check the wiki for more information on setting +
            520. +
              + +
              +
            521. + + + + + + # up on your models and hooks. +
            522. +
              + +
              +
            523. + + + + + + # config.omniauth :github, 'APP_ID', 'APP_SECRET', scope: 'user,public_repo' +
            524. +
              + +
              +
            525. + + + + + + +
            526. +
              + +
              +
            527. + + + + + + # ==> Warden configuration +
            528. +
              + +
              +
            529. + + + + + + # If you want to use other strategies, that are not supported by Devise, or +
            530. +
              + +
              +
            531. + + + + + + # change the failure app, you can configure them inside the config.warden block. +
            532. +
              + +
              +
            533. + + + + + + # +
            534. +
              + +
              +
            535. + + + + + + # config.warden do |manager| +
            536. +
              + +
              +
            537. + + + + + + # manager.intercept_401 = false +
            538. +
              + +
              +
            539. + + + + + + # manager.default_strategies(scope: :user).unshift :some_external_strategy +
            540. +
              + +
              +
            541. + + + + + + # end +
            542. +
              + +
              +
            543. + + + + + + +
            544. +
              + +
              +
            545. + + + + + + # ==> Mountable engine configurations +
            546. +
              + +
              +
            547. + + + + + + # When using Devise inside an engine, let's call it `MyEngine`, and this engine +
            548. +
              + +
              +
            549. + + + + + + # is mountable, there are some extra configurations to be taken into account. +
            550. +
              + +
              +
            551. + + + + + + # The following options are available, assuming the engine is mounted as: +
            552. +
              + +
              +
            553. + + + + + + # +
            554. +
              + +
              +
            555. + + + + + + # mount MyEngine, at: '/my_engine' +
            556. +
              + +
              +
            557. + + + + + + # +
            558. +
              + +
              +
            559. + + + + + + # The router that invoked `devise_for`, in the example above, would be: +
            560. +
              + +
              +
            561. + + + + + + # config.router_name = :my_engine +
            562. +
              + +
              +
            563. + + + + + + # +
            564. +
              + +
              +
            565. + + + + + + # When using OmniAuth, Devise cannot automatically set OmniAuth path, +
            566. +
              + +
              +
            567. + + + + + + # so you need to do it manually. For the users scope, it would be: +
            568. +
              + +
              +
            569. + + + + + + # config.omniauth_path_prefix = '/my_engine/users/auth' +
            570. +
              + +
              +
            571. + + + + + + +
            572. +
              + +
              +
            573. + + + + + + # ==> Turbolinks configuration +
            574. +
              + +
              +
            575. + + + + + + # If your app is using Turbolinks, Turbolinks::Controller needs to be included to make redirection work correctly: +
            576. +
              + +
              +
            577. + + + + + + # +
            578. +
              + +
              +
            579. + + + + + + # ActiveSupport.on_load(:devise_failure_app) do +
            580. +
              + +
              +
            581. + + + + + + # include Turbolinks::Controller +
            582. +
              + +
              +
            583. + + + + + + # end +
            584. +
              + +
              +
            585. + + + + + + +
            586. +
              + +
              +
            587. + + + + + + # ==> Configuration for :registerable +
            588. +
              + +
              +
            589. + + + + + + +
            590. +
              + +
              +
            591. + + + + + + # When set to false, does not sign a user in automatically after their password is +
            592. +
              + +
              +
            593. + + + + + + # changed. Defaults to true, so a user is signed in automatically after changing a password. +
            594. +
              + +
              +
            595. + + + + + + # config.sign_in_after_change_password = true +
            596. +
              + +
              +
            597. + + + + + + end +
            598. +
              + +
            +
            +
            + + +
            +
            +

            config/initializers/filter_parameter_logging.rb

            +

            + + 100.0% + + + lines covered +

            + + + +
            + 1 relevant lines. + 1 lines covered and + 0 lines missed. +
            + + + +
            + +
            +    
              + +
              +
            1. + + + + + + # Be sure to restart your server when you modify this file. +
            2. +
              + +
              +
            3. + + + + + + +
            4. +
              + +
              +
            5. + + + + + + # Configure sensitive parameters which will be filtered from the log file. +
            6. +
              + +
              +
            7. + 1 + + + + + Rails.application.config.filter_parameters += [:password] +
            8. +
              + +
            +
            +
            + + +
            +
            +

            config/initializers/inflections.rb

            +

            + + 100.0% + + + lines covered +

            + + + +
            + 0 relevant lines. + 0 lines covered and + 0 lines missed. +
            + + + +
            + +
            +    
              + +
              +
            1. + + + + + + # Be sure to restart your server when you modify this file. +
            2. +
              + +
              +
            3. + + + + + + +
            4. +
              + +
              +
            5. + + + + + + # Add new inflection rules using the following format. Inflections +
            6. +
              + +
              +
            7. + + + + + + # are locale specific, and you may define rules for as many different +
            8. +
              + +
              +
            9. + + + + + + # locales as you wish. All of these examples are active by default: +
            10. +
              + +
              +
            11. + + + + + + # ActiveSupport::Inflector.inflections(:en) do |inflect| +
            12. +
              + +
              +
            13. + + + + + + # inflect.plural /^(ox)$/i, '\1en' +
            14. +
              + +
              +
            15. + + + + + + # inflect.singular /^(ox)en/i, '\1' +
            16. +
              + +
              +
            17. + + + + + + # inflect.irregular 'person', 'people' +
            18. +
              + +
              +
            19. + + + + + + # inflect.uncountable %w( fish sheep ) +
            20. +
              + +
              +
            21. + + + + + + # end +
            22. +
              + +
              +
            23. + + + + + + +
            24. +
              + +
              +
            25. + + + + + + # These inflection rules are supported but not enabled by default: +
            26. +
              + +
              +
            27. + + + + + + # ActiveSupport::Inflector.inflections(:en) do |inflect| +
            28. +
              + +
              +
            29. + + + + + + # inflect.acronym 'RESTful' +
            30. +
              + +
              +
            31. + + + + + + # end +
            32. +
              + +
            +
            +
            + + +
            +
            +

            config/initializers/mime_types.rb

            +

            + + 100.0% + + + lines covered +

            + + + +
            + 0 relevant lines. + 0 lines covered and + 0 lines missed. +
            + + + +
            + +
            +    
              + +
              +
            1. + + + + + + # Be sure to restart your server when you modify this file. +
            2. +
              + +
              +
            3. + + + + + + +
            4. +
              + +
              +
            5. + + + + + + # Add new mime types for use in respond_to blocks: +
            6. +
              + +
              +
            7. + + + + + + # Mime::Type.register "text/richtext", :rtf +
            8. +
              + +
            +
            +
            + + +
            +
            +

            config/initializers/wrap_parameters.rb

            +

            + + 100.0% + + + lines covered +

            + + + +
            + 2 relevant lines. + 2 lines covered and + 0 lines missed. +
            + + + +
            + +
            +    
              + +
              +
            1. + + + + + + # Be sure to restart your server when you modify this file. +
            2. +
              + +
              +
            3. + + + + + + +
            4. +
              + +
              +
            5. + + + + + + # This file contains settings for ActionController::ParamsWrapper which +
            6. +
              + +
              +
            7. + + + + + + # is enabled by default. +
            8. +
              + +
              +
            9. + + + + + + +
            10. +
              + +
              +
            11. + + + + + + # Enable parameter wrapping for JSON. You can disable this by setting :format to an empty array. +
            12. +
              + +
              +
            13. + 1 + + + + + ActiveSupport.on_load(:action_controller) do +
            14. +
              + +
              +
            15. + 2 + + + + + wrap_parameters format: [:json] +
            16. +
              + +
              +
            17. + + + + + + end +
            18. +
              + +
              +
            19. + + + + + + +
            20. +
              + +
              +
            21. + + + + + + # To enable root element in JSON for ActiveRecord objects. +
            22. +
              + +
              +
            23. + + + + + + # ActiveSupport.on_load(:active_record) do +
            24. +
              + +
              +
            25. + + + + + + # self.include_root_in_json = true +
            26. +
              + +
              +
            27. + + + + + + # end +
            28. +
              + +
            +
            +
            + + +
            +
            +

            config/routes.rb

            +

            + + 100.0% + + + lines covered +

            + + + +
            + 9 relevant lines. + 9 lines covered and + 0 lines missed. +
            + + + +
            + +
            +    
              + +
              +
            1. + + + + + + # frozen_string_literal: true +
            2. +
              + +
              +
            3. + + + + + + +
            4. +
              + +
              +
            5. + 1 + + + + + Rails.application.routes.draw do +
            6. +
              + +
              +
            7. + 1 + + + + + resources :accreditations +
            8. +
              + +
              +
            9. + 1 + + + + + resources :sei_processes +
            10. +
              + +
              +
            11. + + + + + + +
            12. +
              + +
              +
            13. + 1 + + + + + resources :requirements do +
            14. +
              + +
              +
            15. + 1 + + + + + member do +
            16. +
              + +
              +
            17. + 1 + + + + + delete :delete_document_attachment +
            18. +
              + +
              +
            19. + + + + + + end +
            20. +
              + +
              +
            21. + + + + + + end +
            22. +
              + +
              +
            23. + + + + + + +
            24. +
              + +
              +
            25. + 1 + + + + + get 'home/index' +
            26. +
              + +
              +
            27. + 1 + + + + + devise_for :users +
            28. +
              + +
              +
            29. + + + + + + # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html +
            30. +
              + +
              +
            31. + 1 + + + + + root to: 'home#index' +
            32. +
              + +
              +
            33. + + + + + + end +
            34. +
              + +
            +
            +
            + + +
            +
            +

            spec/controllers/home_controller_spec.rb

            +

            + + 100.0% + + + lines covered +

            + + + +
            + 6 relevant lines. + 6 lines covered and + 0 lines missed. +
            + + + +
            + +
            +    
              + +
              +
            1. + 1 + + + + + require 'rails_helper' +
            2. +
              + +
              +
            3. + + + + + + +
            4. +
              + +
              +
            5. + 1 + + + + + RSpec.describe HomeController, type: :controller do +
            6. +
              + +
              +
            7. + + + + + + +
            8. +
              + +
              +
            9. + 1 + + + + + describe "GET #index" do +
            10. +
              + +
              +
            11. + 1 + + + + + it "returns http success" do +
            12. +
              + +
              +
            13. + 1 + + + + + get :index +
            14. +
              + +
              +
            15. + 1 + + + + + expect(response).to have_http_status(:success) +
            16. +
              + +
              +
            17. + + + + + + end +
            18. +
              + +
              +
            19. + + + + + + end +
            20. +
              + +
              +
            21. + + + + + + +
            22. +
              + +
              +
            23. + + + + + + end +
            24. +
              + +
            +
            +
            + + +
            +
            +

            spec/controllers/requirements_controller_spec.rb

            +

            + + 100.0% + + + lines covered +

            + + + +
            + 129 relevant lines. + 129 lines covered and + 0 lines missed. +
            + + + +
            + +
            +    
              + +
              +
            1. + 1 + + + + + require 'rails_helper' +
            2. +
              + +
              +
            3. + + + + + + +
            4. +
              + +
              +
            5. + 1 + + + + + RSpec.describe RequirementsController, type: :controller do +
            6. +
              + +
              +
            7. + 1 + + + + + fixtures :users +
            8. +
              + +
              +
            9. + + + + + + +
            10. +
              + +
              +
            11. + 1 + + + + + let(:valid_attributes) { +
            12. +
              + +
              +
            13. + 14 + + + + + file = fixture_file_upload(Rails.root.join('public', 'TestImage.png'), 'image/png') +
            14. +
              + +
              +
            15. + 14 + + + + + {title: "test", content: "", documents: [file]} +
            16. +
              + +
              +
            17. + + + + + + } +
            18. +
              + +
              +
            19. + + + + + + +
            20. +
              + +
              +
            21. + 1 + + + + + let(:invalid_attributes) { +
            22. +
              + +
              +
            23. + 2 + + + + + {"title" => ""} +
            24. +
              + +
              +
            25. + + + + + + } +
            26. +
              + +
              +
            27. + + + + + + +
            28. +
              + +
              +
            29. + 16 + + + + + let(:valid_session) { {} } +
            30. +
              + +
              +
            31. + + + + + + +
            32. +
              + +
              +
            33. + 1 + + + + + context "by an admin" do +
            34. +
              + +
              +
            35. + 1 + + + + + before(:each) do +
            36. +
              + +
              +
            37. + 4 + + + + + sign_in users(:admin) +
            38. +
              + +
              +
            39. + 4 + + + + + Current.user = users(:admin) +
            40. +
              + +
              +
            41. + + + + + + end +
            42. +
              + +
              +
            43. + + + + + + +
            44. +
              + +
              +
            45. + 1 + + + + + describe "GET #index" do +
            46. +
              + +
              +
            47. + 1 + + + + + it "returns a success response" do +
            48. +
              + +
              +
            49. + 1 + + + + + Requirement.create! valid_attributes +
            50. +
              + +
              +
            51. + 1 + + + + + get :index, params: {}, session: valid_session +
            52. +
              + +
              +
            53. + 1 + + + + + expect(response).to be_successful +
            54. +
              + +
              +
            55. + + + + + + end +
            56. +
              + +
              +
            57. + + + + + + end +
            58. +
              + +
              +
            59. + + + + + + +
            60. +
              + +
              +
            61. + 1 + + + + + describe "GET #show" do +
            62. +
              + +
              +
            63. + 1 + + + + + it "returns a success response" do +
            64. +
              + +
              +
            65. + 1 + + + + + requirement = Requirement.create! valid_attributes +
            66. +
              + +
              +
            67. + 1 + + + + + get :show, params: {id: requirement.to_param}, session: valid_session +
            68. +
              + +
              +
            69. + 1 + + + + + expect(response).to be_successful +
            70. +
              + +
              +
            71. + + + + + + end +
            72. +
              + +
              +
            73. + + + + + + end +
            74. +
              + +
              +
            75. + + + + + + +
            76. +
              + +
              +
            77. + 1 + + + + + describe "GET #new" do +
            78. +
              + +
              +
            79. + 1 + + + + + it "returns a success response" do +
            80. +
              + +
              +
            81. + 1 + + + + + get :new, params: {}, session: valid_session +
            82. +
              + +
              +
            83. + 1 + + + + + expect(response).to be_successful +
            84. +
              + +
              +
            85. + + + + + + end +
            86. +
              + +
              +
            87. + + + + + + end +
            88. +
              + +
              +
            89. + + + + + + +
            90. +
              + +
              +
            91. + 1 + + + + + describe "GET #edit" do +
            92. +
              + +
              +
            93. + 1 + + + + + it "returns a success response" do +
            94. +
              + +
              +
            95. + 1 + + + + + requirement = Requirement.create! valid_attributes +
            96. +
              + +
              +
            97. + 1 + + + + + get :edit, params: {id: requirement.to_param}, session: valid_session +
            98. +
              + +
              +
            99. + 1 + + + + + expect(response).to be_successful +
            100. +
              + +
              +
            101. + + + + + + end +
            102. +
              + +
              +
            103. + + + + + + end +
            104. +
              + +
              +
            105. + + + + + + end +
            106. +
              + +
              +
            107. + + + + + + +
            108. +
              + +
              +
            109. + 1 + + + + + describe "POST #create" do +
            110. +
              + +
              +
            111. + 1 + + + + + context "with valid params" do +
            112. +
              + +
              +
            113. + 1 + + + + + before(:each) do +
            114. +
              + +
              +
            115. + 2 + + + + + sign_in users(:admin) +
            116. +
              + +
              +
            117. + 2 + + + + + Current.user = users(:admin) +
            118. +
              + +
              +
            119. + + + + + + end +
            120. +
              + +
              +
            121. + + + + + + +
            122. +
              + +
              +
            123. + 1 + + + + + it "creates a new Requirement" do +
            124. +
              + +
              +
            125. + 1 + + + + + expect { +
            126. +
              + +
              +
            127. + 1 + + + + + post :create, params: {requirement: valid_attributes}, session: valid_session +
            128. +
              + +
              +
            129. + + + + + + }.to change(Requirement, :count).by(1) +
            130. +
              + +
              +
            131. + + + + + + end +
            132. +
              + +
              +
            133. + + + + + + +
            134. +
              + +
              +
            135. + 1 + + + + + it "redirects to the created requirement" do +
            136. +
              + +
              +
            137. + 1 + + + + + post :create, params: {requirement: valid_attributes}, session: valid_session +
            138. +
              + +
              +
            139. + 1 + + + + + expect(response).to redirect_to(Requirement.last) +
            140. +
              + +
              +
            141. + + + + + + end +
            142. +
              + +
              +
            143. + + + + + + end +
            144. +
              + +
              +
            145. + + + + + + +
            146. +
              + +
              +
            147. + 1 + + + + + context "with invalid params" do +
            148. +
              + +
              +
            149. + 1 + + + + + before(:each) do +
            150. +
              + +
              +
            151. + 1 + + + + + sign_in users(:admin) +
            152. +
              + +
              +
            153. + 1 + + + + + Current.user = users(:admin) +
            154. +
              + +
              +
            155. + + + + + + end +
            156. +
              + +
              +
            157. + + + + + + +
            158. +
              + +
              +
            159. + 1 + + + + + it "returns a success response (i.e. to display the 'new' template)" do +
            160. +
              + +
              +
            161. + 1 + + + + + post :create, params: {requirement: invalid_attributes}, session: valid_session +
            162. +
              + +
              +
            163. + 1 + + + + + expect(response).to be_successful +
            164. +
              + +
              +
            165. + + + + + + end +
            166. +
              + +
              +
            167. + + + + + + end +
            168. +
              + +
              +
            169. + + + + + + +
            170. +
              + +
              +
            171. + 1 + + + + + context "by a non-admin user" do +
            172. +
              + +
              +
            173. + 1 + + + + + before(:each) do +
            174. +
              + +
              +
            175. + 1 + + + + + sign_in users(:prof) +
            176. +
              + +
              +
            177. + 1 + + + + + Current.user = users(:prof) +
            178. +
              + +
              +
            179. + + + + + + end +
            180. +
              + +
              +
            181. + + + + + + +
            182. +
              + +
              +
            183. + 1 + + + + + it "does not create a new Requirement" do +
            184. +
              + +
              +
            185. + 1 + + + + + expect { +
            186. +
              + +
              +
            187. + 1 + + + + + post :create, params: {requirement: valid_attributes}, session: valid_session +
            188. +
              + +
              +
            189. + + + + + + }.to change(Requirement, :count).by(0) +
            190. +
              + +
              +
            191. + + + + + + end +
            192. +
              + +
              +
            193. + + + + + + end +
            194. +
              + +
              +
            195. + + + + + + end +
            196. +
              + +
              +
            197. + + + + + + +
            198. +
              + +
              +
            199. + 1 + + + + + describe "PUT #update" do +
            200. +
              + +
              +
            201. + 1 + + + + + let(:new_attributes) { +
            202. +
              + +
              +
            203. + 2 + + + + + file = fixture_file_upload(Rails.root.join('public', 'TestImage.png'), 'image/png') +
            204. +
              + +
              +
            205. + 2 + + + + + {title: "Novo", content: "Conteúdo", documents: [file]} +
            206. +
              + +
              +
            207. + + + + + + } +
            208. +
              + +
              +
            209. + + + + + + +
            210. +
              + +
              +
            211. + 1 + + + + + context "with valid params" do +
            212. +
              + +
              +
            213. + 1 + + + + + before(:each) do +
            214. +
              + +
              +
            215. + 2 + + + + + sign_in users(:admin) +
            216. +
              + +
              +
            217. + 2 + + + + + Current.user = users(:admin) +
            218. +
              + +
              +
            219. + + + + + + end +
            220. +
              + +
              +
            221. + + + + + + +
            222. +
              + +
              +
            223. + 1 + + + + + it "updates the requested requirement" do +
            224. +
              + +
              +
            225. + 1 + + + + + requirement = Requirement.create! valid_attributes +
            226. +
              + +
              +
            227. + 1 + + + + + put :update, params: {id: requirement.to_param, requirement: new_attributes}, session: valid_session +
            228. +
              + +
              +
            229. + 1 + + + + + requirement.reload +
            230. +
              + +
              +
            231. + 1 + + + + + expect(requirement.title).to eq(new_attributes[:title]) +
            232. +
              + +
              +
            233. + 1 + + + + + expect(requirement.content).to eq(new_attributes[:content]) +
            234. +
              + +
              +
            235. + + + + + + end +
            236. +
              + +
              +
            237. + + + + + + +
            238. +
              + +
              +
            239. + 1 + + + + + it "redirects to the requirement" do +
            240. +
              + +
              +
            241. + 1 + + + + + requirement = Requirement.create! valid_attributes +
            242. +
              + +
              +
            243. + 1 + + + + + put :update, params: {id: requirement.to_param, requirement: valid_attributes}, session: valid_session +
            244. +
              + +
              +
            245. + 1 + + + + + expect(response).to redirect_to(requirement) +
            246. +
              + +
              +
            247. + + + + + + end +
            248. +
              + +
              +
            249. + + + + + + end +
            250. +
              + +
              +
            251. + + + + + + +
            252. +
              + +
              +
            253. + 1 + + + + + context "with invalid params" do +
            254. +
              + +
              +
            255. + 1 + + + + + before(:each) do +
            256. +
              + +
              +
            257. + 1 + + + + + sign_in users(:admin) +
            258. +
              + +
              +
            259. + 1 + + + + + Current.user = users(:admin) +
            260. +
              + +
              +
            261. + + + + + + end +
            262. +
              + +
              +
            263. + + + + + + +
            264. +
              + +
              +
            265. + 1 + + + + + it "returns a success response (i.e. to display the 'edit' template)" do +
            266. +
              + +
              +
            267. + 1 + + + + + requirement = Requirement.create! valid_attributes +
            268. +
              + +
              +
            269. + 1 + + + + + put :update, params: {id: requirement.to_param, requirement: invalid_attributes}, session: valid_session +
            270. +
              + +
              +
            271. + 1 + + + + + expect(response).to be_successful +
            272. +
              + +
              +
            273. + + + + + + end +
            274. +
              + +
              +
            275. + + + + + + end +
            276. +
              + +
              +
            277. + + + + + + +
            278. +
              + +
              +
            279. + 1 + + + + + context "by a non-admin user" do +
            280. +
              + +
              +
            281. + 1 + + + + + before(:each) do +
            282. +
              + +
              +
            283. + 1 + + + + + sign_in users(:admin) +
            284. +
              + +
              +
            285. + 1 + + + + + Current.user = users(:admin) +
            286. +
              + +
              +
            287. + 1 + + + + + @requirement = Requirement.create! valid_attributes +
            288. +
              + +
              +
            289. + + + + + + +
            290. +
              + +
              +
            291. + 1 + + + + + sign_out users(:admin) +
            292. +
              + +
              +
            293. + 1 + + + + + sign_in users(:prof) +
            294. +
              + +
              +
            295. + 1 + + + + + Current.user = users(:prof) +
            296. +
              + +
              +
            297. + + + + + + end +
            298. +
              + +
              +
            299. + + + + + + +
            300. +
              + +
              +
            301. + 1 + + + + + it "updates the requested requirement" do +
            302. +
              + +
              +
            303. + 1 + + + + + put :update, params: {id: @requirement.to_param, requirement: new_attributes}, session: valid_session +
            304. +
              + +
              +
            305. + 1 + + + + + @requirement.reload +
            306. +
              + +
              +
            307. + 1 + + + + + expect(@requirement.title).to_not eq(new_attributes[:title]) +
            308. +
              + +
              +
            309. + 1 + + + + + expect(@requirement.content).to_not eq(new_attributes[:content]) +
            310. +
              + +
              +
            311. + + + + + + end +
            312. +
              + +
              +
            313. + + + + + + end +
            314. +
              + +
              +
            315. + + + + + + end +
            316. +
              + +
              +
            317. + + + + + + +
            318. +
              + +
              +
            319. + 1 + + + + + describe "Documents Management"do +
            320. +
              + +
              +
            321. + 1 + + + + + before(:each) do +
            322. +
              + +
              +
            323. + 1 + + + + + sign_in users(:admin) +
            324. +
              + +
              +
            325. + 1 + + + + + Current.user = users(:admin) +
            326. +
              + +
              +
            327. + + + + + + end +
            328. +
              + +
              +
            329. + + + + + + +
            330. +
              + +
              +
            331. + 1 + + + + + it 'purges a specific file' do +
            332. +
              + +
              +
            333. + 1 + + + + + requirement = Requirement.create! valid_attributes +
            334. +
              + +
              +
            335. + 1 + + + + + requirement.documents.each do | document | +
            336. +
              + +
              +
            337. + 1 + + + + + expect { +
            338. +
              + +
              +
            339. + 1 + + + + + delete :delete_document_attachment, params: { id: document.id, requirement_id: requirement.id } +
            340. +
              + +
              +
            341. + + + + + + }.to change(ActiveStorage::Attachment, :count).by(-1) +
            342. +
              + +
              +
            343. + + + + + + end +
            344. +
              + +
              +
            345. + + + + + + end +
            346. +
              + +
              +
            347. + + + + + + end +
            348. +
              + +
              +
            349. + + + + + + +
            350. +
              + +
              +
            351. + 1 + + + + + describe "DELETE #destroy" do +
            352. +
              + +
              +
            353. + 1 + + + + + context "by an admin" do +
            354. +
              + +
              +
            355. + 1 + + + + + before(:each) do +
            356. +
              + +
              +
            357. + 2 + + + + + sign_in users(:admin) +
            358. +
              + +
              +
            359. + 2 + + + + + Current.user = users(:admin) +
            360. +
              + +
              +
            361. + + + + + + end +
            362. +
              + +
              +
            363. + + + + + + +
            364. +
              + +
              +
            365. + 1 + + + + + it "destroys the requested requirement" do +
            366. +
              + +
              +
            367. + 1 + + + + + requirement = Requirement.create! valid_attributes +
            368. +
              + +
              +
            369. + 1 + + + + + expect { +
            370. +
              + +
              +
            371. + 1 + + + + + delete :destroy, params: {id: requirement.to_param}, session: valid_session +
            372. +
              + +
              +
            373. + + + + + + }.to change(Requirement, :count).by(-1) +
            374. +
              + +
              +
            375. + + + + + + end +
            376. +
              + +
              +
            377. + + + + + + +
            378. +
              + +
              +
            379. + 1 + + + + + it "redirects to the requirements list" do +
            380. +
              + +
              +
            381. + 1 + + + + + requirement = Requirement.create! valid_attributes +
            382. +
              + +
              +
            383. + 1 + + + + + delete :destroy, params: {id: requirement.to_param}, session: valid_session +
            384. +
              + +
              +
            385. + 1 + + + + + expect(response).to redirect_to(requirements_url) +
            386. +
              + +
              +
            387. + + + + + + end +
            388. +
              + +
              +
            389. + + + + + + end +
            390. +
              + +
              +
            391. + + + + + + +
            392. +
              + +
              +
            393. + 1 + + + + + context "by a non-admin user" do +
            394. +
              + +
              +
            395. + 1 + + + + + before(:each) do +
            396. +
              + +
              +
            397. + 1 + + + + + sign_in users(:admin) +
            398. +
              + +
              +
            399. + 1 + + + + + Current.user = users(:admin) +
            400. +
              + +
              +
            401. + 1 + + + + + @requirement = Requirement.create! valid_attributes +
            402. +
              + +
              +
            403. + + + + + + +
            404. +
              + +
              +
            405. + 1 + + + + + sign_out users(:admin) +
            406. +
              + +
              +
            407. + 1 + + + + + sign_in users(:prof) +
            408. +
              + +
              +
            409. + 1 + + + + + Current.user = users(:prof) +
            410. +
              + +
              +
            411. + + + + + + end +
            412. +
              + +
              +
            413. + + + + + + +
            414. +
              + +
              +
            415. + 1 + + + + + it "does not destroy the requested requirement" do +
            416. +
              + +
              +
            417. + 1 + + + + + expect { +
            418. +
              + +
              +
            419. + 1 + + + + + delete :destroy, params: {id: @requirement.to_param}, session: valid_session +
            420. +
              + +
              +
            421. + + + + + + }.to change(Requirement, :count).by(0) +
            422. +
              + +
              +
            423. + + + + + + end +
            424. +
              + +
              +
            425. + + + + + + end +
            426. +
              + +
              +
            427. + + + + + + end +
            428. +
              + +
              +
            429. + + + + + + +
            430. +
              + +
              +
            431. + + + + + + end +
            432. +
              + +
            +
            +
            + + +
            +
            +

            spec/controllers/sei_processes_controller_spec.rb

            +

            + + 99.18% + + + lines covered +

            + + + +
            + 122 relevant lines. + 121 lines covered and + 1 lines missed. +
            + + + +
            + +
            +    
              + +
              +
            1. + 1 + + + + + require 'rails_helper' +
            2. +
              + +
              +
            3. + + + + + + +
            4. +
              + +
              +
            5. + 1 + + + + + RSpec.describe SeiProcessesController, type: :controller do +
            6. +
              + +
              +
            7. + 1 + + + + + fixtures :users +
            8. +
              + +
              +
            9. + + + + + + +
            10. +
              + +
              +
            11. + 1 + + + + + let(:file) { +
            12. +
              + +
              +
            13. + 12 + + + + + fixture_file_upload(Rails.root.join('public', 'TestImage.png'), 'image/png') +
            14. +
              + +
              +
            15. + + + + + + } +
            16. +
              + +
              +
            17. + + + + + + +
            18. +
              + +
              +
            19. + 1 + + + + + let(:valid_admin_params) { +
            20. +
              + +
              +
            21. + 2 + + + + + {user_id: users(:admin).id, status: 'Espera', code: 0, documents: [file]} +
            22. +
              + +
              +
            23. + + + + + + } +
            24. +
              + +
              +
            25. + + + + + + +
            26. +
              + +
              +
            27. + 1 + + + + + let(:valid_prof_params) { +
            28. +
              + +
              +
            29. + 10 + + + + + {user_id: users(:prof).id, status: 'Espera', code: 0, documents: [file]} +
            30. +
              + +
              +
            31. + + + + + + } +
            32. +
              + +
              +
            33. + + + + + + +
            34. +
              + +
              +
            35. + 1 + + + + + let(:invalid_status_params) { +
            36. +
              + +
              +
            37. + 1 + + + + + {user_id: users(:prof).id, status: 'Aprovado', code: 0, documents: [file]} +
            38. +
              + +
              +
            39. + + + + + + } +
            40. +
              + +
              +
            41. + + + + + + +
            42. +
              + +
              +
            43. + 1 + + + + + let(:invalid_docs_params_by_admin) { +
            44. +
              + +
              +
            45. + + + + + + {user_id: users(:admin).id, status: 'Espera', code: 0} +
            46. +
              + +
              +
            47. + + + + + + } +
            48. +
              + +
              +
            49. + + + + + + +
            50. +
              + +
              +
            51. + 1 + + + + + let(:invalid_docs_params_by_prof) { +
            52. +
              + +
              +
            53. + 1 + + + + + {user_id: users(:prof).id, status: 'Espera', code: 0} +
            54. +
              + +
              +
            55. + + + + + + } +
            56. +
              + +
              +
            57. + + + + + + +
            58. +
              + +
              +
            59. + 1 + + + + + let(:some_process) { +
            60. +
              + +
              +
            61. + 6 + + + + + SeiProcess.create!(valid_prof_params) +
            62. +
              + +
              +
            63. + + + + + + } +
            64. +
              + +
              +
            65. + + + + + + +
            66. +
              + +
              +
            67. + 17 + + + + + let(:valid_session) { {} } +
            68. +
              + +
              +
            69. + + + + + + +
            70. +
              + +
              +
            71. + 1 + + + + + describe "GET #index" do +
            72. +
              + +
              +
            73. + 1 + + + + + context 'taken by an admin' do +
            74. +
              + +
              +
            75. + 1 + + + + + before(:each) do +
            76. +
              + +
              +
            77. + 1 + + + + + sign_in users(:admin) +
            78. +
              + +
              +
            79. + 1 + + + + + Current.user = users(:admin) +
            80. +
              + +
              +
            81. + + + + + + end +
            82. +
              + +
              +
            83. + + + + + + +
            84. +
              + +
              +
            85. + 1 + + + + + it "returns a success response" do +
            86. +
              + +
              +
            87. + 1 + + + + + get :index, params: {}, session: valid_session +
            88. +
              + +
              +
            89. + 1 + + + + + expect(response).to be_successful +
            90. +
              + +
              +
            91. + + + + + + end +
            92. +
              + +
              +
            93. + + + + + + end +
            94. +
              + +
              +
            95. + + + + + + +
            96. +
              + +
              +
            97. + 1 + + + + + context 'taken by an non-admin user' do +
            98. +
              + +
              +
            99. + 1 + + + + + before(:each) do +
            100. +
              + +
              +
            101. + 1 + + + + + sign_in users(:prof) +
            102. +
              + +
              +
            103. + 1 + + + + + Current.user = users(:prof) +
            104. +
              + +
              +
            105. + + + + + + end +
            106. +
              + +
              +
            107. + + + + + + +
            108. +
              + +
              +
            109. + 1 + + + + + it "returns a success response" do +
            110. +
              + +
              +
            111. + 1 + + + + + get :index, params: {}, session: valid_session +
            112. +
              + +
              +
            113. + 1 + + + + + expect(response).to be_successful +
            114. +
              + +
              +
            115. + + + + + + end +
            116. +
              + +
              +
            117. + + + + + + end +
            118. +
              + +
              +
            119. + + + + + + end +
            120. +
              + +
              +
            121. + + + + + + +
            122. +
              + +
              +
            123. + 1 + + + + + describe "GET #show" do +
            124. +
              + +
              +
            125. + 1 + + + + + before(:each) do +
            126. +
              + +
              +
            127. + 1 + + + + + sign_in users(:admin) +
            128. +
              + +
              +
            129. + 1 + + + + + Current.user = users(:admin) +
            130. +
              + +
              +
            131. + + + + + + end +
            132. +
              + +
              +
            133. + + + + + + +
            134. +
              + +
              +
            135. + 1 + + + + + it "returns a success response" do +
            136. +
              + +
              +
            137. + 1 + + + + + get :show, params: {id: some_process.id}, session: valid_session +
            138. +
              + +
              +
            139. + 1 + + + + + expect(response).to be_successful +
            140. +
              + +
              +
            141. + + + + + + end +
            142. +
              + +
              +
            143. + + + + + + end +
            144. +
              + +
              +
            145. + + + + + + +
            146. +
              + +
              +
            147. + 1 + + + + + describe "GET #new" do +
            148. +
              + +
              +
            149. + 1 + + + + + before(:each) do +
            150. +
              + +
              +
            151. + 1 + + + + + sign_in users(:prof) +
            152. +
              + +
              +
            153. + 1 + + + + + Current.user = users(:prof) +
            154. +
              + +
              +
            155. + + + + + + end +
            156. +
              + +
              +
            157. + + + + + + +
            158. +
              + +
              +
            159. + 1 + + + + + it "returns a success response" do +
            160. +
              + +
              +
            161. + 1 + + + + + get :new, params: {}, session: valid_session +
            162. +
              + +
              +
            163. + 1 + + + + + expect(response).to be_successful +
            164. +
              + +
              +
            165. + + + + + + end +
            166. +
              + +
              +
            167. + + + + + + end +
            168. +
              + +
              +
            169. + + + + + + +
            170. +
              + +
              +
            171. + 1 + + + + + describe "GET #edit" do +
            172. +
              + +
              +
            173. + 1 + + + + + before(:each) do +
            174. +
              + +
              +
            175. + 1 + + + + + sign_in users(:admin) +
            176. +
              + +
              +
            177. + 1 + + + + + Current.user = users(:admin) +
            178. +
              + +
              +
            179. + + + + + + end +
            180. +
              + +
              +
            181. + + + + + + +
            182. +
              + +
              +
            183. + 1 + + + + + it "returns a success response" do +
            184. +
              + +
              +
            185. + 1 + + + + + get :edit, params: {id: some_process.id}, session: valid_session +
            186. +
              + +
              +
            187. + 1 + + + + + expect(response).to be_successful +
            188. +
              + +
              +
            189. + + + + + + end +
            190. +
              + +
              +
            191. + + + + + + end +
            192. +
              + +
              +
            193. + + + + + + +
            194. +
              + +
              +
            195. + 1 + + + + + describe "POST #create" do +
            196. +
              + +
              +
            197. + 1 + + + + + before(:each) do +
            198. +
              + +
              +
            199. + 4 + + + + + sign_in users(:prof) +
            200. +
              + +
              +
            201. + 4 + + + + + Current.user = users(:prof) +
            202. +
              + +
              +
            203. + + + + + + end +
            204. +
              + +
              +
            205. + + + + + + +
            206. +
              + +
              +
            207. + 1 + + + + + context "with valid params" do +
            208. +
              + +
              +
            209. + 1 + + + + + it "creates a new SeiProcess" do +
            210. +
              + +
              +
            211. + 1 + + + + + expect { +
            212. +
              + +
              +
            213. + 1 + + + + + post :create, params: {sei_process: valid_prof_params}, session: valid_session +
            214. +
              + +
              +
            215. + + + + + + }.to change(SeiProcess, :count).by(1) +
            216. +
              + +
              +
            217. + + + + + + end +
            218. +
              + +
              +
            219. + + + + + + +
            220. +
              + +
              +
            221. + 1 + + + + + it "redirects to the sei processes list" do +
            222. +
              + +
              +
            223. + 1 + + + + + post :create, params: {sei_process: valid_prof_params}, session: valid_session +
            224. +
              + +
              +
            225. + 1 + + + + + expect(response).to redirect_to(sei_processes_url) +
            226. +
              + +
              +
            227. + + + + + + end +
            228. +
              + +
              +
            229. + + + + + + +
            230. +
              + +
              +
            231. + 1 + + + + + it "corrects invalid parameters during creation" do +
            232. +
              + +
              +
            233. + 1 + + + + + post :create, params: {sei_process: invalid_status_params}, session: valid_session +
            234. +
              + +
              +
            235. + 1 + + + + + expect(SeiProcess.last.status).to eq(valid_prof_params[:status]) +
            236. +
              + +
              +
            237. + + + + + + end +
            238. +
              + +
              +
            239. + + + + + + end +
            240. +
              + +
              +
            241. + + + + + + +
            242. +
              + +
              +
            243. + 1 + + + + + context "with invalid params" do +
            244. +
              + +
              +
            245. + 1 + + + + + it "do not creates a new SeiProcess due to lack of documents" do +
            246. +
              + +
              +
            247. + 1 + + + + + expect { +
            248. +
              + +
              +
            249. + 1 + + + + + post :create, params: {sei_process: invalid_docs_params_by_prof}, session: valid_session +
            250. +
              + +
              +
            251. + + + + + + }.to change(SeiProcess, :count).by(0) +
            252. +
              + +
              +
            253. + + + + + + end +
            254. +
              + +
              +
            255. + + + + + + end +
            256. +
              + +
              +
            257. + + + + + + end +
            258. +
              + +
              +
            259. + + + + + + +
            260. +
              + +
              +
            261. + 1 + + + + + describe "PUT #update" do +
            262. +
              + +
              +
            263. + 1 + + + + + let(:approval_param) { +
            264. +
              + +
              +
            265. + 2 + + + + + {status: 'Aprovado'} +
            266. +
              + +
              +
            267. + + + + + + } +
            268. +
              + +
              +
            269. + + + + + + +
            270. +
              + +
              +
            271. + 1 + + + + + let(:rejection_param) { +
            272. +
              + +
              +
            273. + 2 + + + + + {status: 'Rejeitado'} +
            274. +
              + +
              +
            275. + + + + + + } +
            276. +
              + +
              +
            277. + + + + + + +
            278. +
              + +
              +
            279. + 1 + + + + + context "when user has permission" do +
            280. +
              + +
              +
            281. + 1 + + + + + before(:each) do +
            282. +
              + +
              +
            283. + 3 + + + + + sign_in users(:admin) +
            284. +
              + +
              +
            285. + 3 + + + + + Current.user = users(:admin) +
            286. +
              + +
              +
            287. + + + + + + end +
            288. +
              + +
              +
            289. + + + + + + +
            290. +
              + +
              +
            291. + 1 + + + + + it "updates the requested sei_process" do +
            292. +
              + +
              +
            293. + 1 + + + + + put :update, params: {id: some_process.id, sei_process: rejection_param}, session: valid_session +
            294. +
              + +
              +
            295. + 1 + + + + + some_process.reload +
            296. +
              + +
              +
            297. + 1 + + + + + expect(some_process.status).to eq(rejection_param[:status]) +
            298. +
              + +
              +
            299. + + + + + + end +
            300. +
              + +
              +
            301. + + + + + + +
            302. +
              + +
              +
            303. + 1 + + + + + it "redirects to the sei processes list" do +
            304. +
              + +
              +
            305. + 1 + + + + + put :update, params: {id: some_process.id, sei_process: rejection_param}, session: valid_session +
            306. +
              + +
              +
            307. + 1 + + + + + expect(response).to redirect_to(sei_processes_url) +
            308. +
              + +
              +
            309. + + + + + + end +
            310. +
              + +
              +
            311. + + + + + + +
            312. +
              + +
              +
            313. + 1 + + + + + it "creates an accreditation when a process is approved" do +
            314. +
              + +
              +
            315. + 1 + + + + + expect { +
            316. +
              + +
              +
            317. + 1 + + + + + put :update, params: {id: some_process.id, sei_process: approval_param}, session: valid_session +
            318. +
              + +
              +
            319. + + + + + + }.to change(Accreditation, :count).by(1) +
            320. +
              + +
              +
            321. + + + + + + end +
            322. +
              + +
              +
            323. + + + + + + end +
            324. +
              + +
              +
            325. + + + + + + +
            326. +
              + +
              +
            327. + 1 + + + + + context "when user does not have permission" do +
            328. +
              + +
              +
            329. + 1 + + + + + before(:each) do +
            330. +
              + +
              +
            331. + 1 + + + + + sign_in users(:prof) +
            332. +
              + +
              +
            333. + 1 + + + + + Current.user = users(:prof) +
            334. +
              + +
              +
            335. + + + + + + end +
            336. +
              + +
              +
            337. + + + + + + +
            338. +
              + +
              +
            339. + 1 + + + + + it "does not update the requested sei_process" do +
            340. +
              + +
              +
            341. + 1 + + + + + put :update, params: {id: some_process.id, sei_process: approval_param}, session: valid_session +
            342. +
              + +
              +
            343. + 1 + + + + + some_process.reload +
            344. +
              + +
              +
            345. + 1 + + + + + expect(some_process.status).to_not eq(approval_param[:status]) +
            346. +
              + +
              +
            347. + + + + + + end +
            348. +
              + +
              +
            349. + + + + + + end +
            350. +
              + +
              +
            351. + + + + + + end +
            352. +
              + +
              +
            353. + + + + + + +
            354. +
              + +
              +
            355. + 1 + + + + + describe "DELETE #destroy" do +
            356. +
              + +
              +
            357. + 1 + + + + + context "when user has permission" do +
            358. +
              + +
              +
            359. + 1 + + + + + before(:each) do +
            360. +
              + +
              +
            361. + 2 + + + + + sign_in users(:admin) +
            362. +
              + +
              +
            363. + 2 + + + + + Current.user = users(:admin) +
            364. +
              + +
              +
            365. + + + + + + end +
            366. +
              + +
              +
            367. + + + + + + +
            368. +
              + +
              +
            369. + 1 + + + + + it "destroys the requested sei_process" do +
            370. +
              + +
              +
            371. + 1 + + + + + process = SeiProcess.create!(valid_admin_params) +
            372. +
              + +
              +
            373. + 1 + + + + + process.update_attributes(user_id: users(:prof)) +
            374. +
              + +
              +
            375. + + + + + + +
            376. +
              + +
              +
            377. + 1 + + + + + expect { +
            378. +
              + +
              +
            379. + 1 + + + + + delete :destroy, params: {id: process.to_param}, session: valid_session +
            380. +
              + +
              +
            381. + + + + + + }.to change(SeiProcess, :count).by(-1) +
            382. +
              + +
              +
            383. + + + + + + end +
            384. +
              + +
              +
            385. + + + + + + +
            386. +
              + +
              +
            387. + 1 + + + + it "redirects to the sei_processes list" do +
            388. +
              + +
              +
            389. + 1 - # authenticating a user, both parameters are required. Remember that those + process = SeiProcess.create!(valid_admin_params)
            390. -
            391. +
            392. + 1 + + + + + process.update_attributes(user_id: users(:prof)) +
            393. +
              + +
              +
            394. - # parameters are used only when authenticating and not when retrieving from +
            395. -
            396. +
            397. + 1 + + + + delete :destroy, params: {id: process.to_param}, session: valid_session +
            398. +
              + +
              +
            399. + 1 - # session. If you need permissions, you should implement that in a before filter. + expect(response).to redirect_to(sei_processes_url)
            400. -
            401. +
            402. - # You can also supply a hash where the value is a boolean determining whether + end
            403. -
            404. +
            405. - # or not authentication should be aborted when the value is not present. + end
            406. -
            407. +
            408. - # config.authentication_keys = [:email] +
            409. -
            410. +
            411. + 1 + + + + + context "when user does not have permission" do +
            412. +
              + +
              +
            413. + 1 + + + + + before(:each) do +
            414. +
              + +
              +
            415. + 1 + + + + + sign_in users(:prof) +
            416. +
              + +
              +
            417. + 1 + + + + + Current.user = users(:prof) +
            418. +
              + +
              +
            419. + + + + + + end +
            420. +
              + +
              +
            421. @@ -3994,73 +16209,148 @@

            422. -
            423. +
            424. + 1 + + it "does not destroys the requested sei_process" do +
            425. +
              + +
              +
            426. + 1 - # Configure parameters from the request object used for authentication. Each entry + + + process = SeiProcess.create!(valid_prof_params)
            427. -
            428. +
            429. + 1 + + + + expect { +
            430. +
              + +
              +
            431. + 1 - # given should be a request method and it will automatically be passed to the + delete :destroy, params: {id: process.to_param}, session: valid_session
            432. -
            433. +
            434. - # find_for_authentication method and considered in your model lookup. For instance, + }.to change(SeiProcess, :count).by(0)
            435. -
            436. +
            437. - # if you set :request_keys to [:subdomain], :subdomain will be used on authentication. + end
            438. -
            439. +
            440. - # The same considerations mentioned for authentication_keys also apply to request_keys. + end
            441. -
            442. +
            443. - # config.request_keys = [] + end
            444. -
            445. +
            446. + + + + + + end +
            447. +
              + +
            +
            +
            + + +
            +
            +

            spec/helpers/home_helper_spec.rb

            +

            + + 100.0% + + + lines covered +

            + + + +
            + 0 relevant lines. + 0 lines covered and + 0 lines missed. +
            + + + +
            + +
            +    
              + +
              +
            1. + + + + + + # require 'rails_helper' +
            2. +
              + +
              +
            3. @@ -4071,315 +16361,357 @@

            4. -
            5. +
            6. - # Configure which authentication keys should be case-insensitive. + # # Specs in this file have access to a helper object that includes
            7. -
            8. +
            9. - # These keys will be downcased upon creating or modifying a user and when used + # # the HomeHelper. For example:
            10. -
            11. +
            12. - # to authenticate or find a user. Default is :email. + # #
            13. -
            14. - 1 +
            15. + - config.case_insensitive_keys = [:email] + # # describe HomeHelper do
            16. -
            17. +
            18. - + # # describe "string concat" do
            19. -
            20. +
            21. - # Configure which authentication keys should have whitespace stripped. + # # it "concats two strings with spaces" do
            22. -
            23. +
            24. - # These keys will have whitespace before and after removed upon creating or + # # expect(helper.concat_strings("this","that")).to eq("this that")
            25. -
            26. +
            27. - # modifying a user and when used to authenticate or find a user. Default is :email. + # # end
            28. -
            29. - 1 +
            30. + - config.strip_whitespace_keys = [:email] + # # end
            31. -
            32. +
            33. - + # # end
            34. -
            35. +
            36. - # Tell if authentication through request.params is enabled. True by default. + # RSpec.describe HomeHelper, type: :helper do
            37. -
            38. +
            39. - # It can be set to an array that will enable params authentication only for the + # pending "add some examples to (or delete) #{__FILE__}" +
            40. +
              + +
              +
            41. + + + + + + # end
            42. +
            +
            +
            + + +
            +
            +

            spec/models/accreditation_spec.rb

            +

            + + 100.0% + + + lines covered +

            + + + +
            + 27 relevant lines. + 27 lines covered and + 0 lines missed. +
            + + + +
            + +
            +    
              +
              -
            1. - +
            2. + 1 - # given strategies, for example, `config.params_authenticatable = [:database]` will + require 'rails_helper'
            3. -
            4. +
            5. - # enable it only for database (email + password) authentication. +
            6. -
            7. - +
            8. + 1 - # config.params_authenticatable = true + RSpec.describe Accreditation, type: :model do
            9. -
            10. - +
            11. + 1 - + fixtures :users
            12. -
            13. +
            14. - # Tell if authentication through HTTP Auth is enabled. False by default. +
            15. -
            16. - +
            17. + 1 - # It can be set to an array that will enable http authentication only for the + let(:file) {
            18. -
            19. - +
            20. + 4 - # given strategies, for example, `config.http_authenticatable = [:database]` will + fixture_file_upload(Rails.root.join('public', 'TestImage.png'), 'image/png')
            21. -
            22. +
            23. - # enable it only for database authentication. The supported strategies are: + }
            24. -
            25. +
            26. - # :database = Support basic authentication with authentication key + password +
            27. -
            28. - +
            29. + 1 - # config.http_authenticatable = false + let(:valid_prof_params) {
            30. -
            31. - +
            32. + 4 - + {user_id: users(:admin).id, status: 'Espera', code: 0, documents: [file]}
            33. -
            34. +
            35. - # If 401 status code should be returned for AJAX requests. True by default. + }
            36. -
            37. +
            38. - # config.http_authenticatable_on_xhr = true +
            39. -
            40. - +
            41. + 1 - + let(:valid_attributes) {
            42. -
            43. - +
            44. + 2 - # The realm used in Http Basic Authentication. 'Application' by default. + {user_id: users(:admin).id, sei_process_id: @process.id}
            45. -
            46. +
            47. - # config.http_authentication_realm = 'Application' + }
            48. -
            49. +
            50. @@ -4390,51 +16722,51 @@

            51. -
            52. - +
            53. + 1 - # It will change confirmation, password recovery and other workflows + before(:each) do
            54. -
            55. - +
            56. + 4 - # to behave the same regardless if the e-mail provided was right or wrong. + sign_in users(:prof)
            57. -
            58. - +
            59. + 4 - # Does not affect registerable. + Current.user = users(:prof)
            60. -
            61. - +
            62. + 4 - # config.paranoid = true + @process = SeiProcess.create! valid_prof_params
            63. -
            64. +
            65. @@ -4445,139 +16777,139 @@

            66. -
            67. - +
            68. + 4 - # By default Devise will store the user in session. You can skip storage for + sign_out users(:prof)
            69. -
            70. - +
            71. + 4 - # particular strategies by setting this option. + sign_in users(:admin)
            72. -
            73. - +
            74. + 4 - # Notice that if you are skipping storage for all authentication paths, you + Current.user = users(:admin)
            75. -
            76. +
            77. - # may want to disable generating routes to Devise's sessions controller by + end
            78. -
            79. +
            80. - # passing skip: :sessions to `devise_for` in your config/routes.rb +
            81. -
            82. +
            83. 1 - config.skip_session_storage = [:http_auth] + context "valid record" do
            84. -
            85. - +
            86. + 1 - + it "has valid attributes" do
            87. -
            88. - +
            89. + 1 - # By default, Devise cleans up the CSRF token on authentication to + expect(
            90. -
            91. +
            92. - # avoid CSRF token fixation attacks. This means that, when using AJAX + Accreditation.new(valid_attributes)
            93. -
            94. +
            95. - # requests for sign in and sign up, you need to get a new CSRF token + ).to be_valid
            96. -
            97. +
            98. - # from the server. You can disable this option at your own risk. + end
            99. -
            100. +
            101. - # config.clean_up_csrf_token_on_authentication = true + end
            102. -
            103. +
            104. @@ -4588,403 +16920,423 @@

            105. -
            106. - +
            107. + 1 - # When false, Devise will not attempt to reload routes on eager load. + context "invalid record" do
            108. -
            109. - +
            110. + 1 - # This can reduce the time taken to boot the app but if your application + it "has no user" do
            111. -
            112. - +
            113. + 1 - # requires the Devise mappings to be loaded during boot time the application + expect(
            114. -
            115. +
            116. - # won't boot properly. + Accreditation.new(sei_process_id: @process.id)
            117. -
            118. +
            119. - # config.reload_routes = true + ).to_not be_valid
            120. -
            121. +
            122. - + end
            123. -
            124. +
            125. - # ==> Configuration for :database_authenticatable +
            126. -
            127. - +
            128. + 1 - # For bcrypt, this is the cost for hashing the password and defaults to 11. If + it "has no process" do
            129. -
            130. - +
            131. + 1 - # using other algorithms, it sets how many times you want the password to be hashed. + expect(
            132. -
            133. +
            134. - # + Accreditation.new(user_id: users(:admin).id)
            135. -
            136. +
            137. - # Limiting the stretches to just one in testing will increase the performance of + ).to_not be_valid
            138. -
            139. +
            140. - # your test suite dramatically. However, it is STRONGLY RECOMMENDED to not use + end
            141. -
            142. +
            143. - # a value less than 10 in other environments. Note that, for bcrypt (the default +
            144. -
            145. - +
            146. + 1 - # algorithm), the cost increases exponentially with the number of stretches (e.g. + it "has an unavailable process" do
            147. -
            148. - +
            149. + 1 - # a value of 20 is already extremely slow: approx. 60 seconds for 1 calculation). + Accreditation.create!(valid_attributes)
            150. -
            151. +
            152. 1 - config.stretches = Rails.env.test? ? 1 : 11 + expect(
            153. -
            154. +
            155. - + Accreditation.new(valid_attributes)
            156. -
            157. +
            158. - # Set up a pepper to generate the hashed password. + ).to_not be_valid
            159. -
            160. +
            161. - # config.pepper = '30f4c027405b92d0b7d5f25895b625a97791988e1867e0b79fb3d5c05b0ffff2ace19181de61c481bdb477e1c2fff8be2203afd78336ce261b97e9296f2259e9' + end
            162. -
            163. +
            164. - + end
            165. -
            166. +
            167. - # Send a notification to the original email when the user's email is changed. + end
            168. -
              -
            169. - - +
            +
            +
            - + +
            +
            +

            spec/models/requirement_spec.rb

            +

            + + 100.0% + - # config.send_email_changed_notification = false - -

            + lines covered + + + + +
            + 15 relevant lines. + 15 lines covered and + 0 lines missed. +
            + + + +
            + +
            +    
              -
            1. - +
            2. + 1 - + require 'rails_helper'
            3. -
            4. +
            5. - # Send a notification email when the user's password is changed. +
            6. -
            7. - +
            8. + 1 - # config.send_password_change_notification = false + RSpec.describe Requirement, type: :model do
            9. -
            10. - +
            11. + 1 - + fixtures :users
            12. -
            13. +
            14. - # ==> Configuration for :confirmable +
            15. -
            16. - +
            17. + 1 - # A period that the user is allowed to access the website even without + before(:each) do
            18. -
            19. - +
            20. + 3 - # confirming their account. For instance, if set to 2.days, the user will be + sign_in users(:admin)
            21. -
            22. - +
            23. + 3 - # able to access the website for two days without confirming their account, + Current.user = users(:admin)
            24. -
            25. +
            26. - # access will be blocked just in the third day. + end
            27. -
            28. +
            29. - # You can also set it to nil, which will allow the user to access the website +
            30. -
            31. - +
            32. + 1 - # without confirming their account. + describe "Title validation" do
            33. -
            34. - +
            35. + 1 - # Default is 0.days, meaning the user cannot access the website without + it "is valid with valid attributes" do
            36. -
            37. - +
            38. + 1 - # confirming their account. + expect(Requirement.new({"title" => "testing"})).to be_valid
            39. -
            40. +
            41. - # config.allow_unconfirmed_access_for = 2.days + end
            42. -
            43. +
            44. @@ -4995,150 +17347,181 @@

            45. -
            46. - +
            47. + 1 - # A period that the user is allowed to confirm their account before their + it "is not valid without a title" do
            48. -
            49. - +
            50. + 1 - # token becomes invalid. For example, if set to 3.days, the user can confirm + file = fixture_file_upload(Rails.root.join('public', 'TestImage.png'), 'image/png')
            51. -
            52. - +
            53. + 1 - # their account within 3 days after the mail was sent, but on the fourth day + expect(Requirement.new({"content" => "", "documents" => [file]})).to_not be_valid
            54. -
            55. +
            56. - # their account can't be confirmed with the token any more. + end
            57. -
            58. +
            59. - # Default is nil, meaning there is no restriction on how long a user can take +
            60. -
            61. - +
            62. + 1 - # before confirming their account. + it "is not equal to previous requirement title" do
            63. -
            64. - +
            65. + 1 - # config.confirm_within = 3.days + Requirement.create! title: "testing"
            66. -
            67. - +
            68. + 1 - + expect(Requirement.new({"title" => "testing"})).to_not be_valid
            69. -
            70. +
            71. - # If true, requires any email changes to be confirmed (exactly the same way as + end
            72. -
            73. +
            74. - # initial account confirmation) to be applied. Requires additional unconfirmed_email + end
            75. -
            76. +
            77. - # db field (see migrations). Until confirmed, new email is stored in +
            78. -
            79. +
            80. - # unconfirmed_email column, and copied to email column on successful confirmation. + end
            81. +
            +
            +
            + + +
            +
            +

            spec/models/sei_process_spec.rb

            +

            + + 97.44% + + + lines covered +

            + + + +
            + 39 relevant lines. + 38 lines covered and + 1 lines missed. +
            + + + +
            + +
            +    
              +
              -
            1. +
            2. 1 - config.reconfirmable = true + require 'rails_helper'
            3. -
            4. +
            5. @@ -5149,29 +17532,29 @@

            6. -
            7. - +
            8. + 1 - # Defines which key will be used when confirming an account + RSpec.describe SeiProcess, type: :model do
            9. -
            10. - +
            11. + 1 - # config.confirmation_keys = [:email] + fixtures :users
            12. -
            13. +
            14. @@ -5182,40 +17565,40 @@

            15. -
            16. - +
            17. + 1 - # ==> Configuration for :rememberable + let(:file) {
            18. -
            19. - +
            20. + 3 - # The time the user will be remembered without asking for credentials again. + fixture_file_upload(Rails.root.join('public', 'TestImage.png'), 'image/png')
            21. -
            22. +
            23. - # config.remember_for = 2.weeks + }
            24. -
            25. +
            26. @@ -5226,62 +17609,40 @@

            27. -
            28. - - - - - - # Invalidates all the remember me tokens when the user signs out. -
            29. -
              - -
              -
            30. +
            31. 1 - config.expire_all_remember_me_on_sign_out = true -
            32. -
              - -
              -
            33. - - - - - - + let(:valid_admin_params) {
            34. -
            35. - +
            36. + 2 - # If true, extends the user's remember period when remembered via cookie. + {user_id: users(:admin).id, status: 'Espera', code: 0, documents: [file]}
            37. -
            38. +
            39. - # config.extend_remember_period = false + }
            40. -
            41. +
            42. @@ -5292,40 +17653,40 @@

            43. -
            44. - +
            45. + 1 - # Options to be passed to the created cookie. For instance, you can set + let(:valid_prof_params) {
            46. -
            47. - +
            48. + 1 - # secure: true in order to force SSL only cookies. + {user_id: users(:prof).id, status: 'Espera', code: 0, documents: [file]}
            49. -
            50. +
            51. - # config.rememberable_options = {} + }
            52. -
            53. +
            54. @@ -5336,40 +17697,40 @@

            55. -
            56. - +
            57. + 1 - # ==> Configuration for :validatable + let(:invalid_status_params) {
            58. -
            59. +
            60. - # Range for password length. + {user_id: users(:prof).id, status: 'Aprovado', code: 0, documents: [file]}
            61. -
            62. - 1 +
            63. + - config.password_length = 6..128 + }
            64. -
            65. +
            66. @@ -5380,326 +17741,326 @@

            67. -
            68. - +
            69. + 1 - # Email regex used to validate email formats. It simply asserts that + let(:invalid_docs_params_by_admin) {
            70. -
            71. - +
            72. + 1 - # one (and only one) @ exists in the given string. This is mainly + {user_id: users(:admin).id, status: 'Espera', code: 0}
            73. -
            74. +
            75. - # to give user feedback and not to assert the e-mail validity. + }
            76. -
            77. - 1 +
            78. + - config.email_regexp = /\A[^@\s]+@[^@\s]+\z/ +
            79. -
            80. - +
            81. + 1 - + let(:invalid_docs_params_by_prof) {
            82. -
            83. - +
            84. + 1 - # ==> Configuration for :timeoutable + {user_id: users(:prof).id, status: 'Espera', code: 0}
            85. -
            86. +
            87. - # The time you want to timeout the user session without activity. After this + }
            88. -
            89. +
            90. - # time the user will be asked for credentials again. Default is 30 minutes. +
            91. -
            92. - +
            93. + 1 - # config.timeout_in = 30.minutes + describe 'checks an admins creation' do
            94. -
            95. - +
            96. + 1 - + before(:each) do
            97. -
            98. - +
            99. + 2 - # ==> Configuration for :lockable + Current.user = users(:admin)
            100. -
            101. +
            102. - # Defines which strategy will be used to lock an account. + end
            103. -
            104. +
            105. - # :failed_attempts = Locks an account after a number of failed attempts to sign in. +
            106. -
            107. - +
            108. + 1 - # :none = No lock strategy. You should handle locking by yourself. + context 'when a valid record' do
            109. -
            110. - +
            111. + 1 - # config.lock_strategy = :failed_attempts + it 'has valid attributes' do
            112. -
            113. - +
            114. + 1 - + expect(
            115. -
            116. +
            117. - # Defines which key will be used when locking and unlocking an account + SeiProcess.new(valid_admin_params)
            118. -
            119. +
            120. - # config.unlock_keys = [:email] + ).to be_valid
            121. -
            122. +
            123. - + end
            124. -
            125. +
            126. - # Defines which strategy will be used to unlock an account. + end
            127. -
            128. +
            129. - # :email = Sends an unlock link to the user email +
            130. -
            131. - +
            132. + 1 - # :time = Re-enables login after a certain amount of time (see :unlock_in below) + context 'when an invalid record' do
            133. -
            134. - +
            135. + 1 - # :both = Enables both strategies + it 'has no attached documents' do
            136. -
            137. - +
            138. + 1 - # :none = No unlock strategy. You should handle unlocking by yourself. + expect(
            139. -
            140. +
            141. - # config.unlock_strategy = :both + SeiProcess.new(invalid_docs_params_by_admin)
            142. -
            143. +
            144. - + ).to_not be_valid
            145. -
            146. +
            147. - # Number of authentication tries before locking an account if lock_strategy + end
            148. -
            149. +
            150. - # is failed attempts. + end
            151. -
            152. +
            153. - # config.maximum_attempts = 20 + end
            154. -
            155. +
            156. @@ -5710,601 +18071,641 @@

            157. -
            158. - +
            159. + 1 - # Time interval to unlock the account if :time is enabled as unlock_strategy. + describe 'checks a non-admins creation' do
            160. -
            161. - +
            162. + 1 - # config.unlock_in = 1.hour + before(:each) do
            163. -
            164. - +
            165. + 2 - + Current.user = users(:prof)
            166. -
            167. +
            168. - # Warn on the last attempt before the account is locked. + end
            169. -
            170. +
            171. - # config.last_attempt_warning = true +
            172. -
            173. - +
            174. + 1 - + context 'when a valid record' do
            175. -
            176. - +
            177. + 1 - # ==> Configuration for :recoverable + it 'has valid attributes' do
            178. -
            179. - +
            180. + 1 - # + expect(
            181. -
            182. +
            183. - # Defines which key will be used when recovering the password for an account + SeiProcess.new(valid_prof_params)
            184. -
            185. +
            186. - # config.reset_password_keys = [:email] + ).to be_valid
            187. -
            188. +
            189. - + end
            190. -
            191. +
            192. - # Time interval you can reset your password with a reset password key. + end
            193. -
            194. +
            195. - # Don't put a too small interval or your users won't have the time to +
            196. -
            197. - +
            198. + 1 - # change their passwords. + context 'when an invalid record' do
            199. -
            200. +
            201. 1 - config.reset_password_within = 6.hours + it 'has no attached documents' do
            202. -
            203. - +
            204. + 1 - + expect(
            205. -
            206. +
            207. - # When set to false, does not sign a user in automatically after their password is + SeiProcess.new(invalid_docs_params_by_prof)
            208. -
            209. +
            210. - # reset. Defaults to true, so a user is signed in automatically after a reset. + ).to_not be_valid
            211. -
            212. +
            213. - # config.sign_in_after_reset_password = true + end
            214. -
            215. +
            216. - + end
            217. -
            218. +
            219. - # ==> Configuration for :encryptable + end
            220. -
            221. +
            222. - # Allow you to use another hashing or encryption algorithm besides bcrypt (default). +
            223. -
            224. - +
            225. + 1 - # You can use :sha1, :sha512 or algorithms from others authentication tools as + describe 'checks a not signed in users creation' do
            226. -
            227. - +
            228. + 1 - # :clearance_sha1, :authlogic_sha512 (then you should set stretches above to 20 + before(:each) do
            229. -
            230. - +
            231. + 1 - # for default behavior) and :restful_authentication_sha1 (then you should set + Current.user = nil
            232. -
            233. +
            234. - # stretches to 10, and copy REST_AUTH_SITE_KEY to pepper). + end
            235. -
            236. +
            237. - # +
            238. -
            239. - +
            240. + 1 - # Require the `devise-encryptable` gem when using anything other than bcrypt + context 'when an invalid record' do
            241. -
            242. - +
            243. + 1 - # config.encryptor = :sha512 + it 'comes from not signed in user' do
            244. -
            245. - +
            246. + 1 - + expect(
            247. -
            248. +
            249. - # ==> Scopes configuration + SeiProcess.new(valid_admin_params)
            250. -
            251. +
            252. - # Turn scoped views on. Before rendering "sessions/new", it will first check for + ).to_not be_valid
            253. -
            254. +
            255. - # "users/sessions/new". It's turned off by default because it's slower if you + end
            256. -
            257. +
            258. - # are using only default views. + end
            259. -
            260. +
            261. - # config.scoped_views = false + end
            262. -
            263. +
            264. - + end
            265. -
              -
            266. - - +
            +
            +
            - + +
            +
            +

            spec/models/user_spec.rb

            +

            + + 100.0% + + + lines covered +

            + + + +
            + 0 relevant lines. + 0 lines covered and + 0 lines missed. +
            + + + +
            - # Configure the default scope given to Warden. By default it's the first - -
            +
            +    
              -
            1. +
            2. - # devise role declared in your routes (usually :user). + # require 'rails_helper'
            3. -
            4. +
            5. - # config.default_scope = :user +
            6. -
            7. +
            8. - + # RSpec.describe User, type: :model do
            9. -
            10. +
            11. - # Set this configuration to false if you want /users/sign_out to sign out + # pending "add some examples to (or delete) #{__FILE__}"
            12. -
            13. +
            14. - # only the current scope. By default, Devise signs out all scopes. + # end
            15. -
              -
            16. - - +
            +
            +
            - + +
            +
            +

            spec/routing/accreditations_routing_spec.rb

            +

            + + 100.0% + - # config.sign_out_all_scopes = true - -

            + lines covered + + + + +
            + 19 relevant lines. + 19 lines covered and + 0 lines missed. +
            + + + +
            + +
            +    
              -
            1. - +
            2. + 1 - + require "rails_helper"
            3. -
            4. +
            5. - # ==> Navigation configuration +
            6. -
            7. - +
            8. + 1 - # Lists the formats that should be treated as navigational. Formats like + RSpec.describe AccreditationsController, type: :routing do
            9. -
            10. - +
            11. + 1 - # :html, should redirect to the sign in page when the user does not have + describe "routing" do
            12. -
            13. - +
            14. + 1 - # access, but formats like :xml or :json, should return 401. + it "routes to #index" do
            15. -
            16. - +
            17. + 1 - # + expect(get: "/accreditations").to route_to("accreditations#index")
            18. -
            19. +
            20. - # If you have any extra navigational formats, like :iphone or :mobile, you + end
            21. -
            22. +
            23. - # should add them to the navigational formats lists. +
            24. -
            25. - +
            26. + 1 - # + it "routes to #new" do
            27. -
            28. - +
            29. + 1 - # The "*/*" below is required to match Internet Explorer requests. + expect(get: "/accreditations/new").to route_to("accreditations#new")
            30. -
            31. +
            32. - # config.navigational_formats = ['*/*', :html] + end
            33. -
            34. +
            35. @@ -6315,84 +18716,84 @@

            36. -
            37. - +
            38. + 1 - # The default HTTP method used to sign out a resource. Default is :delete. + it "routes to #show" do
            39. -
            40. +
            41. 1 - config.sign_out_via = :delete + expect(get: "/accreditations/1").to route_to("accreditations#show", id: "1")
            42. -
            43. +
            44. - + end
            45. -
            46. +
            47. - # ==> OmniAuth +
            48. -
            49. - +
            50. + 1 - # Add a new OmniAuth provider. Check the wiki for more information on setting + it "routes to #edit" do
            51. -
            52. - +
            53. + 1 - # up on your models and hooks. + expect(get: "/accreditations/1/edit").to route_to("accreditations#edit", id: "1")
            54. -
            55. +
            56. - # config.omniauth :github, 'APP_ID', 'APP_SECRET', scope: 'user,public_repo' + end
            57. -
            58. +
            59. @@ -6403,95 +18804,95 @@

            60. -
            61. +
            62. - # ==> Warden configuration +
            63. -
            64. - +
            65. + 1 - # If you want to use other strategies, that are not supported by Devise, or + it "routes to #create" do
            66. -
            67. - +
            68. + 1 - # change the failure app, you can configure them inside the config.warden block. + expect(post: "/accreditations").to route_to("accreditations#create")
            69. -
            70. +
            71. - # + end
            72. -
            73. +
            74. - # config.warden do |manager| +
            75. -
            76. - +
            77. + 1 - # manager.intercept_401 = false + it "routes to #update via PUT" do
            78. -
            79. - +
            80. + 1 - # manager.default_strategies(scope: :user).unshift :some_external_strategy + expect(put: "/accreditations/1").to route_to("accreditations#update", id: "1")
            81. -
            82. +
            83. - # end + end
            84. -
            85. +
            86. @@ -6502,227 +18903,258 @@

            87. -
            88. - +
            89. + 1 - # ==> Mountable engine configurations + it "routes to #update via PATCH" do
            90. -
            91. - +
            92. + 1 - # When using Devise inside an engine, let's call it `MyEngine`, and this engine + expect(patch: "/accreditations/1").to route_to("accreditations#update", id: "1")
            93. -
            94. +
            95. - # is mountable, there are some extra configurations to be taken into account. + end
            96. -
            97. +
            98. - # The following options are available, assuming the engine is mounted as: +
            99. -
            100. - +
            101. + 1 - # + it "routes to #destroy" do
            102. -
            103. - +
            104. + 1 - # mount MyEngine, at: '/my_engine' + expect(delete: "/accreditations/1").to route_to("accreditations#destroy", id: "1")
            105. -
            106. +
            107. - # + end
            108. -
            109. +
            110. - # The router that invoked `devise_for`, in the example above, would be: + end
            111. -
            112. +
            113. - # config.router_name = :my_engine + end
            114. +
            +
            +
            + + +
            +
            +

            spec/routing/requirements_routing_spec.rb

            +

            + + 100.0% + + + lines covered +

            + + + +
            + 19 relevant lines. + 19 lines covered and + 0 lines missed. +
            + + + +
            + +
            +    
              +
              -
            1. - +
            2. + 1 - # + require "rails_helper"
            3. -
            4. +
            5. - # When using OmniAuth, Devise cannot automatically set OmniAuth path, +
            6. -
            7. - +
            8. + 1 - # so you need to do it manually. For the users scope, it would be: + RSpec.describe RequirementsController, type: :routing do
            9. -
            10. - +
            11. + 1 - # config.omniauth_path_prefix = '/my_engine/users/auth' + describe "routing" do
            12. -
            13. - +
            14. + 1 - + it "routes to #index" do
            15. -
            16. - +
            17. + 1 - # ==> Turbolinks configuration + expect(:get => "/requirements").to route_to("requirements#index")
            18. -
            19. +
            20. - # If your app is using Turbolinks, Turbolinks::Controller needs to be included to make redirection work correctly: + end
            21. -
            22. +
            23. - # +
            24. -
            25. - +
            26. + 1 - # ActiveSupport.on_load(:devise_failure_app) do + it "routes to #new" do
            27. -
            28. - +
            29. + 1 - # include Turbolinks::Controller + expect(:get => "/requirements/new").to route_to("requirements#new")
            30. -
            31. +
            32. - # end + end
            33. -
            34. +
            35. @@ -6733,115 +19165,84 @@

            36. -
            37. - +
            38. + 1 - # ==> Configuration for :registerable + it "routes to #show" do
            39. -
            40. - +
            41. + 1 - + expect(:get => "/requirements/1").to route_to("requirements#show", :id => "1")
            42. -
            43. +
            44. - # When set to false, does not sign a user in automatically after their password is + end
            45. -
            46. +
            47. - # changed. Defaults to true, so a user is signed in automatically after changing a password. +
            48. -
            49. - +
            50. + 1 - # config.sign_in_after_change_password = true + it "routes to #edit" do
            51. -
            52. - +
            53. + 1 - end + expect(:get => "/requirements/1/edit").to route_to("requirements#edit", :id => "1")
            54. -
            -
            -
            - - -
            -
            -

            config/initializers/filter_parameter_logging.rb

            -

            - - 100.0% - - - lines covered -

            - - - -
            - 1 relevant lines. - 1 lines covered and - 0 lines missed. -
            - - - -
            - -
            -    
              -
              -
            1. +
            2. - # Be sure to restart your server when you modify this file. + end
            3. -
            4. +
            5. @@ -6852,231 +19253,200 @@

            6. -
            7. +
            8. - # Configure sensitive parameters which will be filtered from the log file. +
            9. -
            10. +
            11. 1 - Rails.application.config.filter_parameters += [:password] + it "routes to #create" do
            12. -
            -
            -
            - - -
            -
            -

            config/initializers/inflections.rb

            -

            - - 100.0% - - - lines covered -

            - - - -
            - 0 relevant lines. - 0 lines covered and - 0 lines missed. -
            - - - -
            - -
            -    
              -
              -
            1. - +
            2. + 1 - # Be sure to restart your server when you modify this file. + expect(:post => "/requirements").to route_to("requirements#create")
            3. -
            4. +
            5. - + end
            6. -
            7. +
            8. - # Add new inflection rules using the following format. Inflections +
            9. -
            10. - +
            11. + 1 - # are locale specific, and you may define rules for as many different + it "routes to #update via PUT" do
            12. -
            13. - +
            14. + 1 - # locales as you wish. All of these examples are active by default: + expect(:put => "/requirements/1").to route_to("requirements#update", :id => "1")
            15. -
            16. +
            17. - # ActiveSupport::Inflector.inflections(:en) do |inflect| + end
            18. -
            19. +
            20. - # inflect.plural /^(ox)$/i, '\1en' +
            21. -
            22. - +
            23. + 1 - # inflect.singular /^(ox)en/i, '\1' + it "routes to #update via PATCH" do
            24. -
            25. - +
            26. + 1 - # inflect.irregular 'person', 'people' + expect(:patch => "/requirements/1").to route_to("requirements#update", :id => "1")
            27. -
            28. +
            29. - # inflect.uncountable %w( fish sheep ) + end
            30. -
            31. +
            32. - # end +
            33. -
            34. - +
            35. + 1 - + it "routes to #destroy" do
            36. -
            37. - +
            38. + 1 - # These inflection rules are supported but not enabled by default: + expect(:delete => "/requirements/1").to route_to("requirements#destroy", :id => "1")
            39. -
            40. +
            41. - # ActiveSupport::Inflector.inflections(:en) do |inflect| + end
            42. -
            43. +
            44. - # inflect.acronym 'RESTful' + end
            45. -
            46. +
            47. - # end + end
            48. @@ -7085,9 +19455,9 @@

            -
            +
            -

            config/initializers/mime_types.rb

            +

            spec/routing/sei_processes_routing_spec.rb

            100.0% @@ -7099,8 +19469,8 @@

            - 0 relevant lines. - 0 lines covered and + 19 relevant lines. + 19 lines covered and 0 lines missed.
            @@ -7112,93 +19482,128 @@

              -
            1. - +
            2. + 1 + + + + + require "rails_helper" +
            3. +
              + +
              +
            4. + + + + + + +
            5. +
              + +
              +
            6. + 1 + + + + + RSpec.describe SeiProcessesController, type: :routing do +
            7. +
              + +
              +
            8. + 1 + + + + + describe "routing" do +
            9. +
              + +
              +
            10. + 1 - # Be sure to restart your server when you modify this file. + it "routes to #index" do
            11. -
            12. - +
            13. + 1 - + expect(:get => "/sei_processes").to route_to("sei_processes#index")
            14. -
            15. +
            16. - # Add new mime types for use in respond_to blocks: + end
            17. -
            18. +
            19. - # Mime::Type.register "text/richtext", :rtf +
            20. -
            - -

            - - -
            -
            -

            config/initializers/wrap_parameters.rb

            -

            - - 100.0% - - - lines covered -

            - - +
            +
          340. + 1 + -
            - 2 relevant lines. - 2 lines covered and - 0 lines missed. -
            + - + it "routes to #new" do +
          341. +
            + +
            +
          342. + 1 + -
          343. + -
            -    
              + expect(:get => "/sei_processes/new").to route_to("sei_processes#new") + +
            -
          344. +
          345. - # Be sure to restart your server when you modify this file. + end
          346. -
          347. +
          348. @@ -7209,84 +19614,84 @@

          349. -
          350. - +
          351. + 1 - # This file contains settings for ActionController::ParamsWrapper which + it "routes to #show" do
          352. -
          353. - +
          354. + 1 - # is enabled by default. + expect(:get => "/sei_processes/1").to route_to("sei_processes#show", :id => "1")
          355. -
          356. +
          357. - + end
          358. -
          359. +
          360. - # Enable parameter wrapping for JSON. You can disable this by setting :format to an empty array. +
          361. -
          362. +
          363. 1 - ActiveSupport.on_load(:action_controller) do + it "routes to #edit" do
          364. -
          365. - 2 +
          366. + 1 - wrap_parameters format: [:json] + expect(:get => "/sei_processes/1/edit").to route_to("sei_processes#edit", :id => "1")
          367. -
          368. +
          369. - end + end
          370. -
          371. +
          372. @@ -7297,181 +19702,172 @@

          373. -
          374. +
          375. - # To enable root element in JSON for ActiveRecord objects. +
          376. -
          377. - +
          378. + 1 - # ActiveSupport.on_load(:active_record) do + it "routes to #create" do
          379. -
          380. - +
          381. + 1 - # self.include_root_in_json = true + expect(:post => "/sei_processes").to route_to("sei_processes#create")
          382. -
          383. +
          384. - # end + end
          385. - - -
            - - -
            -
            -

            config/routes.rb

            -

            - - 100.0% - - - lines covered -

            - - +
            +
          386. + + -
            - 9 relevant lines. - 9 lines covered and - 0 lines missed. -
            + - + +
          387. +
            + +
            +
          388. + 1 + -
          389. + -
            -    
              + it "routes to #update via PUT" do + +
            -
          390. - +
          391. + 1 - # frozen_string_literal: true + expect(:put => "/sei_processes/1").to route_to("sei_processes#update", :id => "1")
          392. -
          393. +
          394. - + end
          395. -
          396. - 1 +
          397. + - Rails.application.routes.draw do +
          398. -
          399. +
          400. 1 - resources :accreditations + it "routes to #update via PATCH" do
          401. -
          402. +
          403. 1 - resources :sei_processes + expect(:patch => "/sei_processes/1").to route_to("sei_processes#update", :id => "1")
          404. -
          405. +
          406. - + end
          407. -
          408. - 1 +
          409. + - resources :requirements do +
          410. -
          411. +
          412. 1 - member do + it "routes to #destroy" do
          413. -
          414. +
          415. 1 - delete :delete_document_attachment + expect(:delete => "/sei_processes/1").to route_to("sei_processes#destroy", :id => "1")
          416. -
          417. +
          418. @@ -7482,7 +19878,7 @@

          419. -
          420. +
          421. @@ -7493,68 +19889,99 @@

          422. -
          423. +
          424. - + end
          425. + + +
            + + +
            +
            +

            spec/views/home/index.html.erb_spec.rb

            +

            + + 100.0% + + + lines covered +

            + + + +
            + 0 relevant lines. + 0 lines covered and + 0 lines missed. +
            + + + +
            + +
            +    
              +
              -
            1. - 1 +
            2. + - get 'home/index' + # require 'rails_helper'
            3. -
            4. - 1 +
            5. + - devise_for :users +
            6. -
            7. +
            8. - # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html + # RSpec.describe "home/index.html.erb", type: :view do
            9. -
            10. - 1 +
            11. + - root to: 'home#index' + # pending "add some examples to (or delete) #{__FILE__}"
            12. -
            13. +
            14. - end + # end
            15. diff --git a/features.html b/features.html index 29a55b09..ac67d4aa 100644 --- a/features.html +++ b/features.html @@ -303,414 +303,414 @@ + + + + + + + + + + + + + + + + +
              +

              + class Accreditation +

              + +
              + +
              + + +
              + + + + + + + + + +
              +
              +

              Public Instance Methods

              +
              + + +
              + +
              + allow_deletion!() + + click to toggle source + +
              + + +
              + +

              Habilita deleção (usado por 'db/seeds.rb')

              + + + + +
              +
              # File app/models/accreditation.rb, line 32
              +def allow_deletion!
              +  @allow_deletion = true
              +end
              +
              + +
              + + + + +
              + + +
              + +
              + check_date() + + click to toggle source + +
              + + +
              + +

              Permite atualização com base em decorrência real de um período (data final superior a data inicial)

              + + + + +
              +
              # File app/models/accreditation.rb, line 22
              +def check_date
              +  if (start_date == nil) || (end_date == nil) || (end_date < start_date)
              +    self.errors.add(:end_date, 'inválida')
              +    return false
              +  end
              +  true
              +end
              +
              + +
              + + + + +
              + + +
              + +
              + check_permission() + + click to toggle source + +
              + + +
              + +

              Permite deleção de credenciamento por um administrador ou caso metodo 'allow_deletion!' tenha sido chamado pela instancia

              + + + + +
              +
              # File app/models/accreditation.rb, line 36
              +def check_permission
              +  throw(:abort) unless @allow_deletion || current_user_is_admin
              +end
              +
              + +
              + + + + +
              + + +
              + +
              + check_role() + + click to toggle source + +
              + + +
              + +

              Permite criação ou atualização do credenciamento por um administrador

              + + + + +
              +
              # File app/models/accreditation.rb, line 12
              +def check_role
              +  unless current_user_is_admin
              +    self.errors.add(:base, 'Usuário sem permissão')
              +    return false
              +  end
              +  true
              +end
              +
              + +
              + + + + +
              + + +
              + +
              + current_user_is_admin() + + click to toggle source + +
              + + +
              + +

              Define se usuário atual está logado e se é administrador do sistema

              + + + + +
              +
              # File app/models/accreditation.rb, line 8
              +def current_user_is_admin
              +  Current.user != nil && Current.user.role == 'administrator'
              +end
              +
              + +
              + + + + +
              + + +
              + +
              + +
              + + + + diff --git a/doc/AccreditationsController.html b/doc/AccreditationsController.html new file mode 100644 index 00000000..087c5e60 --- /dev/null +++ b/doc/AccreditationsController.html @@ -0,0 +1,391 @@ + + + + + + +class AccreditationsController - RDoc Documentation + + + + + + + + + + + + + + + + + + +
              +

              + class AccreditationsController +

              + +
              + +
              + + +
              + + + + + + + + + +
              +
              +

              Public Instance Methods

              +
              + + +
              + +
              + create() + + click to toggle source + +
              + + +
              + +

              POST /accreditations POST /accreditations.json

              + + + + +
              +
              # File app/controllers/accreditations_controller.rb, line 32
              +def create
              +  # O processo de criação de credenciamento é feita em sei_processes_controller
              +end
              +
              + +
              + + + + +
              + + +
              + +
              + destroy() + + click to toggle source + +
              + + +
              + +

              DELETE /accreditations/1 DELETE /accreditations/1.json

              + + + + +
              +
              # File app/controllers/accreditations_controller.rb, line 54
              +def destroy
              +  respond_to do |format|
              +    # Mensagem de sucesso ao excluir o credenciamento quando condições da model forem cumpridas
              +    if @accreditation.destroy
              +      format.html { redirect_to accreditations_url, notice: 'Credenciamento excluído com sucesso!' }
              +      format.json { head :no_content }
              +    # Mensagem de erro se condições da model não forem cumpridas
              +    else
              +      format.html { redirect_to accreditations_url, notice: 'Erro: não foi possível excluir o credenciamento!' }
              +      format.json { head :no_content }
              +    end
              +  end
              +end
              +
              + +
              + + + + +
              + + +
              + +
              + edit() + + click to toggle source + +
              + + +
              + +

              GET /accreditations/1/edit

              + + + + +
              +
              # File app/controllers/accreditations_controller.rb, line 27
              +def edit
              +end
              +
              + +
              + + + + +
              + + +
              + +
              + index() + + click to toggle source + +
              + + +
              + +

              GET /accreditations GET /accreditations.json

              + + + + +
              +
              # File app/controllers/accreditations_controller.rb, line 6
              +def index
              +  # Lista todas os credenciamentos para um administrador
              +  if current_user.role == "administrator"
              +    @accreditations = Accreditation.all
              +  # Lista os credenciamentos próprios para um professor
              +  else
              +    @accreditations = Accreditation.where(user_id: current_user.id)
              +  end
              +end
              +
              + +
              + + + + +
              + + +
              + +
              + new() + + click to toggle source + +
              + + +
              + +

              GET /accreditations/new

              + + + + +
              +
              # File app/controllers/accreditations_controller.rb, line 22
              +def new
              +  # Não há view para new, pois o processo de criação é feita em sei_processes_controller
              +end
              +
              + +
              + + + + +
              + + +
              + +
              + show() + + click to toggle source + +
              + + +
              + +

              GET /accreditations/1 GET /accreditations/1.json

              + + + + +
              +
              # File app/controllers/accreditations_controller.rb, line 18
              +def show
              +end
              +
              + +
              + + + + +
              + + +
              + +
              + update() + + click to toggle source + +
              + + +
              + +

              PATCH/PUT /accreditations/1 PATCH/PUT /accreditations/1.json

              + + + + +
              +
              # File app/controllers/accreditations_controller.rb, line 38
              +def update
              +  respond_to do |format|
              +    # Mensagem de sucesso ao atualizar credenciamento quando condições da model forem cumpridas
              +    if @accreditation.update(accreditation_params)
              +      format.html { redirect_to accreditations_url, notice: 'Credenciamento atualizado com sucesso!' }
              +      format.json { render :show, status: :ok, location: @accreditation }
              +    # Mensagem de erro se condições da model não forem cumpridas
              +    else
              +      format.html { render :edit }
              +      format.json { render json: @accreditation.errors, status: :unprocessable_entity }
              +    end
              +  end
              +end
              +
              + +
              + + + + +
              + + +
              + +
              + +
              + + + + diff --git a/doc/AccreditationsHelper.html b/doc/AccreditationsHelper.html new file mode 100644 index 00000000..fc98a810 --- /dev/null +++ b/doc/AccreditationsHelper.html @@ -0,0 +1,99 @@ + + + + + + +module AccreditationsHelper - RDoc Documentation + + + + + + + + + + + + + + + + + + +
              +

              + module AccreditationsHelper +

              + +
              + +
              + + +
              + + + + + + + + + +
              + +
              + + + + diff --git a/doc/ActiveSupport.html b/doc/ActiveSupport.html new file mode 100644 index 00000000..cfb0ccc1 --- /dev/null +++ b/doc/ActiveSupport.html @@ -0,0 +1,99 @@ + + + + + + +module ActiveSupport - RDoc Documentation + + + + + + + + + + + + + + + + + + +
              +

              + module ActiveSupport +

              + +
              + +
              + + +
              + + + + + + + + + +
              + +
              + + + + diff --git a/doc/ActiveSupport/TestCase.html b/doc/ActiveSupport/TestCase.html new file mode 100644 index 00000000..25772e4e --- /dev/null +++ b/doc/ActiveSupport/TestCase.html @@ -0,0 +1,106 @@ + + + + + + +class ActiveSupport::TestCase - RDoc Documentation + + + + + + + + + + + + + + + + + + +
              +

              + class ActiveSupport::TestCase +

              + +
              + +
              + + +
              + + + + + + + + + +
              + +
              + + + + diff --git a/doc/AddInfoToUsers.html b/doc/AddInfoToUsers.html new file mode 100644 index 00000000..090980d5 --- /dev/null +++ b/doc/AddInfoToUsers.html @@ -0,0 +1,159 @@ + + + + + + +class AddInfoToUsers - RDoc Documentation + + + + + + + + + + + + + + + + + + +
              +

              + class AddInfoToUsers +

              + +
              + +
              + + +
              + + + + + + + + + +
              +
              +

              Public Instance Methods

              +
              + + +
              + +
              + change() + + click to toggle source + +
              + + +
              + + + + + + +
              +
              # File db/migrate/20191114163205_add_info_to_users.rb, line 2
              +def change
              +  add_column :users, :full_name, :string
              +  add_column :users, :registration, :string
              +  add_column :users, :role, :integer
              +end
              +
              + +
              + + + + +
              + + +
              + +
              + +
              + + + + diff --git a/doc/ApplicationCable.html b/doc/ApplicationCable.html new file mode 100644 index 00000000..f3bc330f --- /dev/null +++ b/doc/ApplicationCable.html @@ -0,0 +1,99 @@ + + + + + + +module ApplicationCable - RDoc Documentation + + + + + + + + + + + + + + + + + + +
              +

              + module ApplicationCable +

              + +
              + +
              + + +
              + + + + + + + + + +
              + +
              + + + + diff --git a/doc/ApplicationCable/Channel.html b/doc/ApplicationCable/Channel.html new file mode 100644 index 00000000..e8806edf --- /dev/null +++ b/doc/ApplicationCable/Channel.html @@ -0,0 +1,106 @@ + + + + + + +class ApplicationCable::Channel - RDoc Documentation + + + + + + + + + + + + + + + + + + +
              +

              + class ApplicationCable::Channel +

              + +
              + +
              + + +
              + + + + + + + + + +
              + +
              + + + + diff --git a/doc/ApplicationCable/Connection.html b/doc/ApplicationCable/Connection.html new file mode 100644 index 00000000..4e71d3f6 --- /dev/null +++ b/doc/ApplicationCable/Connection.html @@ -0,0 +1,106 @@ + + + + + + +class ApplicationCable::Connection - RDoc Documentation + + + + + + + + + + + + + + + + + + +
              +

              + class ApplicationCable::Connection +

              + +
              + +
              + + +
              + + + + + + + + + +
              + +
              + + + + diff --git a/doc/ApplicationController.html b/doc/ApplicationController.html new file mode 100644 index 00000000..e78966d8 --- /dev/null +++ b/doc/ApplicationController.html @@ -0,0 +1,204 @@ + + + + + + +class ApplicationController - RDoc Documentation + + + + + + + + + + + + + + + + + + +
              +

              + class ApplicationController +

              + +
              + +
              + + +
              + + + + + + + + + +
              +
              +

              Public Instance Methods

              +
              + + +
              + +
              + set_current_user() { || ... } + + click to toggle source + +
              + + +
              + + + + + + +
              +
              # File app/controllers/application_controller.rb, line 11
              +def set_current_user
              +  Current.user = current_user
              +  yield
              +ensure
              +  # to address the thread variable leak issues in Puma/Thin webserver
              +  Current.user = nil
              +end
              +
              + +
              + + + + +
              + + +
              + +
              +
              +

              Protected Instance Methods

              +
              + + +
              + +
              + configure_permitted_parameters() + + click to toggle source + +
              + + +
              + + + + + + +
              +
              # File app/controllers/application_controller.rb, line 21
              +def configure_permitted_parameters
              +  devise_parameter_sanitizer.permit(:sign_up, keys: %i[full_name role])
              +end
              +
              + +
              + + + + +
              + + +
              + +
              + +
              + + + + diff --git a/doc/ApplicationHelper.html b/doc/ApplicationHelper.html new file mode 100644 index 00000000..f7f1633a --- /dev/null +++ b/doc/ApplicationHelper.html @@ -0,0 +1,99 @@ + + + + + + +module ApplicationHelper - RDoc Documentation + + + + + + + + + + + + + + + + + + +
              +

              + module ApplicationHelper +

              + +
              + +
              + + +
              + + + + + + + + + +
              + +
              + + + + diff --git a/doc/ApplicationJob.html b/doc/ApplicationJob.html new file mode 100644 index 00000000..76a1de6a --- /dev/null +++ b/doc/ApplicationJob.html @@ -0,0 +1,106 @@ + + + + + + +class ApplicationJob - RDoc Documentation + + + + + + + + + + + + + + + + + + +
              +

              + class ApplicationJob +

              + +
              + +
              + + +
              + + + + + + + + + +
              + +
              + + + + diff --git a/doc/ApplicationMailer.html b/doc/ApplicationMailer.html new file mode 100644 index 00000000..988f450c --- /dev/null +++ b/doc/ApplicationMailer.html @@ -0,0 +1,106 @@ + + + + + + +class ApplicationMailer - RDoc Documentation + + + + + + + + + + + + + + + + + + +
              +

              + class ApplicationMailer +

              + +
              + +
              + + +
              + + + + + + + + + +
              + +
              + + + + diff --git a/doc/ApplicationRecord.html b/doc/ApplicationRecord.html new file mode 100644 index 00000000..d63677f1 --- /dev/null +++ b/doc/ApplicationRecord.html @@ -0,0 +1,106 @@ + + + + + + +class ApplicationRecord - RDoc Documentation + + + + + + + + + + + + + + + + + + +
              +

              + class ApplicationRecord +

              + +
              + +
              + + +
              + + + + + + + + + +
              + +
              + + + + diff --git a/doc/ApplicationSystemTestCase.html b/doc/ApplicationSystemTestCase.html new file mode 100644 index 00000000..4b7ec26b --- /dev/null +++ b/doc/ApplicationSystemTestCase.html @@ -0,0 +1,106 @@ + + + + + + +class ApplicationSystemTestCase - RDoc Documentation + + + + + + + + + + + + + + + + + + +
              +

              + class ApplicationSystemTestCase +

              + +
              + +
              + + +
              + + + + + + + + + +
              + +
              + + + + diff --git a/doc/CreateAccreditations.html b/doc/CreateAccreditations.html new file mode 100644 index 00000000..6257dbfc --- /dev/null +++ b/doc/CreateAccreditations.html @@ -0,0 +1,164 @@ + + + + + + +class CreateAccreditations - RDoc Documentation + + + + + + + + + + + + + + + + + + +
              +

              + class CreateAccreditations +

              + +
              + +
              + + +
              + + + + + + + + + +
              +
              +

              Public Instance Methods

              +
              + + +
              + +
              + change() + + click to toggle source + +
              + + +
              + + + + + + +
              +
              # File db/migrate/20201114202425_create_accreditations.rb, line 2
              +def change
              +  create_table :accreditations do |t|
              +    t.belongs_to :user, foreign_key: true
              +    t.date :start_date
              +    t.date :end_date
              +    t.references :sei_process, foreign_key: true
              +
              +    t.timestamps
              +  end
              +end
              +
              + +
              + + + + +
              + + +
              + +
              + +
              + + + + diff --git a/doc/CreateActiveStorageTables.html b/doc/CreateActiveStorageTables.html new file mode 100644 index 00000000..90381d0c --- /dev/null +++ b/doc/CreateActiveStorageTables.html @@ -0,0 +1,180 @@ + + + + + + +class CreateActiveStorageTables - RDoc Documentation + + + + + + + + + + + + + + + + + + +
              +

              + class CreateActiveStorageTables +

              + +
              + +

              This migration comes from active_storage (originally 20170806125915)

              + +
              + + +
              + + + + + + + + + +
              +
              +

              Public Instance Methods

              +
              + + +
              + +
              + change() + + click to toggle source + +
              + + +
              + + + + + + +
              +
              # File db/migrate/20201113222556_create_active_storage_tables.active_storage.rb, line 3
              +def change
              +  create_table :active_storage_blobs do |t|
              +    t.string   :key,        null: false
              +    t.string   :filename,   null: false
              +    t.string   :content_type
              +    t.text     :metadata
              +    t.bigint   :byte_size,  null: false
              +    t.string   :checksum,   null: false
              +    t.datetime :created_at, null: false
              +
              +    t.index [ :key ], unique: true
              +  end
              +
              +  create_table :active_storage_attachments do |t|
              +    t.string     :name,     null: false
              +    t.references :record,   null: false, polymorphic: true, index: false
              +    t.references :blob,     null: false
              +
              +    t.datetime :created_at, null: false
              +
              +    t.index [ :record_type, :record_id, :name, :blob_id ], name: "index_active_storage_attachments_uniqueness", unique: true
              +    t.foreign_key :active_storage_blobs, column: :blob_id
              +  end
              +end
              +
              + +
              + + + + +
              + + +
              + +
              + +
              + + + + diff --git a/doc/CreateRequirements.html b/doc/CreateRequirements.html new file mode 100644 index 00000000..6050975b --- /dev/null +++ b/doc/CreateRequirements.html @@ -0,0 +1,162 @@ + + + + + + +class CreateRequirements - RDoc Documentation + + + + + + + + + + + + + + + + + + +
              +

              + class CreateRequirements +

              + +
              + +
              + + +
              + + + + + + + + + +
              +
              +

              Public Instance Methods

              +
              + + +
              + +
              + change() + + click to toggle source + +
              + + +
              + + + + + + +
              +
              # File db/migrate/20201113221041_create_requirements.rb, line 2
              +def change
              +  create_table :requirements do |t|
              +    t.string :title
              +    t.text :content
              +
              +    t.timestamps
              +  end
              +end
              +
              + +
              + + + + +
              + + +
              + +
              + +
              + + + + diff --git a/doc/CreateSeiProcesses.html b/doc/CreateSeiProcesses.html new file mode 100644 index 00000000..6a84ebc4 --- /dev/null +++ b/doc/CreateSeiProcesses.html @@ -0,0 +1,163 @@ + + + + + + +class CreateSeiProcesses - RDoc Documentation + + + + + + + + + + + + + + + + + + +
              +

              + class CreateSeiProcesses +

              + +
              + +
              + + +
              + + + + + + + + + +
              +
              +

              Public Instance Methods

              +
              + + +
              + +
              + change() + + click to toggle source + +
              + + +
              + + + + + + +
              +
              # File db/migrate/20201113222004_create_sei_processes.rb, line 2
              +def change
              +  create_table :sei_processes do |t|
              +    t.belongs_to :user, foreign_key: true
              +    t.integer :status
              +    t.string :code
              +
              +    t.timestamps
              +  end
              +end
              +
              + +
              + + + + +
              + + +
              + +
              + +
              + + + + diff --git a/doc/Current.html b/doc/Current.html new file mode 100644 index 00000000..707ddfda --- /dev/null +++ b/doc/Current.html @@ -0,0 +1,99 @@ + + + + + + +module Current - RDoc Documentation + + + + + + + + + + + + + + + + + + +
              +

              + module Current +

              + +
              + +
              + + +
              + + + + + + + + + +
              + +
              + + + + diff --git a/doc/DeviseCreateUsers.html b/doc/DeviseCreateUsers.html new file mode 100644 index 00000000..c1117bcd --- /dev/null +++ b/doc/DeviseCreateUsers.html @@ -0,0 +1,194 @@ + + + + + + +class DeviseCreateUsers - RDoc Documentation + + + + + + + + + + + + + + + + + + +
              +

              + class DeviseCreateUsers +

              + +
              + +
              + + +
              + + + + + + + + + +
              +
              +

              Public Instance Methods

              +
              + + +
              + +
              + change() + + click to toggle source + +
              + + +
              + + + + + + +
              +
              # File db/migrate/20191114162918_devise_create_users.rb, line 4
              +def change
              +  create_table :users do |t|
              +    ## Database authenticatable
              +    t.string :email,              null: false, default: ""
              +    t.string :encrypted_password, null: false, default: ""
              +
              +    ## Recoverable
              +    t.string   :reset_password_token
              +    t.datetime :reset_password_sent_at
              +
              +    ## Rememberable
              +    t.datetime :remember_created_at
              +
              +    ## Trackable
              +    # t.integer  :sign_in_count, default: 0, null: false
              +    # t.datetime :current_sign_in_at
              +    # t.datetime :last_sign_in_at
              +    # t.inet     :current_sign_in_ip
              +    # t.inet     :last_sign_in_ip
              +
              +    ## Confirmable
              +    # t.string   :confirmation_token
              +    # t.datetime :confirmed_at
              +    # t.datetime :confirmation_sent_at
              +    # t.string   :unconfirmed_email # Only if using reconfirmable
              +
              +    ## Lockable
              +    # t.integer  :failed_attempts, default: 0, null: false # Only if lock strategy is :failed_attempts
              +    # t.string   :unlock_token # Only if unlock strategy is :email or :both
              +    # t.datetime :locked_at
              +
              +
              +    t.timestamps null: false
              +  end
              +
              +  add_index :users, :email,                unique: true
              +  add_index :users, :reset_password_token, unique: true
              +  # add_index :users, :confirmation_token,   unique: true
              +  # add_index :users, :unlock_token,         unique: true
              +end
              +
              + +
              + + + + +
              + + +
              + +
              + +
              + + + + diff --git a/doc/Gemfile.html b/doc/Gemfile.html new file mode 100644 index 00000000..5025aebd --- /dev/null +++ b/doc/Gemfile.html @@ -0,0 +1,259 @@ + + + + + + +Gemfile - RDoc Documentation + + + + + + + + + + + + + + + + + + +
              + +

              source 'rubygems.org' git_source(:github) { |repo| “github.com/#{repo}.git” }

              + +

              ruby '2.6.3'

              + +

              # Bundle edge Rails instead: gem 'rails', github: 'rails/rails' gem 'rails', '~> 5.2.3' # Use postgresql as the database for Active Record gem 'pg', '>= 0.18', '< 2.0' # Use Puma as the app server gem 'puma', '~> 3.12' # Use SCSS for stylesheets gem 'sass-rails', '~> 5.0' # Use Uglifier as compressor for JavaScript assets gem 'uglifier', '>= 1.3.0' # See github.com/rails/execjs#readme for more supported runtimes # gem 'mini_racer', platforms: :ruby

              + +

              # Devise provides registration, authentication, password recovery and account confirmation gem 'devise' # Use CoffeeScript for .coffee assets and views gem 'coffee-rails', '~> 4.2' # Turbolinks makes navigating your web application faster. Read more: github.com/turbolinks/turbolinks gem 'turbolinks', '~> 5' # Build JSON APIs with ease. Read more: github.com/rails/jbuilder gem 'jbuilder', '~> 2.5' gem 'simplecov', require: false, group: :test # Use Redis adapter to run Action Cable in production # gem 'redis', '~> 4.0' # Use ActiveModel has_secure_password # gem 'bcrypt', '~> 3.1.7'

              + +

              # Use ActiveStorage variant # gem 'mini_magick', '~> 4.8'

              + +

              # Use Capistrano for deployment # gem 'capistrano-rails', group: :development

              + +

              # Reduces boot times through caching; required in config/boot.rb gem 'bootsnap', '>= 1.1.0', require: false

              + +

              group :development, :test do

              + +
              # Call 'byebug' anywhere in the code to stop execution and get a debugger console
              +gem 'byebug', platforms: [:mri, :mingw, :x64_mingw]
              +gem 'rspec-rails'
              +
              + +

              end

              + +

              group :development do

              + +
              # Access an interactive console on exception pages or by calling 'console' anywhere in the code.
              +gem 'web-console', '>= 3.3.0'
              +gem 'listen', '>= 3.0.5', '< 3.2'
              +# Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring
              +gem 'spring'
              +gem 'spring-watcher-listen', '~> 2.0.0'
              +
              + +

              end

              + +

              group :test do

              + +
              # Adds support for Capybara system testing and selenium driver
              +gem 'selenium-webdriver'
              +# Easy installation and use of chromedriver to run system tests with Chrome
              +gem 'webdrivers'
              +gem 'cucumber-rails', require: false
              +gem 'cucumber-rails-training-wheels' # some pre-fabbed step definitions
              +# database_cleaner is not required, but highly recommended
              +gem 'database_cleaner'
              +gem 'capybara', '>= 2.15'
              +gem 'launchy' # a useful debugging aid for user stories
              +gem 'shoulda-matchers'
              +
              + +

              end

              + +

              # Windows does not include zoneinfo files, so bundle the tzinfo-data gem gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]

              + +

              # Rails 5.2 and Rails 6 gem 'active_storage_validations'

              + +

              # Optional, to use :dimension validator or :aspect_ratio validator gem 'mini_magick', '>= 4.9.5'

              + +

              # Ordena a lista pelo ABC Score em conformidade a Sprint 3 gem 'flog'

              + +
              + + + + + diff --git a/doc/Gemfile_lock.html b/doc/Gemfile_lock.html new file mode 100644 index 00000000..4a3465f3 --- /dev/null +++ b/doc/Gemfile_lock.html @@ -0,0 +1,542 @@ + + + + + + +Gemfile.lock - RDoc Documentation + + + + + + + + + + + + + + + + + + +
              + +

              GEM

              + +
              remote: https://rubygems.org/
              +specs:
              +  actioncable (5.2.4.4)
              +    actionpack (= 5.2.4.4)
              +    nio4r (~> 2.0)
              +    websocket-driver (>= 0.6.1)
              +  actionmailer (5.2.4.4)
              +    actionpack (= 5.2.4.4)
              +    actionview (= 5.2.4.4)
              +    activejob (= 5.2.4.4)
              +    mail (~> 2.5, >= 2.5.4)
              +    rails-dom-testing (~> 2.0)
              +  actionpack (5.2.4.4)
              +    actionview (= 5.2.4.4)
              +    activesupport (= 5.2.4.4)
              +    rack (~> 2.0, >= 2.0.8)
              +    rack-test (>= 0.6.3)
              +    rails-dom-testing (~> 2.0)
              +    rails-html-sanitizer (~> 1.0, >= 1.0.2)
              +  actionview (5.2.4.4)
              +    activesupport (= 5.2.4.4)
              +    builder (~> 3.1)
              +    erubi (~> 1.4)
              +    rails-dom-testing (~> 2.0)
              +    rails-html-sanitizer (~> 1.0, >= 1.0.3)
              +  active_storage_validations (0.9.0)
              +    rails (>= 5.2.0)
              +  activejob (5.2.4.4)
              +    activesupport (= 5.2.4.4)
              +    globalid (>= 0.3.6)
              +  activemodel (5.2.4.4)
              +    activesupport (= 5.2.4.4)
              +  activerecord (5.2.4.4)
              +    activemodel (= 5.2.4.4)
              +    activesupport (= 5.2.4.4)
              +    arel (>= 9.0)
              +  activestorage (5.2.4.4)
              +    actionpack (= 5.2.4.4)
              +    activerecord (= 5.2.4.4)
              +    marcel (~> 0.3.1)
              +  activesupport (5.2.4.4)
              +    concurrent-ruby (~> 1.0, >= 1.0.2)
              +    i18n (>= 0.7, < 2)
              +    minitest (~> 5.1)
              +    tzinfo (~> 1.1)
              +  addressable (2.7.0)
              +    public_suffix (>= 2.0.2, < 5.0)
              +  arel (9.0.0)
              +  bcrypt (3.1.16)
              +  bindex (0.8.1)
              +  bootsnap (1.5.1)
              +    msgpack (~> 1.0)
              +  builder (3.2.4)
              +  byebug (11.1.3)
              +  capybara (3.33.0)
              +    addressable
              +    mini_mime (>= 0.1.3)
              +    nokogiri (~> 1.8)
              +    rack (>= 1.6.0)
              +    rack-test (>= 0.6.3)
              +    regexp_parser (~> 1.5)
              +    xpath (~> 3.2)
              +  childprocess (3.0.0)
              +  coffee-rails (4.2.2)
              +    coffee-script (>= 2.2.0)
              +    railties (>= 4.0.0)
              +  coffee-script (2.4.1)
              +    coffee-script-source
              +    execjs
              +  coffee-script-source (1.12.2)
              +  concurrent-ruby (1.1.7)
              +  crass (1.0.6)
              +  cucumber (5.2.0)
              +    builder (~> 3.2, >= 3.2.4)
              +    cucumber-core (~> 8.0, >= 8.0.1)
              +    cucumber-create-meta (~> 2.0, >= 2.0.2)
              +    cucumber-cucumber-expressions (~> 10.3, >= 10.3.0)
              +    cucumber-gherkin (~> 15.0, >= 15.0.2)
              +    cucumber-html-formatter (~> 9.0, >= 9.0.0)
              +    cucumber-messages (~> 13.1, >= 13.1.0)
              +    cucumber-wire (~> 4.0, >= 4.0.1)
              +    diff-lcs (~> 1.4, >= 1.4.4)
              +    multi_test (~> 0.1, >= 0.1.2)
              +    sys-uname (~> 1.2, >= 1.2.1)
              +  cucumber-core (8.0.1)
              +    cucumber-gherkin (~> 15.0, >= 15.0.2)
              +    cucumber-messages (~> 13.0, >= 13.0.1)
              +    cucumber-tag-expressions (~> 2.0, >= 2.0.4)
              +  cucumber-create-meta (2.0.4)
              +    cucumber-messages (~> 13.1, >= 13.1.0)
              +    sys-uname (~> 1.2, >= 1.2.1)
              +  cucumber-cucumber-expressions (10.3.0)
              +  cucumber-gherkin (15.0.2)
              +    cucumber-messages (~> 13.0, >= 13.0.1)
              +  cucumber-html-formatter (9.0.0)
              +    cucumber-messages (~> 13.0, >= 13.0.1)
              +  cucumber-messages (13.2.0)
              +    protobuf-cucumber (~> 3.10, >= 3.10.8)
              +  cucumber-rails (2.2.0)
              +    capybara (>= 2.18, < 4)
              +    cucumber (>= 3.0.2, < 6)
              +    mime-types (~> 3.2)
              +    nokogiri (~> 1.8)
              +    rails (>= 5.0, < 7)
              +  cucumber-rails-training-wheels (1.0.0)
              +    cucumber-rails (>= 1.1.1)
              +  cucumber-tag-expressions (2.0.4)
              +  cucumber-wire (4.0.1)
              +    cucumber-core (~> 8.0, >= 8.0.1)
              +    cucumber-cucumber-expressions (~> 10.3, >= 10.3.0)
              +    cucumber-messages (~> 13.0, >= 13.0.1)
              +  database_cleaner (1.8.5)
              +  devise (4.7.3)
              +    bcrypt (~> 3.0)
              +    orm_adapter (~> 0.1)
              +    railties (>= 4.1.0)
              +    responders
              +    warden (~> 1.2.3)
              +  diff-lcs (1.4.4)
              +  docile (1.3.2)
              +  erubi (1.10.0)
              +  execjs (2.7.0)
              +  ffi (1.13.1)
              +  ffi (1.13.1-x64-mingw32)
              +  flog (4.6.4)
              +    path_expander (~> 1.0)
              +    ruby_parser (~> 3.1, > 3.1.0)
              +    sexp_processor (~> 4.8)
              +  globalid (0.4.2)
              +    activesupport (>= 4.2.0)
              +  i18n (1.8.5)
              +    concurrent-ruby (~> 1.0)
              +  jbuilder (2.10.1)
              +    activesupport (>= 5.0.0)
              +  launchy (2.5.0)
              +    addressable (~> 2.7)
              +  listen (3.1.5)
              +    rb-fsevent (~> 0.9, >= 0.9.4)
              +    rb-inotify (~> 0.9, >= 0.9.7)
              +    ruby_dep (~> 1.2)
              +  loofah (2.7.0)
              +    crass (~> 1.0.2)
              +    nokogiri (>= 1.5.9)
              +  mail (2.7.1)
              +    mini_mime (>= 0.1.1)
              +  marcel (0.3.3)
              +    mimemagic (~> 0.3.2)
              +  method_source (1.0.0)
              +  middleware (0.1.0)
              +  mime-types (3.3.1)
              +    mime-types-data (~> 3.2015)
              +  mime-types-data (3.2020.1104)
              +  mimemagic (0.3.5)
              +  mini_magick (4.11.0)
              +  mini_mime (1.0.2)
              +  mini_portile2 (2.4.0)
              +  minitest (5.14.2)
              +  msgpack (1.3.3)
              +  msgpack (1.3.3-x64-mingw32)
              +  multi_test (0.1.2)
              +  nio4r (2.5.4)
              +  nokogiri (1.10.10)
              +    mini_portile2 (~> 2.4.0)
              +  nokogiri (1.10.10-x64-mingw32)
              +    mini_portile2 (~> 2.4.0)
              +  orm_adapter (0.5.0)
              +  path_expander (1.1.0)
              +  pg (1.2.3)
              +  pg (1.2.3-x64-mingw32)
              +  protobuf-cucumber (3.10.8)
              +    activesupport (>= 3.2)
              +    middleware
              +    thor
              +    thread_safe
              +  public_suffix (4.0.6)
              +  puma (3.12.6)
              +  rack (2.2.3)
              +  rack-test (1.1.0)
              +    rack (>= 1.0, < 3)
              +  rails (5.2.4.4)
              +    actioncable (= 5.2.4.4)
              +    actionmailer (= 5.2.4.4)
              +    actionpack (= 5.2.4.4)
              +    actionview (= 5.2.4.4)
              +    activejob (= 5.2.4.4)
              +    activemodel (= 5.2.4.4)
              +    activerecord (= 5.2.4.4)
              +    activestorage (= 5.2.4.4)
              +    activesupport (= 5.2.4.4)
              +    bundler (>= 1.3.0)
              +    railties (= 5.2.4.4)
              +    sprockets-rails (>= 2.0.0)
              +  rails-dom-testing (2.0.3)
              +    activesupport (>= 4.2.0)
              +    nokogiri (>= 1.6)
              +  rails-html-sanitizer (1.3.0)
              +    loofah (~> 2.3)
              +  railties (5.2.4.4)
              +    actionpack (= 5.2.4.4)
              +    activesupport (= 5.2.4.4)
              +    method_source
              +    rake (>= 0.8.7)
              +    thor (>= 0.19.0, < 2.0)
              +  rake (13.0.1)
              +  rb-fsevent (0.10.4)
              +  rb-inotify (0.10.1)
              +    ffi (~> 1.0)
              +  regexp_parser (1.8.2)
              +  responders (3.0.1)
              +    actionpack (>= 5.0)
              +    railties (>= 5.0)
              +  rspec-core (3.10.0)
              +    rspec-support (~> 3.10.0)
              +  rspec-expectations (3.10.0)
              +    diff-lcs (>= 1.2.0, < 2.0)
              +    rspec-support (~> 3.10.0)
              +  rspec-mocks (3.10.0)
              +    diff-lcs (>= 1.2.0, < 2.0)
              +    rspec-support (~> 3.10.0)
              +  rspec-rails (4.0.1)
              +    actionpack (>= 4.2)
              +    activesupport (>= 4.2)
              +    railties (>= 4.2)
              +    rspec-core (~> 3.9)
              +    rspec-expectations (~> 3.9)
              +    rspec-mocks (~> 3.9)
              +    rspec-support (~> 3.9)
              +  rspec-support (3.10.0)
              +  ruby_dep (1.5.0)
              +  ruby_parser (3.15.0)
              +    sexp_processor (~> 4.9)
              +  rubyzip (2.3.0)
              +  sass (3.7.4)
              +    sass-listen (~> 4.0.0)
              +  sass-listen (4.0.0)
              +    rb-fsevent (~> 0.9, >= 0.9.4)
              +    rb-inotify (~> 0.9, >= 0.9.7)
              +  sass-rails (5.1.0)
              +    railties (>= 5.2.0)
              +    sass (~> 3.1)
              +    sprockets (>= 2.8, < 4.0)
              +    sprockets-rails (>= 2.0, < 4.0)
              +    tilt (>= 1.1, < 3)
              +  selenium-webdriver (3.142.7)
              +    childprocess (>= 0.5, < 4.0)
              +    rubyzip (>= 1.2.2)
              +  sexp_processor (4.15.1)
              +  shoulda-matchers (4.4.1)
              +    activesupport (>= 4.2.0)
              +  simplecov (0.19.1)
              +    docile (~> 1.1)
              +    simplecov-html (~> 0.11)
              +  simplecov-html (0.12.3)
              +  spring (2.1.1)
              +  spring-watcher-listen (2.0.1)
              +    listen (>= 2.7, < 4.0)
              +    spring (>= 1.2, < 3.0)
              +  sprockets (3.7.2)
              +    concurrent-ruby (~> 1.0)
              +    rack (> 1, < 3)
              +  sprockets-rails (3.2.2)
              +    actionpack (>= 4.0)
              +    activesupport (>= 4.0)
              +    sprockets (>= 3.0.0)
              +  sys-uname (1.2.2)
              +    ffi (~> 1.1)
              +  thor (1.0.1)
              +  thread_safe (0.3.6)
              +  tilt (2.0.10)
              +  turbolinks (5.2.1)
              +    turbolinks-source (~> 5.2)
              +  turbolinks-source (5.2.0)
              +  tzinfo (1.2.8)
              +    thread_safe (~> 0.1)
              +  tzinfo-data (1.2020.4)
              +    tzinfo (>= 1.0.0)
              +  uglifier (4.2.0)
              +    execjs (>= 0.3.0, < 3)
              +  warden (1.2.9)
              +    rack (>= 2.0.9)
              +  web-console (3.7.0)
              +    actionview (>= 5.0)
              +    activemodel (>= 5.0)
              +    bindex (>= 0.4.0)
              +    railties (>= 5.0)
              +  webdrivers (4.4.1)
              +    nokogiri (~> 1.6)
              +    rubyzip (>= 1.3.0)
              +    selenium-webdriver (>= 3.0, < 4.0)
              +  websocket-driver (0.7.3)
              +    websocket-extensions (>= 0.1.0)
              +  websocket-extensions (0.1.5)
              +  xpath (3.2.0)
              +    nokogiri (~> 1.8)
              + +

              PLATFORMS

              + +
              ruby
              +x64-mingw32
              +
              + +

              DEPENDENCIES

              + +
              active_storage_validations
              +bootsnap (>= 1.1.0)
              +byebug
              +capybara (>= 2.15)
              +coffee-rails (~> 4.2)
              +cucumber-rails
              +cucumber-rails-training-wheels
              +database_cleaner
              +devise
              +flog
              +jbuilder (~> 2.5)
              +launchy
              +listen (>= 3.0.5, < 3.2)
              +mini_magick (>= 4.9.5)
              +pg (>= 0.18, < 2.0)
              +puma (~> 3.12)
              +rails (~> 5.2.3)
              +rspec-rails
              +sass-rails (~> 5.0)
              +selenium-webdriver
              +shoulda-matchers
              +simplecov
              +spring
              +spring-watcher-listen (~> 2.0.0)
              +turbolinks (~> 5)
              +tzinfo-data
              +uglifier (>= 1.3.0)
              +web-console (>= 3.3.0)
              +webdrivers
              + +

              RUBY VERSION

              + +
              ruby 2.6.3p62
              + +

              BUNDLED WITH

              + +
              1.17.3
              + +
              + + + + + diff --git a/doc/HomeController.html b/doc/HomeController.html new file mode 100644 index 00000000..f3127061 --- /dev/null +++ b/doc/HomeController.html @@ -0,0 +1,156 @@ + + + + + + +class HomeController - RDoc Documentation + + + + + + + + + + + + + + + + + + +
              +

              + class HomeController +

              + +
              + +
              + + +
              + + + + + + + + + +
              +
              +

              Public Instance Methods

              +
              + + +
              + +
              + index() + + click to toggle source + +
              + + +
              + + + + + + +
              +
              # File app/controllers/home_controller.rb, line 2
              +def index
              +end
              +
              + +
              + + + + +
              + + +
              + +
              + +
              + + + + diff --git a/doc/HomeHelper.html b/doc/HomeHelper.html new file mode 100644 index 00000000..282b803a --- /dev/null +++ b/doc/HomeHelper.html @@ -0,0 +1,99 @@ + + + + + + +module HomeHelper - RDoc Documentation + + + + + + + + + + + + + + + + + + +
              +

              + module HomeHelper +

              + +
              + +
              + + +
              + + + + + + + + + +
              + +
              + + + + diff --git a/doc/HtmlSelectorsHelpers.html b/doc/HtmlSelectorsHelpers.html new file mode 100644 index 00000000..9baee7ca --- /dev/null +++ b/doc/HtmlSelectorsHelpers.html @@ -0,0 +1,186 @@ + + + + + + +module HtmlSelectorsHelpers - RDoc Documentation + + + + + + + + + + + + + + + + + + +
              +

              + module HtmlSelectorsHelpers +

              + +
              + +

              TL;DR: YOU SHOULD DELETE THIS FILE

              + +

              This file is used by web_steps.rb, which you should also delete

              + +

              You have been warned

              + +
              + + +
              + + + + + + + + + +
              +
              +

              Public Instance Methods

              +
              + + +
              + +
              + selector_for(locator) + + click to toggle source + +
              + + +
              + +

              Maps a name to a selector. Used primarily by the

              + +
              When /^(.+) within (.+)$/ do |step, scope|
              + +

              step definitions in web_steps.rb

              + + + + +
              +
              # File features/support/selectors.rb, line 13
              +def selector_for(locator)
              +  case locator
              +
              +  when "the page"
              +    "html > body"
              +
              +  # Add more mappings here.
              +  # Here is an example that pulls values out of the Regexp:
              +  #
              +  #  when /^the (notice|error|info) flash$/
              +  #    ".flash.#{$1}"
              +
              +  # You can also return an array to use a different selector
              +  # type, like:
              +  #
              +  #  when /the header/
              +  #    [:xpath, "//header"]
              +
              +  # This allows you to provide a quoted selector as the scope
              +  # for "within" steps as was previously the default for the
              +  # web steps:
              +  when /^"(.+)"$/
              +    $1
              +
              +  else
              +    raise "Can't find mapping from \"#{locator}\" to a selector.\n" +
              +      "Now, go and add a mapping in #{__FILE__}"
              +  end
              +end
              +
              + +
              + + + + +
              + + +
              + +
              + +
              + + + + diff --git a/doc/NavigationHelpers.html b/doc/NavigationHelpers.html new file mode 100644 index 00000000..04cf5190 --- /dev/null +++ b/doc/NavigationHelpers.html @@ -0,0 +1,183 @@ + + + + + + +module NavigationHelpers - RDoc Documentation + + + + + + + + + + + + + + + + + + +
              +

              + module NavigationHelpers +

              + +
              + +
              + + +
              + + + + + + + + + +
              +
              +

              Public Instance Methods

              +
              + + +
              + +
              + path_to(page_name) + + click to toggle source + +
              + + +
              + +

              Maps a name to a path. Used by the

              + +
              When /^I go to (.+)$/ do |page_name|
              + +

              step definition in web_steps.rb

              + + + + +
              +
              # File features/support/paths.rb, line 8
              +def path_to(page_name)
              +  case page_name
              +
              +  when /^the home\s?page$/
              +    '/'
              +  
              +  when /^de requisitos para o credenciamento$/
              +    '/requirements'
              +  
              +  when /^de solicitações de credenciamento$/
              +    '/sei_processes'
              +
              +  when /^de credenciamentos$/
              +    '/accreditations'
              +
              +  # Add more mappings here.
              +  # Here is an example that pulls values out of the Regexp:
              +  #
              +  #   when /^(.*)'s profile page$/i
              +  #     user_profile_path(User.find_by_login($1))
              +
              +  else
              +    begin
              +      page_name =~ /^the (.*) page$/
              +      path_components = $1.split(/\s+/)
              +      self.send(path_components.push('path').join('_').to_sym)
              +    rescue NoMethodError, ArgumentError
              +      raise "Can't find mapping from \"#{page_name}\" to a path.\n" +
              +        "Now, go and add a mapping in #{__FILE__}"
              +    end
              +  end
              +end
              +
              + +
              + + + + +
              + + +
              + +
              + +
              + + + + diff --git a/doc/Object.html b/doc/Object.html new file mode 100644 index 00000000..6659f6f4 --- /dev/null +++ b/doc/Object.html @@ -0,0 +1,348 @@ + + + + + + +class Object - RDoc Documentation + + + + + + + + + + + + + + + + + + +
              +

              + class Object +

              + +
              + +
              + + +
              + + + + + +
              +
              +

              Constants

              +
              +
              + +
              APP_PATH + +
              + + +
              APP_ROOT + +

              path to your application root.

              + + +
              +
              + + + + + +
              +
              +

              Public Instance Methods

              +
              + + +
              + +
              + add_browser_logs() + + click to toggle source + +
              + + +
              + + + + + + +
              +
              # File features/support/hooks.rb, line 17
              + def add_browser_logs
              +    time_now = Time.now
              +    # Getting current URL
              +    current_url = Capybara.current_url.to_s
              +    # Gather browser logs
              +    logs = page.driver.browser.manage.logs.get(:browser).map {|line| [line.level, line.message]}
              +   # Remove warnings and info messages
              +    logs.reject! { |line| ['WARNING', 'INFO'].include?(line.first) }
              +    logs.any? == true
              +    embed(time_now.strftime('%Y-%m-%d-%H-%M-%S' + "\n") + ( "Current URL: " + current_url + "\n") + logs.join("\n"), 'text/plain', 'BROWSER ERROR')
              +end
              +
              + +
              + + + + +
              + + +
              + +
              + add_screenshot(scenario) + + click to toggle source + +
              + + +
              + + + + + + +
              +
              # File features/support/hooks.rb, line 9
              +def add_screenshot(scenario)
              +   nome_cenario = scenario.name.gsub(/[^A-Za-z0-9]/, '')
              +   nome_cenario = nome_cenario.gsub(' ','_').downcase!
              +   screenshot = "log/screenshots/#{nome_cenario}.png"
              +   # page.save_screenshot(screenshot)
              +   attach(screenshot, 'image/png')
              +end
              +
              + +
              + + + + +
              + + +
              + +
              + destroy_records(class_name) + + click to toggle source + +
              + + +
              + +

              This file should contain all the record creation needed to seed the database with its default values. The data can then be loaded with the rails db:seed command (or created alongside the database with db:setup).

              + +

              Examples:

              + +
              movies = Movie.create([{ name: 'Star Wars' }, { name: 'Lord of the Rings' }])
              +Character.create(name: 'Luke', movie: movies.first)
              +
              + + + + +
              +
              # File db/seeds.rb, line 9
              +def destroy_records class_name
              +    class_name.each do |obj|
              +        obj.allow_deletion!
              +        obj.destroy
              +    end
              +end
              +
              + +
              + + + + +
              + + +
              + +
              + metodo(var=nil) + + click to toggle source + +
              + + +
              + + + + + + +
              +
              # File spike.rb, line 12
              +def metodo (var=nil)
              +    p var
              +end
              +
              + +
              + + + + +
              + + +
              + +
              + system!(*args) + + click to toggle source + +
              + + +
              + + + + + + +
              +
              # File bin/setup, line 8
              +def system!(*args)
              +  system(*args) || abort("\n== Command #{args} failed ==")
              +end
              +
              + +
              + + + + +
              + + +
              + +
              + +
              + + + + diff --git a/doc/README_md.html b/doc/README_md.html new file mode 100644 index 00000000..2d248205 --- /dev/null +++ b/doc/README_md.html @@ -0,0 +1,224 @@ + + + + + + +README - RDoc Documentation + + + + + + + + + + + + + + + + + + +
              + +

              README

              + +

              This README would normally document whatever steps are necessary to get the application up and running.

              + +

              Things you may want to cover:

              +
              • +

                Ruby version

                +
              • +

                System dependencies

                +
              • +

                Configuration

                +
              • +

                Database creation

                +
              • +

                Database initialization

                +
              • +

                How to run the test suite

                +
              • +

                Services (job queues, cache servers, search engines, etc.)

                +
              • +

                Deployment instructions

                +
              • +

                ...

                +
              + +
              + + + + + diff --git a/doc/Rakefile.html b/doc/Rakefile.html new file mode 100644 index 00000000..040d30fc --- /dev/null +++ b/doc/Rakefile.html @@ -0,0 +1,205 @@ + + + + + + +Rakefile - RDoc Documentation + + + + + + + + + + + + + + + + + + +
              + +

              # Add your own tasks in files placed in lib/tasks ending in .rake, # for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.

              + +

              require_relative 'config/application'

              + +

              Rails.application.load_tasks

              + +
              + + + + + diff --git a/doc/Requirement.html b/doc/Requirement.html new file mode 100644 index 00000000..8fd175f7 --- /dev/null +++ b/doc/Requirement.html @@ -0,0 +1,268 @@ + + + + + + +class Requirement - RDoc Documentation + + + + + + + + + + + + + + + + + + +
              +

              + class Requirement +

              + +
              + +
              + + +
              + + + + + + + + + +
              +
              +

              Public Instance Methods

              +
              + + +
              + +
              + allow_deletion!() + + click to toggle source + +
              + + +
              + +

              Habilita deleção (usado por 'db/seeds.rb')

              + + + + +
              +
              # File app/models/requirement.rb, line 21
              +def allow_deletion!
              +    @allow_deletion = true
              +end
              +
              + +
              + + + + +
              + + +
              + +
              + check_permission() + + click to toggle source + +
              + + +
              + +

              Permite deleção de requisitos por um administrador ou caso metodo 'allow_deletion!' tenha sido chamado pela instancia

              + + + + +
              +
              # File app/models/requirement.rb, line 25
              +def check_permission
              +    unless @allow_deletion || current_user_is_admin
              +        throw(:abort)
              +    end
              +end
              +
              + +
              + + + + +
              + + +
              + +
              + check_role() + + click to toggle source + +
              + + +
              + +

              Permite criação ou atualização de requisitos por um administrador

              + + + + +
              +
              # File app/models/requirement.rb, line 11
              +def check_role
              +    unless current_user_is_admin
              +        self.errors.add(:base, 'Usuário sem permissão')
              +        return false
              +    end
              +    true
              +end
              +
              + +
              + + + + +
              + + +
              + +
              + current_user_is_admin() + + click to toggle source + +
              + + +
              + +

              Define se usuário atual está logado e se é administrador do sistema

              + + + + +
              +
              # File app/models/requirement.rb, line 7
              +def current_user_is_admin
              +    Current.user != nil && Current.user.role == 'administrator'
              +end
              +
              + +
              + + + + +
              + + +
              + +
              + +
              + + + + diff --git a/doc/RequirementsController.html b/doc/RequirementsController.html new file mode 100644 index 00000000..df3924af --- /dev/null +++ b/doc/RequirementsController.html @@ -0,0 +1,436 @@ + + + + + + +class RequirementsController - RDoc Documentation + + + + + + + + + + + + + + + + + + +
              +

              + class RequirementsController +

              + +
              + +
              + + +
              + + + + + + + + + +
              +
              +

              Public Instance Methods

              +
              + + +
              + +
              + create() + + click to toggle source + +
              + + +
              + +

              POST /requirements POST /requirements.json

              + + + + +
              +
              # File app/controllers/requirements_controller.rb, line 27
              +def create
              +  @requirement = Requirement.new(requirement_params)
              +  
              +  respond_to do |format|
              +    # Mensagem de sucesso ao criar requisitos quando condições da model forem cumpridas
              +    if @requirement.save
              +      format.html { redirect_to @requirement, notice: 'Requisitos criados com sucesso!' }
              +      format.json { render :show, status: :created, location: @requirement }
              +    # Mensagem de erro se condições da model não forem cumpridas
              +    else
              +      format.html { render :new }
              +      format.json { render json: @requirement.errors, status: :unprocessable_entity }
              +    end
              +  end
              +end
              +
              + +
              + + + + +
              + + +
              + +
              + delete_document_attachment() + + click to toggle source + +
              + + +
              + +

              Exclui documento anexado, caso exista

              + + + + +
              +
              # File app/controllers/requirements_controller.rb, line 44
              +def delete_document_attachment
              +  @document = ActiveStorage::Attachment.find_by(id: params[:id])
              +  @requirement_id = params[:requirement_id]
              +  @document&.purge
              +  redirect_to edit_requirement_path(@requirement_id)
              +end
              +
              + +
              + + + + +
              + + +
              + +
              + destroy() + + click to toggle source + +
              + + +
              + +

              DELETE /requirements/1 DELETE /requirements/1.json

              + + + + +
              +
              # File app/controllers/requirements_controller.rb, line 69
              +def destroy
              +  respond_to do |format|
              +    # Mensagem de sucesso ao excluir requisitos quando condições da model forem cumpridas
              +    if @requirement.destroy
              +      format.html { redirect_to requirements_url, notice: 'Requisitos excluídos com sucesso!' }
              +      format.json { head :no_content }
              +    # Mensagem de erro se condições da model não forem cumpridas
              +    else
              +      format.html { redirect_to requirements_url, notice: 'Erro: não foi possível excluir os requisitos!' }
              +      format.json { head :no_content }
              +    end
              +  end
              +end
              +
              + +
              + + + + +
              + + +
              + +
              + edit() + + click to toggle source + +
              + + +
              + +

              GET /requirements/1/edit

              + + + + +
              +
              # File app/controllers/requirements_controller.rb, line 22
              +def edit
              +end
              +
              + +
              + + + + +
              + + +
              + +
              + index() + + click to toggle source + +
              + + +
              + +

              GET /requirements GET /requirements.json

              + + + + +
              +
              # File app/controllers/requirements_controller.rb, line 6
              +def index
              +  # Lista todos os tipos de requisitos criados
              +  @requirements = Requirement.all
              +end
              +
              + +
              + + + + +
              + + +
              + +
              + new() + + click to toggle source + +
              + + +
              + +

              GET /requirements/new

              + + + + +
              +
              # File app/controllers/requirements_controller.rb, line 17
              +def new
              +  @requirement = Requirement.new
              +end
              +
              + +
              + + + + +
              + + +
              + +
              + show() + + click to toggle source + +
              + + +
              + +

              GET /requirements/1 GET /requirements/1.json

              + + + + +
              +
              # File app/controllers/requirements_controller.rb, line 13
              +def show
              +end
              +
              + +
              + + + + +
              + + +
              + +
              + update() + + click to toggle source + +
              + + +
              + +

              PATCH/PUT /requirements/1 PATCH/PUT /requirements/1.json

              + + + + +
              +
              # File app/controllers/requirements_controller.rb, line 53
              +def update
              +  respond_to do |format|
              +    # Mensagem de sucesso ao atualizar requisitos quando condições da model forem cumpridas
              +    if @requirement.update(requirement_params)
              +      format.html { redirect_to @requirement, notice: 'Requisitos atualizados com sucesso!' }
              +      format.json { render :show, status: :ok, location: @requirement }
              +    # Mensagem de erro se condições da model não forem cumpridas
              +    else
              +      format.html { render :edit }
              +      format.json { render json: @requirement.errors, status: :unprocessable_entity }
              +    end
              +  end
              +end
              +
              + +
              + + + + +
              + + +
              + +
              + +
              + + + + diff --git a/doc/RequirementsHelper.html b/doc/RequirementsHelper.html new file mode 100644 index 00000000..c6548775 --- /dev/null +++ b/doc/RequirementsHelper.html @@ -0,0 +1,99 @@ + + + + + + +module RequirementsHelper - RDoc Documentation + + + + + + + + + + + + + + + + + + +
              +

              + module RequirementsHelper +

              + +
              + +
              + + +
              + + + + + + + + + +
              + +
              + + + + diff --git a/doc/SecretariaPpgi.html b/doc/SecretariaPpgi.html new file mode 100644 index 00000000..46ff6bdf --- /dev/null +++ b/doc/SecretariaPpgi.html @@ -0,0 +1,99 @@ + + + + + + +module SecretariaPpgi - RDoc Documentation + + + + + + + + + + + + + + + + + + +
              +

              + module SecretariaPpgi +

              + +
              + +
              + + +
              + + + + + + + + + +
              + +
              + + + + diff --git a/doc/SecretariaPpgi/Application.html b/doc/SecretariaPpgi/Application.html new file mode 100644 index 00000000..ff350339 --- /dev/null +++ b/doc/SecretariaPpgi/Application.html @@ -0,0 +1,106 @@ + + + + + + +class SecretariaPpgi::Application - RDoc Documentation + + + + + + + + + + + + + + + + + + +
              +

              + class SecretariaPpgi::Application +

              + +
              + +
              + + +
              + + + + + + + + + +
              + +
              + + + + diff --git a/doc/SeiProcess.html b/doc/SeiProcess.html new file mode 100644 index 00000000..de57f6fd --- /dev/null +++ b/doc/SeiProcess.html @@ -0,0 +1,305 @@ + + + + + + +class SeiProcess - RDoc Documentation + + + + + + + + + + + + + + + + + + +
              +

              + class SeiProcess +

              + +
              + +
              + + +
              + + + + + + + + + +
              +
              +

              Public Instance Methods

              +
              + + +
              + +
              + allow_deletion!() + + click to toggle source + +
              + + +
              + +

              Habilita deleção (usado por 'db/seeds.rb')

              + + + + +
              +
              # File app/models/sei_process.rb, line 39
              +def allow_deletion!
              +  @allow_deletion = true
              +end
              +
              + +
              + + + + +
              + + +
              + +
              + check_permission() + + click to toggle source + +
              + + +
              + +

              Permite deleção de processo ou solicitação por um administrador ou caso metodo 'allow_deletion!' tenha sido chamado pela instancia

              + + + + +
              +
              # File app/models/sei_process.rb, line 43
              +def check_permission
              +  throw(:abort) unless @allow_deletion || current_user_is_admin
              +end
              +
              + +
              + + + + +
              + + +
              + +
              + check_role() + + click to toggle source + +
              + + +
              + +

              Permite atualização de processo ou solicitação por um administrador

              + + + + +
              +
              # File app/models/sei_process.rb, line 29
              +def check_role
              +  unless current_user_is_admin
              +    self.errors.add(:base, 'Usuário sem permissão')
              +    return false
              +  end
              +  true
              +end
              +
              + +
              + + + + +
              + + +
              + +
              + check_signed_in() + + click to toggle source + +
              + + +
              + +

              Permite criação de processo ou solicitação caso usuário esteja logado

              + + + + +
              +
              # File app/models/sei_process.rb, line 19
              +def check_signed_in
              +  if Current.user == nil
              +    self.errors.add(:base, 'Usuário sem permissão')
              +    return false
              +  end
              +  true
              +end
              +
              + +
              + + + + +
              + + +
              + +
              + current_user_is_admin() + + click to toggle source + +
              + + +
              + +

              Define se usuário atual está logado e se é administrador do sistema

              + + + + +
              +
              # File app/models/sei_process.rb, line 13
              +def current_user_is_admin
              +  Current.user != nil && Current.user.role == 'administrator'
              +end
              +
              + +
              + + + + +
              + + +
              + +
              + +
              + + + + diff --git a/doc/SeiProcessesController.html b/doc/SeiProcessesController.html new file mode 100644 index 00000000..f9ee0780 --- /dev/null +++ b/doc/SeiProcessesController.html @@ -0,0 +1,418 @@ + + + + + + +class SeiProcessesController - RDoc Documentation + + + + + + + + + + + + + + + + + + +
              +

              + class SeiProcessesController +

              + +
              + +
              + + +
              + + + + + + + + + +
              +
              +

              Public Instance Methods

              +
              + + +
              + +
              + create() + + click to toggle source + +
              + + +
              + +

              POST /sei_processes POST /sei_processes.json

              + + + + +
              +
              # File app/controllers/sei_processes_controller.rb, line 39
              +def create
              +  # Faz correções de entradas inválidas baseando-se nos dados do usuário logado
              +  mandatory_params = {'user_id' => current_user.id, 'status' => 'Espera', 'code' => '0'}
              +  @sei_process = SeiProcess.new(sei_process_params.merge(mandatory_params))
              +
              +  respond_to do |format|
              +    # Mensagem de sucesso ao criar processo ou abrir solicitação quando condições da model forem cumpridas
              +    if @sei_process.save
              +      format.html { redirect_to sei_processes_url, notice: 'Processo aberto com sucesso!' }
              +      format.json { render :index, status: :created, location: @sei_process }
              +    # Mensagem de erro se condições da model não forem cumpridas
              +    else
              +      format.html { render :new }
              +      format.json { render json: @sei_process.errors, status: :unprocessable_entity }
              +    end
              +  end
              +end
              +
              + +
              + + + + +
              + + +
              + +
              + destroy() + + click to toggle source + +
              + + +
              + +

              DELETE /sei_processes/1 DELETE /sei_processes/1.json Exclui Processo se condições da model forem cumpridas, mensagem de erro caso contrário

              + + + + +
              +
              # File app/controllers/sei_processes_controller.rb, line 82
              +def destroy
              +  respond_to do |format|
              +    # Mensagem de sucesso ao excluir processo ou solicitação quando condições da model forem cumpridas
              +    if @sei_process.destroy
              +      format.html { redirect_to sei_processes_url, notice: 'Processo excluído com sucesso!' }
              +      format.json { head :no_content }
              +    # Mensagem de erro se condições da model não forem cumpridas
              +    else
              +      format.html { redirect_to sei_processes_url, notice: 'Erro: não foi possível excluir o processo!' }
              +      format.json { head :no_content }
              +    end
              +  end
              +end
              +
              + +
              + + + + +
              + + +
              + +
              + edit() + + click to toggle source + +
              + + +
              + +

              GET /sei_processes/1/edit

              + + + + +
              +
              # File app/controllers/sei_processes_controller.rb, line 34
              +def edit
              +end
              +
              + +
              + + + + +
              + + +
              + +
              + index() + + click to toggle source + +
              + + +
              + +

              GET /sei_processes GET /sei_processes.json

              + + + + +
              +
              # File app/controllers/sei_processes_controller.rb, line 6
              +def index
              +  # Filtra solicitações baseadas nos estados marcados como visíveis
              +  @all_statuses = %w[Espera Aprovado Rejeitado]
              +  session[:statuses] = params[:statuses] || session[:statuses] || @all_statuses.zip([]).to_h
              +  @status_filter = session[:statuses].keys
              +  
              +  # Lista todas as solicitações de credenciamento para um administrador
              +  if current_user.role == "administrator"
              +    @sei_processes = SeiProcess.where(status: @status_filter)
              +  # Lista as solicitações próprias para um professor
              +  else
              +    @my_processes = SeiProcess.where(user_id: current_user.id, status: @status_filter)
              +  end
              +end
              +
              + +
              + + + + +
              + + +
              + +
              + new() + + click to toggle source + +
              + + +
              + +

              GET /sei_processes/new

              + + + + +
              +
              # File app/controllers/sei_processes_controller.rb, line 27
              +def new
              +  # Renderiza Requisitos de Credenciamento, caso existam, na página de criação de processo ou de abrir solicitação de credenciamento
              +  @requirements = Requirement.find_by(title: 'Requisitos de Credenciamento')
              +  @sei_process = SeiProcess.new
              +end
              +
              + +
              + + + + +
              + + +
              + +
              + show() + + click to toggle source + +
              + + +
              + +

              GET /sei_processes/1 GET /sei_processes/1.json

              + + + + +
              +
              # File app/controllers/sei_processes_controller.rb, line 23
              +def show
              +end
              +
              + +
              + + + + +
              + + +
              + +
              + update() + + click to toggle source + +
              + + +
              + +

              PATCH/PUT /sei_processes/1 PATCH/PUT /sei_processes/1.json

              + + + + +
              +
              # File app/controllers/sei_processes_controller.rb, line 59
              +def update
              +  respond_to do |format|
              +    # Mensagem de sucesso ao atualizar processo ou solicitação quando condições da model forem cumpridas
              +    if @sei_process.update(sei_process_params)
              +      format.html { redirect_to sei_processes_url, notice: 'Processo atualizado com sucesso!' }
              +      format.json { render :index, status: :ok, location: @sei_process }
              +
              +      # Cria o credenciamento correspondente aa solicitação aprovada
              +      if @sei_process.status == 'Aprovado' && (Accreditation.find_by(sei_process: @sei_process.id) == nil)
              +        Accreditation.create!(user_id: @sei_process.user_id, sei_process_id: @sei_process.id)
              +      end
              +
              +    # Mensagem de erro se condições da model não forem cumpridas
              +    else
              +      format.html { render :edit }
              +      format.json { render json: @sei_process.errors, status: :unprocessable_entity }
              +    end
              +  end
              +end
              +
              + +
              + + + + +
              + + +
              + +
              + +
              + + + + diff --git a/doc/SeiProcessesHelper.html b/doc/SeiProcessesHelper.html new file mode 100644 index 00000000..bdcca455 --- /dev/null +++ b/doc/SeiProcessesHelper.html @@ -0,0 +1,99 @@ + + + + + + +module SeiProcessesHelper - RDoc Documentation + + + + + + + + + + + + + + + + + + +
              +

              + module SeiProcessesHelper +

              + +
              + +
              + + +
              + + + + + + + + + +
              + +
              + + + + diff --git a/doc/User.html b/doc/User.html new file mode 100644 index 00000000..d2aa9ebf --- /dev/null +++ b/doc/User.html @@ -0,0 +1,106 @@ + + + + + + +class User - RDoc Documentation + + + + + + + + + + + + + + + + + + +
              +

              + class User +

              + +
              + +
              + + +
              + + + + + + + + + +
              + +
              + + + + diff --git a/doc/UserSessionHelper.html b/doc/UserSessionHelper.html new file mode 100644 index 00000000..0b0dfd61 --- /dev/null +++ b/doc/UserSessionHelper.html @@ -0,0 +1,278 @@ + + + + + + +module UserSessionHelper - RDoc Documentation + + + + + + + + + + + + + + + + + + +
              +

              + module UserSessionHelper +

              + +
              + +
              + + +
              + + + + + + + + + +
              +
              +

              Public Instance Methods

              +
              + + +
              + +
              + current_user() + + click to toggle source + +
              + + +
              + + + + + + +
              +
              # File features/step_definitions/credenciamento_professores_steps.rb, line 14
              +def current_user
              +    @current_user
              +end
              +
              + +
              + + + + +
              + + +
              + +
              + login(user) + + click to toggle source + +
              + + +
              + + + + + + +
              +
              # File features/step_definitions/credenciamento_professores_steps.rb, line 18
              +def login user
              +    @current_user = user
              +    visit new_user_session_path
              +    fill_in("Email", with: user.email)
              +    fill_in("Password", with: user.password)
              +    click_button("Log in")
              +    Current.user = @current_user
              +end
              +
              + +
              + + + + +
              + + +
              + +
              + sower_begin(user=nil) + + click to toggle source + +
              + + +
              + + + + + + +
              +
              # File features/step_definitions/credenciamento_professores_steps.rb, line 27
              +def sower_begin (user=nil)
              +    if user != nil
              +        @saved_user = user
              +        visit '/'
              +        click_link("Sair")
              +    end
              +  
              +    sower = User.create(
              +        full_name: "Sower",
              +        email: "sower@admin.com",
              +        password: "admin123",
              +        role: "administrator",
              +        registration: "000000000"
              +    )
              +    login(sower)
              +end
              +
              + +
              + + + + +
              + + +
              + +
              + sower_finish() + + click to toggle source + +
              + + +
              + + + + + + +
              +
              # File features/step_definitions/credenciamento_professores_steps.rb, line 44
              +def sower_finish
              +    Current.user = nil
              +    visit '/'
              +    click_link("Sair")
              +    @current_user = nil
              +
              +    login(@saved_user) if @saved_user != nil
              +end
              +
              + +
              + + + + +
              + + +
              + +
              + +
              + + + + diff --git a/doc/WithinHelpers.html b/doc/WithinHelpers.html new file mode 100644 index 00000000..7b30bc7f --- /dev/null +++ b/doc/WithinHelpers.html @@ -0,0 +1,150 @@ + + + + + + +module WithinHelpers - RDoc Documentation + + + + + + + + + + + + + + + + + + +
              +

              + module WithinHelpers +

              + +
              + +
              + + +
              + + + + + + + + + +
              +
              +

              Public Instance Methods

              +
              + + +
              + +
              + with_scope(locator) { || ... } + + click to toggle source + +
              + + +
              + + + + + + +
              +
              # File features/step_definitions/credenciamento_professores_steps.rb, line 7
              +def with_scope(locator)
              +    locator ? within(*selector_for(locator)) { yield } : yield
              +end
              +
              + +
              + + + + +
              + + +
              + +
              + +
              + + + + diff --git a/doc/app/assets/config/manifest_js.html b/doc/app/assets/config/manifest_js.html new file mode 100644 index 00000000..21f30cf4 --- /dev/null +++ b/doc/app/assets/config/manifest_js.html @@ -0,0 +1,201 @@ + + + + + + +manifest.js - RDoc Documentation + + + + + + + + + + + + + + + + + + +
              + +

              //= link_tree ../images //= link_directory ../javascripts .js //= link_directory ../stylesheets .css

              + +
              + + + + + diff --git a/doc/app/assets/javascripts/accreditations_coffee.html b/doc/app/assets/javascripts/accreditations_coffee.html new file mode 100644 index 00000000..801f2f1c --- /dev/null +++ b/doc/app/assets/javascripts/accreditations_coffee.html @@ -0,0 +1,201 @@ + + + + + + +accreditations.coffee - RDoc Documentation + + + + + + + + + + + + + + + + + + +
              + +

              # Place all the behaviors and hooks related to the matching controller here. # All this logic will automatically be available in application.js. # You can use CoffeeScript in this file: coffeescript.org/

              + +
              + + + + + diff --git a/doc/app/assets/javascripts/application_js.html b/doc/app/assets/javascripts/application_js.html new file mode 100644 index 00000000..f5574c7c --- /dev/null +++ b/doc/app/assets/javascripts/application_js.html @@ -0,0 +1,201 @@ + + + + + + +application.js - RDoc Documentation + + + + + + + + + + + + + + + + + + +
              + +

              // This is a manifest file that'll be compiled into application.js, which will include all the files // listed below. // // Any JavaScript/Coffee file within this directory, lib/assets/javascripts, or any plugin's // vendor/assets/javascripts directory can be referenced here using a relative path. // // It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the // compiled file. JavaScript code in this file should be added after the last require_* statement. // // Read Sprockets README (github.com/rails/sprockets#sprockets-directives) for details // about supported directives. // //= require rails-ujs //= require activestorage //= require turbolinks //= require_tree .

              + +
              + + + + + diff --git a/doc/app/assets/javascripts/cable_js.html b/doc/app/assets/javascripts/cable_js.html new file mode 100644 index 00000000..d09b8539 --- /dev/null +++ b/doc/app/assets/javascripts/cable_js.html @@ -0,0 +1,210 @@ + + + + + + +cable.js - RDoc Documentation + + + + + + + + + + + + + + + + + + +
              + +

              // Action Cable provides the framework to deal with WebSockets in Rails. // You can generate new channels where WebSocket features live using the `rails generate channel` command. // //= require action_cable //= require_self //= require_tree ./channels

              + +

              (function() {

              + +
              this.App || (this.App = {});
              +
              +App.cable = ActionCable.createConsumer();
              +
              + +

              }).call(this);

              + +
              + + + + + diff --git a/doc/app/assets/javascripts/home_coffee.html b/doc/app/assets/javascripts/home_coffee.html new file mode 100644 index 00000000..68f44f76 --- /dev/null +++ b/doc/app/assets/javascripts/home_coffee.html @@ -0,0 +1,201 @@ + + + + + + +home.coffee - RDoc Documentation + + + + + + + + + + + + + + + + + + +
              + +

              # Place all the behaviors and hooks related to the matching controller here. # All this logic will automatically be available in application.js. # You can use CoffeeScript in this file: coffeescript.org/

              + +
              + + + + + diff --git a/doc/app/assets/javascripts/requirements_coffee.html b/doc/app/assets/javascripts/requirements_coffee.html new file mode 100644 index 00000000..47a5cbb1 --- /dev/null +++ b/doc/app/assets/javascripts/requirements_coffee.html @@ -0,0 +1,201 @@ + + + + + + +requirements.coffee - RDoc Documentation + + + + + + + + + + + + + + + + + + +
              + +

              # Place all the behaviors and hooks related to the matching controller here. # All this logic will automatically be available in application.js. # You can use CoffeeScript in this file: coffeescript.org/

              + +
              + + + + + diff --git a/doc/app/assets/javascripts/sei_processes_coffee.html b/doc/app/assets/javascripts/sei_processes_coffee.html new file mode 100644 index 00000000..6ae641d9 --- /dev/null +++ b/doc/app/assets/javascripts/sei_processes_coffee.html @@ -0,0 +1,201 @@ + + + + + + +sei_processes.coffee - RDoc Documentation + + + + + + + + + + + + + + + + + + +
              + +

              # Place all the behaviors and hooks related to the matching controller here. # All this logic will automatically be available in application.js. # You can use CoffeeScript in this file: coffeescript.org/

              + +
              + + + + + diff --git a/doc/app/assets/stylesheets/accreditations_scss.html b/doc/app/assets/stylesheets/accreditations_scss.html new file mode 100644 index 00000000..388328a0 --- /dev/null +++ b/doc/app/assets/stylesheets/accreditations_scss.html @@ -0,0 +1,201 @@ + + + + + + +accreditations.scss - RDoc Documentation + + + + + + + + + + + + + + + + + + +
              + +

              // Place all the styles related to the Accreditations controller here. // They will automatically be included in application.css. // You can use Sass (SCSS) here: sass-lang.com/

              + +
              + + + + + diff --git a/doc/app/assets/stylesheets/application_css.html b/doc/app/assets/stylesheets/application_css.html new file mode 100644 index 00000000..65d9d342 --- /dev/null +++ b/doc/app/assets/stylesheets/application_css.html @@ -0,0 +1,216 @@ + + + + + + +application.css - RDoc Documentation + + + + + + + + + + + + + + + + + + +
              + +

              /*

              + +
              * This is a manifest file that'll be compiled into application.css, which will include all the files
              +* listed below.
              +*
              +* Any CSS and SCSS file within this directory, lib/assets/stylesheets, or any plugin's
              +* vendor/assets/stylesheets directory can be referenced here using a relative path.
              +*
              +* You're free to add application-wide styles to this file and they'll appear at the bottom of the
              +* compiled file so the styles you add here take precedence over styles defined in any other CSS/SCSS
              +* files in this directory. Styles in this file should be added after the last require_* statement.
              +* It is generally better to create a new file per style scope.
              +*
              +*= require_tree .
              +*= require_self
              +*/
              + +
              + + + + + diff --git a/doc/app/assets/stylesheets/home_scss.html b/doc/app/assets/stylesheets/home_scss.html new file mode 100644 index 00000000..1176e70b --- /dev/null +++ b/doc/app/assets/stylesheets/home_scss.html @@ -0,0 +1,201 @@ + + + + + + +home.scss - RDoc Documentation + + + + + + + + + + + + + + + + + + +
              + +

              // Place all the styles related to the Home controller here. // They will automatically be included in application.css. // You can use Sass (SCSS) here: sass-lang.com/

              + +
              + + + + + diff --git a/doc/app/assets/stylesheets/requirements_scss.html b/doc/app/assets/stylesheets/requirements_scss.html new file mode 100644 index 00000000..9589e155 --- /dev/null +++ b/doc/app/assets/stylesheets/requirements_scss.html @@ -0,0 +1,201 @@ + + + + + + +requirements.scss - RDoc Documentation + + + + + + + + + + + + + + + + + + +
              + +

              // Place all the styles related to the Requirements controller here. // They will automatically be included in application.css. // You can use Sass (SCSS) here: sass-lang.com/

              + +
              + + + + + diff --git a/doc/app/assets/stylesheets/scaffolds_scss.html b/doc/app/assets/stylesheets/scaffolds_scss.html new file mode 100644 index 00000000..d2360a05 --- /dev/null +++ b/doc/app/assets/stylesheets/scaffolds_scss.html @@ -0,0 +1,306 @@ + + + + + + +scaffolds.scss - RDoc Documentation + + + + + + + + + + + + + + + + + + +
              + +

              body {

              + +
              background-color: #fff;
              +color: #333;
              +margin: 33px;
              +font-family: verdana, arial, helvetica, sans-serif;
              +font-size: 13px;
              +line-height: 18px;
              + +

              }

              + +

              p, ol, ul, td {

              + +
              font-family: verdana, arial, helvetica, sans-serif;
              +font-size: 13px;
              +line-height: 18px;
              + +

              }

              + +

              pre {

              + +
              background-color: #eee;
              +padding: 10px;
              +font-size: 11px;
              + +

              }

              + +

              a {

              + +
              color: #000;
              +
              +&:visited {
              +  color: #666;
              +}
              +
              +&:hover {
              +  color: #fff;
              +  background-color: #000;
              +}
              + +

              }

              + +

              th {

              + +
              padding-bottom: 5px;
              + +

              }

              + +

              td {

              + +
              padding: 0 5px 7px;
              + +

              }

              + +

              div {

              + +
              &.field, &.actions {
              +  margin-bottom: 10px;
              +}
              + +

              }

              + +

              notice {

              + +
              color: green;
              + +

              }

              + +

              .field_with_errors {

              + +
              padding: 2px;
              +background-color: red;
              +display: table;
              + +

              }

              + +

              error_explanation {

              + +
              width: 450px;
              +border: 2px solid red;
              +padding: 7px 7px 0;
              +margin-bottom: 20px;
              +background-color: #f0f0f0;
              +
              +h2 {
              +  text-align: left;
              +  font-weight: bold;
              +  padding: 5px 5px 5px 15px;
              +  font-size: 12px;
              +  margin: -7px -7px 0;
              +  background-color: #c00;
              +  color: #fff;
              +}
              +
              +ul li {
              +  font-size: 12px;
              +  list-style: square;
              +}
              + +

              }

              + +

              label {

              + +
              display: block;
              + +

              }

              + +
              + + + + + diff --git a/doc/app/assets/stylesheets/sei_processes_scss.html b/doc/app/assets/stylesheets/sei_processes_scss.html new file mode 100644 index 00000000..5501f437 --- /dev/null +++ b/doc/app/assets/stylesheets/sei_processes_scss.html @@ -0,0 +1,201 @@ + + + + + + +sei_processes.scss - RDoc Documentation + + + + + + + + + + + + + + + + + + +
              + +

              // Place all the styles related to the SeiProcesses controller here. // They will automatically be included in application.css. // You can use Sass (SCSS) here: sass-lang.com/

              + +
              + + + + + diff --git a/doc/app/views/accreditations/_accreditation_json_jbuilder.html b/doc/app/views/accreditations/_accreditation_json_jbuilder.html new file mode 100644 index 00000000..7ce4dbb1 --- /dev/null +++ b/doc/app/views/accreditations/_accreditation_json_jbuilder.html @@ -0,0 +1,201 @@ + + + + + + +_accreditation.json.jbuilder - RDoc Documentation + + + + + + + + + + + + + + + + + + +
              + +

              json.extract! accreditation, :id, :user_id, :start_date, :end_date, :sei_process_id, :created_at, :updated_at json.url accreditation_url(accreditation, format: :json)

              + +
              + + + + + diff --git a/doc/app/views/accreditations/index_json_jbuilder.html b/doc/app/views/accreditations/index_json_jbuilder.html new file mode 100644 index 00000000..2bec31e6 --- /dev/null +++ b/doc/app/views/accreditations/index_json_jbuilder.html @@ -0,0 +1,201 @@ + + + + + + +index.json.jbuilder - RDoc Documentation + + + + + + + + + + + + + + + + + + +
              + +

              json.array! @accreditations, partial: “accreditations/accreditation”, as: :accreditation

              + +
              + + + + + diff --git a/doc/app/views/accreditations/show_json_jbuilder.html b/doc/app/views/accreditations/show_json_jbuilder.html new file mode 100644 index 00000000..c25a992c --- /dev/null +++ b/doc/app/views/accreditations/show_json_jbuilder.html @@ -0,0 +1,201 @@ + + + + + + +show.json.jbuilder - RDoc Documentation + + + + + + + + + + + + + + + + + + +
              + +

              json.partial! “accreditations/accreditation”, accreditation: @accreditation

              + +
              + + + + + diff --git a/doc/app/views/requirements/_requirement_json_jbuilder.html b/doc/app/views/requirements/_requirement_json_jbuilder.html new file mode 100644 index 00000000..3f675700 --- /dev/null +++ b/doc/app/views/requirements/_requirement_json_jbuilder.html @@ -0,0 +1,201 @@ + + + + + + +_requirement.json.jbuilder - RDoc Documentation + + + + + + + + + + + + + + + + + + +
              + +

              json.extract! requirement, :id, :title, :content, :created_at, :updated_at json.url requirement_url(requirement, format: :json)

              + +
              + + + + + diff --git a/doc/app/views/requirements/index_json_jbuilder.html b/doc/app/views/requirements/index_json_jbuilder.html new file mode 100644 index 00000000..a3607062 --- /dev/null +++ b/doc/app/views/requirements/index_json_jbuilder.html @@ -0,0 +1,201 @@ + + + + + + +index.json.jbuilder - RDoc Documentation + + + + + + + + + + + + + + + + + + +
              + +

              json.array! @requirements, partial: “requirements/requirement”, as: :requirement

              + +
              + + + + + diff --git a/doc/app/views/requirements/show_json_jbuilder.html b/doc/app/views/requirements/show_json_jbuilder.html new file mode 100644 index 00000000..c34e794e --- /dev/null +++ b/doc/app/views/requirements/show_json_jbuilder.html @@ -0,0 +1,201 @@ + + + + + + +show.json.jbuilder - RDoc Documentation + + + + + + + + + + + + + + + + + + +
              + +

              json.partial! “requirements/requirement”, requirement: @requirement

              + +
              + + + + + diff --git a/doc/app/views/sei_processes/_sei_process_json_jbuilder.html b/doc/app/views/sei_processes/_sei_process_json_jbuilder.html new file mode 100644 index 00000000..f5f8e01b --- /dev/null +++ b/doc/app/views/sei_processes/_sei_process_json_jbuilder.html @@ -0,0 +1,201 @@ + + + + + + +_sei_process.json.jbuilder - RDoc Documentation + + + + + + + + + + + + + + + + + + +
              + +

              json.extract! sei_process, :id, :user_id, :status, :code, :created_at, :updated_at json.url sei_process_url(sei_process, format: :json)

              + +
              + + + + + diff --git a/doc/app/views/sei_processes/index_json_jbuilder.html b/doc/app/views/sei_processes/index_json_jbuilder.html new file mode 100644 index 00000000..74e8bc1e --- /dev/null +++ b/doc/app/views/sei_processes/index_json_jbuilder.html @@ -0,0 +1,201 @@ + + + + + + +index.json.jbuilder - RDoc Documentation + + + + + + + + + + + + + + + + + + +
              + +

              json.array! @sei_processes, partial: “sei_processes/sei_process”, as: :sei_process

              + +
              + + + + + diff --git a/doc/app/views/sei_processes/show_json_jbuilder.html b/doc/app/views/sei_processes/show_json_jbuilder.html new file mode 100644 index 00000000..03944be9 --- /dev/null +++ b/doc/app/views/sei_processes/show_json_jbuilder.html @@ -0,0 +1,201 @@ + + + + + + +show.json.jbuilder - RDoc Documentation + + + + + + + + + + + + + + + + + + +
              + +

              json.partial! “sei_processes/sei_process”, sei_process: @sei_process

              + +
              + + + + + diff --git a/doc/config/credentials_yml_enc.html b/doc/config/credentials_yml_enc.html new file mode 100644 index 00000000..93ba6e75 --- /dev/null +++ b/doc/config/credentials_yml_enc.html @@ -0,0 +1,201 @@ + + + + + + +credentials.yml.enc - RDoc Documentation + + + + + + + + + + + + + + + + + + +
              + +

              1G5y4+VO3+ksS04MdFWLJJ3WVBepALMTp/GMPpK/n2sPUN8gFIrb6TfVk7H+9d21lQ8GDElgPCwPTWiAg3jE6e7twoLNyVZnfGZ22XeitkuWzokONq+e3RqbP8k2yuXAClrlHfLyzkBDrIpB8e1+cCe6zWSE2iBSVODM0MSOpgHwyj+vhkf/zVRyB94ut7tNJgf4jYM2vb/Qfk40JrlHDuHw4CJR078lXBSLgZU5LaUQbDzPwAwlUq8bpCpC/d75ccyoK2dgD2mi6PEpam81LVWgxJ+GnqP9JbN68CkGMqQAM+FP4Zu6/YhuB3tFfJrvPSmhqvA9PZj28Q/i67t1Xl/0DEWgGPH4bSF4+AstTe6xA2+jAHcED29259qWaKDplEJSdR4qQ9spafNUlavG0dyw0y8xB6pwDCXC–hTdz4FWgHWDmwjhg–GE3HFWUr8X0cV9NQBTIYSw==

              + +
              + + + + + diff --git a/doc/config_ru.html b/doc/config_ru.html new file mode 100644 index 00000000..25f2b04c --- /dev/null +++ b/doc/config_ru.html @@ -0,0 +1,205 @@ + + + + + + +config.ru - RDoc Documentation + + + + + + + + + + + + + + + + + + +
              + +

              # This file is used by Rack-based servers to start the application.

              + +

              require_relative 'config/environment'

              + +

              run Rails.application

              + +
              + + + + + diff --git a/doc/coverage/assets/0_12_3/application_css.html b/doc/coverage/assets/0_12_3/application_css.html new file mode 100644 index 00000000..c702bc98 --- /dev/null +++ b/doc/coverage/assets/0_12_3/application_css.html @@ -0,0 +1,201 @@ + + + + + + +application.css - RDoc Documentation + + + + + + + + + + + + + + + + + + +
              + +

              html,body,div,span,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,code,del,dfn,em,img,q,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,dialog,figure,footer,header,hgroup,nav,section{margin:0;padding:0;border:0;font-weight:inherit;font-style:inherit;font-size:100%;font-family:inherit;vertical-align:baseline}article,aside,dialog,figure,footer,header,hgroup,nav,section{display:block}body{line-height:1.5}table{border-collapse:separate;border-spacing:0}caption,th,td{text-align:left;font-weight:normal}table,td,th{vertical-align:middle}blockquote:before,blockquote:after,q:before,q:after{content:“”}blockquote,q{quotes:“” “”}a img{border:0}html{font-size:100.01%}body{font-size:82%;color:#222;background:#fff;font-family:“Helvetica Neue”,Arial,Helvetica,sans-serif}h1,h2,h3,h4,h5,h6{font-weight:normal;color:#111}h1{font-size:3em;line-height:1;margin-bottom:.5em}h2{font-size:2em;margin-bottom:.75em}h3{font-size:1.5em;line-height:1;margin-bottom:1em}h4{font-size:1.2em;line-height:1.25;margin-bottom:1.25em}h5{font-size:1em;font-weight:bold;margin-bottom:1.5em}h6{font-size:1em;font-weight:bold}h1 img,h2 img,h3 img,h4 img,h5 img,h6 img{margin:0}p{margin:0 0 1.5em}p img.left{float:left;margin:1.5em 1.5em 1.5em 0;padding:0}p img.right{float:right;margin:1.5em 0 1.5em 1.5em}a:focus,a:hover{color:#000}a{color:#009;text-decoration:underline}blockquote{margin:1.5em;color:#666;font-style:italic}strong{font-weight:bold}em,dfn{font-style:italic}dfn{font-weight:bold}sup,sub{line-height:0}abbr,acronym{border-bottom:1px dotted #666}address{margin:0 0 1.5em;font-style:italic}del{color:#666}pre{margin:1.5em 0;white-space:pre}pre,code,tt{font:1em 'andale mono','lucida console',monospace;line-height:1.5}li ul,li ol{margin:0}ul,ol{margin:0 1.5em 1.5em 0;padding-left:3.333em}ul{list-style-type:disc}ol{list-style-type:decimal}dl{margin:0 0 1.5em 0}dl dt{font-weight:bold}dd{margin-left:1.5em}table{margin-bottom:1.4em;width:100%}th{font-weight:bold}thead th{background:#c3d9ff}th,td,caption{padding:4px 10px 4px 5px}tr.even td{background:#efefef}tfoot{font-style:italic}caption{background:#eee}.small{font-size:.8em;margin-bottom:1.875em;line-height:1.875em}.large{font-size:1.2em;line-height:2.5em;margin-bottom:1.25em}.hide{display:none}.quiet{color:#666}.loud{color:#000}.highlight{background:#ff0}.added{background:#060;color:#fff}.removed{background:#900;color:#fff}.first{margin-left:0;padding-left:0}.last{margin-right:0;padding-right:0}.top{margin-top:0;padding-top:0}.bottom{margin-bottom:0;padding-bottom:0}label{font-weight:bold}fieldset{padding:1.4em;margin:0 0 1.5em 0;border:1px solid ccc}legend{font-weight:bold;font-size:1.2em}input,input,input.text,input.title,textarea,select{background-color:#fff;border:1px solid bbb}input:focus,input:focus,input.text:focus,input.title:focus,textarea:focus,select:focus{border-color:#666}input,input,input.text,input.title,textarea,select{margin:.5em 0}input.text,input.title{width:300px;padding:5px}input.title{font-size:1.5em}textarea{width:390px;height:250px;padding:5px}input,input,input.checkbox,input.radio{position:relative;top:.25em}form.inline{line-height:3}form.inline p{margin-bottom:0}.error,.notice,.success{padding:.8em;margin-bottom:1em;border:2px solid ddd}.error{background:#fbe3e4;color:#8a1f11;border-color:#fbc2c4}.notice{background:#fff6bf;color:#514721;border-color:#ffd324}.success{background:#e6efc2;color:#264409;border-color:#c6d880}.error a{color:#8a1f11}.notice a{color:#514721}.success a{color:#264409}.box{padding:1.5em;margin-bottom:1.5em;background:#e5ecf9}hr{background:#ddd;color:#ddd;clear:both;float:none;width:100%;height:.1em;margin:0 0 1.45em;border:0}hr.space{background:#fff;color:#fff;visibility:hidden}.clearfix:after,.container:after{content:“0020”;display:block;height:0;clear:both;visibility:hidden;overflow:hidden}.clearfix,.container{display:block}.clear{clear:both}table.dataTable{width:100%;margin:0 auto;clear:both;border-collapse:separate;border-spacing:0}table.dataTable thead th,table.dataTable tfoot th{font-weight:bold}table.dataTable thead th,table.dataTable thead td{padding:10px 18px;border-bottom:1px solid #111}table.dataTable thead th:active,table.dataTable thead td:active{outline:0}table.dataTable tfoot th,table.dataTable tfoot td{padding:10px 18px 6px 18px;border-top:1px solid #111}table.dataTable thead .sorting,table.dataTable thead .sorting_asc,table.dataTable thead .sorting_desc,table.dataTable thead .sorting_asc_disabled,table.dataTable thead .sorting_desc_disabled{cursor:pointer;*cursor:hand;background-repeat:no-repeat;background-position:center right}table.dataTable thead .sorting{background-image:url(“DataTables-1.10.20/images/sort_both.png”)}table.dataTable thead .sorting_asc{background-image:url(“DataTables-1.10.20/images/sort_asc.png”)}table.dataTable thead .sorting_desc{background-image:url(“DataTables-1.10.20/images/sort_desc.png”)}table.dataTable thead .sorting_asc_disabled{background-image:url(“DataTables-1.10.20/images/sort_asc_disabled.png”)}table.dataTable thead .sorting_desc_disabled{background-image:url(“DataTables-1.10.20/images/sort_desc_disabled.png”)}table.dataTable tbody tr{background-color:#fff}table.dataTable tbody tr.selected{background-color:#b0bed9}table.dataTable tbody th,table.dataTable tbody td{padding:8px 10px}table.dataTable.row-border tbody th,table.dataTable.row-border tbody td,table.dataTable.display tbody th,table.dataTable.display tbody td{border-top:1px solid ddd}table.dataTable.row-border tbody tr:first-child th,table.dataTable.row-border tbody tr:first-child td,table.dataTable.display tbody tr:first-child th,table.dataTable.display tbody tr:first-child td{border-top:0}table.dataTable.cell-border tbody th,table.dataTable.cell-border tbody td{border-top:1px solid ddd;border-right:1px solid ddd}table.dataTable.cell-border tbody tr th:first-child,table.dataTable.cell-border tbody tr td:first-child{border-left:1px solid ddd}table.dataTable.cell-border tbody tr:first-child th,table.dataTable.cell-border tbody tr:first-child td{border-top:0}table.dataTable.stripe tbody tr.odd,table.dataTable.display tbody tr.odd{background-color:#f9f9f9}table.dataTable.stripe tbody tr.odd.selected,table.dataTable.display tbody tr.odd.selected{background-color:#acbad4}table.dataTable.hover tbody tr:hover,table.dataTable.display tbody tr:hover{background-color:#f6f6f6}table.dataTable.hover tbody tr:hover.selected,table.dataTable.display tbody tr:hover.selected{background-color:#aab7d1}table.dataTable.order-column tbody tr>.sorting_1,table.dataTable.order-column tbody tr>.sorting_2,table.dataTable.order-column tbody tr>.sorting_3,table.dataTable.display tbody tr>.sorting_1,table.dataTable.display tbody tr>.sorting_2,table.dataTable.display tbody tr>.sorting_3{background-color:#fafafa}table.dataTable.order-column tbody tr.selected>.sorting_1,table.dataTable.order-column tbody tr.selected>.sorting_2,table.dataTable.order-column tbody tr.selected>.sorting_3,table.dataTable.display tbody tr.selected>.sorting_1,table.dataTable.display tbody tr.selected>.sorting_2,table.dataTable.display tbody tr.selected>.sorting_3{background-color:#acbad5}table.dataTable.display tbody tr.odd>.sorting_1,table.dataTable.order-column.stripe tbody tr.odd>.sorting_1{background-color:#f1f1f1}table.dataTable.display tbody tr.odd>.sorting_2,table.dataTable.order-column.stripe tbody tr.odd>.sorting_2{background-color:#f3f3f3}table.dataTable.display tbody tr.odd>.sorting_3,table.dataTable.order-column.stripe tbody tr.odd>.sorting_3{background-color:whitesmoke}table.dataTable.display tbody tr.odd.selected>.sorting_1,table.dataTable.order-column.stripe tbody tr.odd.selected>.sorting_1{background-color:#a6b4cd}table.dataTable.display tbody tr.odd.selected>.sorting_2,table.dataTable.order-column.stripe tbody tr.odd.selected>.sorting_2{background-color:#a8b5cf}table.dataTable.display tbody tr.odd.selected>.sorting_3,table.dataTable.order-column.stripe tbody tr.odd.selected>.sorting_3{background-color:#a9b7d1}table.dataTable.display tbody tr.even>.sorting_1,table.dataTable.order-column.stripe tbody tr.even>.sorting_1{background-color:#fafafa}table.dataTable.display tbody tr.even>.sorting_2,table.dataTable.order-column.stripe tbody tr.even>.sorting_2{background-color:#fcfcfc}table.dataTable.display tbody tr.even>.sorting_3,table.dataTable.order-column.stripe tbody tr.even>.sorting_3{background-color:#fefefe}table.dataTable.display tbody tr.even.selected>.sorting_1,table.dataTable.order-column.stripe tbody tr.even.selected>.sorting_1{background-color:#acbad5}table.dataTable.display tbody tr.even.selected>.sorting_2,table.dataTable.order-column.stripe tbody tr.even.selected>.sorting_2{background-color:#aebcd6}table.dataTable.display tbody tr.even.selected>.sorting_3,table.dataTable.order-column.stripe tbody tr.even.selected>.sorting_3{background-color:#afbdd8}table.dataTable.display tbody tr:hover>.sorting_1,table.dataTable.order-column.hover tbody tr:hover>.sorting_1{background-color:#eaeaea}table.dataTable.display tbody tr:hover>.sorting_2,table.dataTable.order-column.hover tbody tr:hover>.sorting_2{background-color:#ececec}table.dataTable.display tbody tr:hover>.sorting_3,table.dataTable.order-column.hover tbody tr:hover>.sorting_3{background-color:#efefef}table.dataTable.display tbody tr:hover.selected>.sorting_1,table.dataTable.order-column.hover tbody tr:hover.selected>.sorting_1{background-color:#a2aec7}table.dataTable.display tbody tr:hover.selected>.sorting_2,table.dataTable.order-column.hover tbody tr:hover.selected>.sorting_2{background-color:#a3b0c9}table.dataTable.display tbody tr:hover.selected>.sorting_3,table.dataTable.order-column.hover tbody tr:hover.selected>.sorting_3{background-color:#a5b2cb}table.dataTable.no-footer{border-bottom:1px solid #111}table.dataTable.nowrap th,table.dataTable.nowrap td{white-space:nowrap}table.dataTable.compact thead th,table.dataTable.compact thead td{padding:4px 17px 4px 4px}table.dataTable.compact tfoot th,table.dataTable.compact tfoot td{padding:4px}table.dataTable.compact tbody th,table.dataTable.compact tbody td{padding:4px}table.dataTable th.dt-left,table.dataTable td.dt-left{text-align:left}table.dataTable th.dt-center,table.dataTable td.dt-center,table.dataTable td.dataTables_empty{text-align:center}table.dataTable th.dt-right,table.dataTable td.dt-right{text-align:right}table.dataTable th.dt-justify,table.dataTable td.dt-justify{text-align:justify}table.dataTable th.dt-nowrap,table.dataTable td.dt-nowrap{white-space:nowrap}table.dataTable thead th.dt-head-left,table.dataTable thead td.dt-head-left,table.dataTable tfoot th.dt-head-left,table.dataTable tfoot td.dt-head-left{text-align:left}table.dataTable thead th.dt-head-center,table.dataTable thead td.dt-head-center,table.dataTable tfoot th.dt-head-center,table.dataTable tfoot td.dt-head-center{text-align:center}table.dataTable thead th.dt-head-right,table.dataTable thead td.dt-head-right,table.dataTable tfoot th.dt-head-right,table.dataTable tfoot td.dt-head-right{text-align:right}table.dataTable thead th.dt-head-justify,table.dataTable thead td.dt-head-justify,table.dataTable tfoot th.dt-head-justify,table.dataTable tfoot td.dt-head-justify{text-align:justify}table.dataTable thead th.dt-head-nowrap,table.dataTable thead td.dt-head-nowrap,table.dataTable tfoot th.dt-head-nowrap,table.dataTable tfoot td.dt-head-nowrap{white-space:nowrap}table.dataTable tbody th.dt-body-left,table.dataTable tbody td.dt-body-left{text-align:left}table.dataTable tbody th.dt-body-center,table.dataTable tbody td.dt-body-center{text-align:center}table.dataTable tbody th.dt-body-right,table.dataTable tbody td.dt-body-right{text-align:right}table.dataTable tbody th.dt-body-justify,table.dataTable tbody td.dt-body-justify{text-align:justify}table.dataTable tbody th.dt-body-nowrap,table.dataTable tbody td.dt-body-nowrap{white-space:nowrap}table.dataTable,table.dataTable th,table.dataTable td{box-sizing:content-box}.dataTables_wrapper{position:relative;clear:both;*zoom:1;zoom:1}.dataTables_wrapper .dataTables_length{float:left}.dataTables_wrapper .dataTables_filter{float:right;text-align:right}.dataTables_wrapper .dataTables_filter input{margin-left:.5em}.dataTables_wrapper .dataTables_info{clear:both;float:left;padding-top:.755em}.dataTables_wrapper .dataTables_paginate{float:right;text-align:right;padding-top:.25em}.dataTables_wrapper .dataTables_paginate .paginate_button{box-sizing:border-box;display:inline-block;min-width:1.5em;padding:.5em 1em;margin-left:2px;text-align:center;text-decoration:none !important;cursor:pointer;*cursor:hand;color:#333 !important;border:1px solid transparent;border-radius:2px}.dataTables_wrapper .dataTables_paginate .paginate_button.current,.dataTables_wrapper .dataTables_paginate .paginate_button.current:hover{color:#333 !important;border:1px solid #979797;background-color:white;background:-webkit-gradient(linear,left top,left bottom,color-stop(0,white),color-stop(100%,#dcdcdc));background:-webkit-linear-gradient(top,white 0,#dcdcdc 100%);background:-moz-linear-gradient(top,white 0,#dcdcdc 100%);background:-ms-linear-gradient(top,white 0,#dcdcdc 100%);background:-o-linear-gradient(top,white 0,#dcdcdc 100%);background:linear-gradient(to bottom,white 0,#dcdcdc 100%)}.dataTables_wrapper .dataTables_paginate .paginate_button.disabled,.dataTables_wrapper .dataTables_paginate .paginate_button.disabled:hover,.dataTables_wrapper .dataTables_paginate .paginate_button.disabled:active{cursor:default;color:#666 !important;border:1px solid transparent;background:transparent;box-shadow:none}.dataTables_wrapper .dataTables_paginate .paginate_button:hover{color:white !important;border:1px solid #111;background-color:#585858;background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#585858),color-stop(100%,#111));background:-webkit-linear-gradient(top,#585858 0,#111 100%);background:-moz-linear-gradient(top,#585858 0,#111 100%);background:-ms-linear-gradient(top,#585858 0,#111 100%);background:-o-linear-gradient(top,#585858 0,#111 100%);background:linear-gradient(to bottom,#585858 0,#111 100%)}.dataTables_wrapper .dataTables_paginate .paginate_button:active{outline:0;background-color:#2b2b2b;background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#2b2b2b),color-stop(100%,#0c0c0c));background:-webkit-linear-gradient(top,#2b2b2b 0,#0c0c0c 100%);background:-moz-linear-gradient(top,#2b2b2b 0,#0c0c0c 100%);background:-ms-linear-gradient(top,#2b2b2b 0,#0c0c0c 100%);background:-o-linear-gradient(top,#2b2b2b 0,#0c0c0c 100%);background:linear-gradient(to bottom,#2b2b2b 0,#0c0c0c 100%);box-shadow:inset 0 0 3px #111}.dataTables_wrapper .dataTables_paginate .ellipsis{padding:0 1em}.dataTables_wrapper .dataTables_processing{position:absolute;top:50%;left:50%;width:100%;height:40px;margin-left:-50%;margin-top:-25px;padding-top:20px;text-align:center;font-size:1.2em;background-color:white;background:-webkit-gradient(linear,left top,right top,color-stop(0,rgba(255,255,255,0)),color-stop(25%,rgba(255,255,255,0.9)),color-stop(75%,rgba(255,255,255,0.9)),color-stop(100%,rgba(255,255,255,0)));background:-webkit-linear-gradient(left,rgba(255,255,255,0) 0,rgba(255,255,255,0.9) 25%,rgba(255,255,255,0.9) 75%,rgba(255,255,255,0) 100%);background:-moz-linear-gradient(left,rgba(255,255,255,0) 0,rgba(255,255,255,0.9) 25%,rgba(255,255,255,0.9) 75%,rgba(255,255,255,0) 100%);background:-ms-linear-gradient(left,rgba(255,255,255,0) 0,rgba(255,255,255,0.9) 25%,rgba(255,255,255,0.9) 75%,rgba(255,255,255,0) 100%);background:-o-linear-gradient(left,rgba(255,255,255,0) 0,rgba(255,255,255,0.9) 25%,rgba(255,255,255,0.9) 75%,rgba(255,255,255,0) 100%);background:linear-gradient(to right,rgba(255,255,255,0) 0,rgba(255,255,255,0.9) 25%,rgba(255,255,255,0.9) 75%,rgba(255,255,255,0) 100%)}.dataTables_wrapper .dataTables_length,.dataTables_wrapper .dataTables_filter,.dataTables_wrapper .dataTables_info,.dataTables_wrapper .dataTables_processing,.dataTables_wrapper .dataTables_paginate{color:#333}.dataTables_wrapper .dataTables_scroll{clear:both}.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody{*margin-top:-1px;-webkit-overflow-scrolling:touch}.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>thead>tr>th,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>thead>tr>td,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>tbody>tr>th,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>tbody>tr>td{vertical-align:middle}.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>thead>tr>th>div.dataTables_sizing,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>thead>tr>td>div.dataTables_sizing,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>tbody>tr>th>div.dataTables_sizing,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>tbody>tr>td>div.dataTables_sizing{height:0;overflow:hidden;margin:0 !important;padding:0 !important}.dataTables_wrapper.no-footer .dataTables_scrollBody{border-bottom:1px solid #111}.dataTables_wrapper.no-footer div.dataTables_scrollHead table.dataTable,.dataTables_wrapper.no-footer div.dataTables_scrollBody>table{border-bottom:0}.dataTables_wrapper:after{visibility:hidden;display:block;content:“”;clear:both;height:0}@media screen and (max-width:767px){.dataTables_wrapper .dataTables_info,.dataTables_wrapper .dataTables_paginate{float:none;text-align:center}.dataTables_wrapper .dataTables_paginate{margin-top:.5em}}@media screen and (max-width:640px){.dataTables_wrapper .dataTables_length,.dataTables_wrapper .dataTables_filter{float:none;text-align:center}.dataTables_wrapper .dataTables_filter{margin-top:.5em}}pre .comment,pre .template_comment,pre .diff .header,pre .javadoc{color:#998;font-style:italic}pre .keyword,pre .css .rule .keyword,pre .winutils,pre .javascript .title,pre .lisp .title{color:#000;font-weight:bold}pre .number,pre .hexcolor{color:#458}pre .string,pre .tag .value,pre .phpdoc,pre .tex .formula{color:#d14}pre .subst{color:#712}pre .constant,pre .title,pre .id{color:#900;font-weight:bold}pre .javascript .title,pre .lisp .title,pre .subst{font-weight:normal}pre .class .title,pre .haskell .label,pre .tex .command{color:#458;font-weight:bold}pre .tag,pre .tag .title,pre .rules .property,pre .django .tag .keyword{color:navy;font-weight:normal}pre .attribute,pre .variable,pre .instancevar,pre .lisp .body{color:teal}pre .regexp{color:#009926}pre .class{color:#458;font-weight:bold}pre .symbol,pre .ruby .symbol .string,pre .ruby .symbol .keyword,pre .ruby .symbol .keymethods,pre .lisp .keyword,pre .tex .special,pre .input_number{color:#990073}pre .builtin,pre .built_in,pre .lisp .title{color:#0086b3}pre .preprocessor,pre .pi,pre .doctype,pre .shebang,pre .cdata{color:#999;font-weight:bold}pre .deletion{background:#fdd}pre .addition{background:#dfd}pre .diff .change{background:#0086b3}pre .chunk{color:#aaa}pre .tex .formula{opacity:.5}.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{position:absolute;left:-99999999px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:after{content:“.”;display:block;height:0;clear:both;visibility:hidden}.ui-helper-clearfix{display:inline-block}/**/* html .ui-helper-clearfix{height:1%}.ui-helper-clearfix{display:block}/**/.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-state-disabled{cursor:default !important}.ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-overlay{position:absolute;top:0;left:0;width:100%;height:100%}.ui-widget{font-family:Verdana,Arial,sans-serif;font-size:1.1em}.ui-widget .ui-widget{font-size:1em}.ui-widget input,.ui-widget select,.ui-widget textarea,.ui-widget button{font-family:Verdana,Arial,sans-serif;font-size:1em}.ui-widget-content{border:1px solid aaa;background:#fff url(images/ui-bg_flat_75_ffffff_40x100.png) 50% 50% repeat-x;color:#222}.ui-widget-content a{color:#222}.ui-widget-header{border:1px solid aaa;background:#ccc url(images/ui-bg_highlight-soft_75_cccccc_1x100.png) 50% 50% repeat-x;color:#222;font-weight:bold}.ui-widget-header a{color:#222}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default{border:1px solid d3d3d3;background:#e6e6e6 url(images/ui-bg_glass_75_e6e6e6_1x400.png) 50% 50% repeat-x;font-weight:normal;color:#555}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited{color:#555;text-decoration:none}.ui-state-hover,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-hover,.ui-state-focus,.ui-widget-content .ui-state-focus,.ui-widget-header .ui-state-focus{border:1px solid #999;background:#dadada url(images/ui-bg_glass_75_dadada_1x400.png) 50% 50% repeat-x;font-weight:normal;color:#212121}.ui-state-hover a,.ui-state-hover a:hover{color:#212121;text-decoration:none}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active{border:1px solid aaa;background:#fff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x;font-weight:normal;color:#212121}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#212121;text-decoration:none}.ui-widget :active{outline:0}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid fcefa1;background:#fbf9ee url(images/ui-bg_glass_55_fbf9ee_1x400.png) 50% 50% repeat-x;color:#363636}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:#363636}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:1px solid cd0a0a;background:#fef1ec url(images/ui-bg_glass_95_fef1ec_1x400.png) 50% 50% repeat-x;color:#cd0a0a}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a{color:#cd0a0a}.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#cd0a0a}.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary{font-weight:bold}.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary{opacity:.7;filter:Alpha(Opacity=70);font-weight:normal}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none}.ui-icon{width:16px;height:16px;background-image:url(images/ui-icons_222222_256x240.png)}.ui-widget-content .ui-icon{background-image:url(images/ui-icons_222222_256x240.png)}.ui-widget-header .ui-icon{background-image:url(images/ui-icons_222222_256x240.png)}.ui-state-default .ui-icon{background-image:url(images/ui-icons_888888_256x240.png)}.ui-state-hover .ui-icon,.ui-state-focus .ui-icon{background-image:url(images/ui-icons_454545_256x240.png)}.ui-state-active .ui-icon{background-image:url(images/ui-icons_454545_256x240.png)}.ui-state-highlight .ui-icon{background-image:url(images/ui-icons_2e83ff_256x240.png)}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url(images/ui-icons_cd0a0a_256x240.png)}.ui-icon-carat-1-n{background-position:0 0}.ui-icon-carat-1-ne{background-position:-16px 0}.ui-icon-carat-1-e{background-position:-32px 0}.ui-icon-carat-1-se{background-position:-48px 0}.ui-icon-carat-1-s{background-position:-64px 0}.ui-icon-carat-1-sw{background-position:-80px 0}.ui-icon-carat-1-w{background-position:-96px 0}.ui-icon-carat-1-nw{background-position:-112px 0}.ui-icon-carat-2-n-s{background-position:-128px 0}.ui-icon-carat-2-e-w{background-position:-144px 0}.ui-icon-triangle-1-n{background-position:0 -16px}.ui-icon-triangle-1-ne{background-position:-16px -16px}.ui-icon-triangle-1-e{background-position:-32px -16px}.ui-icon-triangle-1-se{background-position:-48px -16px}.ui-icon-triangle-1-s{background-position:-64px -16px}.ui-icon-triangle-1-sw{background-position:-80px -16px}.ui-icon-triangle-1-w{background-position:-96px -16px}.ui-icon-triangle-1-nw{background-position:-112px -16px}.ui-icon-triangle-2-n-s{background-position:-128px -16px}.ui-icon-triangle-2-e-w{background-position:-144px -16px}.ui-icon-arrow-1-n{background-position:0 -32px}.ui-icon-arrow-1-ne{background-position:-16px -32px}.ui-icon-arrow-1-e{background-position:-32px -32px}.ui-icon-arrow-1-se{background-position:-48px -32px}.ui-icon-arrow-1-s{background-position:-64px -32px}.ui-icon-arrow-1-sw{background-position:-80px -32px}.ui-icon-arrow-1-w{background-position:-96px -32px}.ui-icon-arrow-1-nw{background-position:-112px -32px}.ui-icon-arrow-2-n-s{background-position:-128px -32px}.ui-icon-arrow-2-ne-sw{background-position:-144px -32px}.ui-icon-arrow-2-e-w{background-position:-160px -32px}.ui-icon-arrow-2-se-nw{background-position:-176px -32px}.ui-icon-arrowstop-1-n{background-position:-192px -32px}.ui-icon-arrowstop-1-e{background-position:-208px -32px}.ui-icon-arrowstop-1-s{background-position:-224px -32px}.ui-icon-arrowstop-1-w{background-position:-240px -32px}.ui-icon-arrowthick-1-n{background-position:0 -48px}.ui-icon-arrowthick-1-ne{background-position:-16px -48px}.ui-icon-arrowthick-1-e{background-position:-32px -48px}.ui-icon-arrowthick-1-se{background-position:-48px -48px}.ui-icon-arrowthick-1-s{background-position:-64px -48px}.ui-icon-arrowthick-1-sw{background-position:-80px -48px}.ui-icon-arrowthick-1-w{background-position:-96px -48px}.ui-icon-arrowthick-1-nw{background-position:-112px -48px}.ui-icon-arrowthick-2-n-s{background-position:-128px -48px}.ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px}.ui-icon-arrowthick-2-e-w{background-position:-160px -48px}.ui-icon-arrowthick-2-se-nw{background-position:-176px -48px}.ui-icon-arrowthickstop-1-n{background-position:-192px -48px}.ui-icon-arrowthickstop-1-e{background-position:-208px -48px}.ui-icon-arrowthickstop-1-s{background-position:-224px -48px}.ui-icon-arrowthickstop-1-w{background-position:-240px -48px}.ui-icon-arrowreturnthick-1-w{background-position:0 -64px}.ui-icon-arrowreturnthick-1-n{background-position:-16px -64px}.ui-icon-arrowreturnthick-1-e{background-position:-32px -64px}.ui-icon-arrowreturnthick-1-s{background-position:-48px -64px}.ui-icon-arrowreturn-1-w{background-position:-64px -64px}.ui-icon-arrowreturn-1-n{background-position:-80px -64px}.ui-icon-arrowreturn-1-e{background-position:-96px -64px}.ui-icon-arrowreturn-1-s{background-position:-112px -64px}.ui-icon-arrowrefresh-1-w{background-position:-128px -64px}.ui-icon-arrowrefresh-1-n{background-position:-144px -64px}.ui-icon-arrowrefresh-1-e{background-position:-160px -64px}.ui-icon-arrowrefresh-1-s{background-position:-176px -64px}.ui-icon-arrow-4{background-position:0 -80px}.ui-icon-arrow-4-diag{background-position:-16px -80px}.ui-icon-extlink{background-position:-32px -80px}.ui-icon-newwin{background-position:-48px -80px}.ui-icon-refresh{background-position:-64px -80px}.ui-icon-shuffle{background-position:-80px -80px}.ui-icon-transfer-e-w{background-position:-96px -80px}.ui-icon-transferthick-e-w{background-position:-112px -80px}.ui-icon-folder-collapsed{background-position:0 -96px}.ui-icon-folder-open{background-position:-16px -96px}.ui-icon-document{background-position:-32px -96px}.ui-icon-document-b{background-position:-48px -96px}.ui-icon-note{background-position:-64px -96px}.ui-icon-mail-closed{background-position:-80px -96px}.ui-icon-mail-open{background-position:-96px -96px}.ui-icon-suitcase{background-position:-112px -96px}.ui-icon-comment{background-position:-128px -96px}.ui-icon-person{background-position:-144px -96px}.ui-icon-print{background-position:-160px -96px}.ui-icon-trash{background-position:-176px -96px}.ui-icon-locked{background-position:-192px -96px}.ui-icon-unlocked{background-position:-208px -96px}.ui-icon-bookmark{background-position:-224px -96px}.ui-icon-tag{background-position:-240px -96px}.ui-icon-home{background-position:0 -112px}.ui-icon-flag{background-position:-16px -112px}.ui-icon-calendar{background-position:-32px -112px}.ui-icon-cart{background-position:-48px -112px}.ui-icon-pencil{background-position:-64px -112px}.ui-icon-clock{background-position:-80px -112px}.ui-icon-disk{background-position:-96px -112px}.ui-icon-calculator{background-position:-112px -112px}.ui-icon-zoomin{background-position:-128px -112px}.ui-icon-zoomout{background-position:-144px -112px}.ui-icon-search{background-position:-160px -112px}.ui-icon-wrench{background-position:-176px -112px}.ui-icon-gear{background-position:-192px -112px}.ui-icon-heart{background-position:-208px -112px}.ui-icon-star{background-position:-224px -112px}.ui-icon-link{background-position:-240px -112px}.ui-icon-cancel{background-position:0 -128px}.ui-icon-plus{background-position:-16px -128px}.ui-icon-plusthick{background-position:-32px -128px}.ui-icon-minus{background-position:-48px -128px}.ui-icon-minusthick{background-position:-64px -128px}.ui-icon-close{background-position:-80px -128px}.ui-icon-closethick{background-position:-96px -128px}.ui-icon-key{background-position:-112px -128px}.ui-icon-lightbulb{background-position:-128px -128px}.ui-icon-scissors{background-position:-144px -128px}.ui-icon-clipboard{background-position:-160px -128px}.ui-icon-copy{background-position:-176px -128px}.ui-icon-contact{background-position:-192px -128px}.ui-icon-image{background-position:-208px -128px}.ui-icon-video{background-position:-224px -128px}.ui-icon-script{background-position:-240px -128px}.ui-icon-alert{background-position:0 -144px}.ui-icon-info{background-position:-16px -144px}.ui-icon-notice{background-position:-32px -144px}.ui-icon-help{background-position:-48px -144px}.ui-icon-check{background-position:-64px -144px}.ui-icon-bullet{background-position:-80px -144px}.ui-icon-radio-off{background-position:-96px -144px}.ui-icon-radio-on{background-position:-112px -144px}.ui-icon-pin-w{background-position:-128px -144px}.ui-icon-pin-s{background-position:-144px -144px}.ui-icon-play{background-position:0 -160px}.ui-icon-pause{background-position:-16px -160px}.ui-icon-seek-next{background-position:-32px -160px}.ui-icon-seek-prev{background-position:-48px -160px}.ui-icon-seek-end{background-position:-64px -160px}.ui-icon-seek-start{background-position:-80px -160px}.ui-icon-seek-first{background-position:-80px -160px}.ui-icon-stop{background-position:-96px -160px}.ui-icon-eject{background-position:-112px -160px}.ui-icon-volume-off{background-position:-128px -160px}.ui-icon-volume-on{background-position:-144px -160px}.ui-icon-power{background-position:0 -176px}.ui-icon-signal-diag{background-position:-16px -176px}.ui-icon-signal{background-position:-32px -176px}.ui-icon-battery-0{background-position:-48px -176px}.ui-icon-battery-1{background-position:-64px -176px}.ui-icon-battery-2{background-position:-80px -176px}.ui-icon-battery-3{background-position:-96px -176px}.ui-icon-circle-plus{background-position:0 -192px}.ui-icon-circle-minus{background-position:-16px -192px}.ui-icon-circle-close{background-position:-32px -192px}.ui-icon-circle-triangle-e{background-position:-48px -192px}.ui-icon-circle-triangle-s{background-position:-64px -192px}.ui-icon-circle-triangle-w{background-position:-80px -192px}.ui-icon-circle-triangle-n{background-position:-96px -192px}.ui-icon-circle-arrow-e{background-position:-112px -192px}.ui-icon-circle-arrow-s{background-position:-128px -192px}.ui-icon-circle-arrow-w{background-position:-144px -192px}.ui-icon-circle-arrow-n{background-position:-160px -192px}.ui-icon-circle-zoomin{background-position:-176px -192px}.ui-icon-circle-zoomout{background-position:-192px -192px}.ui-icon-circle-check{background-position:-208px -192px}.ui-icon-circlesmall-plus{background-position:0 -208px}.ui-icon-circlesmall-minus{background-position:-16px -208px}.ui-icon-circlesmall-close{background-position:-32px -208px}.ui-icon-squaresmall-plus{background-position:-48px -208px}.ui-icon-squaresmall-minus{background-position:-64px -208px}.ui-icon-squaresmall-close{background-position:-80px -208px}.ui-icon-grip-dotted-vertical{background-position:0 -224px}.ui-icon-grip-dotted-horizontal{background-position:-16px -224px}.ui-icon-grip-solid-vertical{background-position:-32px -224px}.ui-icon-grip-solid-horizontal{background-position:-48px -224px}.ui-icon-gripsmall-diagonal-se{background-position:-64px -224px}.ui-icon-grip-diagonal-se{background-position:-80px -224px}.ui-corner-tl{-moz-border-radius-topleft:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px}.ui-corner-tr{-moz-border-radius-topright:4px;-webkit-border-top-right-radius:4px;border-top-right-radius:4px}.ui-corner-bl{-moz-border-radius-bottomleft:4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px}.ui-corner-br{-moz-border-radius-bottomright:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px}.ui-corner-top{-moz-border-radius-topleft:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topright:4px;-webkit-border-top-right-radius:4px;border-top-right-radius:4px}.ui-corner-bottom{-moz-border-radius-bottomleft:4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-moz-border-radius-bottomright:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px}.ui-corner-right{-moz-border-radius-topright:4px;-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-bottomright:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px}.ui-corner-left{-moz-border-radius-topleft:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-bottomleft:4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px}.ui-corner-all{-moz-border-radius:4px;-webkit-border-radius:4px;border-radius:4px}.ui-widget-overlay{background:#aaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x;opacity:.30;filter:Alpha(Opacity=30)}.ui-widget-shadow{margin:-8px 0 0 -8px;padding:8px;background:#aaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x;opacity:.30;filter:Alpha(Opacity=30);-moz-border-radius:8px;-webkit-border-radius:8px;border-radius:8px}#colorbox,#cboxOverlay,#cboxWrapper{position:absolute;top:0;left:0;z-index:9999;overflow:hidden}#cboxOverlay{position:fixed;width:100%;height:100%}#cboxMiddleLeft,#cboxBottomLeft{clear:left}#cboxContent{position:relative}#cboxLoadedContent{overflow:auto}#cboxTitle{margin:0}#cboxLoadingOverlay,#cboxLoadingGraphic{position:absolute;top:0;left:0;width:100%;height:100%}#cboxPrevious,#cboxNext,#cboxClose,#cboxSlideshow{cursor:pointer}.cboxPhoto{float:left;margin:auto;border:0;display:block;max-width:none}.cboxIframe{width:100%;height:100%;display:block;border:0}#colorbox,#cboxContent,#cboxLoadedContent{box-sizing:content-box}#cboxOverlay{background:#000}#cboxTopLeft{width:14px;height:14px;background:url(colorbox/controls.png) no-repeat 0 0}#cboxTopCenter{height:14px;background:url(colorbox/border.png) repeat-x top left}#cboxTopRight{width:14px;height:14px;background:url(colorbox/controls.png) no-repeat -36px 0}#cboxBottomLeft{width:14px;height:43px;background:url(colorbox/controls.png) no-repeat 0 -32px}#cboxBottomCenter{height:43px;background:url(colorbox/border.png) repeat-x bottom left}#cboxBottomRight{width:14px;height:43px;background:url(colorbox/controls.png) no-repeat -36px -32px}#cboxMiddleLeft{width:14px;background:url(colorbox/controls.png) repeat-y -175px 0}#cboxMiddleRight{width:14px;background:url(colorbox/controls.png) repeat-y -211px 0}#cboxContent{background:#fff;overflow:visible}.cboxIframe{background:#fff}#cboxError{padding:50px;border:1px solid ccc}#cboxLoadedContent{margin-bottom:5px}#cboxLoadingOverlay{background:url(colorbox/loading_background.png) no-repeat center center}#cboxLoadingGraphic{background:url(colorbox/loading.gif) no-repeat center center}#cboxTitle{position:absolute;bottom:-25px;left:0;text-align:center;width:100%;font-weight:bold;color:#7c7c7c}#cboxCurrent{position:absolute;bottom:-25px;left:58px;font-weight:bold;color:#7c7c7c}#cboxPrevious,#cboxNext,#cboxClose,#cboxSlideshow{position:absolute;bottom:-29px;background:url(colorbox/controls.png) no-repeat 0 0;width:23px;height:23px;text-indent:-9999px}#cboxPrevious{left:0;background-position:-51px -25px}#cboxPrevious:hover{background-position:-51px 0}#cboxNext{left:27px;background-position:-75px -25px}#cboxNext:hover{background-position:-75px 0}#cboxClose{right:0;background-position:-100px -25px}#cboxClose:hover{background-position:-100px 0}.cboxSlideshow_on cboxSlideshow{background-position:-125px 0;right:27px}.cboxSlideshow_on cboxSlideshow:hover{background-position:-150px 0}.cboxSlideshow_off cboxSlideshow{background-position:-150px -25px;right:27px}.cboxSlideshow_off cboxSlideshow:hover{background-position:-125px 0}#loading{position:fixed;left:40%;top:50%}a{color:#333;text-decoration:none}a:hover{color:#000;text-decoration:underline}body{font-family:“Lucida Grande”,Helvetica,“Helvetica Neue”,Arial,sans-serif;padding:12px;background-color:#333}h1,h2,h3,h4{color:#1c2324;margin:0;padding:0;margin-bottom:12px}table{width:100%}#content{clear:left;background-color:white;border:2px solid ddd;border-top:8px solid ddd;padding:18px;-webkit-border-bottom-left-radius:5px;-webkit-border-bottom-right-radius:5px;-webkit-border-top-right-radius:5px;-moz-border-radius-bottomleft:5px;-moz-border-radius-bottomright:5px;-moz-border-radius-topright:5px;border-bottom-left-radius:5px;border-bottom-right-radius:5px;border-top-right-radius:5px}.dataTables_filter,.dataTables_info{padding:2px 6px}abbr.timeago{text-decoration:none;border:0;font-weight:bold}.timestamp{float:right;color:#ddd}.group_tabs{list-style:none;float:left;margin:0;padding:0}.group_tabs li{display:inline;float:left}.group_tabs li a{font-family:Helvetica,Arial,sans-serif;display:block;float:left;text-decoration:none;padding:4px 8px;background-color:#aaa;background:-webkit-gradient(linear,0 0,0 bottom,from(ddd),to(aaa));background:-moz-linear-gradient(ddd,#aaa);background:linear-gradient(ddd,#aaa);text-shadow:#e5e5e5 1px 1px 0;border-bottom:0;color:#333;font-weight:bold;margin-right:8px;border-top:1px solid efefef;-webkit-border-top-left-radius:2px;-webkit-border-top-right-radius:2px;-moz-border-radius-topleft:2px;-moz-border-radius-topright:2px;border-top-left-radius:2px;border-top-right-radius:2px}.group_tabs li a:hover{background-color:#ccc;background:-webkit-gradient(linear,0 0,0 bottom,from(eee),to(aaa));background:-moz-linear-gradient(eee,#aaa);background:linear-gradient(eee,#aaa)}.group_tabs li a:active{padding-top:5px;padding-bottom:3px}.group_tabs li.active a{color:black;text-shadow:#fff 1px 1px 0;background-color:#ddd;background:-webkit-gradient(linear,0 0,0 bottom,from(white),to(ddd));background:-moz-linear-gradient(white,#ddd);background:linear-gradient(white,#ddd)}.file_list{margin-bottom:18px}.file_list–responsive{overflow-x:auto;overflow-y:hidden}a.src_link{background:url(“./magnify.png”) no-repeat left 50%;padding-left:18px}tr,td{margin:0;padding:0}th{white-space:nowrap}th.ui-state-default{cursor:pointer}th span.ui-icon{float:left}td{padding:4px 8px}td.strong{font-weight:bold}.cell–number{text-align:right}.source_table h3,.source_table h4{padding:0;margin:0;margin-bottom:4px}.source_table .header{padding:10px}.source_table pre{margin:0;padding:0;white-space:normal;color:#000;font-family:“Monaco”,“Inconsolata”,“Consolas”,monospace}.source_table code{color:#000;font-family:“Monaco”,“Inconsolata”,“Consolas”,monospace}.source_table pre{background-color:#333}.source_table pre ol{margin:0;padding:0;margin-left:45px;font-size:12px;color:white}.source_table pre li{margin:0;padding:2px 6px;border-left:5px solid white}.source_table pre li code{white-space:pre;white-space:pre-wrap}.source_table pre .hits{float:right;margin-left:10px;padding:2px 4px;background-color:#444;background:-webkit-gradient(linear,0 0,0 bottom,from(#222),to(#666));background:-moz-linear-gradient(#222,#666);background:linear-gradient(#222,#666);color:white;font-family:Helvetica,“Helvetica Neue”,Arial,sans-serif;font-size:10px;font-weight:bold;text-align:center;border-radius:6px}#footer{color:#ddd;font-size:12px;font-weight:bold;margin-top:12px;text-align:right}#footer a{color:#eee;text-decoration:underline}#footer a:hover{color:#fff;text-decoration:none}.green{color:#090}.red{color:#900}.yellow{color:#da0}.blue{color:blue}thead th{background:white}.source_table .covered{border-color:#090}.source_table .missed{border-color:#900}.source_table .never{border-color:black}.source_table .skipped{border-color:#fc0}.source_table .missed-branch{border-color:#bf0000}.source_table .covered:nth-child(odd){background-color:#cdf2cd}.source_table .covered:nth-child(even){background-color:#dbf2db}.source_table .missed:nth-child(odd){background-color:#f7c0c0}.source_table .missed:nth-child(even){background-color:#f7cfcf}.source_table .never:nth-child(odd){background-color:#efefef}.source_table .never:nth-child(even){background-color:#f4f4f4}.source_table .skipped:nth-child(odd){background-color:#fbf0c0}.source_table .skipped:nth-child(even){background-color:#fbffcf}.source_table .missed-branch:nth-child(odd){background-color:#cc8e8e}.source_table .missed-branch:nth-child(even){background-color:#cc6e6e}

              + +
              + + + + + diff --git a/doc/coverage/assets/0_12_3/application_js.html b/doc/coverage/assets/0_12_3/application_js.html new file mode 100644 index 00000000..278b48e9 --- /dev/null +++ b/doc/coverage/assets/0_12_3/application_js.html @@ -0,0 +1,201 @@ + + + + + + +application.js - RDoc Documentation + + + + + + + + + + + + + + + + + + +
              + +

              !function(e,t)“use strict”;“object”==typeof module&&“object”==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error(“jQuery requires a window with a document”);return t(e)}:t(e)}(“undefined”!=typeof window?window:this,function(T,e){“use strict”;function g(e,t,n){var r,a,i=(n=n||le).createElement(“script”);if(i.text=e,t)for(r in Se)(a=t[r]||t.getAttribute&&t.getAttribute®)&&i.setAttribute(r,a);n.head.appendChild(i).parentNode.removeChild(i)}function m(e){return null==e?e+“”:“object”==typeof e||“function”==typeof e?pe[ge.call(e)]||“object”:typeof e}function s(e){var t=!!e&&“length”in e&&e.length,n=m(e);return!we(e)&&!xe(e)&&(“array”===n||0===t||“number”==typeof t&&0D.cacheLength&&delete n[r.shift()],n[e+“ ”]=t}var r=[];return n}function l(e){return e[q]=!0,e}function a(e){var t=E.createElement(“fieldset”);try{return!!e(t)}catch(n){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function t(e,t){for(var n=e.split(“|”),r=n.length;r–;)D.attrHandle[n[r]]=t}function u(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if®return r;if(n)for(;n=n.nextSibling;)if(n===t)return-1;return e?1:-1}function r(t){return function(e){return“input”===e.nodeName.toLowerCase()&&e.type===t}}function i(n){return function(e){var t=e.nodeName.toLowerCase();return(“input”===t||“button”===t)&&e.type===n}}function o(t){return function(e){return“form”in e?e.parentNode&&!1===e.disabled?“label”in e?“label”in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&_e(e)===t:e.disabled===t:“label”in e&&e.disabled===t}}function s(o){return l(function(i){return i=+i,l(function(e,t){for(var n,r=o([],e.length,i),a=r.length;a–;)e[n=r[a]]&&(e[n]=!(t[n]=e[n]))})})}function p(e){return e&&“undefined”!=typeof e.getElementsByTagName&&e}function c(){}function g(e){for(var t=0,n=e.length,r=“”;t+~]|“re”)“re”*“),fe=new RegExp(re+”|>“),de=new RegExp(oe),he=new RegExp(”^“ae”$“),pe={ID:new RegExp(”^#(“ae”)“),CLASS:new RegExp(”^\.(“ae”)“),TAG:new RegExp(”^(“ae”|[*])“),ATTR:new RegExp(”^“+ie),PSEUDO:new RegExp(”^“+oe),CHILD:new RegExp(”^:(only|first|last|nth|nth-last)-(child|of-type)(?:\(“re”*(even|odd|(([+-]|)(\d*)n|)“re”*(?:([+-]|)“re”*(\d+)|))“re”*\)|)“,”i“),bool:new RegExp(”^(?:“ne”)$“,”i“),needsContext:new RegExp(”^“re”*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\(“re”*((?:-\d)?\d*)“re”*\)|)(?=[^-]|$)“,”i“)},ge=/HTML$/i,me=/^(?:input|select|textarea|button)$/i,ve=/^hd$/i,ye=/^[^{]+{s*[native w/,be=/^(?:#([w-]+)|(w+)|.([w-]+))$/,we=/[+~]/,xe=new RegExp(”\\([\da-f]{1,6}“re”?|(“re”)|.)“,”ig“),Se=function(e,t,n){var r=”0x“+t-65536;return r!=r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},De=/([0-x1fx7f]|^-?d)|^-$|[^0-x1fx7f-uFFFFw-]/g,Te=function(e,t){return t?”0“===e?”ufffd“:e.slice(0,-1)+”\“+e.charCodeAt(e.length-1).toString(16)+” “:”\“+e},Ce=function(){L()},_e=f(function(e){return!0===e.disabled&&”fieldset“===e.nodeName.toLowerCase()},{dir:”parentNode“,next:”legend“});try{Q.apply(Y=ee.call(W.childNodes),W.childNodes),Y[W.childNodes.length].nodeType}catch(Ae){Q={apply:Y.length?function(e,t){K.apply(e,ee.call(t))}:function(e,t){for(var n=e.length,r=0;e[n++]=t[r++];);e.length=n-1}}}for(v in S=w.support={},C=w.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!ge.test(t||n&&n.nodeName||”HTML“)},L=w.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:W;return r!==E&&9===r.nodeType&&r.documentElement&&(R=(E=r).documentElement,F=!C(E),W!==E&&(n=E.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener(”unload“,Ce,!1):n.attachEvent&&n.attachEvent(”onunload“,Ce)),S.attributes=a(function(e){return e.className=”i“,!e.getAttribute(”className“)}),S.getElementsByTagName=a(function(e){return e.appendChild(E.createComment(”“)),!e.getElementsByTagName(”*“).length}),S.getElementsByClassName=ye.test(E.getElementsByClassName),S.getById=a(function(e){return R.appendChild(e).id=q,!E.getElementsByName||!E.getElementsByName(q).length}),S.getById?(D.filter.ID=function(e){var t=e.replace(xe,Se);return function(e){return e.getAttribute(”id“)===t}},D.find.ID=function(e,t){if(”undefined“!=typeof t.getElementById&&F){var n=t.getElementById(e);return n?[n]:[]}}):(D.filter.ID=function(e){var n=e.replace(xe,Se);return function(e){var t=”undefined“!=typeof e.getAttributeNode&&e.getAttributeNode(”id“);return t&&t.value===n}},D.find.ID=function(e,t){if(”undefined“!=typeof t.getElementById&&F){var n,r,a,i=t.getElementById(e);if(i){if((n=i.getAttributeNode(”id“))&&n.value===e)return[i];for(a=t.getElementsByName(e),r=0;i=a[r++];)if((n=i.getAttributeNode(”id“))&&n.value===e)return[i]}return[]}}),D.find.TAG=S.getElementsByTagName?function(e,t){return”undefined“!=typeof t.getElementsByTagName?t.getElementsByTagName(e):S.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],a=0,i=t.getElementsByTagName(e);if(”*“!==e)return i;for(;n=i[a++];)1===n.nodeType&&r.push(n);return r},D.find.CLASS=S.getElementsByClassName&&function(e,t){if(”undefined“!=typeof t.getElementsByClassName&&F)return t.getElementsByClassName(e)},H=[],P=[],(S.qsa=ye.test(E.querySelectorAll))&&(a(function(e){R.appendChild(e).innerHTML=”“,e.querySelectorAll(”[msallowcapture^=”]“).length&&P.push(”[*^$]=“re”*(?:”|"")“),e.querySelectorAll(”[selected]“).length||P.push(”\[“re”*(?:value|“ne”)“),e.querySelectorAll(”[id~=“q”-]“).length||P.push(”~=“),e.querySelectorAll(”:checked“).length||P.push(”:checked“),e.querySelectorAll(”a#“q”+*“).length||P.push(”.#.+[+~]“)}),a(function(e){e.innerHTML=”“;var t=E.createElement(”input“);t.setAttribute(”type“,”hidden“),e.appendChild(t).setAttribute(”name“,”D“),e.querySelectorAll(”[name=d]“).length&&P.push(”name“re”*[*^$|!~]?=“),2!==e.querySelectorAll(”:enabled“).length&&P.push(”:enabled“,”:disabled“),R.appendChild(e).disabled=!0,2!==e.querySelectorAll(”:disabled“).length&&P.push(”:enabled“,”:disabled“),e.querySelectorAll(”*,:x“),P.push(”,.*:“)})),(S.matchesSelector=ye.test(M=R.matches||R.webkitMatchesSelector||R.mozMatchesSelector||R.oMatchesSelector||R.msMatchesSelector))&&a(function(e){S.disconnectedMatch=M.call(e,”*“),M.call(e,”[s!=”]:x“),H.push(”!=“,oe)}),P=P.length&&new RegExp(P.join(”|“)),H=H.length&&new RegExp(H.join(”|“)),t=ye.test(R.compareDocumentPosition),O=t||ye.test(R.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains®:e.compareDocumentPosition&&16&e.compareDocumentPosition®))}:function(e,t){if(t)for(;t=t.parentNode;)if(t===e)return!0;return!1},G=t?function(e,t){if(e===t)return j=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!S.sortDetached&&t.compareDocumentPosition(e)===n?e===E||e.ownerDocument===W&&O(W,e)?-1:t===E||t.ownerDocument===W&&O(W,t)?1:I?te(I,e)-te(I,t):0:4&n?-1:1)}:function(e,t){if(e===t)return j=!0,0;var n,r=0,a=e.parentNode,i=t.parentNode,o=[e],s=[t];if(!a||!i)return e===E?-1:t===E?1:a?-1:i?1:I?te(I,e)-te(I,t):0;if(a===i)return u(e,t);for(n=e;n=n.parentNode;)o.unshift(n);for(n=t;n=n.parentNode;)s.unshift(n);for(;o[r]===s[r];)r++;return r?u(o[r],s[r]):o[r]===W?-1:s[r]===W?1:0}),E},w.matches=function(e,t){return w(e,null,null,t)},w.matchesSelector=function(e,t){if((e.ownerDocument||e)!==E&&L(e),S.matchesSelector&&F&&!V[t+” “]&&(!H||!H.test(t))&&(!P||!P.test(t)))try{var n=M.call(e,t);if(n||S.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(Ae){V(t,!0)}return 0”:{dir:“parentNode”,first:!0},“ ”:{dir:“parentNode”},“+”:{dir:“previousSibling”,first:!0},“~”:{dir:“previousSibling”}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(xe,Se),e[3]=(e[3]||e[4]||e[5]||“”).replace(xe,Se),“~=”===e[2]&&(e[3]=“ ”+e[3]+“ ”),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),“nth”===e[1].slice(0,3)?(e[3]||w.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*(“even”===e[3]||“odd”===e[3])),e[5]=+(e[7]+e[8]||“odd”===e[3])):e[3]&&w.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return pe.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||“”:n&&de.test(n)&&(t=_(n,!0))&&(t=n.indexOf(“)”,n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(xe,Se).toLowerCase();return“*”===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=U[e+“ ”];return t||(t=new RegExp(“(^|”re“)”e“(”re“|$)”))&&U(e,function(e){return t.test(“string”==typeof e.className&&e.className||“undefined”!=typeof e.getAttribute&&e.getAttribute(“class”)||“”)})},ATTR:function(n,r,a){return function(e){var t=w.attr(e,n);return null==t?“!=”===r:!r||(t+=“”,“=”===r?t===a:“!=”===r?t!==a:“^=”===r?a&&0===t.indexOf(a):“*=”===r?a&&-1)[^>]*|#([w-]+))$/;(Te.fn.init=function(e,t,n){var r,a;if(!e)return this;if(n=n||je,”string“!=typeof e)return e.nodeType?(this[0]=e,this.length=1,this):we(e)?n.ready!==undefined?n.ready(e):e(Te):Te.makeArray(e,this);if(!(r=”<"===e[0]&&">“===e[e.length-1]&&3<=e.length?[null,e,null]:Le.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof Te?t[0]:t,Te.merge(this,Te.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:le,!0)),Ie.test(r[1])&&Te.isPlainObject(t))for(r in t)we(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(a=le.getElementById(r[2]))&&(this[0]=a,this.length=1),this}).prototype=Te.fn,je=Te(le);var Ee=/^(?:parents|prev(?:Until|All))/,Re={children:!0,contents:!0,next:!0,prev:!0};Te.fn.extend({has:function(e){var t=Te(e,this),n=t.length;return this.filter(function(){for(var e=0;ex20trnf]*)/i,rt=/^$|^module$|/(?:java|ecma)script/i,at={option:[1,”“],thead:[1,”“,”
              “],col:[2,”“,”
              “],tr:[2,”“,”
              “],td:[3,”“,”
              “],_default:[0,”“,”“]};at.optgroup=at.option,at.tbody=at.tfoot=at.colgroup=at.caption=at.thead,at.th=at.td;var it,ot,st=/<|&#?\w+;/;it=le.createDocumentFragment().appendChild(le.createElement("div")),(ot=le.createElement("input")).setAttribute("type","radio"),ot.setAttribute("checked","checked"),ot.setAttribute("name","t"),it.appendChild(ot),be.checkClone=it.cloneNode(!0).cloneNode(!0).lastChild.checked,it.innerHTML="”,be.noCloneChecked=!!it.cloneNode(!0).lastChild.defaultValue;var lt=/^key/,ut=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,ct=/^([^.]*)(?:.(.+)|)/;Te.event={global:{},add:function(t,e,n,r,a){var i,o,s,l,u,c,f,d,h,p,g,m=Be.get(t);if(m)for(n.handler&&(n=(i=n).handler,a=i.selector),a&&Te.find.matchesSelector(Je,a),n.guid||(n.guid=Te.guid++),(l=m.events)||(l=m.events={}),(o=m.handle)||(o=m.handle=function(e){return void 0!==Te&&Te.event.triggered!==e.type?Te.event.dispatch.apply(t,arguments):undefined}),u=(e=(e||“”).match(Fe)||[“”]).length;u–;)h=g=(s=ct.exec(e[u])||[])[1],p=(s[2]||“”).split(“.”).sort(),h&&(f=Te.event.special[h]||{},h=(a?f.delegateType:f.bindType)||h,f=Te.event.special[h]||{},c=Te.extend({type:h,origType:g,data:r,handler:n,guid:n.guid,selector:a,needsContext:a&&Te.expr.match.needsContext.test(a),namespace:p.join(“.”)},i),(d=l[h])||((d=l[h]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,p,o)||t.addEventListener&&t.addEventListener(h,o)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),a?d.splice(d.delegateCount++,0,c):d.push©,Te.event.global[h]=!0)},remove:function(e,t,n,r,a){var i,o,s,l,u,c,f,d,h,p,g,m=Be.hasData(e)&&Be.get(e);if(m&&(l=m.events)){for(u=(t=(t||“”).match(Fe)||[“”]).length;u–;)if(h=g=(s=ct.exec(t[u])||[])[1],p=(s[2]||“”).split(“.”).sort(),h){for(f=Te.event.special[h]||{},d=l[h=(r?f.delegateType:f.bindType)||h]||[],s=s[2]&&new RegExp(“(^|\.)”+p.join(“\.(?:.*\.|)”)+“(\.|$)”),o=i=d.length;i–;)c=d[i],!a&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&(“**”!==r||!c.selector)||(d.splice(i,1),c.selector&&d.delegateCount–,f.remove&&f.remove.call(e,c));o&&!d.length&&(f.teardown&&!1!==f.teardown.call(e,p,m.handle)||Te.removeEvent(e,h,m.handle),delete l[h])}else for(h in l)Te.event.remove(e,h+t[u],n,r,!0);Te.isEmptyObject(l)&&Be.remove(e,“handle events”)}},dispatch:function(e){var t,n,r,a,i,o,s=Te.event.fix(e),l=new Array(arguments.length),u=(Be.get(this,“events”)||{})[s.type]||[],c=Te.event.special[s.type]||{};for(l[0]=s,t=1;tx20trnf]*)[^>]*)/>/gi,dt=/s*$/g;Te.extend({htmlPrefilter:function(e){return e.replace(ft,“<$1>”)},clone:function(e,t,n){var r,a,i,o,s=e.cloneNode(!0),l=Ye(e);if(!(be.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||Te.isXMLDoc(e)))for(o=w(s),r=0,a=(i=w(e)).length;r“).attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on(”load error“,a=function(e){r.remove(),a=null,e&&t(”error“===e.type?404:200,e.type)}),le.head.appendChild(r[0])},abort:function(){a&&a()}}});var an,on=[],sn=/(=)?(?=&|$)|??/;Te.ajaxSetup({jsonp:”callback“,jsonpCallback:function(){var e=on.pop()||Te.expando+”_“Ot+;return this[e]=!0,e}}),Te.ajaxPrefilter(”json jsonp“,function(e,t,n){var r,a,i,o=!1!==e.jsonp&&(sn.test(e.url)?”url“:”string“==typeof e.data&&0===(e.contentType||”“).indexOf(”application/x-www-form-urlencoded“)&&sn.test(e.data)&&”data“);if(o||”jsonp“===e.dataTypes[0])return r=e.jsonpCallback=we(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,o?e[o]=e[o].replace(sn,”$1“+r):!1!==e.jsonp&&(e.url+=(qt.test(e.url)?”&“:”?“)e.jsonp”=“+r),e.converters[”script json“]=function(){return i||Te.error(r+” was not called“),i[0]},e.dataTypes[0]=”json“,a=T[r],T[r]=function(){i=arguments},n.always(function(){a===undefined?Te(T).removeProp®:T[r]=a,e[r]&&(e.jsonpCallback=t.jsonpCallback,on.push®),i&&we(a)&&a(i[0]),i=a=undefined}),”script“}),be.createHTMLDocument=((an=le.implementation.createHTMLDocument(”“).body).innerHTML=”

              “,2===an.childNodes.length),Te.parseHTML=function(e,t,n){return”string“!=typeof e?[]:(”boolean“==typeof t&&(n=t,t=!1),t||(be.createHTMLDocument?((r=(t=le.implementation.createHTMLDocument(”“)).createElement(”base“)).href=le.location.href,t.head.appendChild®):t=le),i=!n&&[],(a=Ie.exec(e))?[t.createElement(a[1])]:(a=S([e],t,i),i&&i.length&&Te(i).remove(),Te.merge([],a.childNodes)));var r,a,i},Te.fn.load=function(e,t,n){var r,a,i,o=this,s=e.indexOf(” “);return-1”).append(Te.parseHTML(e)).find®:e)}).always(n&&function(e,t){o.each(function(){n.apply(this,i||[e.responseText,t,e])})}),this},Te.each([“ajaxStart”,“ajaxStop”,“ajaxComplete”,“ajaxError”,“ajaxSuccess”,“ajaxSend”],function(e,t){Te.fn[t]=function(e){return this.on(t,e)}}),Te.expr.pseudos.animated=function(t){return Te.grep(Te.timers,function(e){return t===e.elem}).length},Te.offset={setOffset:function(e,t,n){var r,a,i,o,s,l,u=Te.css(e,“position”),c=Te(e),f={};“static”===u&&(e.style.position=“relative”),s=c.offset(),i=Te.css(e,“top”),l=Te.css(e,“left”),(“absolute”===u||“fixed”===u)&&-1<(i+l).indexOf("auto")?(o=(r=c.position()).top,a=r.left):(o=parseFloat(i)||0,a=parseFloat(l)||0),we(t)&&(t=t.call(e,n,Te.extend({},s))),null!=t.top&&(f.top=t.top-s.top+o),null!=t.left&&(f.left=t.left-s.left+a),"using"in t?t.using.call(e,f):c.css(f)}},Te.fn.extend({offset:function(t){if(arguments.length)return t===undefined?this:this.each(function(e){Te.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],a={top:0,left:0};if("fixed"===Te.css(r,"position"))t=r.getBoundingClientRect();else{for(t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;e&&(e===n.body||e===n.documentElement)&&"static"===Te.css(e,"position");)e=e.parentNode;e&&e!==r&&1===e.nodeType&&((a=Te(e).offset()).top+=Te.css(e,"borderTopWidth",!0),a.left+=Te.css(e,"borderLeftWidth",!0))}return{top:t.top-a.top-Te.css(r,"marginTop",!0),left:t.left-a.left-Te.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){for(var e=this.offsetParent;e&&"static"===Te.css(e,"position");)e=e.offsetParent;return e||Je})}}),Te.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,a){var i="pageYOffset"===a;Te.fn[t]=function(e){return Me(this,function(e,t,n){var r;if(xe(e)?r=e:9===e.nodeType&&(r=e.defaultView),n===undefined)return r?r[a]:e[t];r?r.scrollTo(i?r.pageXOffset:n,i?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),Te.each(["top","left"],function(e,n){Te.cssHooks[n]=M(be.pixelPosition,function(e,t){if(t)return t=H(e,n),gt.test(t)?Te(e).position()[n]+"px":t})}),Te.each({Height:"height",Width:"width"},function(o,s){Te.each({padding:"inner"+o,content:s,"":"outer"+o},function(r,i){Te.fn[i]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),a=r||(!0===e||!0===t?"margin":"border");return Me(this,function(e,t,n){var r;return xe(e)?0===i.indexOf("outer")?e["inner"+o]:e.document.documentElement["client"+o]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+o],r["scroll"+o],e.body["offset"+o],r["offset"+o],r["client"+o])):n===undefined?Te.css(e,t,a):Te.style(e,t,n,a)},s,n?e:undefined,n)}})}),Te.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){Te.fn[n]=function(e,t){return 0“}for(var i=0,o=”“,s=[];e.length||t.length;){var l=r().splice(0,1)[0];if(o+=x(n.substr(i,l.offset-i)),i=l.offset,”start“==l.event)o+=a(l.node),s.push(l.node);else if(”stop“==l.event){var u=s.length;do{var c=s[–u];o+=”“}while(c!=l.node);for(s.splice(u,1);u’+x(a[0])+”“):n+=x(a[0]),r=t.lR.lastIndex,a=t.lR.exec(e)}return n+=x(e.substr(r,e.length-r))}function f(e,t){if(t.sL&&T[t.sL]){var n=D(t.sL,e);return g+=n.keyword_count,n.value}return r(e,t)}function d(e,t){var n=e.cN?‘’:”“;e.rB?(m+=n,e.buffer=”“):e.eB?(m+=x(t)+n,e.buffer=”“):(m+=n,e.buffer=t),h.push(e),p+=e.r}function i(e,t,n){var r=h[h.length-1];if(n)return m+=f(r.buffer+e,r),!1;var a=l(t,r);if(a)return m+=f(r.buffer+e,r),d(a,t),a.rB;var i=u(h.length-1,t);if(i){var o=r.cN?”“:”“;for(r.rE?m+=f(r.buffer+e,r)+o:r.eE?m+=f(r.buffer+e,r)+o+x(t):m+=f(r.buffer+e+t,r)+o;1”:“”,m+=o,i–,h.length–;var s=h[h.length-1];return h.length–,h[h.length-1].buffer=“”,s.starts&&d(s.starts,“”),r.rE}if(c(t,r))throw“Illegal”}var s=T[e],h=[s.dM],p=0,g=0,m=“”;try{var v=0;s.dM.buffer=“”;do{var y=n(t,v),b=i(y[0],y[1],y[2]);v+=y[0].length,b||(v+=y[1].length)}while(!y[2]);if(1o.keyword_count+o.r&&(o=l),l.keyword_count+l.r>i.keyword_count+i.r&&(o=i,i=l)}}var u=e.className;u.match(i.language)||(u=u?u+“ ”+i.language:i.language);var c=g(e);if(c.length)(f=document.createElement(“pre”)).innerHTML=i.value,i.value=m(c,g(f),r);if(n&&(i.value=i.value.replace(/^((<[^>]+>|t)+)/gm,function(e,t){return t.replace(/t/g,n)})),t&&(i.value=i.value.replace(/n/g,“
              ”)),/MSIE [678]/.test(navigator.userAgent)&&“CODE”==e.tagName&&“PRE”==e.parentNode.tagName){var f=e.parentNode,d=document.createElement(“div”);d.innerHTML=“
              ”i.value“
              ”,e=d.firstChild.firstChild,d.firstChild.cN=f.cN,f.parentNode.replaceChild(d.firstChild,f)}else e.innerHTML=i.value;e.className=u,e.dataset={},e.dataset.result={language:i.language,kw:i.keyword_count,re:i.r},o&&o.language&&(e.dataset.second_best={language:o.language,kw:o.keyword_count,re:o.r})}}function i(){if(!i.called){i.called=!0,v();for(var e=document.getElementsByTagName(“pre”),t=0;t|>=|>>|>>=|>>>|>>>=|\?|\[|\{|\(|\^|\^=|\||\|=|\|\||~“,this.BE={b:”\\.“,r:0},this.ASM={cN:”string“,b:”‘“,e:”’“,i:”\n“,c:[this.BE],r:0},this.QSM={cN:”string“,b:‘”’,e:‘“’,i:”\n“,c:[this.BE],r:0},this.CLCM={cN:”comment“,b:”//“,e:”$“},this.CBLCLM={cN:”comment“,b:”/*“,e:”*/“},this.HCM={cN:”comment“,b:”#“,e:”$“},this.NM={cN:”number“,b:this.NR,r:0},this.CNM={cN:”number“,b:this.CNR,r:0},this.inherit=function(e,t){var n={};for(var r in e)n[r]=e[r];if(t)for(var r in t)n[r]=t[r];return n}};hljs.LANGUAGES.ruby=function(){var e=”[a-zA-Z_][a-zA-Z0-9_]*(\!|\?)?“,t=”[a-zA-Z_]\w*[!?=]?|[-+~]\@|<<|>>|=~|===?|<=>|[<>]=?|**|[-/+%^&*~`|]|\[\]=?“,n={keyword:{and:1,”false“:1,then:1,defined:1,module:1,”in“:1,”return“:1,redo:1,”if“:1,BEGIN:1,retry:1,end:1,”for“:1,”true“:1,self:1,when:1,next:1,until:1,”do“:1,begin:1,unless:1,END:1,rescue:1,nil:1,”else“:1,”break“:1,undef:1,not:1,”super“:1,”class“:1,”case“:1,require:1,”yield“:1,alias:1,”while“:1,ensure:1,elsif:1,or:1,def:1},keymethods:{__id__:1,__send__:1,abort:1,abs:1,”all?“:1,allocate:1,ancestors:1,”any?“:1,arity:1,assoc:1,at:1,at_exit:1,autoload:1,”autoload?“:1,”between?“:1,binding:1,binmode:1,”block_given?“:1,call:1,callcc:1,caller:1,capitalize:1,”capitalize!“:1,casecmp:1,”catch“:1,ceil:1,center:1,chomp:1,”chomp!“:1,chop:1,”chop!“:1,chr:1,”class“:1,class_eval:1,”class_variable_defined?“:1,class_variables:1,clear:1,clone:1,close:1,close_read:1,close_write:1,”closed?“:1,coerce:1,collect:1,”collect!“:1,compact:1,”compact!“:1,concat:1,”const_defined?“:1,const_get:1,const_missing:1,const_set:1,constants:1,count:1,crypt:1,”default“:1,default_proc:1,”delete“:1,”delete!“:1,delete_at:1,delete_if:1,detect:1,display:1,div:1,divmod:1,downcase:1,”downcase!“:1,downto:1,dump:1,dup:1,each:1,each_byte:1,each_index:1,each_key:1,each_line:1,each_pair:1,each_value:1,each_with_index:1,”empty?“:1,entries:1,eof:1,”eof?“:1,”eql?“:1,”equal?“:1,eval:1,exec:1,exit:1,”exit!“:1,extend:1,fail:1,fcntl:1,fetch:1,fileno:1,fill:1,find:1,find_all:1,first:1,flatten:1,”flatten!“:1,floor:1,flush:1,for_fd:1,foreach:1,fork:1,format:1,freeze:1,”frozen?“:1,fsync:1,getc:1,gets:1,global_variables:1,grep:1,gsub:1,”gsub!“:1,”has_key?“:1,”has_value?“:1,hash:1,hex:1,id:1,include:1,”include?“:1,included_modules:1,index:1,indexes:1,indices:1,induced_from:1,inject:1,insert:1,inspect:1,instance_eval:1,instance_method:1,instance_methods:1,”instance_of?“:1,”instance_variable_defined?“:1,instance_variable_get:1,instance_variable_set:1,instance_variables:1,”integer?“:1,intern:1,invert:1,ioctl:1,”is_a?“:1,isatty:1,”iterator?“:1,join:1,”key?“:1,keys:1,”kind_of?“:1,lambda:1,last:1,length:1,lineno:1,ljust:1,load:1,local_variables:1,loop:1,lstrip:1,”lstrip!“:1,map:1,”map!“:1,match:1,max:1,”member?“:1,merge:1,”merge!“:1,method:1,”method_defined?“:1,method_missing:1,methods:1,min:1,module_eval:1,modulo:1,name:1,nesting:1,”new“:1,next:1,”next!“:1,”nil?“:1,nitems:1,”nonzero?“:1,object_id:1,oct:1,open:1,pack:1,partition:1,pid:1,pipe:1,pop:1,popen:1,pos:1,prec:1,prec_f:1,prec_i:1,print:1,printf:1,private_class_method:1,private_instance_methods:1,”private_method_defined?“:1,private_methods:1,proc:1,protected_instance_methods:1, ”protected_method_defined?“:1,protected_methods:1,public_class_method:1,public_instance_methods:1,”public_method_defined?“:1,public_methods:1,push:1,putc:1,puts:1,quo:1,raise:1,rand:1,rassoc:1,read:1,read_nonblock:1,readchar:1,readline:1,readlines:1,readpartial:1,rehash:1,reject:1,”reject!“:1,remainder:1,reopen:1,replace:1,require:1,”respond_to?“:1,reverse:1,”reverse!“:1,reverse_each:1,rewind:1,rindex:1,rjust:1,round:1,rstrip:1,”rstrip!“:1,scan:1,seek:1,select:1,send:1,set_trace_func:1,shift:1,singleton_method_added:1,singleton_methods:1,size:1,sleep:1,slice:1,”slice!“:1,sort:1,”sort!“:1,sort_by:1,split:1,sprintf:1,squeeze:1,”squeeze!“:1,srand:1,stat:1,step:1,store:1,strip:1,”strip!“:1,sub:1,”sub!“:1,succ:1,”succ!“:1,sum:1,superclass:1,swapcase:1,”swapcase!“:1,sync:1,syscall:1,sysopen:1,sysread:1,sysseek:1,system:1,syswrite:1,taint:1,”tainted?“:1,tell:1,test:1,”throw“:1,times:1,to_a:1,to_ary:1,to_f:1,to_hash:1,to_i:1,to_int:1,to_io:1,to_proc:1,to_s:1,to_str:1,to_sym:1,tr:1,”tr!“:1,tr_s:1,”tr_s!“:1,trace_var:1,transpose:1,trap:1,truncate:1,”tty?“:1,type:1,ungetc:1,uniq:1,”uniq!“:1,unpack:1,unshift:1,untaint:1,untrace_var:1,upcase:1,”upcase!“:1,update:1,upto:1,”value?“:1,values:1,values_at:1,warn:1,write:1,write_nonblock:1,”zero?“:1,zip:1}},r={cN:”yardoctag“,b:”@[A-Za-z]+“},a={cN:”comment“,b:”#“,e:”$“,c:[r]},i={cN:”comment“,b:”^\=begin“,e:”^\=end“,c:[r],r:10},o={cN:”comment“,b:”^__END__“,e:”\n$“},s={cN:”subst“,b:”#\{“,e:”}“,l:e,k:n},l=[hljs.BE,s],u={cN:”string“,b:”‘“,e:”’“,c:l,r:0},c={cN:”string“,b:‘”’,e:‘“’,c:l,r:0},f={cN:”string“,b:”%[qw]?\(“,e:”\)“,c:l,r:10},d={cN:”string“,b:”%[qw]?\[“,e:”\]“,c:l,r:10},h={cN:”string“,b:”%[qw]?{“,e:”}“,c:l,r:10},p={cN:”string“,b:”%[qw]?<",e:">“,c:l,r:10},g={cN:”string“,b:”%[qw]?/“,e:”/“,c:l,r:10},m={cN:”string“,b:”%[qw]?%“,e:”%“,c:l,r:10},v={cN:”string“,b:”%[qw]?-“,e:”-“,c:l,r:10},y={cN:”string“,b:”%[qw]?\|“,e:”\|“,c:l,r:10},b={cN:”function“,b:”\bdef\s+“,e:” |$|;“,l:e,k:n,c:[{cN:”title“,b:t,l:e,k:n},{cN:”params“,b:”\(“,e:”\)“,l:e,k:n},a,i,o]},w={cN:”identifier“,b:e,l:e,k:n,r:0},x=[a,i,o,u,c,f,d,h,p,g,m,v,y,{cN:”class“,b:”\b(class|module)\b“,e:”$|;“,k:{”class“:1,module:1},c:[{cN:”title“,b:”[A-Za-z_]\w*(::\w+)*(\?|\!)?“,r:0},{cN:”inheritance“,b:”<\\s*",c:[{cN:"parent",b:"("hljs.IR"::)?"+hljs.IR}]},a,i,o]},b,{cN:"constant",b:"(::)?([A-Z]\\w*(::)?)+",r:0},{cN:"symbol",b:":",c:[u,c,f,d,h,p,g,m,v,y,w],r:0},{cN:"number",b:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",r:0},{cN:"number",b:"\\?\\w"},{cN:"variable",b:"(\\$\\W)|((\\$|\\@\\@?)(\\w+))"},w,{b:"("hljs.RSR")\\s*",c:[a,i,o,{cN:"regexp",b:"/",e:"/[a-z]*",i:"\\n",c:[hljs.BE]}],r:0}];return s.c=x,{dM:{l:e,k:n,c:b.c[1].c=x}}}(),function(c,s,o){function l(e,t,n){var r=s.createElement(e);return t&&(r.id=te+t),n&&(r.style.cssText=n),c(r)}function f(){return o.innerHeight?o.innerHeight:c(o).height()}function u(e,n){n!==Object(n)&&(n={}),this.cache={},this.el=e,this.value=function(e){var t;return this.cache[e]===undefined&&((t=c(this.el).attr("data-cbox-"+e))!==undefined?this.cache[e]=t:n[e]!==undefined?this.cache[e]=n[e]:Q[e]!==undefined&&(this.cache[e]=Q[e])),this.cache[e]},this.get=function(e){var t=this.value(e);return c.isFunction(t)?t.call(this.el,this):t}}function i(e){var t=k.length,n=(X+e)%t;return n<0?t+n:n}function d(e,t){return Math.round((/%/.test(e)?("x"===t?I.width():f())/100:1)*parseInt(e,10))}function h(e,t){return e.get("photo")||e.get("photoRegex").test(t)}function p(e,t){return e.get("retinaUrl")&&1“),w()}}function a(){S||(t=!1,I=c(o),S=l(ce).attr({id:ee,”class“:!1===c.support.opacity?te+”IE“:”“,role:”dialog“,tabindex:”-1“}).hide(),x=l(ce,”Overlay“).hide(),E=c([l(ce,”LoadingOverlay“)[0],l(ce,”LoadingGraphic“)[0]]),D=l(ce,”Wrapper“),T=l(ce,”Content“).append(R=l(ce,”Title“),F=l(ce,”Current“),M=c(‘
              + + + + + diff --git a/doc/coverage/index_html.html b/doc/coverage/index_html.html new file mode 100644 index 00000000..7f006e44 --- /dev/null +++ b/doc/coverage/index_html.html @@ -0,0 +1,14171 @@ + + + + + + +index.html - RDoc Documentation + + + + + + + + + + + + + + + + + + +
              + +

              <!DOCTYPE html> <html xmlns='www.w3.org/1999/xhtml'>

              + +
              <head>
              +  <title>Code coverage for Secretaria ppgi</title>
              +  <meta http-equiv="content-type" content="text/html; charset=utf-8" />
              +  <script src='./assets/0.12.3/application.js' type='text/javascript'></script>
              +  <link href='./assets/0.12.3/application.css' media='screen, projection, print' rel='stylesheet' type='text/css' />
              +  <link rel="shortcut icon" type="image/png" href="./assets/0.12.3/favicon_green.png" />
              +  <link rel="icon" type="image/png" href="./assets/0.12.3/favicon.png" />
              +</head>
              +
              +<body>
              +  <div id="loading">
              +    <img src="./assets/0.12.3/loading.gif" alt="loading"/>
              +  </div>
              +  <div id="wrapper" class="hide">
              +    <div class="timestamp">Generated <abbr class="timeago" title="2020-11-21T13:20:39-02:00">2020-11-21T13:20:39-02:00</abbr></div>
              +    <ul class="group_tabs"></ul>
              +
              +    <div id="content">
              +      <div class="file_list_container" id="AllFiles">
              +<h2>
              +  <span class="group_name">All Files</span>
              +  (<span class="covered_percent">
              +    <span class="green">
              +98.93%
              + +

              </span>

              + +
                 </span>
              +   covered at
              +   <span class="covered_strength">
              +     <span class="green">
              +       1.93
              +     </span>
              +  </span> hits/line
              +  )
              +</h2>
              +
              +<a name="AllFiles"></a>
              +
              +<div>
              +  <b>42</b> files in total.
              +</div>
              +
              +<div class="t-line-summary">
              +  <b>655</b> relevant lines,
              +  <span class="green"><b>648</b> lines covered</span> and
              +  <span class="red"><b>7</b> lines missed. </span>
              +  (<span class="green">
              +98.93%
              + +

              </span> )

              + +
              </div>
              +
              +<div class="file_list--responsive">
              +  <table class="file_list">
              +    <thead>
              +      <tr>
              +        <th>File</th>
              +        <th class="cell--number">% covered</th>
              +        <th class="cell--number">Lines</th>
              +        <th class="cell--number">Relevant Lines</th>
              +        <th class="cell--number">Lines covered</th>
              +        <th class="cell--number">Lines missed</th>
              +        <th class="cell--number">Avg. Hits / Line</th>
              +
              +      </tr>
              +    </thead>
              +    <tbody>
              +
              +        <tr class="t-file">
              +          <td class="strong t-file__name"><a href="#e6e0103b91b72af1f3090d18f5a6ec87be6747a0" class="src_link" title="app/controllers/accreditations_controller.rb">app/controllers/accreditations_controller.rb</a></td>
              +          <td class="green strong cell--number t-file__coverage">96.55 %</td>
              +          <td class="cell--number">71</td>
              +          <td class="cell--number">29</td>
              +          <td class="cell--number">28</td>
              +          <td class="cell--number">1</td>
              +          <td class="cell--number">1.66</td>
              +
              +        </tr>
              +
              +        <tr class="t-file">
              +          <td class="strong t-file__name"><a href="#65819bdab2d3c0f58455dbe3a03c44ebb1ca6639" class="src_link" title="app/controllers/application_controller.rb">app/controllers/application_controller.rb</a></td>
              +          <td class="green strong cell--number t-file__coverage">91.67 %</td>
              +          <td class="cell--number">24</td>
              +          <td class="cell--number">12</td>
              +          <td class="cell--number">11</td>
              +          <td class="cell--number">1</td>
              +          <td class="cell--number">10.92</td>
              +
              +        </tr>
              +
              +        <tr class="t-file">
              +          <td class="strong t-file__name"><a href="#bf23aba9bbd287f866406b24c1727b50ea3ffeaf" class="src_link" title="app/controllers/home_controller.rb">app/controllers/home_controller.rb</a></td>
              +          <td class="green strong cell--number t-file__coverage">100.00 %</td>
              +          <td class="cell--number">4</td>
              +          <td class="cell--number">2</td>
              +          <td class="cell--number">2</td>
              +          <td class="cell--number">0</td>
              +          <td class="cell--number">1.00</td>
              +
              +        </tr>
              +
              +        <tr class="t-file">
              +          <td class="strong t-file__name"><a href="#0816f8c26bb5fe247e81aaf294debccf0747fe9f" class="src_link" title="app/controllers/requirements_controller.rb">app/controllers/requirements_controller.rb</a></td>
              +          <td class="green strong cell--number t-file__coverage">100.00 %</td>
              +          <td class="cell--number">85</td>
              +          <td class="cell--number">40</td>
              +          <td class="cell--number">40</td>
              +          <td class="cell--number">0</td>
              +          <td class="cell--number">2.38</td>
              +
              +        </tr>
              +
              +        <tr class="t-file">
              +          <td class="strong t-file__name"><a href="#e58b3770d29b37d0d0a2c3bd83f5a8b7009bf8c6" class="src_link" title="app/controllers/sei_processes_controller.rb">app/controllers/sei_processes_controller.rb</a></td>
              +          <td class="green strong cell--number t-file__coverage">100.00 %</td>
              +          <td class="cell--number">94</td>
              +          <td class="cell--number">44</td>
              +          <td class="cell--number">44</td>
              +          <td class="cell--number">0</td>
              +          <td class="cell--number">2.45</td>
              +
              +        </tr>
              +
              +        <tr class="t-file">
              +          <td class="strong t-file__name"><a href="#4618994cc8dccc405b3e213ff54ea21faf440d1a" class="src_link" title="app/helpers/accreditations_helper.rb">app/helpers/accreditations_helper.rb</a></td>
              +          <td class="green strong cell--number t-file__coverage">100.00 %</td>
              +          <td class="cell--number">2</td>
              +          <td class="cell--number">1</td>
              +          <td class="cell--number">1</td>
              +          <td class="cell--number">0</td>
              +          <td class="cell--number">1.00</td>
              +
              +        </tr>
              +
              +        <tr class="t-file">
              +          <td class="strong t-file__name"><a href="#21c0a83cd1994bf0d8fdac8648c199320ebec369" class="src_link" title="app/helpers/application_helper.rb">app/helpers/application_helper.rb</a></td>
              +          <td class="green strong cell--number t-file__coverage">100.00 %</td>
              +          <td class="cell--number">2</td>
              +          <td class="cell--number">1</td>
              +          <td class="cell--number">1</td>
              +          <td class="cell--number">0</td>
              +          <td class="cell--number">1.00</td>
              +
              +        </tr>
              +
              +        <tr class="t-file">
              +          <td class="strong t-file__name"><a href="#0a283c41b65dc302313a2c1fbc795b1337486b4b" class="src_link" title="app/helpers/home_helper.rb">app/helpers/home_helper.rb</a></td>
              +          <td class="green strong cell--number t-file__coverage">100.00 %</td>
              +          <td class="cell--number">2</td>
              +          <td class="cell--number">1</td>
              +          <td class="cell--number">1</td>
              +          <td class="cell--number">0</td>
              +          <td class="cell--number">1.00</td>
              +
              +        </tr>
              +
              +        <tr class="t-file">
              +          <td class="strong t-file__name"><a href="#c98427410596e3af0191d32972e939d4ff0a2cb5" class="src_link" title="app/helpers/requirements_helper.rb">app/helpers/requirements_helper.rb</a></td>
              +          <td class="green strong cell--number t-file__coverage">100.00 %</td>
              +          <td class="cell--number">2</td>
              +          <td class="cell--number">1</td>
              +          <td class="cell--number">1</td>
              +          <td class="cell--number">0</td>
              +          <td class="cell--number">1.00</td>
              +
              +        </tr>
              +
              +        <tr class="t-file">
              +          <td class="strong t-file__name"><a href="#f05e78596d28e7779f0b38d274f1c57faba01c9c" class="src_link" title="app/helpers/sei_processes_helper.rb">app/helpers/sei_processes_helper.rb</a></td>
              +          <td class="green strong cell--number t-file__coverage">100.00 %</td>
              +          <td class="cell--number">2</td>
              +          <td class="cell--number">1</td>
              +          <td class="cell--number">1</td>
              +          <td class="cell--number">0</td>
              +          <td class="cell--number">1.00</td>
              +
              +        </tr>
              +
              +        <tr class="t-file">
              +          <td class="strong t-file__name"><a href="#3255660bd8f0c40f99c08985c205551592748602" class="src_link" title="app/models/accreditation.rb">app/models/accreditation.rb</a></td>
              +          <td class="green strong cell--number t-file__coverage">95.65 %</td>
              +          <td class="cell--number">34</td>
              +          <td class="cell--number">23</td>
              +          <td class="cell--number">22</td>
              +          <td class="cell--number">1</td>
              +          <td class="cell--number">3.26</td>
              +
              +        </tr>
              +
              +        <tr class="t-file">
              +          <td class="strong t-file__name"><a href="#491f8828ad93133fc4a88a8a290d7e6f8eb12888" class="src_link" title="app/models/application_record.rb">app/models/application_record.rb</a></td>
              +          <td class="green strong cell--number t-file__coverage">100.00 %</td>
              +          <td class="cell--number">3</td>
              +          <td class="cell--number">2</td>
              +          <td class="cell--number">2</td>
              +          <td class="cell--number">0</td>
              +          <td class="cell--number">1.00</td>
              +
              +        </tr>
              +
              +        <tr class="t-file">
              +          <td class="strong t-file__name"><a href="#072366a15d5b19fccad836e5257f2b86937b4bcf" class="src_link" title="app/models/requirement.rb">app/models/requirement.rb</a></td>
              +          <td class="green strong cell--number t-file__coverage">94.12 %</td>
              +          <td class="cell--number">26</td>
              +          <td class="cell--number">17</td>
              +          <td class="cell--number">16</td>
              +          <td class="cell--number">1</td>
              +          <td class="cell--number">5.12</td>
              +
              +        </tr>
              +
              +        <tr class="t-file">
              +          <td class="strong t-file__name"><a href="#a8f6dbecbb9a83b40b23b09ca0caf595e9a75ff9" class="src_link" title="app/models/sei_process.rb">app/models/sei_process.rb</a></td>
              +          <td class="green strong cell--number t-file__coverage">95.83 %</td>
              +          <td class="cell--number">41</td>
              +          <td class="cell--number">24</td>
              +          <td class="cell--number">23</td>
              +          <td class="cell--number">1</td>
              +          <td class="cell--number">4.21</td>
              +
              +        </tr>
              +
              +        <tr class="t-file">
              +          <td class="strong t-file__name"><a href="#e2b399ff4cb03119234857e9cb25162954a5e83c" class="src_link" title="app/models/user.rb">app/models/user.rb</a></td>
              +          <td class="green strong cell--number t-file__coverage">100.00 %</td>
              +          <td class="cell--number">13</td>
              +          <td class="cell--number">5</td>
              +          <td class="cell--number">5</td>
              +          <td class="cell--number">0</td>
              +          <td class="cell--number">1.00</td>
              +
              +        </tr>
              +
              +        <tr class="t-file">
              +          <td class="strong t-file__name"><a href="#bdfcf608d04c2f6ee92d45a5be8e6fe3aa4d3f9a" class="src_link" title="config/application.rb">config/application.rb</a></td>
              +          <td class="green strong cell--number t-file__coverage">100.00 %</td>
              +          <td class="cell--number">19</td>
              +          <td class="cell--number">6</td>
              +          <td class="cell--number">6</td>
              +          <td class="cell--number">0</td>
              +          <td class="cell--number">1.00</td>
              +
              +        </tr>
              +
              +        <tr class="t-file">
              +          <td class="strong t-file__name"><a href="#26abe61a60fa5268443e1e7b2ebe840427809124" class="src_link" title="config/boot.rb">config/boot.rb</a></td>
              +          <td class="green strong cell--number t-file__coverage">100.00 %</td>
              +          <td class="cell--number">4</td>
              +          <td class="cell--number">3</td>
              +          <td class="cell--number">3</td>
              +          <td class="cell--number">0</td>
              +          <td class="cell--number">1.00</td>
              +
              +        </tr>
              +
              +        <tr class="t-file">
              +          <td class="strong t-file__name"><a href="#13777ff0718581b6c735c8733b575a818078d007" class="src_link" title="config/environment.rb">config/environment.rb</a></td>
              +          <td class="green strong cell--number t-file__coverage">100.00 %</td>
              +          <td class="cell--number">5</td>
              +          <td class="cell--number">2</td>
              +          <td class="cell--number">2</td>
              +          <td class="cell--number">0</td>
              +          <td class="cell--number">1.00</td>
              +
              +        </tr>
              +
              +        <tr class="t-file">
              +          <td class="strong t-file__name"><a href="#d3d949569761045588fd7a105731d8d81b5fed88" class="src_link" title="config/environments/test.rb">config/environments/test.rb</a></td>
              +          <td class="green strong cell--number t-file__coverage">100.00 %</td>
              +          <td class="cell--number">46</td>
              +          <td class="cell--number">13</td>
              +          <td class="cell--number">13</td>
              +          <td class="cell--number">0</td>
              +          <td class="cell--number">1.00</td>
              +
              +        </tr>
              +
              +        <tr class="t-file">
              +          <td class="strong t-file__name"><a href="#450a451aa30bdd5c2cdcd190ff8201da1d7409e7" class="src_link" title="config/initializers/application_controller_renderer.rb">config/initializers/application_controller_renderer.rb</a></td>
              +          <td class="green strong cell--number t-file__coverage">100.00 %</td>
              +          <td class="cell--number">8</td>
              +          <td class="cell--number">0</td>
              +          <td class="cell--number">0</td>
              +          <td class="cell--number">0</td>
              +          <td class="cell--number">0.00</td>
              +
              +        </tr>
              +
              +        <tr class="t-file">
              +          <td class="strong t-file__name"><a href="#68cd0e28f3c9800fd4f4eb82ca5f3986b2445543" class="src_link" title="config/initializers/assets.rb">config/initializers/assets.rb</a></td>
              +          <td class="green strong cell--number t-file__coverage">100.00 %</td>
              +          <td class="cell--number">14</td>
              +          <td class="cell--number">2</td>
              +          <td class="cell--number">2</td>
              +          <td class="cell--number">0</td>
              +          <td class="cell--number">1.00</td>
              +
              +        </tr>
              +
              +        <tr class="t-file">
              +          <td class="strong t-file__name"><a href="#e31e100fdc3913d2e7aa64e866e85f71383530dc" class="src_link" title="config/initializers/backtrace_silencers.rb">config/initializers/backtrace_silencers.rb</a></td>
              +          <td class="green strong cell--number t-file__coverage">100.00 %</td>
              +          <td class="cell--number">7</td>
              +          <td class="cell--number">0</td>
              +          <td class="cell--number">0</td>
              +          <td class="cell--number">0</td>
              +          <td class="cell--number">0.00</td>
              +
              +        </tr>
              +
              +        <tr class="t-file">
              +          <td class="strong t-file__name"><a href="#b7e86e1626128dc235651ee2ec52bb9217e8c3e4" class="src_link" title="config/initializers/content_security_policy.rb">config/initializers/content_security_policy.rb</a></td>
              +          <td class="green strong cell--number t-file__coverage">100.00 %</td>
              +          <td class="cell--number">25</td>
              +          <td class="cell--number">0</td>
              +          <td class="cell--number">0</td>
              +          <td class="cell--number">0</td>
              +          <td class="cell--number">0.00</td>
              +
              +        </tr>
              +
              +        <tr class="t-file">
              +          <td class="strong t-file__name"><a href="#c0abe4170bd391a72ed6987f568ae3852d862495" class="src_link" title="config/initializers/cookies_serializer.rb">config/initializers/cookies_serializer.rb</a></td>
              +          <td class="green strong cell--number t-file__coverage">100.00 %</td>
              +          <td class="cell--number">5</td>
              +          <td class="cell--number">1</td>
              +          <td class="cell--number">1</td>
              +          <td class="cell--number">0</td>
              +          <td class="cell--number">1.00</td>
              +
              +        </tr>
              +
              +        <tr class="t-file">
              +          <td class="strong t-file__name"><a href="#a4226c0fa4f931c3f16324d648e48dc9136658c1" class="src_link" title="config/initializers/devise.rb">config/initializers/devise.rb</a></td>
              +          <td class="green strong cell--number t-file__coverage">100.00 %</td>
              +          <td class="cell--number">299</td>
              +          <td class="cell--number">13</td>
              +          <td class="cell--number">13</td>
              +          <td class="cell--number">0</td>
              +          <td class="cell--number">1.00</td>
              +
              +        </tr>
              +
              +        <tr class="t-file">
              +          <td class="strong t-file__name"><a href="#43bb181e945eb6f41f50f0a07673b64086aa6eba" class="src_link" title="config/initializers/filter_parameter_logging.rb">config/initializers/filter_parameter_logging.rb</a></td>
              +          <td class="green strong cell--number t-file__coverage">100.00 %</td>
              +          <td class="cell--number">4</td>
              +          <td class="cell--number">1</td>
              +          <td class="cell--number">1</td>
              +          <td class="cell--number">0</td>
              +          <td class="cell--number">1.00</td>
              +
              +        </tr>
              +
              +        <tr class="t-file">
              +          <td class="strong t-file__name"><a href="#65c4b6b4ddc9b05584b5344d5e5cb3df7fb1f988" class="src_link" title="config/initializers/inflections.rb">config/initializers/inflections.rb</a></td>
              +          <td class="green strong cell--number t-file__coverage">100.00 %</td>
              +          <td class="cell--number">16</td>
              +          <td class="cell--number">0</td>
              +          <td class="cell--number">0</td>
              +          <td class="cell--number">0</td>
              +          <td class="cell--number">0.00</td>
              +
              +        </tr>
              +
              +        <tr class="t-file">
              +          <td class="strong t-file__name"><a href="#0c5f5376d7841eec96e0aab825e79e110c7f4050" class="src_link" title="config/initializers/mime_types.rb">config/initializers/mime_types.rb</a></td>
              +          <td class="green strong cell--number t-file__coverage">100.00 %</td>
              +          <td class="cell--number">4</td>
              +          <td class="cell--number">0</td>
              +          <td class="cell--number">0</td>
              +          <td class="cell--number">0</td>
              +          <td class="cell--number">0.00</td>
              +
              +        </tr>
              +
              +        <tr class="t-file">
              +          <td class="strong t-file__name"><a href="#51a75c94a43a24fc77fd56fe028d7f4ef963b193" class="src_link" title="config/initializers/wrap_parameters.rb">config/initializers/wrap_parameters.rb</a></td>
              +          <td class="green strong cell--number t-file__coverage">100.00 %</td>
              +          <td class="cell--number">14</td>
              +          <td class="cell--number">2</td>
              +          <td class="cell--number">2</td>
              +          <td class="cell--number">0</td>
              +          <td class="cell--number">1.50</td>
              +
              +        </tr>
              +
              +        <tr class="t-file">
              +          <td class="strong t-file__name"><a href="#7e40e8cec2678992b5bb7343b8264c6e0a8fd89a" class="src_link" title="config/routes.rb">config/routes.rb</a></td>
              +          <td class="green strong cell--number t-file__coverage">100.00 %</td>
              +          <td class="cell--number">17</td>
              +          <td class="cell--number">9</td>
              +          <td class="cell--number">9</td>
              +          <td class="cell--number">0</td>
              +          <td class="cell--number">1.00</td>
              +
              +        </tr>
              +
              +        <tr class="t-file">
              +          <td class="strong t-file__name"><a href="#5a6061652146776ff3661ab8e77e2233c180cd08" class="src_link" title="spec/controllers/home_controller_spec.rb">spec/controllers/home_controller_spec.rb</a></td>
              +          <td class="green strong cell--number t-file__coverage">100.00 %</td>
              +          <td class="cell--number">12</td>
              +          <td class="cell--number">6</td>
              +          <td class="cell--number">6</td>
              +          <td class="cell--number">0</td>
              +          <td class="cell--number">1.00</td>
              +
              +        </tr>
              +
              +        <tr class="t-file">
              +          <td class="strong t-file__name"><a href="#ee8e2e66fafe0acfa49a06f180d35f7919b51192" class="src_link" title="spec/controllers/requirements_controller_spec.rb">spec/controllers/requirements_controller_spec.rb</a></td>
              +          <td class="green strong cell--number t-file__coverage">100.00 %</td>
              +          <td class="cell--number">216</td>
              +          <td class="cell--number">129</td>
              +          <td class="cell--number">129</td>
              +          <td class="cell--number">0</td>
              +          <td class="cell--number">1.43</td>
              +
              +        </tr>
              +
              +        <tr class="t-file">
              +          <td class="strong t-file__name"><a href="#b0ce7028e0fde889a13bd575a1eec962b6825884" class="src_link" title="spec/controllers/sei_processes_controller_spec.rb">spec/controllers/sei_processes_controller_spec.rb</a></td>
              +          <td class="green strong cell--number t-file__coverage">99.18 %</td>
              +          <td class="cell--number">217</td>
              +          <td class="cell--number">122</td>
              +          <td class="cell--number">121</td>
              +          <td class="cell--number">1</td>
              +          <td class="cell--number">1.45</td>
              +
              +        </tr>
              +
              +        <tr class="t-file">
              +          <td class="strong t-file__name"><a href="#74919aa19486a412b5d76b64a743160edd82e71b" class="src_link" title="spec/helpers/home_helper_spec.rb">spec/helpers/home_helper_spec.rb</a></td>
              +          <td class="green strong cell--number t-file__coverage">100.00 %</td>
              +          <td class="cell--number">15</td>
              +          <td class="cell--number">0</td>
              +          <td class="cell--number">0</td>
              +          <td class="cell--number">0</td>
              +          <td class="cell--number">0.00</td>
              +
              +        </tr>
              +
              +        <tr class="t-file">
              +          <td class="strong t-file__name"><a href="#a354408becf1bc7a607b666ac2def09689b56036" class="src_link" title="spec/models/accreditation_spec.rb">spec/models/accreditation_spec.rb</a></td>
              +          <td class="green strong cell--number t-file__coverage">100.00 %</td>
              +          <td class="cell--number">66</td>
              +          <td class="cell--number">32</td>
              +          <td class="cell--number">32</td>
              +          <td class="cell--number">0</td>
              +          <td class="cell--number">2.06</td>
              +
              +        </tr>
              +
              +        <tr class="t-file">
              +          <td class="strong t-file__name"><a href="#2a6723e88ba1b7edfd3184e28e759f2c6af1ea44" class="src_link" title="spec/models/requirement_spec.rb">spec/models/requirement_spec.rb</a></td>
              +          <td class="green strong cell--number t-file__coverage">100.00 %</td>
              +          <td class="cell--number">27</td>
              +          <td class="cell--number">15</td>
              +          <td class="cell--number">15</td>
              +          <td class="cell--number">0</td>
              +          <td class="cell--number">1.27</td>
              +
              +        </tr>
              +
              +        <tr class="t-file">
              +          <td class="strong t-file__name"><a href="#b4329ad6968b64e413366d6f72079658b1192451" class="src_link" title="spec/models/sei_process_spec.rb">spec/models/sei_process_spec.rb</a></td>
              +          <td class="green strong cell--number t-file__coverage">97.44 %</td>
              +          <td class="cell--number">87</td>
              +          <td class="cell--number">39</td>
              +          <td class="cell--number">38</td>
              +          <td class="cell--number">1</td>
              +          <td class="cell--number">1.10</td>
              +
              +        </tr>
              +
              +        <tr class="t-file">
              +          <td class="strong t-file__name"><a href="#06827b7f445ffc1f4818c27f1b51d5fa2c0a29e7" class="src_link" title="spec/models/user_spec.rb">spec/models/user_spec.rb</a></td>
              +          <td class="green strong cell--number t-file__coverage">100.00 %</td>
              +          <td class="cell--number">5</td>
              +          <td class="cell--number">0</td>
              +          <td class="cell--number">0</td>
              +          <td class="cell--number">0</td>
              +          <td class="cell--number">0.00</td>
              +
              +        </tr>
              +
              +        <tr class="t-file">
              +          <td class="strong t-file__name"><a href="#fe5007eeaa0339c6abb0ac1f6b4ad9b06e5e413d" class="src_link" title="spec/routing/accreditations_routing_spec.rb">spec/routing/accreditations_routing_spec.rb</a></td>
              +          <td class="green strong cell--number t-file__coverage">100.00 %</td>
              +          <td class="cell--number">38</td>
              +          <td class="cell--number">19</td>
              +          <td class="cell--number">19</td>
              +          <td class="cell--number">0</td>
              +          <td class="cell--number">1.00</td>
              +
              +        </tr>
              +
              +        <tr class="t-file">
              +          <td class="strong t-file__name"><a href="#d10a71e41790ffdee58ed9fc3d98e923895d165f" class="src_link" title="spec/routing/requirements_routing_spec.rb">spec/routing/requirements_routing_spec.rb</a></td>
              +          <td class="green strong cell--number t-file__coverage">100.00 %</td>
              +          <td class="cell--number">38</td>
              +          <td class="cell--number">19</td>
              +          <td class="cell--number">19</td>
              +          <td class="cell--number">0</td>
              +          <td class="cell--number">1.00</td>
              +
              +        </tr>
              +
              +        <tr class="t-file">
              +          <td class="strong t-file__name"><a href="#15f5641fcd1d79cc88246102c75e4569d716a302" class="src_link" title="spec/routing/sei_processes_routing_spec.rb">spec/routing/sei_processes_routing_spec.rb</a></td>
              +          <td class="green strong cell--number t-file__coverage">100.00 %</td>
              +          <td class="cell--number">38</td>
              +          <td class="cell--number">19</td>
              +          <td class="cell--number">19</td>
              +          <td class="cell--number">0</td>
              +          <td class="cell--number">1.00</td>
              +
              +        </tr>
              +
              +        <tr class="t-file">
              +          <td class="strong t-file__name"><a href="#6b4ea0fd9ad8be03dbffc0d8e2262c3b65e2541e" class="src_link" title="spec/views/home/index.html.erb_spec.rb">spec/views/home/index.html.erb_spec.rb</a></td>
              +          <td class="green strong cell--number t-file__coverage">100.00 %</td>
              +          <td class="cell--number">5</td>
              +          <td class="cell--number">0</td>
              +          <td class="cell--number">0</td>
              +          <td class="cell--number">0</td>
              +          <td class="cell--number">0.00</td>
              +
              +        </tr>
              +
              +    </tbody>
              +  </table>
              +</div>
              + +

              </div>

              + +
                  </div>
              +
              +    <div id="footer">
              +      Generated by <a href="https://github.com/simplecov-ruby/simplecov">simplecov</a> v0.19.1
              +      and simplecov-html v0.12.3<br/>
              +      using RSpec
              +    </div>
              +
              +    <div class="source_files">
              +
              +      <div class="source_table" id="e6e0103b91b72af1f3090d18f5a6ec87be6747a0">
              +<div class="header">
              +  <h3>app/controllers/accreditations_controller.rb</h3>
              +  <h4>
              +    <span class="green">
              +96.55%
              + +

              </span>

              + +
                  lines covered
              +  </h4>
              +
              +  <div class="t-line-summary">
              +    <b>29</b> relevant lines.
              +    <span class="green"><b>28</b> lines covered</span> and
              +    <span class="red"><b>1</b> lines missed.</span>
              +  </div>
              +
              +</div>
              +
              +<pre>
              +  <ol>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="1">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">class AccreditationsController &lt; ApplicationController</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="2">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  before_action :set_accreditation, only: [:show, :edit, :update, :destroy]</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="3">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="4">
              +
              +          <code class="ruby">  # GET /accreditations</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="5">
              +
              +          <code class="ruby">  # GET /accreditations.json</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="6">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  def index</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="7">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">    if current_user.role == &quot;administrator&quot;</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="8">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">      @accreditations = Accreditation.all</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="9">
              +
              +          <code class="ruby">    else</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="missed" data-hits="0" data-linenumber="10">
              +
              +          <code class="ruby">      @accreditations = Accreditation.where(user_id: current_user.id)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="11">
              +
              +          <code class="ruby">    end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="12">
              +
              +          <code class="ruby">  end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="13">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="14">
              +
              +          <code class="ruby">  # GET /accreditations/1</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="15">
              +
              +          <code class="ruby">  # GET /accreditations/1.json</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="16">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  def show</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="17">
              +
              +          <code class="ruby">  end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="18">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="19">
              +
              +          <code class="ruby">  # GET /accreditations/new</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="20">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  def new</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="21">
              +
              +          <code class="ruby">  end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="22">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="23">
              +
              +          <code class="ruby">  # GET /accreditations/1/edit</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="24">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  def edit</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="25">
              +
              +          <code class="ruby">  end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="26">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="27">
              +
              +          <code class="ruby">  # POST /accreditations</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="28">
              +
              +          <code class="ruby">  # POST /accreditations.json</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="29">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  def create</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="30">
              +
              +          <code class="ruby">  end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="31">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="32">
              +
              +          <code class="ruby">  # PATCH/PUT /accreditations/1</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="33">
              +
              +          <code class="ruby">  # PATCH/PUT /accreditations/1.json</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="34">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  def update</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="2" data-linenumber="35">
              +          <span class="hits">2</span>
              +
              +          <code class="ruby">    respond_to do |format|</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="2" data-linenumber="36">
              +          <span class="hits">2</span>
              +
              +          <code class="ruby">      if @accreditation.update(accreditation_params)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="2" data-linenumber="37">
              +          <span class="hits">2</span>
              +
              +          <code class="ruby">        format.html { redirect_to accreditations_url, notice: &#39;Credenciamento atualizado com sucesso!&#39; }</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="38">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">        format.json { render :show, status: :ok, location: @accreditation }</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="39">
              +
              +          <code class="ruby">      else</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="2" data-linenumber="40">
              +          <span class="hits">2</span>
              +
              +          <code class="ruby">        format.html { render :edit }</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="41">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">        format.json { render json: @accreditation.errors, status: :unprocessable_entity }</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="42">
              +
              +          <code class="ruby">      end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="43">
              +
              +          <code class="ruby">    end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="44">
              +
              +          <code class="ruby">  end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="45">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="46">
              +
              +          <code class="ruby">  # DELETE /accreditations/1</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="47">
              +
              +          <code class="ruby">  # DELETE /accreditations/1.json</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="48">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  def destroy</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="3" data-linenumber="49">
              +          <span class="hits">3</span>
              +
              +          <code class="ruby">    respond_to do |format|</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="3" data-linenumber="50">
              +          <span class="hits">3</span>
              +
              +          <code class="ruby">      if @accreditation.destroy</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="4" data-linenumber="51">
              +          <span class="hits">4</span>
              +
              +          <code class="ruby">        format.html { redirect_to accreditations_url, notice: &#39;Credenciamento excluído com sucesso!&#39; }</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="2" data-linenumber="52">
              +          <span class="hits">2</span>
              +
              +          <code class="ruby">        format.json { head :no_content }</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="53">
              +
              +          <code class="ruby">      else</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="2" data-linenumber="54">
              +          <span class="hits">2</span>
              +
              +          <code class="ruby">        format.html { redirect_to accreditations_url, notice: &#39;Erro: não foi possível excluir o credenciamento!&#39; }</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="55">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">        format.json { head :no_content }</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="56">
              +
              +          <code class="ruby">      end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="57">
              +
              +          <code class="ruby">    end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="58">
              +
              +          <code class="ruby">  end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="59">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="60">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  private</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="61">
              +
              +          <code class="ruby">    # Use callbacks to share common setup or constraints between actions.</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="62">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">    def set_accreditation</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="7" data-linenumber="63">
              +          <span class="hits">7</span>
              +
              +          <code class="ruby">      @accreditation = Accreditation.find(params[:id])</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="64">
              +
              +          <code class="ruby">    end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="65">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="66">
              +
              +          <code class="ruby">    # Never trust parameters from the scary internet, only allow the white list through.</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="67">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">    def accreditation_params</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="2" data-linenumber="68">
              +          <span class="hits">2</span>
              +
              +          <code class="ruby">      params.require(:accreditation).permit(:user_id, :start_date, :end_date, :sei_proccess_id)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="69">
              +
              +          <code class="ruby">    end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="70">
              +
              +          <code class="ruby">end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="71">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +  </ol>
              +</pre>
              + +

              </div>

              + +
                    <div class="source_table" id="65819bdab2d3c0f58455dbe3a03c44ebb1ca6639">
              +<div class="header">
              +  <h3>app/controllers/application_controller.rb</h3>
              +  <h4>
              +    <span class="green">
              +91.67%
              + +

              </span>

              + +
                  lines covered
              +  </h4>
              +
              +  <div class="t-line-summary">
              +    <b>12</b> relevant lines.
              +    <span class="green"><b>11</b> lines covered</span> and
              +    <span class="red"><b>1</b> lines missed.</span>
              +  </div>
              +
              +</div>
              +
              +<pre>
              +  <ol>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="1">
              +
              +          <code class="ruby"># frozen_string_literal: true</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="2">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="3">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">module Current</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="4">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  thread_mattr_accessor :user</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="5">
              +
              +          <code class="ruby">end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="6">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="7">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">class ApplicationController &lt; ActionController::Base</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="8">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  before_action :configure_permitted_parameters, if: :devise_controller?</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="9">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="10">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  around_action :set_current_user</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="11">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  def set_current_user</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="41" data-linenumber="12">
              +          <span class="hits">41</span>
              +
              +          <code class="ruby">    Current.user = current_user</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="41" data-linenumber="13">
              +          <span class="hits">41</span>
              +
              +          <code class="ruby">    yield</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="14">
              +
              +          <code class="ruby">  ensure</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="15">
              +
              +          <code class="ruby">    # to address the thread variable leak issues in Puma/Thin webserver</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="41" data-linenumber="16">
              +          <span class="hits">41</span>
              +
              +          <code class="ruby">    Current.user = nil</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="17">
              +
              +          <code class="ruby">  end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="18">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="19">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  protected</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="20">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="21">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  def configure_permitted_parameters</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="missed" data-hits="0" data-linenumber="22">
              +
              +          <code class="ruby">    devise_parameter_sanitizer.permit(:sign_up, keys: %i[full_name role])</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="23">
              +
              +          <code class="ruby">  end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="24">
              +
              +          <code class="ruby">end</code>
              +        </li>
              +      </div>
              +
              +  </ol>
              +</pre>
              + +

              </div>

              + +
                    <div class="source_table" id="bf23aba9bbd287f866406b24c1727b50ea3ffeaf">
              +<div class="header">
              +  <h3>app/controllers/home_controller.rb</h3>
              +  <h4>
              +    <span class="green">
              +100.0%
              + +

              </span>

              + +
                  lines covered
              +  </h4>
              +
              +  <div class="t-line-summary">
              +    <b>2</b> relevant lines.
              +    <span class="green"><b>2</b> lines covered</span> and
              +    <span class="red"><b>0</b> lines missed.</span>
              +  </div>
              +
              +</div>
              +
              +<pre>
              +  <ol>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="1">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">class HomeController &lt; ApplicationController</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="2">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  def index</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="3">
              +
              +          <code class="ruby">  end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="4">
              +
              +          <code class="ruby">end</code>
              +        </li>
              +      </div>
              +
              +  </ol>
              +</pre>
              + +

              </div>

              + +
                    <div class="source_table" id="0816f8c26bb5fe247e81aaf294debccf0747fe9f">
              +<div class="header">
              +  <h3>app/controllers/requirements_controller.rb</h3>
              +  <h4>
              +    <span class="green">
              +100.0%
              + +

              </span>

              + +
                  lines covered
              +  </h4>
              +
              +  <div class="t-line-summary">
              +    <b>40</b> relevant lines.
              +    <span class="green"><b>40</b> lines covered</span> and
              +    <span class="red"><b>0</b> lines missed.</span>
              +  </div>
              +
              +</div>
              +
              +<pre>
              +  <ol>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="1">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">class RequirementsController &lt; ApplicationController</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="2">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  before_action :set_requirement, only: [:show, :edit, :update, :destroy]</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="3">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="4">
              +
              +          <code class="ruby">  # GET /requirements</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="5">
              +
              +          <code class="ruby">  # GET /requirements.json</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="6">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  def index</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="7">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">    @requirements = Requirement.all</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="8">
              +
              +          <code class="ruby">  end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="9">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="10">
              +
              +          <code class="ruby">  # GET /requirements/1</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="11">
              +
              +          <code class="ruby">  # GET /requirements/1.json</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="12">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  def show</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="13">
              +
              +          <code class="ruby">  end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="14">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="15">
              +
              +          <code class="ruby">  # GET /requirements/new</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="16">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  def new</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="17">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">    @requirement = Requirement.new</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="18">
              +
              +          <code class="ruby">  end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="19">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="20">
              +
              +          <code class="ruby">  # GET /requirements/1/edit</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="21">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  def edit</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="22">
              +
              +          <code class="ruby">  end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="23">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="24">
              +
              +          <code class="ruby">  # POST /requirements</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="25">
              +
              +          <code class="ruby">  # POST /requirements.json</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="26">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  def create</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="4" data-linenumber="27">
              +          <span class="hits">4</span>
              +
              +          <code class="ruby">    @requirement = Requirement.new(requirement_params)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="28">
              +
              +          <code class="ruby">    </code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="4" data-linenumber="29">
              +          <span class="hits">4</span>
              +
              +          <code class="ruby">    respond_to do |format|</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="4" data-linenumber="30">
              +          <span class="hits">4</span>
              +
              +          <code class="ruby">      if @requirement.save</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="4" data-linenumber="31">
              +          <span class="hits">4</span>
              +
              +          <code class="ruby">        format.html { redirect_to @requirement, notice: &#39;Requisitos criados com sucesso!&#39; }</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="2" data-linenumber="32">
              +          <span class="hits">2</span>
              +
              +          <code class="ruby">        format.json { render :show, status: :created, location: @requirement }</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="33">
              +
              +          <code class="ruby">      else</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="4" data-linenumber="34">
              +          <span class="hits">4</span>
              +
              +          <code class="ruby">        format.html { render :new }</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="2" data-linenumber="35">
              +          <span class="hits">2</span>
              +
              +          <code class="ruby">        format.json { render json: @requirement.errors, status: :unprocessable_entity }</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="36">
              +
              +          <code class="ruby">      end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="37">
              +
              +          <code class="ruby">    end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="38">
              +
              +          <code class="ruby">  end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="39">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="40">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  def delete_document_attachment</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="41">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">    @document = ActiveStorage::Attachment.find_by(id: params[:id])</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="42">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">    @requirement_id = params[:requirement_id]</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="43">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">    @document&amp;.purge</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="44">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">    redirect_to edit_requirement_path(@requirement_id)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="45">
              +
              +          <code class="ruby">  end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="46">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="47">
              +
              +          <code class="ruby">  # PATCH/PUT /requirements/1</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="48">
              +
              +          <code class="ruby">  # PATCH/PUT /requirements/1.json</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="49">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  def update</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="4" data-linenumber="50">
              +          <span class="hits">4</span>
              +
              +          <code class="ruby">    respond_to do |format|</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="4" data-linenumber="51">
              +          <span class="hits">4</span>
              +
              +          <code class="ruby">      if @requirement.update(requirement_params)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="4" data-linenumber="52">
              +          <span class="hits">4</span>
              +
              +          <code class="ruby">        format.html { redirect_to @requirement, notice: &#39;Requisitos atualizados com sucesso!&#39; }</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="2" data-linenumber="53">
              +          <span class="hits">2</span>
              +
              +          <code class="ruby">        format.json { render :show, status: :ok, location: @requirement }</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="54">
              +
              +          <code class="ruby">      else</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="4" data-linenumber="55">
              +          <span class="hits">4</span>
              +
              +          <code class="ruby">        format.html { render :edit }</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="2" data-linenumber="56">
              +          <span class="hits">2</span>
              +
              +          <code class="ruby">        format.json { render json: @requirement.errors, status: :unprocessable_entity }</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="57">
              +
              +          <code class="ruby">      end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="58">
              +
              +          <code class="ruby">    end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="59">
              +
              +          <code class="ruby">  end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="60">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="61">
              +
              +          <code class="ruby">  # DELETE /requirements/1</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="62">
              +
              +          <code class="ruby">  # DELETE /requirements/1.json</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="63">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  def destroy</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="3" data-linenumber="64">
              +          <span class="hits">3</span>
              +
              +          <code class="ruby">    respond_to do |format|</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="3" data-linenumber="65">
              +          <span class="hits">3</span>
              +
              +          <code class="ruby">      if @requirement.destroy</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="4" data-linenumber="66">
              +          <span class="hits">4</span>
              +
              +          <code class="ruby">        format.html { redirect_to requirements_url, notice: &#39;Requisitos excluídos com sucesso!&#39; }</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="2" data-linenumber="67">
              +          <span class="hits">2</span>
              +
              +          <code class="ruby">        format.json { head :no_content }</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="68">
              +
              +          <code class="ruby">      else</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="2" data-linenumber="69">
              +          <span class="hits">2</span>
              +
              +          <code class="ruby">        format.html { redirect_to requirements_url, notice: &#39;Erro: não foi possível excluir os requisitos!&#39; }</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="70">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">        format.json { head :no_content }</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="71">
              +
              +          <code class="ruby">      end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="72">
              +
              +          <code class="ruby">    end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="73">
              +
              +          <code class="ruby">  end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="74">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="75">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  private</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="76">
              +
              +          <code class="ruby">    # Use callbacks to share common setup or constraints between actions.</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="77">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">    def set_requirement</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="9" data-linenumber="78">
              +          <span class="hits">9</span>
              +
              +          <code class="ruby">      @requirement = Requirement.find(params[:id])</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="79">
              +
              +          <code class="ruby">    end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="80">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="81">
              +
              +          <code class="ruby">    # Never trust parameters from the scary internet, only allow the white list through.</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="82">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">    def requirement_params</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="8" data-linenumber="83">
              +          <span class="hits">8</span>
              +
              +          <code class="ruby">      params.require(:requirement).permit(:title, :content, documents: [])</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="84">
              +
              +          <code class="ruby">    end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="85">
              +
              +          <code class="ruby">end</code>
              +        </li>
              +      </div>
              +
              +  </ol>
              +</pre>
              + +

              </div>

              + +
                    <div class="source_table" id="e58b3770d29b37d0d0a2c3bd83f5a8b7009bf8c6">
              +<div class="header">
              +  <h3>app/controllers/sei_processes_controller.rb</h3>
              +  <h4>
              +    <span class="green">
              +100.0%
              + +

              </span>

              + +
                  lines covered
              +  </h4>
              +
              +  <div class="t-line-summary">
              +    <b>44</b> relevant lines.
              +    <span class="green"><b>44</b> lines covered</span> and
              +    <span class="red"><b>0</b> lines missed.</span>
              +  </div>
              +
              +</div>
              +
              +<pre>
              +  <ol>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="1">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">class SeiProcessesController &lt; ApplicationController</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="2">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  before_action :set_sei_process, only: [:show, :edit, :update, :destroy]</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="3">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="4">
              +
              +          <code class="ruby">  # GET /sei_processes</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="5">
              +
              +          <code class="ruby">  # GET /sei_processes.json</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="6">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  def index</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="2" data-linenumber="7">
              +          <span class="hits">2</span>
              +
              +          <code class="ruby">    @all_statuses = %w[Espera Aprovado Rejeitado]</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="8">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="2" data-linenumber="9">
              +          <span class="hits">2</span>
              +
              +          <code class="ruby">    session[:statuses] = params[:statuses] || session[:statuses] || @all_statuses.zip([]).to_h</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="2" data-linenumber="10">
              +          <span class="hits">2</span>
              +
              +          <code class="ruby">    @status_filter = session[:statuses].keys</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="11">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="2" data-linenumber="12">
              +          <span class="hits">2</span>
              +
              +          <code class="ruby">    if current_user.role == &quot;administrator&quot;</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="13">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">      @sei_processes = SeiProcess.where(status: @status_filter)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="14">
              +
              +          <code class="ruby">    else</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="15">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">      @my_processes = SeiProcess.where(user_id: current_user.id, status: @status_filter)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="16">
              +
              +          <code class="ruby">    end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="17">
              +
              +          <code class="ruby">  end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="18">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="19">
              +
              +          <code class="ruby">  # GET /sei_processes/1</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="20">
              +
              +          <code class="ruby">  # GET /sei_processes/1.json</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="21">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  def show</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="22">
              +
              +          <code class="ruby">  end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="23">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="24">
              +
              +          <code class="ruby">  # GET /sei_processes/new</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="25">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  def new</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="26">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">    @requirements = Requirement.find_by(title: &#39;Requisitos de Credenciamento&#39;)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="27">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">    @sei_process = SeiProcess.new</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="28">
              +
              +          <code class="ruby">  end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="29">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="30">
              +
              +          <code class="ruby">  # GET /sei_processes/1/edit</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="31">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  def edit</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="32">
              +
              +          <code class="ruby">  end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="33">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="34">
              +
              +          <code class="ruby">  # POST /sei_processes</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="35">
              +
              +          <code class="ruby">  # POST /sei_processes.json</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="36">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  def create</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="4" data-linenumber="37">
              +          <span class="hits">4</span>
              +
              +          <code class="ruby">    mandatory_params = {&#39;user_id&#39; =&gt; current_user.id, &#39;status&#39; =&gt; &#39;Espera&#39;, &#39;code&#39; =&gt; &#39;0&#39;}</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="4" data-linenumber="38">
              +          <span class="hits">4</span>
              +
              +          <code class="ruby">    @sei_process = SeiProcess.new(sei_process_params.merge(mandatory_params))</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="39">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="4" data-linenumber="40">
              +          <span class="hits">4</span>
              +
              +          <code class="ruby">    respond_to do |format|</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="4" data-linenumber="41">
              +          <span class="hits">4</span>
              +
              +          <code class="ruby">      if @sei_process.save</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="6" data-linenumber="42">
              +          <span class="hits">6</span>
              +
              +          <code class="ruby">        format.html { redirect_to sei_processes_url, notice: &#39;Processo aberto com sucesso!&#39; }</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="3" data-linenumber="43">
              +          <span class="hits">3</span>
              +
              +          <code class="ruby">        format.json { render :index, status: :created, location: @sei_process }</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="44">
              +
              +          <code class="ruby">      else</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="2" data-linenumber="45">
              +          <span class="hits">2</span>
              +
              +          <code class="ruby">        format.html { render :new }</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="46">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">        format.json { render json: @sei_process.errors, status: :unprocessable_entity }</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="47">
              +
              +          <code class="ruby">      end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="48">
              +
              +          <code class="ruby">    end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="49">
              +
              +          <code class="ruby">  end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="50">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="51">
              +
              +          <code class="ruby">  # PATCH/PUT /sei_processes/1</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="52">
              +
              +          <code class="ruby">  # PATCH/PUT /sei_processes/1.json</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="53">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  def update</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="4" data-linenumber="54">
              +          <span class="hits">4</span>
              +
              +          <code class="ruby">    respond_to do |format|</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="4" data-linenumber="55">
              +          <span class="hits">4</span>
              +
              +          <code class="ruby">      if @sei_process.update(sei_process_params)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="6" data-linenumber="56">
              +          <span class="hits">6</span>
              +
              +          <code class="ruby">        format.html { redirect_to sei_processes_url, notice: &#39;Processo atualizado com sucesso!&#39; }</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="3" data-linenumber="57">
              +          <span class="hits">3</span>
              +
              +          <code class="ruby">        format.json { render :index, status: :ok, location: @sei_process }</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="58">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="3" data-linenumber="59">
              +          <span class="hits">3</span>
              +
              +          <code class="ruby">        if @sei_process.status == &#39;Aprovado&#39; &amp;&amp; (Accreditation.find_by(sei_process: @sei_process.id) == nil)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="60">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">          Accreditation.create!(user_id: @sei_process.user_id, sei_process_id: @sei_process.id)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="61">
              +
              +          <code class="ruby">        end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="62">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="63">
              +
              +          <code class="ruby">      else</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="2" data-linenumber="64">
              +          <span class="hits">2</span>
              +
              +          <code class="ruby">        format.html { render :edit }</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="65">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">        format.json { render json: @sei_process.errors, status: :unprocessable_entity }</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="66">
              +
              +          <code class="ruby">      end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="67">
              +
              +          <code class="ruby">    end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="68">
              +
              +          <code class="ruby">  end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="69">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="70">
              +
              +          <code class="ruby">  # DELETE /sei_processes/1</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="71">
              +
              +          <code class="ruby">  # DELETE /sei_processes/1.json</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="72">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  def destroy</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="3" data-linenumber="73">
              +          <span class="hits">3</span>
              +
              +          <code class="ruby">    respond_to do |format|</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="3" data-linenumber="74">
              +          <span class="hits">3</span>
              +
              +          <code class="ruby">      if @sei_process.destroy</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="4" data-linenumber="75">
              +          <span class="hits">4</span>
              +
              +          <code class="ruby">        format.html { redirect_to sei_processes_url, notice: &#39;Processo excluído com sucesso!&#39; }</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="2" data-linenumber="76">
              +          <span class="hits">2</span>
              +
              +          <code class="ruby">        format.json { head :no_content }</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="77">
              +
              +          <code class="ruby">      else</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="2" data-linenumber="78">
              +          <span class="hits">2</span>
              +
              +          <code class="ruby">        format.html { redirect_to sei_processes_url, notice: &#39;Erro: não foi possível excluir o processo!&#39; }</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="79">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">        format.json { head :no_content }</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="80">
              +
              +          <code class="ruby">      end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="81">
              +
              +          <code class="ruby">    end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="82">
              +
              +          <code class="ruby">  end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="83">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="84">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  private</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="85">
              +
              +          <code class="ruby">    # Use callbacks to share common setup or constraints between actions.</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="86">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">    def set_sei_process</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="9" data-linenumber="87">
              +          <span class="hits">9</span>
              +
              +          <code class="ruby">      @sei_process = SeiProcess.find(params[:id])</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="88">
              +
              +          <code class="ruby">    end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="89">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="90">
              +
              +          <code class="ruby">    # Never trust parameters from the scary internet, only allow the white list through.</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="91">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">    def sei_process_params</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="8" data-linenumber="92">
              +          <span class="hits">8</span>
              +
              +          <code class="ruby">      params.require(:sei_process).permit(:user_id, :status, :code, documents: [])</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="93">
              +
              +          <code class="ruby">    end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="94">
              +
              +          <code class="ruby">end</code>
              +        </li>
              +      </div>
              +
              +  </ol>
              +</pre>
              + +

              </div>

              + +
                    <div class="source_table" id="4618994cc8dccc405b3e213ff54ea21faf440d1a">
              +<div class="header">
              +  <h3>app/helpers/accreditations_helper.rb</h3>
              +  <h4>
              +    <span class="green">
              +100.0%
              + +

              </span>

              + +
                  lines covered
              +  </h4>
              +
              +  <div class="t-line-summary">
              +    <b>1</b> relevant lines.
              +    <span class="green"><b>1</b> lines covered</span> and
              +    <span class="red"><b>0</b> lines missed.</span>
              +  </div>
              +
              +</div>
              +
              +<pre>
              +  <ol>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="1">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">module AccreditationsHelper</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="2">
              +
              +          <code class="ruby">end</code>
              +        </li>
              +      </div>
              +
              +  </ol>
              +</pre>
              + +

              </div>

              + +
                    <div class="source_table" id="21c0a83cd1994bf0d8fdac8648c199320ebec369">
              +<div class="header">
              +  <h3>app/helpers/application_helper.rb</h3>
              +  <h4>
              +    <span class="green">
              +100.0%
              + +

              </span>

              + +
                  lines covered
              +  </h4>
              +
              +  <div class="t-line-summary">
              +    <b>1</b> relevant lines.
              +    <span class="green"><b>1</b> lines covered</span> and
              +    <span class="red"><b>0</b> lines missed.</span>
              +  </div>
              +
              +</div>
              +
              +<pre>
              +  <ol>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="1">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">module ApplicationHelper</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="2">
              +
              +          <code class="ruby">end</code>
              +        </li>
              +      </div>
              +
              +  </ol>
              +</pre>
              + +

              </div>

              + +
                    <div class="source_table" id="0a283c41b65dc302313a2c1fbc795b1337486b4b">
              +<div class="header">
              +  <h3>app/helpers/home_helper.rb</h3>
              +  <h4>
              +    <span class="green">
              +100.0%
              + +

              </span>

              + +
                  lines covered
              +  </h4>
              +
              +  <div class="t-line-summary">
              +    <b>1</b> relevant lines.
              +    <span class="green"><b>1</b> lines covered</span> and
              +    <span class="red"><b>0</b> lines missed.</span>
              +  </div>
              +
              +</div>
              +
              +<pre>
              +  <ol>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="1">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">module HomeHelper</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="2">
              +
              +          <code class="ruby">end</code>
              +        </li>
              +      </div>
              +
              +  </ol>
              +</pre>
              + +

              </div>

              + +
                    <div class="source_table" id="c98427410596e3af0191d32972e939d4ff0a2cb5">
              +<div class="header">
              +  <h3>app/helpers/requirements_helper.rb</h3>
              +  <h4>
              +    <span class="green">
              +100.0%
              + +

              </span>

              + +
                  lines covered
              +  </h4>
              +
              +  <div class="t-line-summary">
              +    <b>1</b> relevant lines.
              +    <span class="green"><b>1</b> lines covered</span> and
              +    <span class="red"><b>0</b> lines missed.</span>
              +  </div>
              +
              +</div>
              +
              +<pre>
              +  <ol>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="1">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">module RequirementsHelper</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="2">
              +
              +          <code class="ruby">end</code>
              +        </li>
              +      </div>
              +
              +  </ol>
              +</pre>
              + +

              </div>

              + +
                    <div class="source_table" id="f05e78596d28e7779f0b38d274f1c57faba01c9c">
              +<div class="header">
              +  <h3>app/helpers/sei_processes_helper.rb</h3>
              +  <h4>
              +    <span class="green">
              +100.0%
              + +

              </span>

              + +
                  lines covered
              +  </h4>
              +
              +  <div class="t-line-summary">
              +    <b>1</b> relevant lines.
              +    <span class="green"><b>1</b> lines covered</span> and
              +    <span class="red"><b>0</b> lines missed.</span>
              +  </div>
              +
              +</div>
              +
              +<pre>
              +  <ol>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="1">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">module SeiProcessesHelper</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="2">
              +
              +          <code class="ruby">end</code>
              +        </li>
              +      </div>
              +
              +  </ol>
              +</pre>
              + +

              </div>

              + +
                    <div class="source_table" id="3255660bd8f0c40f99c08985c205551592748602">
              +<div class="header">
              +  <h3>app/models/accreditation.rb</h3>
              +  <h4>
              +    <span class="green">
              +95.65%
              + +

              </span>

              + +
                  lines covered
              +  </h4>
              +
              +  <div class="t-line-summary">
              +    <b>23</b> relevant lines.
              +    <span class="green"><b>22</b> lines covered</span> and
              +    <span class="red"><b>1</b> lines missed.</span>
              +  </div>
              +
              +</div>
              +
              +<pre>
              +  <ol>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="1">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">class Accreditation &lt; ApplicationRecord</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="2">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  belongs_to :user</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="3">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  belongs_to :sei_process</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="4">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  validates :sei_process, uniqueness: true</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="5">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="6">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  validate :check_role, on: [:create, :update]</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="7">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  def current_user_is_admin</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="20" data-linenumber="8">
              +          <span class="hits">20</span>
              +
              +          <code class="ruby">    Current.user != nil &amp;&amp; Current.user.role == &#39;administrator&#39;</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="9">
              +
              +          <code class="ruby">  end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="10">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  def check_role</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="17" data-linenumber="11">
              +          <span class="hits">17</span>
              +
              +          <code class="ruby">    unless current_user_is_admin</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="12">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">      self.errors.add(:base, &#39;Usuário sem permissão&#39;)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="13">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">      return false</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="14">
              +
              +          <code class="ruby">    end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="16" data-linenumber="15">
              +          <span class="hits">16</span>
              +
              +          <code class="ruby">    true</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="16">
              +
              +          <code class="ruby">  end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="17">
              +
              +          <code class="ruby">  </code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="18">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  validate :check_date, on: :update</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="19">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  def check_date</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="2" data-linenumber="20">
              +          <span class="hits">2</span>
              +
              +          <code class="ruby">    if (start_date == nil) || (end_date == nil) || (end_date &lt; start_date)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="21">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">      self.errors.add(:end_date, &#39;inválida&#39;)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="22">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">      return false</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="23">
              +
              +          <code class="ruby">    end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="24">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">    true</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="25">
              +
              +          <code class="ruby">  end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="26">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="27">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  before_destroy :check_permission</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="28">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  def allow_deletion!</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="missed" data-hits="0" data-linenumber="29">
              +
              +          <code class="ruby">    @allow_deletion = true</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="30">
              +
              +          <code class="ruby">  end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="31">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  def check_permission</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="3" data-linenumber="32">
              +          <span class="hits">3</span>
              +
              +          <code class="ruby">    throw(:abort) unless @allow_deletion || current_user_is_admin</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="33">
              +
              +          <code class="ruby">  end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="34">
              +
              +          <code class="ruby">end</code>
              +        </li>
              +      </div>
              +
              +  </ol>
              +</pre>
              + +

              </div>

              + +
                    <div class="source_table" id="491f8828ad93133fc4a88a8a290d7e6f8eb12888">
              +<div class="header">
              +  <h3>app/models/application_record.rb</h3>
              +  <h4>
              +    <span class="green">
              +100.0%
              + +

              </span>

              + +
                  lines covered
              +  </h4>
              +
              +  <div class="t-line-summary">
              +    <b>2</b> relevant lines.
              +    <span class="green"><b>2</b> lines covered</span> and
              +    <span class="red"><b>0</b> lines missed.</span>
              +  </div>
              +
              +</div>
              +
              +<pre>
              +  <ol>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="1">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">class ApplicationRecord &lt; ActiveRecord::Base</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="2">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  self.abstract_class = true</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="3">
              +
              +          <code class="ruby">end</code>
              +        </li>
              +      </div>
              +
              +  </ol>
              +</pre>
              + +

              </div>

              + +
                    <div class="source_table" id="072366a15d5b19fccad836e5257f2b86937b4bcf">
              +<div class="header">
              +  <h3>app/models/requirement.rb</h3>
              +  <h4>
              +    <span class="green">
              +94.12%
              + +

              </span>

              + +
                  lines covered
              +  </h4>
              +
              +  <div class="t-line-summary">
              +    <b>17</b> relevant lines.
              +    <span class="green"><b>16</b> lines covered</span> and
              +    <span class="red"><b>1</b> lines missed.</span>
              +  </div>
              +
              +</div>
              +
              +<pre>
              +  <ol>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="1">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">class Requirement &lt; ApplicationRecord</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="2">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">    validates :title, presence: true, uniqueness: true</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="3">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">    has_many_attached :documents</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="4">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="5">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">    validate :check_role, on: [:create, :update]</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="6">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">    def current_user_is_admin</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="26" data-linenumber="7">
              +          <span class="hits">26</span>
              +
              +          <code class="ruby">        Current.user != nil &amp;&amp; Current.user.role == &#39;administrator&#39;</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="8">
              +
              +          <code class="ruby">    end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="9">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">    def check_role</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="23" data-linenumber="10">
              +          <span class="hits">23</span>
              +
              +          <code class="ruby">        unless current_user_is_admin</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="2" data-linenumber="11">
              +          <span class="hits">2</span>
              +
              +          <code class="ruby">            self.errors.add(:base, &#39;Usuário sem permissão&#39;)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="2" data-linenumber="12">
              +          <span class="hits">2</span>
              +
              +          <code class="ruby">            return false</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="13">
              +
              +          <code class="ruby">        end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="21" data-linenumber="14">
              +          <span class="hits">21</span>
              +
              +          <code class="ruby">        true</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="15">
              +
              +          <code class="ruby">    end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="16">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="17">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">    before_destroy :check_permission</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="18">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">    def allow_deletion!</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="missed" data-hits="0" data-linenumber="19">
              +
              +          <code class="ruby">        @allow_deletion = true</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="20">
              +
              +          <code class="ruby">    end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="21">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">    def check_permission</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="3" data-linenumber="22">
              +          <span class="hits">3</span>
              +
              +          <code class="ruby">        unless @allow_deletion || current_user_is_admin</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="23">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">            throw(:abort)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="24">
              +
              +          <code class="ruby">        end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="25">
              +
              +          <code class="ruby">    end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="26">
              +
              +          <code class="ruby">end</code>
              +        </li>
              +      </div>
              +
              +  </ol>
              +</pre>
              + +

              </div>

              + +
                    <div class="source_table" id="a8f6dbecbb9a83b40b23b09ca0caf595e9a75ff9">
              +<div class="header">
              +  <h3>app/models/sei_process.rb</h3>
              +  <h4>
              +    <span class="green">
              +95.83%
              + +

              </span>

              + +
                  lines covered
              +  </h4>
              +
              +  <div class="t-line-summary">
              +    <b>24</b> relevant lines.
              +    <span class="green"><b>23</b> lines covered</span> and
              +    <span class="red"><b>1</b> lines missed.</span>
              +  </div>
              +
              +</div>
              +
              +<pre>
              +  <ol>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="1">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">class SeiProcess &lt; ApplicationRecord</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="2">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  belongs_to :user</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="3">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  has_many_attached :documents</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="4">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  validates :documents, attached: true</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="5">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="6">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  enum status: {</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="7">
              +
              +          <code class="ruby">    Espera: 0,</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="8">
              +
              +          <code class="ruby">    Aprovado: 1,</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="9">
              +
              +          <code class="ruby">    Rejeitado: 2</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="10">
              +
              +          <code class="ruby">  }</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="11">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="12">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  def current_user_is_admin</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="9" data-linenumber="13">
              +          <span class="hits">9</span>
              +
              +          <code class="ruby">    Current.user != nil &amp;&amp; Current.user.role == &#39;administrator&#39;</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="14">
              +
              +          <code class="ruby">  end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="15">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="16">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  validate :check_signed_in, on: :create</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="17">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  def check_signed_in</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="31" data-linenumber="18">
              +          <span class="hits">31</span>
              +
              +          <code class="ruby">    if Current.user == nil</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="19">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">      self.errors.add(:base, &#39;Usuário sem permissão&#39;)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="20">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">      return false</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="21">
              +
              +          <code class="ruby">    end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="30" data-linenumber="22">
              +          <span class="hits">30</span>
              +
              +          <code class="ruby">    true</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="23">
              +
              +          <code class="ruby">  end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="24">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="25">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  validate :check_role, on: :update</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="26">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  def check_role</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="6" data-linenumber="27">
              +          <span class="hits">6</span>
              +
              +          <code class="ruby">    unless current_user_is_admin</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="28">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">      self.errors.add(:base, &#39;Usuário sem permissão&#39;)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="29">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">      return false</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="30">
              +
              +          <code class="ruby">    end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="5" data-linenumber="31">
              +          <span class="hits">5</span>
              +
              +          <code class="ruby">    true</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="32">
              +
              +          <code class="ruby">  end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="33">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="34">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  before_destroy :check_permission</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="35">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  def allow_deletion!</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="missed" data-hits="0" data-linenumber="36">
              +
              +          <code class="ruby">    @allow_deletion = true</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="37">
              +
              +          <code class="ruby">  end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="38">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  def check_permission</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="3" data-linenumber="39">
              +          <span class="hits">3</span>
              +
              +          <code class="ruby">    throw(:abort) unless @allow_deletion || current_user_is_admin</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="40">
              +
              +          <code class="ruby">  end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="41">
              +
              +          <code class="ruby">end</code>
              +        </li>
              +      </div>
              +
              +  </ol>
              +</pre>
              + +

              </div>

              + +
                    <div class="source_table" id="e2b399ff4cb03119234857e9cb25162954a5e83c">
              +<div class="header">
              +  <h3>app/models/user.rb</h3>
              +  <h4>
              +    <span class="green">
              +100.0%
              + +

              </span>

              + +
                  lines covered
              +  </h4>
              +
              +  <div class="t-line-summary">
              +    <b>5</b> relevant lines.
              +    <span class="green"><b>5</b> lines covered</span> and
              +    <span class="red"><b>0</b> lines missed.</span>
              +  </div>
              +
              +</div>
              +
              +<pre>
              +  <ol>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="1">
              +
              +          <code class="ruby"># frozen_string_literal: true</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="2">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="3">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">class User &lt; ApplicationRecord</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="4">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  validates :full_name, presence: true</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="5">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  validates :role, presence: true</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="6">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="7">
              +
              +          <code class="ruby">  # Include default devise modules. Others available are:</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="8">
              +
              +          <code class="ruby">  # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="9">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  devise :database_authenticatable, :registerable,</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="10">
              +
              +          <code class="ruby">         :recoverable, :rememberable, :validatable</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="11">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="12">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  enum role: %i[administrator secretary professor student]</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="13">
              +
              +          <code class="ruby">end</code>
              +        </li>
              +      </div>
              +
              +  </ol>
              +</pre>
              + +

              </div>

              + +
                    <div class="source_table" id="bdfcf608d04c2f6ee92d45a5be8e6fe3aa4d3f9a">
              +<div class="header">
              +  <h3>config/application.rb</h3>
              +  <h4>
              +    <span class="green">
              +100.0%
              + +

              </span>

              + +
                  lines covered
              +  </h4>
              +
              +  <div class="t-line-summary">
              +    <b>6</b> relevant lines.
              +    <span class="green"><b>6</b> lines covered</span> and
              +    <span class="red"><b>0</b> lines missed.</span>
              +  </div>
              +
              +</div>
              +
              +<pre>
              +  <ol>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="1">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">require_relative &#39;boot&#39;</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="2">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="3">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">require &#39;rails/all&#39;</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="4">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="5">
              +
              +          <code class="ruby"># Require the gems listed in Gemfile, including any gems</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="6">
              +
              +          <code class="ruby"># you&#39;ve limited to :test, :development, or :production.</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="7">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">Bundler.require(*Rails.groups)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="8">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="9">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">module SecretariaPpgi</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="10">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  class Application &lt; Rails::Application</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="11">
              +
              +          <code class="ruby">    # Initialize configuration defaults for originally generated Rails version.</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="12">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">    config.load_defaults 5.2</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="13">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="14">
              +
              +          <code class="ruby">    # Settings in config/environments/* take precedence over those specified here.</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="15">
              +
              +          <code class="ruby">    # Application configuration can go into files in config/initializers</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="16">
              +
              +          <code class="ruby">    # -- all .rb files in that directory are automatically loaded after loading</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="17">
              +
              +          <code class="ruby">    # the framework and any gems in your application.</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="18">
              +
              +          <code class="ruby">  end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="19">
              +
              +          <code class="ruby">end</code>
              +        </li>
              +      </div>
              +
              +  </ol>
              +</pre>
              + +

              </div>

              + +
                    <div class="source_table" id="26abe61a60fa5268443e1e7b2ebe840427809124">
              +<div class="header">
              +  <h3>config/boot.rb</h3>
              +  <h4>
              +    <span class="green">
              +100.0%
              + +

              </span>

              + +
                  lines covered
              +  </h4>
              +
              +  <div class="t-line-summary">
              +    <b>3</b> relevant lines.
              +    <span class="green"><b>3</b> lines covered</span> and
              +    <span class="red"><b>0</b> lines missed.</span>
              +  </div>
              +
              +</div>
              +
              +<pre>
              +  <ol>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="1">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">ENV[&#39;BUNDLE_GEMFILE&#39;] ||= File.expand_path(&#39;../Gemfile&#39;, __dir__)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="2">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="3">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">require &#39;bundler/setup&#39; # Set up gems listed in the Gemfile.</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="4">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">require &#39;bootsnap/setup&#39; # Speed up boot time by caching expensive operations.</code>
              +        </li>
              +      </div>
              +
              +  </ol>
              +</pre>
              + +

              </div>

              + +
                    <div class="source_table" id="13777ff0718581b6c735c8733b575a818078d007">
              +<div class="header">
              +  <h3>config/environment.rb</h3>
              +  <h4>
              +    <span class="green">
              +100.0%
              + +

              </span>

              + +
                  lines covered
              +  </h4>
              +
              +  <div class="t-line-summary">
              +    <b>2</b> relevant lines.
              +    <span class="green"><b>2</b> lines covered</span> and
              +    <span class="red"><b>0</b> lines missed.</span>
              +  </div>
              +
              +</div>
              +
              +<pre>
              +  <ol>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="1">
              +
              +          <code class="ruby"># Load the Rails application.</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="2">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">require_relative &#39;application&#39;</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="3">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="4">
              +
              +          <code class="ruby"># Initialize the Rails application.</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="5">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">Rails.application.initialize!</code>
              +        </li>
              +      </div>
              +
              +  </ol>
              +</pre>
              + +

              </div>

              + +
                    <div class="source_table" id="d3d949569761045588fd7a105731d8d81b5fed88">
              +<div class="header">
              +  <h3>config/environments/test.rb</h3>
              +  <h4>
              +    <span class="green">
              +100.0%
              + +

              </span>

              + +
                  lines covered
              +  </h4>
              +
              +  <div class="t-line-summary">
              +    <b>13</b> relevant lines.
              +    <span class="green"><b>13</b> lines covered</span> and
              +    <span class="red"><b>0</b> lines missed.</span>
              +  </div>
              +
              +</div>
              +
              +<pre>
              +  <ol>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="1">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">Rails.application.configure do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="2">
              +
              +          <code class="ruby">  # Settings specified here will take precedence over those in config/application.rb.</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="3">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="4">
              +
              +          <code class="ruby">  # The test environment is used exclusively to run your application&#39;s</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="5">
              +
              +          <code class="ruby">  # test suite. You never need to work with it otherwise. Remember that</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="6">
              +
              +          <code class="ruby">  # your test database is &quot;scratch space&quot; for the test suite and is wiped</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="7">
              +
              +          <code class="ruby">  # and recreated between test runs. Don&#39;t rely on the data there!</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="8">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  config.cache_classes = true</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="9">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="10">
              +
              +          <code class="ruby">  # Do not eager load code on boot. This avoids loading your whole application</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="11">
              +
              +          <code class="ruby">  # just for the purpose of running a single test. If you are using a tool that</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="12">
              +
              +          <code class="ruby">  # preloads Rails for running tests, you may have to set it to true.</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="13">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  config.eager_load = false</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="14">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="15">
              +
              +          <code class="ruby">  # Configure public file server for tests with Cache-Control for performance.</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="16">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  config.public_file_server.enabled = true</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="17">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  config.public_file_server.headers = {</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="18">
              +
              +          <code class="ruby">    &#39;Cache-Control&#39; =&gt; &quot;public, max-age=#{1.hour.to_i}&quot;</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="19">
              +
              +          <code class="ruby">  }</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="20">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="21">
              +
              +          <code class="ruby">  # Show full error reports and disable caching.</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="22">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  config.consider_all_requests_local       = true</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="23">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  config.action_controller.perform_caching = false</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="24">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="25">
              +
              +          <code class="ruby">  # Raise exceptions instead of rendering exception templates.</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="26">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  config.action_dispatch.show_exceptions = false</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="27">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="28">
              +
              +          <code class="ruby">  # Disable request forgery protection in test environment.</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="29">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  config.action_controller.allow_forgery_protection = false</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="30">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="31">
              +
              +          <code class="ruby">  # Store uploaded files on the local file system in a temporary directory</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="32">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  config.active_storage.service = :test</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="33">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="34">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  config.action_mailer.perform_caching = false</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="35">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="36">
              +
              +          <code class="ruby">  # Tell Action Mailer not to deliver emails to the real world.</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="37">
              +
              +          <code class="ruby">  # The :test delivery method accumulates sent emails in the</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="38">
              +
              +          <code class="ruby">  # ActionMailer::Base.deliveries array.</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="39">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  config.action_mailer.delivery_method = :test</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="40">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="41">
              +
              +          <code class="ruby">  # Print deprecation notices to the stderr.</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="42">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  config.active_support.deprecation = :stderr</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="43">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="44">
              +
              +          <code class="ruby">  # Raises error for missing translations</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="45">
              +
              +          <code class="ruby">  # config.action_view.raise_on_missing_translations = true</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="46">
              +
              +          <code class="ruby">end</code>
              +        </li>
              +      </div>
              +
              +  </ol>
              +</pre>
              + +

              </div>

              + +
                    <div class="source_table" id="450a451aa30bdd5c2cdcd190ff8201da1d7409e7">
              +<div class="header">
              +  <h3>config/initializers/application_controller_renderer.rb</h3>
              +  <h4>
              +    <span class="green">
              +100.0%
              + +

              </span>

              + +
                  lines covered
              +  </h4>
              +
              +  <div class="t-line-summary">
              +    <b>0</b> relevant lines.
              +    <span class="green"><b>0</b> lines covered</span> and
              +    <span class="red"><b>0</b> lines missed.</span>
              +  </div>
              +
              +</div>
              +
              +<pre>
              +  <ol>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="1">
              +
              +          <code class="ruby"># Be sure to restart your server when you modify this file.</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="2">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="3">
              +
              +          <code class="ruby"># ActiveSupport::Reloader.to_prepare do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="4">
              +
              +          <code class="ruby">#   ApplicationController.renderer.defaults.merge!(</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="5">
              +
              +          <code class="ruby">#     http_host: &#39;example.org&#39;,</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="6">
              +
              +          <code class="ruby">#     https: false</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="7">
              +
              +          <code class="ruby">#   )</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="8">
              +
              +          <code class="ruby"># end</code>
              +        </li>
              +      </div>
              +
              +  </ol>
              +</pre>
              + +

              </div>

              + +
                    <div class="source_table" id="68cd0e28f3c9800fd4f4eb82ca5f3986b2445543">
              +<div class="header">
              +  <h3>config/initializers/assets.rb</h3>
              +  <h4>
              +    <span class="green">
              +100.0%
              + +

              </span>

              + +
                  lines covered
              +  </h4>
              +
              +  <div class="t-line-summary">
              +    <b>2</b> relevant lines.
              +    <span class="green"><b>2</b> lines covered</span> and
              +    <span class="red"><b>0</b> lines missed.</span>
              +  </div>
              +
              +</div>
              +
              +<pre>
              +  <ol>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="1">
              +
              +          <code class="ruby"># Be sure to restart your server when you modify this file.</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="2">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="3">
              +
              +          <code class="ruby"># Version of your assets, change this if you want to expire all your assets.</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="4">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">Rails.application.config.assets.version = &#39;1.0&#39;</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="5">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="6">
              +
              +          <code class="ruby"># Add additional assets to the asset load path.</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="7">
              +
              +          <code class="ruby"># Rails.application.config.assets.paths &lt;&lt; Emoji.images_path</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="8">
              +
              +          <code class="ruby"># Add Yarn node_modules folder to the asset load path.</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="9">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">Rails.application.config.assets.paths &lt;&lt; Rails.root.join(&#39;node_modules&#39;)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="10">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="11">
              +
              +          <code class="ruby"># Precompile additional assets.</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="12">
              +
              +          <code class="ruby"># application.js, application.css, and all non-JS/CSS in the app/assets</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="13">
              +
              +          <code class="ruby"># folder are already added.</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="14">
              +
              +          <code class="ruby"># Rails.application.config.assets.precompile += %w( admin.js admin.css )</code>
              +        </li>
              +      </div>
              +
              +  </ol>
              +</pre>
              + +

              </div>

              + +
                    <div class="source_table" id="e31e100fdc3913d2e7aa64e866e85f71383530dc">
              +<div class="header">
              +  <h3>config/initializers/backtrace_silencers.rb</h3>
              +  <h4>
              +    <span class="green">
              +100.0%
              + +

              </span>

              + +
                  lines covered
              +  </h4>
              +
              +  <div class="t-line-summary">
              +    <b>0</b> relevant lines.
              +    <span class="green"><b>0</b> lines covered</span> and
              +    <span class="red"><b>0</b> lines missed.</span>
              +  </div>
              +
              +</div>
              +
              +<pre>
              +  <ol>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="1">
              +
              +          <code class="ruby"># Be sure to restart your server when you modify this file.</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="2">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="3">
              +
              +          <code class="ruby"># You can add backtrace silencers for libraries that you&#39;re using but don&#39;t wish to see in your backtraces.</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="4">
              +
              +          <code class="ruby"># Rails.backtrace_cleaner.add_silencer { |line| line =~ /my_noisy_library/ }</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="5">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="6">
              +
              +          <code class="ruby"># You can also remove all the silencers if you&#39;re trying to debug a problem that might stem from framework code.</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="7">
              +
              +          <code class="ruby"># Rails.backtrace_cleaner.remove_silencers!</code>
              +        </li>
              +      </div>
              +
              +  </ol>
              +</pre>
              + +

              </div>

              + +
                    <div class="source_table" id="b7e86e1626128dc235651ee2ec52bb9217e8c3e4">
              +<div class="header">
              +  <h3>config/initializers/content_security_policy.rb</h3>
              +  <h4>
              +    <span class="green">
              +100.0%
              + +

              </span>

              + +
                  lines covered
              +  </h4>
              +
              +  <div class="t-line-summary">
              +    <b>0</b> relevant lines.
              +    <span class="green"><b>0</b> lines covered</span> and
              +    <span class="red"><b>0</b> lines missed.</span>
              +  </div>
              +
              +</div>
              +
              +<pre>
              +  <ol>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="1">
              +
              +          <code class="ruby"># Be sure to restart your server when you modify this file.</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="2">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="3">
              +
              +          <code class="ruby"># Define an application-wide content security policy</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="4">
              +
              +          <code class="ruby"># For further information see the following documentation</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="5">
              +
              +          <code class="ruby"># https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="6">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="7">
              +
              +          <code class="ruby"># Rails.application.config.content_security_policy do |policy|</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="8">
              +
              +          <code class="ruby">#   policy.default_src :self, :https</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="9">
              +
              +          <code class="ruby">#   policy.font_src    :self, :https, :data</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="10">
              +
              +          <code class="ruby">#   policy.img_src     :self, :https, :data</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="11">
              +
              +          <code class="ruby">#   policy.object_src  :none</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="12">
              +
              +          <code class="ruby">#   policy.script_src  :self, :https</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="13">
              +
              +          <code class="ruby">#   policy.style_src   :self, :https</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="14">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="15">
              +
              +          <code class="ruby">#   # Specify URI for violation reports</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="16">
              +
              +          <code class="ruby">#   # policy.report_uri &quot;/csp-violation-report-endpoint&quot;</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="17">
              +
              +          <code class="ruby"># end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="18">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="19">
              +
              +          <code class="ruby"># If you are using UJS then enable automatic nonce generation</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="20">
              +
              +          <code class="ruby"># Rails.application.config.content_security_policy_nonce_generator = -&gt; request { SecureRandom.base64(16) }</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="21">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="22">
              +
              +          <code class="ruby"># Report CSP violations to a specified URI</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="23">
              +
              +          <code class="ruby"># For further information see the following documentation:</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="24">
              +
              +          <code class="ruby"># https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy-Report-Only</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="25">
              +
              +          <code class="ruby"># Rails.application.config.content_security_policy_report_only = true</code>
              +        </li>
              +      </div>
              +
              +  </ol>
              +</pre>
              + +

              </div>

              + +
                    <div class="source_table" id="c0abe4170bd391a72ed6987f568ae3852d862495">
              +<div class="header">
              +  <h3>config/initializers/cookies_serializer.rb</h3>
              +  <h4>
              +    <span class="green">
              +100.0%
              + +

              </span>

              + +
                  lines covered
              +  </h4>
              +
              +  <div class="t-line-summary">
              +    <b>1</b> relevant lines.
              +    <span class="green"><b>1</b> lines covered</span> and
              +    <span class="red"><b>0</b> lines missed.</span>
              +  </div>
              +
              +</div>
              +
              +<pre>
              +  <ol>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="1">
              +
              +          <code class="ruby"># Be sure to restart your server when you modify this file.</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="2">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="3">
              +
              +          <code class="ruby"># Specify a serializer for the signed and encrypted cookie jars.</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="4">
              +
              +          <code class="ruby"># Valid options are :json, :marshal, and :hybrid.</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="5">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">Rails.application.config.action_dispatch.cookies_serializer = :json</code>
              +        </li>
              +      </div>
              +
              +  </ol>
              +</pre>
              + +

              </div>

              + +
                    <div class="source_table" id="a4226c0fa4f931c3f16324d648e48dc9136658c1">
              +<div class="header">
              +  <h3>config/initializers/devise.rb</h3>
              +  <h4>
              +    <span class="green">
              +100.0%
              + +

              </span>

              + +
                  lines covered
              +  </h4>
              +
              +  <div class="t-line-summary">
              +    <b>13</b> relevant lines.
              +    <span class="green"><b>13</b> lines covered</span> and
              +    <span class="red"><b>0</b> lines missed.</span>
              +  </div>
              +
              +</div>
              +
              +<pre>
              +  <ol>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="1">
              +
              +          <code class="ruby"># frozen_string_literal: true</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="2">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="3">
              +
              +          <code class="ruby"># Use this hook to configure devise mailer, warden hooks and so forth.</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="4">
              +
              +          <code class="ruby"># Many of these configuration options can be set straight in your model.</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="5">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">Devise.setup do |config|</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="6">
              +
              +          <code class="ruby">  # The secret key used by Devise. Devise uses this key to generate</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="7">
              +
              +          <code class="ruby">  # random tokens. Changing this key will render invalid all existing</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="8">
              +
              +          <code class="ruby">  # confirmation, reset password and unlock tokens in the database.</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="9">
              +
              +          <code class="ruby">  # Devise will use the `secret_key_base` as its `secret_key`</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="10">
              +
              +          <code class="ruby">  # by default. You can change it below and use your own secret key.</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="11">
              +
              +          <code class="ruby">  # config.secret_key = &#39;53c9f741be418fcb535205b1faaad3062f2fb772dcf8b618c3fe37a03164092b11cce7e2fd0b2f88d17ebece35eac91546f6f987a3c739ff3681aa5721b55f8a&#39;</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="12">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="13">
              +
              +          <code class="ruby">  # ==&gt; Controller configuration</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="14">
              +
              +          <code class="ruby">  # Configure the parent class to the devise controllers.</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="15">
              +
              +          <code class="ruby">  # config.parent_controller = &#39;DeviseController&#39;</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="16">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="17">
              +
              +          <code class="ruby">  # ==&gt; Mailer Configuration</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="18">
              +
              +          <code class="ruby">  # Configure the e-mail address which will be shown in Devise::Mailer,</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="19">
              +
              +          <code class="ruby">  # note that it will be overwritten if you use your own mailer class</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="20">
              +
              +          <code class="ruby">  # with default &quot;from&quot; parameter.</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="21">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  config.mailer_sender = &#39;please-change-me-at-config-initializers-devise@example.com&#39;</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="22">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="23">
              +
              +          <code class="ruby">  # Configure the class responsible to send e-mails.</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="24">
              +
              +          <code class="ruby">  # config.mailer = &#39;Devise::Mailer&#39;</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="25">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="26">
              +
              +          <code class="ruby">  # Configure the parent class responsible to send e-mails.</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="27">
              +
              +          <code class="ruby">  # config.parent_mailer = &#39;ActionMailer::Base&#39;</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="28">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="29">
              +
              +          <code class="ruby">  # ==&gt; ORM configuration</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="30">
              +
              +          <code class="ruby">  # Load and configure the ORM. Supports :active_record (default) and</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="31">
              +
              +          <code class="ruby">  # :mongoid (bson_ext recommended) by default. Other ORMs may be</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="32">
              +
              +          <code class="ruby">  # available as additional gems.</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="33">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  require &#39;devise/orm/active_record&#39;</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="34">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="35">
              +
              +          <code class="ruby">  # ==&gt; Configuration for any authentication mechanism</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="36">
              +
              +          <code class="ruby">  # Configure which keys are used when authenticating a user. The default is</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="37">
              +
              +          <code class="ruby">  # just :email. You can configure it to use [:username, :subdomain], so for</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="38">
              +
              +          <code class="ruby">  # authenticating a user, both parameters are required. Remember that those</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="39">
              +
              +          <code class="ruby">  # parameters are used only when authenticating and not when retrieving from</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="40">
              +
              +          <code class="ruby">  # session. If you need permissions, you should implement that in a before filter.</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="41">
              +
              +          <code class="ruby">  # You can also supply a hash where the value is a boolean determining whether</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="42">
              +
              +          <code class="ruby">  # or not authentication should be aborted when the value is not present.</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="43">
              +
              +          <code class="ruby">  # config.authentication_keys = [:email]</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="44">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="45">
              +
              +          <code class="ruby">  # Configure parameters from the request object used for authentication. Each entry</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="46">
              +
              +          <code class="ruby">  # given should be a request method and it will automatically be passed to the</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="47">
              +
              +          <code class="ruby">  # find_for_authentication method and considered in your model lookup. For instance,</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="48">
              +
              +          <code class="ruby">  # if you set :request_keys to [:subdomain], :subdomain will be used on authentication.</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="49">
              +
              +          <code class="ruby">  # The same considerations mentioned for authentication_keys also apply to request_keys.</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="50">
              +
              +          <code class="ruby">  # config.request_keys = []</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="51">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="52">
              +
              +          <code class="ruby">  # Configure which authentication keys should be case-insensitive.</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="53">
              +
              +          <code class="ruby">  # These keys will be downcased upon creating or modifying a user and when used</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="54">
              +
              +          <code class="ruby">  # to authenticate or find a user. Default is :email.</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="55">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  config.case_insensitive_keys = [:email]</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="56">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="57">
              +
              +          <code class="ruby">  # Configure which authentication keys should have whitespace stripped.</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="58">
              +
              +          <code class="ruby">  # These keys will have whitespace before and after removed upon creating or</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="59">
              +
              +          <code class="ruby">  # modifying a user and when used to authenticate or find a user. Default is :email.</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="60">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  config.strip_whitespace_keys = [:email]</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="61">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="62">
              +
              +          <code class="ruby">  # Tell if authentication through request.params is enabled. True by default.</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="63">
              +
              +          <code class="ruby">  # It can be set to an array that will enable params authentication only for the</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="64">
              +
              +          <code class="ruby">  # given strategies, for example, `config.params_authenticatable = [:database]` will</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="65">
              +
              +          <code class="ruby">  # enable it only for database (email + password) authentication.</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="66">
              +
              +          <code class="ruby">  # config.params_authenticatable = true</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="67">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="68">
              +
              +          <code class="ruby">  # Tell if authentication through HTTP Auth is enabled. False by default.</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="69">
              +
              +          <code class="ruby">  # It can be set to an array that will enable http authentication only for the</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="70">
              +
              +          <code class="ruby">  # given strategies, for example, `config.http_authenticatable = [:database]` will</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="71">
              +
              +          <code class="ruby">  # enable it only for database authentication. The supported strategies are:</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="72">
              +
              +          <code class="ruby">  # :database      = Support basic authentication with authentication key + password</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="73">
              +
              +          <code class="ruby">  # config.http_authenticatable = false</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="74">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="75">
              +
              +          <code class="ruby">  # If 401 status code should be returned for AJAX requests. True by default.</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="76">
              +
              +          <code class="ruby">  # config.http_authenticatable_on_xhr = true</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="77">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="78">
              +
              +          <code class="ruby">  # The realm used in Http Basic Authentication. &#39;Application&#39; by default.</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="79">
              +
              +          <code class="ruby">  # config.http_authentication_realm = &#39;Application&#39;</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="80">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="81">
              +
              +          <code class="ruby">  # It will change confirmation, password recovery and other workflows</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="82">
              +
              +          <code class="ruby">  # to behave the same regardless if the e-mail provided was right or wrong.</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="83">
              +
              +          <code class="ruby">  # Does not affect registerable.</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="84">
              +
              +          <code class="ruby">  # config.paranoid = true</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="85">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="86">
              +
              +          <code class="ruby">  # By default Devise will store the user in session. You can skip storage for</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="87">
              +
              +          <code class="ruby">  # particular strategies by setting this option.</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="88">
              +
              +          <code class="ruby">  # Notice that if you are skipping storage for all authentication paths, you</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="89">
              +
              +          <code class="ruby">  # may want to disable generating routes to Devise&#39;s sessions controller by</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="90">
              +
              +          <code class="ruby">  # passing skip: :sessions to `devise_for` in your config/routes.rb</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="91">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  config.skip_session_storage = [:http_auth]</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="92">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="93">
              +
              +          <code class="ruby">  # By default, Devise cleans up the CSRF token on authentication to</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="94">
              +
              +          <code class="ruby">  # avoid CSRF token fixation attacks. This means that, when using AJAX</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="95">
              +
              +          <code class="ruby">  # requests for sign in and sign up, you need to get a new CSRF token</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="96">
              +
              +          <code class="ruby">  # from the server. You can disable this option at your own risk.</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="97">
              +
              +          <code class="ruby">  # config.clean_up_csrf_token_on_authentication = true</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="98">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="99">
              +
              +          <code class="ruby">  # When false, Devise will not attempt to reload routes on eager load.</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="100">
              +
              +          <code class="ruby">  # This can reduce the time taken to boot the app but if your application</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="101">
              +
              +          <code class="ruby">  # requires the Devise mappings to be loaded during boot time the application</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="102">
              +
              +          <code class="ruby">  # won&#39;t boot properly.</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="103">
              +
              +          <code class="ruby">  # config.reload_routes = true</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="104">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="105">
              +
              +          <code class="ruby">  # ==&gt; Configuration for :database_authenticatable</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="106">
              +
              +          <code class="ruby">  # For bcrypt, this is the cost for hashing the password and defaults to 11. If</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="107">
              +
              +          <code class="ruby">  # using other algorithms, it sets how many times you want the password to be hashed.</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="108">
              +
              +          <code class="ruby">  #</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="109">
              +
              +          <code class="ruby">  # Limiting the stretches to just one in testing will increase the performance of</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="110">
              +
              +          <code class="ruby">  # your test suite dramatically. However, it is STRONGLY RECOMMENDED to not use</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="111">
              +
              +          <code class="ruby">  # a value less than 10 in other environments. Note that, for bcrypt (the default</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="112">
              +
              +          <code class="ruby">  # algorithm), the cost increases exponentially with the number of stretches (e.g.</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="113">
              +
              +          <code class="ruby">  # a value of 20 is already extremely slow: approx. 60 seconds for 1 calculation).</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="114">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  config.stretches = Rails.env.test? ? 1 : 11</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="115">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="116">
              +
              +          <code class="ruby">  # Set up a pepper to generate the hashed password.</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="117">
              +
              +          <code class="ruby">  # config.pepper = &#39;30f4c027405b92d0b7d5f25895b625a97791988e1867e0b79fb3d5c05b0ffff2ace19181de61c481bdb477e1c2fff8be2203afd78336ce261b97e9296f2259e9&#39;</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="118">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="119">
              +
              +          <code class="ruby">  # Send a notification to the original email when the user&#39;s email is changed.</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="120">
              +
              +          <code class="ruby">  # config.send_email_changed_notification = false</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="121">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="122">
              +
              +          <code class="ruby">  # Send a notification email when the user&#39;s password is changed.</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="123">
              +
              +          <code class="ruby">  # config.send_password_change_notification = false</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="124">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="125">
              +
              +          <code class="ruby">  # ==&gt; Configuration for :confirmable</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="126">
              +
              +          <code class="ruby">  # A period that the user is allowed to access the website even without</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="127">
              +
              +          <code class="ruby">  # confirming their account. For instance, if set to 2.days, the user will be</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="128">
              +
              +          <code class="ruby">  # able to access the website for two days without confirming their account,</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="129">
              +
              +          <code class="ruby">  # access will be blocked just in the third day.</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="130">
              +
              +          <code class="ruby">  # You can also set it to nil, which will allow the user to access the website</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="131">
              +
              +          <code class="ruby">  # without confirming their account.</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="132">
              +
              +          <code class="ruby">  # Default is 0.days, meaning the user cannot access the website without</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="133">
              +
              +          <code class="ruby">  # confirming their account.</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="134">
              +
              +          <code class="ruby">  # config.allow_unconfirmed_access_for = 2.days</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="135">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="136">
              +
              +          <code class="ruby">  # A period that the user is allowed to confirm their account before their</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="137">
              +
              +          <code class="ruby">  # token becomes invalid. For example, if set to 3.days, the user can confirm</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="138">
              +
              +          <code class="ruby">  # their account within 3 days after the mail was sent, but on the fourth day</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="139">
              +
              +          <code class="ruby">  # their account can&#39;t be confirmed with the token any more.</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="140">
              +
              +          <code class="ruby">  # Default is nil, meaning there is no restriction on how long a user can take</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="141">
              +
              +          <code class="ruby">  # before confirming their account.</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="142">
              +
              +          <code class="ruby">  # config.confirm_within = 3.days</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="143">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="144">
              +
              +          <code class="ruby">  # If true, requires any email changes to be confirmed (exactly the same way as</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="145">
              +
              +          <code class="ruby">  # initial account confirmation) to be applied. Requires additional unconfirmed_email</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="146">
              +
              +          <code class="ruby">  # db field (see migrations). Until confirmed, new email is stored in</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="147">
              +
              +          <code class="ruby">  # unconfirmed_email column, and copied to email column on successful confirmation.</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="148">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  config.reconfirmable = true</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="149">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="150">
              +
              +          <code class="ruby">  # Defines which key will be used when confirming an account</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="151">
              +
              +          <code class="ruby">  # config.confirmation_keys = [:email]</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="152">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="153">
              +
              +          <code class="ruby">  # ==&gt; Configuration for :rememberable</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="154">
              +
              +          <code class="ruby">  # The time the user will be remembered without asking for credentials again.</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="155">
              +
              +          <code class="ruby">  # config.remember_for = 2.weeks</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="156">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="157">
              +
              +          <code class="ruby">  # Invalidates all the remember me tokens when the user signs out.</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="158">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  config.expire_all_remember_me_on_sign_out = true</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="159">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="160">
              +
              +          <code class="ruby">  # If true, extends the user&#39;s remember period when remembered via cookie.</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="161">
              +
              +          <code class="ruby">  # config.extend_remember_period = false</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="162">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="163">
              +
              +          <code class="ruby">  # Options to be passed to the created cookie. For instance, you can set</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="164">
              +
              +          <code class="ruby">  # secure: true in order to force SSL only cookies.</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="165">
              +
              +          <code class="ruby">  # config.rememberable_options = {}</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="166">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="167">
              +
              +          <code class="ruby">  # ==&gt; Configuration for :validatable</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="168">
              +
              +          <code class="ruby">  # Range for password length.</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="169">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  config.password_length = 6..128</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="170">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="171">
              +
              +          <code class="ruby">  # Email regex used to validate email formats. It simply asserts that</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="172">
              +
              +          <code class="ruby">  # one (and only one) @ exists in the given string. This is mainly</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="173">
              +
              +          <code class="ruby">  # to give user feedback and not to assert the e-mail validity.</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="174">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  config.email_regexp = /\A[^@\s]+@[^@\s]+\z/</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="175">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="176">
              +
              +          <code class="ruby">  # ==&gt; Configuration for :timeoutable</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="177">
              +
              +          <code class="ruby">  # The time you want to timeout the user session without activity. After this</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="178">
              +
              +          <code class="ruby">  # time the user will be asked for credentials again. Default is 30 minutes.</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="179">
              +
              +          <code class="ruby">  # config.timeout_in = 30.minutes</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="180">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="181">
              +
              +          <code class="ruby">  # ==&gt; Configuration for :lockable</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="182">
              +
              +          <code class="ruby">  # Defines which strategy will be used to lock an account.</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="183">
              +
              +          <code class="ruby">  # :failed_attempts = Locks an account after a number of failed attempts to sign in.</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="184">
              +
              +          <code class="ruby">  # :none            = No lock strategy. You should handle locking by yourself.</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="185">
              +
              +          <code class="ruby">  # config.lock_strategy = :failed_attempts</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="186">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="187">
              +
              +          <code class="ruby">  # Defines which key will be used when locking and unlocking an account</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="188">
              +
              +          <code class="ruby">  # config.unlock_keys = [:email]</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="189">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="190">
              +
              +          <code class="ruby">  # Defines which strategy will be used to unlock an account.</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="191">
              +
              +          <code class="ruby">  # :email = Sends an unlock link to the user email</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="192">
              +
              +          <code class="ruby">  # :time  = Re-enables login after a certain amount of time (see :unlock_in below)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="193">
              +
              +          <code class="ruby">  # :both  = Enables both strategies</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="194">
              +
              +          <code class="ruby">  # :none  = No unlock strategy. You should handle unlocking by yourself.</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="195">
              +
              +          <code class="ruby">  # config.unlock_strategy = :both</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="196">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="197">
              +
              +          <code class="ruby">  # Number of authentication tries before locking an account if lock_strategy</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="198">
              +
              +          <code class="ruby">  # is failed attempts.</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="199">
              +
              +          <code class="ruby">  # config.maximum_attempts = 20</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="200">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="201">
              +
              +          <code class="ruby">  # Time interval to unlock the account if :time is enabled as unlock_strategy.</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="202">
              +
              +          <code class="ruby">  # config.unlock_in = 1.hour</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="203">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="204">
              +
              +          <code class="ruby">  # Warn on the last attempt before the account is locked.</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="205">
              +
              +          <code class="ruby">  # config.last_attempt_warning = true</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="206">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="207">
              +
              +          <code class="ruby">  # ==&gt; Configuration for :recoverable</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="208">
              +
              +          <code class="ruby">  #</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="209">
              +
              +          <code class="ruby">  # Defines which key will be used when recovering the password for an account</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="210">
              +
              +          <code class="ruby">  # config.reset_password_keys = [:email]</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="211">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="212">
              +
              +          <code class="ruby">  # Time interval you can reset your password with a reset password key.</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="213">
              +
              +          <code class="ruby">  # Don&#39;t put a too small interval or your users won&#39;t have the time to</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="214">
              +
              +          <code class="ruby">  # change their passwords.</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="215">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  config.reset_password_within = 6.hours</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="216">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="217">
              +
              +          <code class="ruby">  # When set to false, does not sign a user in automatically after their password is</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="218">
              +
              +          <code class="ruby">  # reset. Defaults to true, so a user is signed in automatically after a reset.</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="219">
              +
              +          <code class="ruby">  # config.sign_in_after_reset_password = true</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="220">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="221">
              +
              +          <code class="ruby">  # ==&gt; Configuration for :encryptable</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="222">
              +
              +          <code class="ruby">  # Allow you to use another hashing or encryption algorithm besides bcrypt (default).</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="223">
              +
              +          <code class="ruby">  # You can use :sha1, :sha512 or algorithms from others authentication tools as</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="224">
              +
              +          <code class="ruby">  # :clearance_sha1, :authlogic_sha512 (then you should set stretches above to 20</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="225">
              +
              +          <code class="ruby">  # for default behavior) and :restful_authentication_sha1 (then you should set</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="226">
              +
              +          <code class="ruby">  # stretches to 10, and copy REST_AUTH_SITE_KEY to pepper).</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="227">
              +
              +          <code class="ruby">  #</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="228">
              +
              +          <code class="ruby">  # Require the `devise-encryptable` gem when using anything other than bcrypt</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="229">
              +
              +          <code class="ruby">  # config.encryptor = :sha512</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="230">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="231">
              +
              +          <code class="ruby">  # ==&gt; Scopes configuration</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="232">
              +
              +          <code class="ruby">  # Turn scoped views on. Before rendering &quot;sessions/new&quot;, it will first check for</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="233">
              +
              +          <code class="ruby">  # &quot;users/sessions/new&quot;. It&#39;s turned off by default because it&#39;s slower if you</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="234">
              +
              +          <code class="ruby">  # are using only default views.</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="235">
              +
              +          <code class="ruby">  # config.scoped_views = false</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="236">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="237">
              +
              +          <code class="ruby">  # Configure the default scope given to Warden. By default it&#39;s the first</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="238">
              +
              +          <code class="ruby">  # devise role declared in your routes (usually :user).</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="239">
              +
              +          <code class="ruby">  # config.default_scope = :user</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="240">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="241">
              +
              +          <code class="ruby">  # Set this configuration to false if you want /users/sign_out to sign out</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="242">
              +
              +          <code class="ruby">  # only the current scope. By default, Devise signs out all scopes.</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="243">
              +
              +          <code class="ruby">  # config.sign_out_all_scopes = true</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="244">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="245">
              +
              +          <code class="ruby">  # ==&gt; Navigation configuration</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="246">
              +
              +          <code class="ruby">  # Lists the formats that should be treated as navigational. Formats like</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="247">
              +
              +          <code class="ruby">  # :html, should redirect to the sign in page when the user does not have</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="248">
              +
              +          <code class="ruby">  # access, but formats like :xml or :json, should return 401.</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="249">
              +
              +          <code class="ruby">  #</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="250">
              +
              +          <code class="ruby">  # If you have any extra navigational formats, like :iphone or :mobile, you</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="251">
              +
              +          <code class="ruby">  # should add them to the navigational formats lists.</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="252">
              +
              +          <code class="ruby">  #</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="253">
              +
              +          <code class="ruby">  # The &quot;*/*&quot; below is required to match Internet Explorer requests.</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="254">
              +
              +          <code class="ruby">  # config.navigational_formats = [&#39;*/*&#39;, :html]</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="255">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="256">
              +
              +          <code class="ruby">  # The default HTTP method used to sign out a resource. Default is :delete.</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="257">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  config.sign_out_via = :delete</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="258">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="259">
              +
              +          <code class="ruby">  # ==&gt; OmniAuth</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="260">
              +
              +          <code class="ruby">  # Add a new OmniAuth provider. Check the wiki for more information on setting</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="261">
              +
              +          <code class="ruby">  # up on your models and hooks.</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="262">
              +
              +          <code class="ruby">  # config.omniauth :github, &#39;APP_ID&#39;, &#39;APP_SECRET&#39;, scope: &#39;user,public_repo&#39;</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="263">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="264">
              +
              +          <code class="ruby">  # ==&gt; Warden configuration</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="265">
              +
              +          <code class="ruby">  # If you want to use other strategies, that are not supported by Devise, or</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="266">
              +
              +          <code class="ruby">  # change the failure app, you can configure them inside the config.warden block.</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="267">
              +
              +          <code class="ruby">  #</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="268">
              +
              +          <code class="ruby">  # config.warden do |manager|</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="269">
              +
              +          <code class="ruby">  #   manager.intercept_401 = false</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="270">
              +
              +          <code class="ruby">  #   manager.default_strategies(scope: :user).unshift :some_external_strategy</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="271">
              +
              +          <code class="ruby">  # end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="272">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="273">
              +
              +          <code class="ruby">  # ==&gt; Mountable engine configurations</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="274">
              +
              +          <code class="ruby">  # When using Devise inside an engine, let&#39;s call it `MyEngine`, and this engine</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="275">
              +
              +          <code class="ruby">  # is mountable, there are some extra configurations to be taken into account.</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="276">
              +
              +          <code class="ruby">  # The following options are available, assuming the engine is mounted as:</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="277">
              +
              +          <code class="ruby">  #</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="278">
              +
              +          <code class="ruby">  #     mount MyEngine, at: &#39;/my_engine&#39;</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="279">
              +
              +          <code class="ruby">  #</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="280">
              +
              +          <code class="ruby">  # The router that invoked `devise_for`, in the example above, would be:</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="281">
              +
              +          <code class="ruby">  # config.router_name = :my_engine</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="282">
              +
              +          <code class="ruby">  #</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="283">
              +
              +          <code class="ruby">  # When using OmniAuth, Devise cannot automatically set OmniAuth path,</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="284">
              +
              +          <code class="ruby">  # so you need to do it manually. For the users scope, it would be:</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="285">
              +
              +          <code class="ruby">  # config.omniauth_path_prefix = &#39;/my_engine/users/auth&#39;</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="286">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="287">
              +
              +          <code class="ruby">  # ==&gt; Turbolinks configuration</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="288">
              +
              +          <code class="ruby">  # If your app is using Turbolinks, Turbolinks::Controller needs to be included to make redirection work correctly:</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="289">
              +
              +          <code class="ruby">  #</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="290">
              +
              +          <code class="ruby">  # ActiveSupport.on_load(:devise_failure_app) do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="291">
              +
              +          <code class="ruby">  #   include Turbolinks::Controller</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="292">
              +
              +          <code class="ruby">  # end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="293">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="294">
              +
              +          <code class="ruby">  # ==&gt; Configuration for :registerable</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="295">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="296">
              +
              +          <code class="ruby">  # When set to false, does not sign a user in automatically after their password is</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="297">
              +
              +          <code class="ruby">  # changed. Defaults to true, so a user is signed in automatically after changing a password.</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="298">
              +
              +          <code class="ruby">  # config.sign_in_after_change_password = true</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="299">
              +
              +          <code class="ruby">end</code>
              +        </li>
              +      </div>
              +
              +  </ol>
              +</pre>
              + +

              </div>

              + +
                    <div class="source_table" id="43bb181e945eb6f41f50f0a07673b64086aa6eba">
              +<div class="header">
              +  <h3>config/initializers/filter_parameter_logging.rb</h3>
              +  <h4>
              +    <span class="green">
              +100.0%
              + +

              </span>

              + +
                  lines covered
              +  </h4>
              +
              +  <div class="t-line-summary">
              +    <b>1</b> relevant lines.
              +    <span class="green"><b>1</b> lines covered</span> and
              +    <span class="red"><b>0</b> lines missed.</span>
              +  </div>
              +
              +</div>
              +
              +<pre>
              +  <ol>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="1">
              +
              +          <code class="ruby"># Be sure to restart your server when you modify this file.</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="2">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="3">
              +
              +          <code class="ruby"># Configure sensitive parameters which will be filtered from the log file.</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="4">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">Rails.application.config.filter_parameters += [:password]</code>
              +        </li>
              +      </div>
              +
              +  </ol>
              +</pre>
              + +

              </div>

              + +
                    <div class="source_table" id="65c4b6b4ddc9b05584b5344d5e5cb3df7fb1f988">
              +<div class="header">
              +  <h3>config/initializers/inflections.rb</h3>
              +  <h4>
              +    <span class="green">
              +100.0%
              + +

              </span>

              + +
                  lines covered
              +  </h4>
              +
              +  <div class="t-line-summary">
              +    <b>0</b> relevant lines.
              +    <span class="green"><b>0</b> lines covered</span> and
              +    <span class="red"><b>0</b> lines missed.</span>
              +  </div>
              +
              +</div>
              +
              +<pre>
              +  <ol>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="1">
              +
              +          <code class="ruby"># Be sure to restart your server when you modify this file.</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="2">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="3">
              +
              +          <code class="ruby"># Add new inflection rules using the following format. Inflections</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="4">
              +
              +          <code class="ruby"># are locale specific, and you may define rules for as many different</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="5">
              +
              +          <code class="ruby"># locales as you wish. All of these examples are active by default:</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="6">
              +
              +          <code class="ruby"># ActiveSupport::Inflector.inflections(:en) do |inflect|</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="7">
              +
              +          <code class="ruby">#   inflect.plural /^(ox)$/i, &#39;\1en&#39;</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="8">
              +
              +          <code class="ruby">#   inflect.singular /^(ox)en/i, &#39;\1&#39;</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="9">
              +
              +          <code class="ruby">#   inflect.irregular &#39;person&#39;, &#39;people&#39;</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="10">
              +
              +          <code class="ruby">#   inflect.uncountable %w( fish sheep )</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="11">
              +
              +          <code class="ruby"># end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="12">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="13">
              +
              +          <code class="ruby"># These inflection rules are supported but not enabled by default:</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="14">
              +
              +          <code class="ruby"># ActiveSupport::Inflector.inflections(:en) do |inflect|</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="15">
              +
              +          <code class="ruby">#   inflect.acronym &#39;RESTful&#39;</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="16">
              +
              +          <code class="ruby"># end</code>
              +        </li>
              +      </div>
              +
              +  </ol>
              +</pre>
              + +

              </div>

              + +
                    <div class="source_table" id="0c5f5376d7841eec96e0aab825e79e110c7f4050">
              +<div class="header">
              +  <h3>config/initializers/mime_types.rb</h3>
              +  <h4>
              +    <span class="green">
              +100.0%
              + +

              </span>

              + +
                  lines covered
              +  </h4>
              +
              +  <div class="t-line-summary">
              +    <b>0</b> relevant lines.
              +    <span class="green"><b>0</b> lines covered</span> and
              +    <span class="red"><b>0</b> lines missed.</span>
              +  </div>
              +
              +</div>
              +
              +<pre>
              +  <ol>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="1">
              +
              +          <code class="ruby"># Be sure to restart your server when you modify this file.</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="2">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="3">
              +
              +          <code class="ruby"># Add new mime types for use in respond_to blocks:</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="4">
              +
              +          <code class="ruby"># Mime::Type.register &quot;text/richtext&quot;, :rtf</code>
              +        </li>
              +      </div>
              +
              +  </ol>
              +</pre>
              + +

              </div>

              + +
                    <div class="source_table" id="51a75c94a43a24fc77fd56fe028d7f4ef963b193">
              +<div class="header">
              +  <h3>config/initializers/wrap_parameters.rb</h3>
              +  <h4>
              +    <span class="green">
              +100.0%
              + +

              </span>

              + +
                  lines covered
              +  </h4>
              +
              +  <div class="t-line-summary">
              +    <b>2</b> relevant lines.
              +    <span class="green"><b>2</b> lines covered</span> and
              +    <span class="red"><b>0</b> lines missed.</span>
              +  </div>
              +
              +</div>
              +
              +<pre>
              +  <ol>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="1">
              +
              +          <code class="ruby"># Be sure to restart your server when you modify this file.</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="2">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="3">
              +
              +          <code class="ruby"># This file contains settings for ActionController::ParamsWrapper which</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="4">
              +
              +          <code class="ruby"># is enabled by default.</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="5">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="6">
              +
              +          <code class="ruby"># Enable parameter wrapping for JSON. You can disable this by setting :format to an empty array.</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="7">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">ActiveSupport.on_load(:action_controller) do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="2" data-linenumber="8">
              +          <span class="hits">2</span>
              +
              +          <code class="ruby">  wrap_parameters format: [:json]</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="9">
              +
              +          <code class="ruby">end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="10">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="11">
              +
              +          <code class="ruby"># To enable root element in JSON for ActiveRecord objects.</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="12">
              +
              +          <code class="ruby"># ActiveSupport.on_load(:active_record) do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="13">
              +
              +          <code class="ruby">#   self.include_root_in_json = true</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="14">
              +
              +          <code class="ruby"># end</code>
              +        </li>
              +      </div>
              +
              +  </ol>
              +</pre>
              + +

              </div>

              + +
                    <div class="source_table" id="7e40e8cec2678992b5bb7343b8264c6e0a8fd89a">
              +<div class="header">
              +  <h3>config/routes.rb</h3>
              +  <h4>
              +    <span class="green">
              +100.0%
              + +

              </span>

              + +
                  lines covered
              +  </h4>
              +
              +  <div class="t-line-summary">
              +    <b>9</b> relevant lines.
              +    <span class="green"><b>9</b> lines covered</span> and
              +    <span class="red"><b>0</b> lines missed.</span>
              +  </div>
              +
              +</div>
              +
              +<pre>
              +  <ol>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="1">
              +
              +          <code class="ruby"># frozen_string_literal: true</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="2">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="3">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">Rails.application.routes.draw do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="4">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  resources :accreditations</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="5">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  resources :sei_processes</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="6">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="7">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  resources :requirements do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="8">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">    member do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="9">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">      delete :delete_document_attachment</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="10">
              +
              +          <code class="ruby">    end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="11">
              +
              +          <code class="ruby">  end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="12">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="13">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  get &#39;home/index&#39;</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="14">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  devise_for :users</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="15">
              +
              +          <code class="ruby">  # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="16">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  root to: &#39;home#index&#39;</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="17">
              +
              +          <code class="ruby">end</code>
              +        </li>
              +      </div>
              +
              +  </ol>
              +</pre>
              + +

              </div>

              + +
                    <div class="source_table" id="5a6061652146776ff3661ab8e77e2233c180cd08">
              +<div class="header">
              +  <h3>spec/controllers/home_controller_spec.rb</h3>
              +  <h4>
              +    <span class="green">
              +100.0%
              + +

              </span>

              + +
                  lines covered
              +  </h4>
              +
              +  <div class="t-line-summary">
              +    <b>6</b> relevant lines.
              +    <span class="green"><b>6</b> lines covered</span> and
              +    <span class="red"><b>0</b> lines missed.</span>
              +  </div>
              +
              +</div>
              +
              +<pre>
              +  <ol>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="1">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">require &#39;rails_helper&#39;</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="2">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="3">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">RSpec.describe HomeController, type: :controller do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="4">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="5">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  describe &quot;GET #index&quot; do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="6">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">    it &quot;returns http success&quot; do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="7">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">      get :index</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="8">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">      expect(response).to have_http_status(:success)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="9">
              +
              +          <code class="ruby">    end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="10">
              +
              +          <code class="ruby">  end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="11">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="12">
              +
              +          <code class="ruby">end</code>
              +        </li>
              +      </div>
              +
              +  </ol>
              +</pre>
              + +

              </div>

              + +
                    <div class="source_table" id="ee8e2e66fafe0acfa49a06f180d35f7919b51192">
              +<div class="header">
              +  <h3>spec/controllers/requirements_controller_spec.rb</h3>
              +  <h4>
              +    <span class="green">
              +100.0%
              + +

              </span>

              + +
                  lines covered
              +  </h4>
              +
              +  <div class="t-line-summary">
              +    <b>129</b> relevant lines.
              +    <span class="green"><b>129</b> lines covered</span> and
              +    <span class="red"><b>0</b> lines missed.</span>
              +  </div>
              +
              +</div>
              +
              +<pre>
              +  <ol>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="1">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">require &#39;rails_helper&#39;</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="2">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="3">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">RSpec.describe RequirementsController, type: :controller do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="4">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  fixtures :users</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="5">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="6">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  let(:valid_attributes) {</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="14" data-linenumber="7">
              +          <span class="hits">14</span>
              +
              +          <code class="ruby">    file = fixture_file_upload(Rails.root.join(&#39;public&#39;, &#39;TestImage.png&#39;), &#39;image/png&#39;)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="14" data-linenumber="8">
              +          <span class="hits">14</span>
              +
              +          <code class="ruby">    {title: &quot;test&quot;, content: &quot;&quot;, documents: [file]}</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="9">
              +
              +          <code class="ruby">  }</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="10">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="11">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  let(:invalid_attributes) {</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="2" data-linenumber="12">
              +          <span class="hits">2</span>
              +
              +          <code class="ruby">    {&quot;title&quot; =&gt; &quot;&quot;}</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="13">
              +
              +          <code class="ruby">  }</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="14">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="16" data-linenumber="15">
              +          <span class="hits">16</span>
              +
              +          <code class="ruby">  let(:valid_session) { {} }</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="16">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="17">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  context &quot;by an admin&quot; do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="18">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">    before(:each) do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="4" data-linenumber="19">
              +          <span class="hits">4</span>
              +
              +          <code class="ruby">      sign_in users(:admin)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="4" data-linenumber="20">
              +          <span class="hits">4</span>
              +
              +          <code class="ruby">      Current.user = users(:admin)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="21">
              +
              +          <code class="ruby">    end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="22">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="23">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">    describe &quot;GET #index&quot; do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="24">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">      it &quot;returns a success response&quot; do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="25">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">        Requirement.create! valid_attributes</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="26">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">        get :index, params: {}, session: valid_session</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="27">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">        expect(response).to be_successful</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="28">
              +
              +          <code class="ruby">      end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="29">
              +
              +          <code class="ruby">    end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="30">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="31">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">    describe &quot;GET #show&quot; do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="32">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">      it &quot;returns a success response&quot; do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="33">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">        requirement = Requirement.create! valid_attributes</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="34">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">        get :show, params: {id: requirement.to_param}, session: valid_session</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="35">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">        expect(response).to be_successful</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="36">
              +
              +          <code class="ruby">      end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="37">
              +
              +          <code class="ruby">    end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="38">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="39">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">    describe &quot;GET #new&quot; do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="40">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">      it &quot;returns a success response&quot; do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="41">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">        get :new, params: {}, session: valid_session</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="42">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">        expect(response).to be_successful</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="43">
              +
              +          <code class="ruby">      end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="44">
              +
              +          <code class="ruby">    end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="45">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="46">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">    describe &quot;GET #edit&quot; do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="47">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">      it &quot;returns a success response&quot; do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="48">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">        requirement = Requirement.create! valid_attributes</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="49">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">        get :edit, params: {id: requirement.to_param}, session: valid_session</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="50">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">        expect(response).to be_successful</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="51">
              +
              +          <code class="ruby">      end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="52">
              +
              +          <code class="ruby">    end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="53">
              +
              +          <code class="ruby">  end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="54">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="55">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  describe &quot;POST #create&quot; do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="56">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">    context &quot;with valid params&quot; do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="57">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">      before(:each) do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="2" data-linenumber="58">
              +          <span class="hits">2</span>
              +
              +          <code class="ruby">        sign_in users(:admin)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="2" data-linenumber="59">
              +          <span class="hits">2</span>
              +
              +          <code class="ruby">        Current.user = users(:admin)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="60">
              +
              +          <code class="ruby">      end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="61">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="62">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">      it &quot;creates a new Requirement&quot; do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="63">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">        expect {</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="64">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">          post :create, params: {requirement: valid_attributes}, session: valid_session</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="65">
              +
              +          <code class="ruby">        }.to change(Requirement, :count).by(1)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="66">
              +
              +          <code class="ruby">      end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="67">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="68">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">      it &quot;redirects to the created requirement&quot; do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="69">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">        post :create, params: {requirement: valid_attributes}, session: valid_session</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="70">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">        expect(response).to redirect_to(Requirement.last)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="71">
              +
              +          <code class="ruby">      end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="72">
              +
              +          <code class="ruby">    end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="73">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="74">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">    context &quot;with invalid params&quot; do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="75">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">      before(:each) do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="76">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">        sign_in users(:admin)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="77">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">        Current.user = users(:admin)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="78">
              +
              +          <code class="ruby">      end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="79">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="80">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">      it &quot;returns a success response (i.e. to display the &#39;new&#39; template)&quot; do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="81">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">        post :create, params: {requirement: invalid_attributes}, session: valid_session</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="82">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">        expect(response).to be_successful</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="83">
              +
              +          <code class="ruby">      end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="84">
              +
              +          <code class="ruby">    end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="85">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="86">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">    context &quot;by a non-admin user&quot; do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="87">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">      before(:each) do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="88">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">        sign_in users(:prof)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="89">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">        Current.user = users(:prof)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="90">
              +
              +          <code class="ruby">      end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="91">
              +
              +          <code class="ruby">      </code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="92">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">      it &quot;does not create a new Requirement&quot; do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="93">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">        expect {</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="94">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">          post :create, params: {requirement: valid_attributes}, session: valid_session</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="95">
              +
              +          <code class="ruby">        }.to change(Requirement, :count).by(0)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="96">
              +
              +          <code class="ruby">      end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="97">
              +
              +          <code class="ruby">    end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="98">
              +
              +          <code class="ruby">  end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="99">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="100">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  describe &quot;PUT #update&quot; do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="101">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">    let(:new_attributes) {</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="2" data-linenumber="102">
              +          <span class="hits">2</span>
              +
              +          <code class="ruby">      file = fixture_file_upload(Rails.root.join(&#39;public&#39;, &#39;TestImage.png&#39;), &#39;image/png&#39;)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="2" data-linenumber="103">
              +          <span class="hits">2</span>
              +
              +          <code class="ruby">      {title: &quot;Novo&quot;, content: &quot;Conteúdo&quot;, documents: [file]}</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="104">
              +
              +          <code class="ruby">    }</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="105">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="106">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">    context &quot;with valid params&quot; do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="107">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">      before(:each) do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="2" data-linenumber="108">
              +          <span class="hits">2</span>
              +
              +          <code class="ruby">        sign_in users(:admin)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="2" data-linenumber="109">
              +          <span class="hits">2</span>
              +
              +          <code class="ruby">        Current.user = users(:admin)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="110">
              +
              +          <code class="ruby">      end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="111">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="112">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">      it &quot;updates the requested requirement&quot; do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="113">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">        requirement = Requirement.create! valid_attributes</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="114">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">        put :update, params: {id: requirement.to_param, requirement: new_attributes}, session: valid_session</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="115">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">        requirement.reload</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="116">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">        expect(requirement.title).to eq(new_attributes[:title])</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="117">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">        expect(requirement.content).to eq(new_attributes[:content])</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="118">
              +
              +          <code class="ruby">      end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="119">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="120">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">      it &quot;redirects to the requirement&quot; do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="121">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">        requirement = Requirement.create! valid_attributes</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="122">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">        put :update, params: {id: requirement.to_param, requirement: valid_attributes}, session: valid_session</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="123">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">        expect(response).to redirect_to(requirement)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="124">
              +
              +          <code class="ruby">      end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="125">
              +
              +          <code class="ruby">    end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="126">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="127">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">    context &quot;with invalid params&quot; do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="128">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">      before(:each) do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="129">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">        sign_in users(:admin)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="130">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">        Current.user = users(:admin)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="131">
              +
              +          <code class="ruby">      end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="132">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="133">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">      it &quot;returns a success response (i.e. to display the &#39;edit&#39; template)&quot; do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="134">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">        requirement = Requirement.create! valid_attributes</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="135">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">        put :update, params: {id: requirement.to_param, requirement: invalid_attributes}, session: valid_session</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="136">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">        expect(response).to be_successful</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="137">
              +
              +          <code class="ruby">      end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="138">
              +
              +          <code class="ruby">    end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="139">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="140">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">    context &quot;by a non-admin user&quot; do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="141">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">      before(:each) do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="142">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">        sign_in users(:admin)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="143">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">        Current.user = users(:admin)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="144">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">        @requirement = Requirement.create! valid_attributes</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="145">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="146">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">        sign_out users(:admin)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="147">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">        sign_in users(:prof)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="148">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">        Current.user = users(:prof)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="149">
              +
              +          <code class="ruby">      end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="150">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="151">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">      it &quot;updates the requested requirement&quot; do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="152">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">        put :update, params: {id: @requirement.to_param, requirement: new_attributes}, session: valid_session</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="153">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">        @requirement.reload</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="154">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">        expect(@requirement.title).to_not eq(new_attributes[:title])</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="155">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">        expect(@requirement.content).to_not eq(new_attributes[:content])</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="156">
              +
              +          <code class="ruby">      end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="157">
              +
              +          <code class="ruby">    end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="158">
              +
              +          <code class="ruby">  end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="159">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="160">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  describe &quot;Documents Management&quot;do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="161">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">    before(:each) do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="162">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">      sign_in users(:admin)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="163">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">      Current.user = users(:admin)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="164">
              +
              +          <code class="ruby">    end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="165">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="166">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">    it &#39;purges a specific file&#39; do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="167">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">      requirement = Requirement.create! valid_attributes</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="168">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">      requirement.documents.each do | document |</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="169">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">        expect {</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="170">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">          delete :delete_document_attachment, params: { id: document.id, requirement_id: requirement.id }</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="171">
              +
              +          <code class="ruby">        }.to change(ActiveStorage::Attachment, :count).by(-1)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="172">
              +
              +          <code class="ruby">      end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="173">
              +
              +          <code class="ruby">    end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="174">
              +
              +          <code class="ruby">  end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="175">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="176">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  describe &quot;DELETE #destroy&quot; do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="177">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">    context &quot;by an admin&quot; do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="178">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">      before(:each) do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="2" data-linenumber="179">
              +          <span class="hits">2</span>
              +
              +          <code class="ruby">        sign_in users(:admin)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="2" data-linenumber="180">
              +          <span class="hits">2</span>
              +
              +          <code class="ruby">        Current.user = users(:admin)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="181">
              +
              +          <code class="ruby">      end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="182">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="183">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">      it &quot;destroys the requested requirement&quot; do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="184">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">        requirement = Requirement.create! valid_attributes</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="185">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">        expect {</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="186">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">          delete :destroy, params: {id: requirement.to_param}, session: valid_session</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="187">
              +
              +          <code class="ruby">        }.to change(Requirement, :count).by(-1)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="188">
              +
              +          <code class="ruby">      end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="189">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="190">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">      it &quot;redirects to the requirements list&quot; do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="191">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">        requirement = Requirement.create! valid_attributes</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="192">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">        delete :destroy, params: {id: requirement.to_param}, session: valid_session</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="193">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">        expect(response).to redirect_to(requirements_url)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="194">
              +
              +          <code class="ruby">      end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="195">
              +
              +          <code class="ruby">    end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="196">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="197">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">    context &quot;by a non-admin user&quot; do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="198">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">      before(:each) do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="199">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">        sign_in users(:admin)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="200">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">        Current.user = users(:admin)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="201">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">        @requirement = Requirement.create! valid_attributes</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="202">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="203">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">        sign_out users(:admin)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="204">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">        sign_in users(:prof)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="205">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">        Current.user = users(:prof)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="206">
              +
              +          <code class="ruby">      end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="207">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="208">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">      it &quot;does not destroy the requested requirement&quot; do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="209">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">        expect {</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="210">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">          delete :destroy, params: {id: @requirement.to_param}, session: valid_session</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="211">
              +
              +          <code class="ruby">        }.to change(Requirement, :count).by(0)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="212">
              +
              +          <code class="ruby">      end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="213">
              +
              +          <code class="ruby">    end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="214">
              +
              +          <code class="ruby">  end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="215">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="216">
              +
              +          <code class="ruby">end</code>
              +        </li>
              +      </div>
              +
              +  </ol>
              +</pre>
              + +

              </div>

              + +
                    <div class="source_table" id="b0ce7028e0fde889a13bd575a1eec962b6825884">
              +<div class="header">
              +  <h3>spec/controllers/sei_processes_controller_spec.rb</h3>
              +  <h4>
              +    <span class="green">
              +99.18%
              + +

              </span>

              + +
                  lines covered
              +  </h4>
              +
              +  <div class="t-line-summary">
              +    <b>122</b> relevant lines.
              +    <span class="green"><b>121</b> lines covered</span> and
              +    <span class="red"><b>1</b> lines missed.</span>
              +  </div>
              +
              +</div>
              +
              +<pre>
              +  <ol>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="1">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">require &#39;rails_helper&#39;</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="2">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="3">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">RSpec.describe SeiProcessesController, type: :controller do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="4">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  fixtures :users</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="5">
              +
              +          <code class="ruby">  </code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="6">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  let(:file) {</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="12" data-linenumber="7">
              +          <span class="hits">12</span>
              +
              +          <code class="ruby">    fixture_file_upload(Rails.root.join(&#39;public&#39;, &#39;TestImage.png&#39;), &#39;image/png&#39;)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="8">
              +
              +          <code class="ruby">  }</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="9">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="10">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  let(:valid_admin_params) {</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="2" data-linenumber="11">
              +          <span class="hits">2</span>
              +
              +          <code class="ruby">    {user_id: users(:admin).id, status: &#39;Espera&#39;, code: 0, documents: [file]}</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="12">
              +
              +          <code class="ruby">  }</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="13">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="14">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  let(:valid_prof_params) {</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="10" data-linenumber="15">
              +          <span class="hits">10</span>
              +
              +          <code class="ruby">    {user_id: users(:prof).id, status: &#39;Espera&#39;, code: 0, documents: [file]}</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="16">
              +
              +          <code class="ruby">  }</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="17">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="18">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  let(:invalid_status_params) {</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="19">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">    {user_id: users(:prof).id, status: &#39;Aprovado&#39;, code: 0, documents: [file]}</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="20">
              +
              +          <code class="ruby">  }</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="21">
              +
              +          <code class="ruby">  </code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="22">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  let(:invalid_docs_params_by_admin) {</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="missed" data-hits="0" data-linenumber="23">
              +
              +          <code class="ruby">    {user_id: users(:admin).id, status: &#39;Espera&#39;, code: 0}</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="24">
              +
              +          <code class="ruby">  }</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="25">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="26">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  let(:invalid_docs_params_by_prof) {</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="27">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">    {user_id: users(:prof).id, status: &#39;Espera&#39;, code: 0}</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="28">
              +
              +          <code class="ruby">  }</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="29">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="30">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  let(:some_process) {</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="6" data-linenumber="31">
              +          <span class="hits">6</span>
              +
              +          <code class="ruby">    SeiProcess.create!(valid_prof_params)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="32">
              +
              +          <code class="ruby">  }</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="33">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="17" data-linenumber="34">
              +          <span class="hits">17</span>
              +
              +          <code class="ruby">  let(:valid_session) { {} }</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="35">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="36">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  describe &quot;GET #index&quot; do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="37">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">    context &#39;taken by an admin&#39; do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="38">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">      before(:each) do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="39">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">        sign_in users(:admin)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="40">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">        Current.user = users(:admin)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="41">
              +
              +          <code class="ruby">      end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="42">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="43">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">      it &quot;returns a success response&quot; do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="44">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">        get :index, params: {}, session: valid_session</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="45">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">        expect(response).to be_successful</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="46">
              +
              +          <code class="ruby">      end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="47">
              +
              +          <code class="ruby">    end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="48">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="49">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">    context &#39;taken by an non-admin user&#39; do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="50">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">      before(:each) do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="51">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">        sign_in users(:prof)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="52">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">        Current.user = users(:prof)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="53">
              +
              +          <code class="ruby">      end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="54">
              +
              +          <code class="ruby">      </code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="55">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">      it &quot;returns a success response&quot; do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="56">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">        get :index, params: {}, session: valid_session</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="57">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">        expect(response).to be_successful</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="58">
              +
              +          <code class="ruby">      end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="59">
              +
              +          <code class="ruby">    end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="60">
              +
              +          <code class="ruby">  end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="61">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="62">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  describe &quot;GET #show&quot; do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="63">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">    before(:each) do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="64">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">      sign_in users(:admin)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="65">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">      Current.user = users(:admin)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="66">
              +
              +          <code class="ruby">    end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="67">
              +
              +          <code class="ruby">    </code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="68">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">    it &quot;returns a success response&quot; do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="69">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">      get :show, params: {id: some_process.id}, session: valid_session</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="70">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">      expect(response).to be_successful</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="71">
              +
              +          <code class="ruby">    end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="72">
              +
              +          <code class="ruby">  end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="73">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="74">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  describe &quot;GET #new&quot; do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="75">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">    before(:each) do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="76">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">      sign_in users(:prof)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="77">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">      Current.user = users(:prof)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="78">
              +
              +          <code class="ruby">    end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="79">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="80">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">    it &quot;returns a success response&quot; do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="81">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">      get :new, params: {}, session: valid_session</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="82">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">      expect(response).to be_successful</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="83">
              +
              +          <code class="ruby">    end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="84">
              +
              +          <code class="ruby">  end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="85">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="86">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  describe &quot;GET #edit&quot; do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="87">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">    before(:each) do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="88">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">      sign_in users(:admin)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="89">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">      Current.user = users(:admin)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="90">
              +
              +          <code class="ruby">    end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="91">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="92">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">    it &quot;returns a success response&quot; do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="93">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">      get :edit, params: {id: some_process.id}, session: valid_session</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="94">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">      expect(response).to be_successful</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="95">
              +
              +          <code class="ruby">    end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="96">
              +
              +          <code class="ruby">  end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="97">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="98">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  describe &quot;POST #create&quot; do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="99">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">    before(:each) do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="4" data-linenumber="100">
              +          <span class="hits">4</span>
              +
              +          <code class="ruby">      sign_in users(:prof)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="4" data-linenumber="101">
              +          <span class="hits">4</span>
              +
              +          <code class="ruby">      Current.user = users(:prof)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="102">
              +
              +          <code class="ruby">    end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="103">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="104">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">    context &quot;with valid params&quot; do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="105">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">      it &quot;creates a new SeiProcess&quot; do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="106">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">        expect {</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="107">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">          post :create, params: {sei_process: valid_prof_params}, session: valid_session</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="108">
              +
              +          <code class="ruby">        }.to change(SeiProcess, :count).by(1)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="109">
              +
              +          <code class="ruby">      end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="110">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="111">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">      it &quot;redirects to the sei processes list&quot; do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="112">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">        post :create, params: {sei_process: valid_prof_params}, session: valid_session</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="113">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">        expect(response).to redirect_to(sei_processes_url)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="114">
              +
              +          <code class="ruby">      end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="115">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="116">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">      it &quot;corrects invalid parameters during creation&quot; do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="117">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">        post :create, params: {sei_process: invalid_status_params}, session: valid_session</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="118">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">        expect(SeiProcess.last.status).to eq(valid_prof_params[:status])</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="119">
              +
              +          <code class="ruby">      end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="120">
              +
              +          <code class="ruby">    end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="121">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="122">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">    context &quot;with invalid params&quot; do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="123">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">      it &quot;do not creates a new SeiProcess due to lack of documents&quot; do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="124">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">        expect {</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="125">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">          post :create, params: {sei_process: invalid_docs_params_by_prof}, session: valid_session</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="126">
              +
              +          <code class="ruby">        }.to change(SeiProcess, :count).by(0)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="127">
              +
              +          <code class="ruby">      end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="128">
              +
              +          <code class="ruby">    end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="129">
              +
              +          <code class="ruby">  end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="130">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="131">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  describe &quot;PUT #update&quot; do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="132">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">    let(:approval_param) {</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="2" data-linenumber="133">
              +          <span class="hits">2</span>
              +
              +          <code class="ruby">      {status: &#39;Aprovado&#39;}</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="134">
              +
              +          <code class="ruby">    }</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="135">
              +
              +          <code class="ruby">    </code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="136">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">    let(:rejection_param) {</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="2" data-linenumber="137">
              +          <span class="hits">2</span>
              +
              +          <code class="ruby">      {status: &#39;Rejeitado&#39;}</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="138">
              +
              +          <code class="ruby">    }</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="139">
              +
              +          <code class="ruby">    </code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="140">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">    context &quot;when user has permission&quot; do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="141">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">      before(:each) do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="3" data-linenumber="142">
              +          <span class="hits">3</span>
              +
              +          <code class="ruby">        sign_in users(:admin)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="3" data-linenumber="143">
              +          <span class="hits">3</span>
              +
              +          <code class="ruby">        Current.user = users(:admin)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="144">
              +
              +          <code class="ruby">      end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="145">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="146">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">      it &quot;updates the requested sei_process&quot; do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="147">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">        put :update, params: {id: some_process.id, sei_process: rejection_param}, session: valid_session</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="148">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">        some_process.reload</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="149">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">        expect(some_process.status).to eq(rejection_param[:status])</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="150">
              +
              +          <code class="ruby">      end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="151">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="152">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">      it &quot;redirects to the sei processes list&quot; do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="153">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">        put :update, params: {id: some_process.id, sei_process: rejection_param}, session: valid_session</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="154">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">        expect(response).to redirect_to(sei_processes_url)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="155">
              +
              +          <code class="ruby">      end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="156">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="157">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">      it &quot;creates an accreditation when a process is approved&quot; do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="158">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">        expect {</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="159">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">          put :update, params: {id: some_process.id, sei_process: approval_param}, session: valid_session</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="160">
              +
              +          <code class="ruby">        }.to change(Accreditation, :count).by(1)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="161">
              +
              +          <code class="ruby">      end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="162">
              +
              +          <code class="ruby">    end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="163">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="164">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">    context &quot;when user does not have permission&quot; do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="165">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">      before(:each) do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="166">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">        sign_in users(:prof)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="167">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">        Current.user = users(:prof)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="168">
              +
              +          <code class="ruby">      end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="169">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="170">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">      it &quot;does not update the requested sei_process&quot; do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="171">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">        put :update, params: {id: some_process.id, sei_process: approval_param}, session: valid_session</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="172">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">        some_process.reload</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="173">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">        expect(some_process.status).to_not eq(approval_param[:status])</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="174">
              +
              +          <code class="ruby">      end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="175">
              +
              +          <code class="ruby">    end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="176">
              +
              +          <code class="ruby">  end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="177">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="178">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  describe &quot;DELETE #destroy&quot; do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="179">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">    context &quot;when user has permission&quot; do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="180">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">      before(:each) do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="2" data-linenumber="181">
              +          <span class="hits">2</span>
              +
              +          <code class="ruby">        sign_in users(:admin)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="2" data-linenumber="182">
              +          <span class="hits">2</span>
              +
              +          <code class="ruby">        Current.user = users(:admin)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="183">
              +
              +          <code class="ruby">      end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="184">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="185">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">      it &quot;destroys the requested sei_process&quot; do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="186">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">        process = SeiProcess.create!(valid_admin_params)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="187">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">        process.update_attributes(user_id: users(:prof))</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="188">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="189">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">        expect {</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="190">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">          delete :destroy, params: {id: process.to_param}, session: valid_session</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="191">
              +
              +          <code class="ruby">        }.to change(SeiProcess, :count).by(-1)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="192">
              +
              +          <code class="ruby">      end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="193">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="194">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">      it &quot;redirects to the sei_processes list&quot; do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="195">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">        process = SeiProcess.create!(valid_admin_params)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="196">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">        process.update_attributes(user_id: users(:prof))</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="197">
              +
              +          <code class="ruby">        </code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="198">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">        delete :destroy, params: {id: process.to_param}, session: valid_session</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="199">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">        expect(response).to redirect_to(sei_processes_url)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="200">
              +
              +          <code class="ruby">      end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="201">
              +
              +          <code class="ruby">    end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="202">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="203">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">    context &quot;when user does not have permission&quot; do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="204">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">      before(:each) do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="205">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">        sign_in users(:prof)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="206">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">        Current.user = users(:prof)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="207">
              +
              +          <code class="ruby">      end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="208">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="209">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">      it &quot;does not destroys the requested sei_process&quot; do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="210">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">        process = SeiProcess.create!(valid_prof_params)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="211">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">        expect {</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="212">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">          delete :destroy, params: {id: process.to_param}, session: valid_session</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="213">
              +
              +          <code class="ruby">        }.to change(SeiProcess, :count).by(0)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="214">
              +
              +          <code class="ruby">      end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="215">
              +
              +          <code class="ruby">    end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="216">
              +
              +          <code class="ruby">  end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="217">
              +
              +          <code class="ruby">end</code>
              +        </li>
              +      </div>
              +
              +  </ol>
              +</pre>
              + +

              </div>

              + +
                    <div class="source_table" id="74919aa19486a412b5d76b64a743160edd82e71b">
              +<div class="header">
              +  <h3>spec/helpers/home_helper_spec.rb</h3>
              +  <h4>
              +    <span class="green">
              +100.0%
              + +

              </span>

              + +
                  lines covered
              +  </h4>
              +
              +  <div class="t-line-summary">
              +    <b>0</b> relevant lines.
              +    <span class="green"><b>0</b> lines covered</span> and
              +    <span class="red"><b>0</b> lines missed.</span>
              +  </div>
              +
              +</div>
              +
              +<pre>
              +  <ol>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="1">
              +
              +          <code class="ruby"># require &#39;rails_helper&#39;</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="2">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="3">
              +
              +          <code class="ruby"># # Specs in this file have access to a helper object that includes</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="4">
              +
              +          <code class="ruby"># # the HomeHelper. For example:</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="5">
              +
              +          <code class="ruby"># #</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="6">
              +
              +          <code class="ruby"># # describe HomeHelper do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="7">
              +
              +          <code class="ruby"># #   describe &quot;string concat&quot; do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="8">
              +
              +          <code class="ruby"># #     it &quot;concats two strings with spaces&quot; do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="9">
              +
              +          <code class="ruby"># #       expect(helper.concat_strings(&quot;this&quot;,&quot;that&quot;)).to eq(&quot;this that&quot;)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="10">
              +
              +          <code class="ruby"># #     end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="11">
              +
              +          <code class="ruby"># #   end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="12">
              +
              +          <code class="ruby"># # end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="13">
              +
              +          <code class="ruby"># RSpec.describe HomeHelper, type: :helper do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="14">
              +
              +          <code class="ruby">#   pending &quot;add some examples to (or delete) #{__FILE__}&quot;</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="15">
              +
              +          <code class="ruby"># end</code>
              +        </li>
              +      </div>
              +
              +  </ol>
              +</pre>
              + +

              </div>

              + +
                    <div class="source_table" id="a354408becf1bc7a607b666ac2def09689b56036">
              +<div class="header">
              +  <h3>spec/models/accreditation_spec.rb</h3>
              +  <h4>
              +    <span class="green">
              +100.0%
              + +

              </span>

              + +
                  lines covered
              +  </h4>
              +
              +  <div class="t-line-summary">
              +    <b>32</b> relevant lines.
              +    <span class="green"><b>32</b> lines covered</span> and
              +    <span class="red"><b>0</b> lines missed.</span>
              +  </div>
              +
              +</div>
              +
              +<pre>
              +  <ol>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="1">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">require &#39;rails_helper&#39;</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="2">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="3">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">RSpec.describe Accreditation, type: :model do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="4">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  fixtures :users</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="5">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="6">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  let(:file) {</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="5" data-linenumber="7">
              +          <span class="hits">5</span>
              +
              +          <code class="ruby">    fixture_file_upload(Rails.root.join(&#39;public&#39;, &#39;TestImage.png&#39;), &#39;image/png&#39;)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="8">
              +
              +          <code class="ruby">  }</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="9">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="10">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  let(:valid_prof_params) {</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="5" data-linenumber="11">
              +          <span class="hits">5</span>
              +
              +          <code class="ruby">    {user_id: users(:admin).id, status: &#39;Espera&#39;, code: 0, documents: [file]}</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="12">
              +
              +          <code class="ruby">  }</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="13">
              +
              +          <code class="ruby">  </code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="14">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  let(:valid_attributes) {</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="3" data-linenumber="15">
              +          <span class="hits">3</span>
              +
              +          <code class="ruby">    {user_id: users(:admin).id, sei_process_id: @process.id}</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="16">
              +
              +          <code class="ruby">  }</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="17">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="18">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  before(:each) do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="5" data-linenumber="19">
              +          <span class="hits">5</span>
              +
              +          <code class="ruby">    sign_in users(:prof)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="5" data-linenumber="20">
              +          <span class="hits">5</span>
              +
              +          <code class="ruby">    Current.user = users(:prof)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="5" data-linenumber="21">
              +          <span class="hits">5</span>
              +
              +          <code class="ruby">    @process = SeiProcess.create! valid_prof_params</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="22">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="5" data-linenumber="23">
              +          <span class="hits">5</span>
              +
              +          <code class="ruby">    sign_out users(:prof)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="5" data-linenumber="24">
              +          <span class="hits">5</span>
              +
              +          <code class="ruby">    sign_in users(:admin)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="5" data-linenumber="25">
              +          <span class="hits">5</span>
              +
              +          <code class="ruby">    Current.user = users(:admin)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="26">
              +
              +          <code class="ruby">  end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="27">
              +
              +          <code class="ruby">  </code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="28">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  context &quot;valid record&quot; do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="29">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">    it &quot;has valid attributes&quot; do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="30">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">      expect(</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="31">
              +
              +          <code class="ruby">        Accreditation.new(valid_attributes)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="32">
              +
              +          <code class="ruby">      ).to be_valid</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="33">
              +
              +          <code class="ruby">    end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="34">
              +
              +          <code class="ruby">  end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="35">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="36">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  context &quot;invalid record&quot; do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="37">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">    it &quot;has no user&quot; do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="38">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">      expect(</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="39">
              +
              +          <code class="ruby">        Accreditation.new(sei_process_id: @process.id)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="40">
              +
              +          <code class="ruby">      ).to_not be_valid</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="41">
              +
              +          <code class="ruby">    end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="42">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="43">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">    it &quot;has no process&quot; do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="44">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">      expect(</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="45">
              +
              +          <code class="ruby">        Accreditation.new(user_id: users(:admin).id)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="46">
              +
              +          <code class="ruby">      ).to_not be_valid</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="47">
              +
              +          <code class="ruby">    end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="48">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="49">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">    it &quot;has an unavailable process&quot; do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="50">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">      Accreditation.create!(valid_attributes)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="51">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">      expect(</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="52">
              +
              +          <code class="ruby">        Accreditation.new(valid_attributes)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="53">
              +
              +          <code class="ruby">      ).to_not be_valid</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="54">
              +
              +          <code class="ruby">    end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="55">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="56">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">    it &quot;has been created by a non-admin user&quot; do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="57">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">      sign_out users(:admin)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="58">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">      sign_in users(:prof)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="59">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">      Current.user = users(:prof)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="60">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="61">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">      expect(</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="62">
              +
              +          <code class="ruby">        Accreditation.new(valid_attributes)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="63">
              +
              +          <code class="ruby">      ).to_not be_valid</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="64">
              +
              +          <code class="ruby">    end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="65">
              +
              +          <code class="ruby">  end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="66">
              +
              +          <code class="ruby">end</code>
              +        </li>
              +      </div>
              +
              +  </ol>
              +</pre>
              + +

              </div>

              + +
                    <div class="source_table" id="2a6723e88ba1b7edfd3184e28e759f2c6af1ea44">
              +<div class="header">
              +  <h3>spec/models/requirement_spec.rb</h3>
              +  <h4>
              +    <span class="green">
              +100.0%
              + +

              </span>

              + +
                  lines covered
              +  </h4>
              +
              +  <div class="t-line-summary">
              +    <b>15</b> relevant lines.
              +    <span class="green"><b>15</b> lines covered</span> and
              +    <span class="red"><b>0</b> lines missed.</span>
              +  </div>
              +
              +</div>
              +
              +<pre>
              +  <ol>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="1">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">require &#39;rails_helper&#39;</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="2">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="3">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">RSpec.describe Requirement, type: :model do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="4">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  fixtures :users</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="5">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="6">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  before(:each) do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="3" data-linenumber="7">
              +          <span class="hits">3</span>
              +
              +          <code class="ruby">    sign_in users(:admin)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="3" data-linenumber="8">
              +          <span class="hits">3</span>
              +
              +          <code class="ruby">    Current.user = users(:admin)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="9">
              +
              +          <code class="ruby">  end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="10">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="11">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  describe &quot;Title validation&quot; do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="12">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">    it &quot;is valid with valid attributes&quot; do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="13">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">      expect(Requirement.new({&quot;title&quot; =&gt; &quot;testing&quot;})).to be_valid</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="14">
              +
              +          <code class="ruby">    end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="15">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="16">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">    it &quot;is not valid without a title&quot; do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="17">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">      file = fixture_file_upload(Rails.root.join(&#39;public&#39;, &#39;TestImage.png&#39;), &#39;image/png&#39;)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="18">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">      expect(Requirement.new({&quot;content&quot; =&gt; &quot;&quot;, &quot;documents&quot; =&gt; [file]})).to_not be_valid</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="19">
              +
              +          <code class="ruby">    end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="20">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="21">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">    it &quot;is not equal to previous requirement title&quot; do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="22">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">      Requirement.create! title: &quot;testing&quot;</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="23">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">      expect(Requirement.new({&quot;title&quot; =&gt; &quot;testing&quot;})).to_not be_valid</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="24">
              +
              +          <code class="ruby">    end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="25">
              +
              +          <code class="ruby">  end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="26">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="27">
              +
              +          <code class="ruby">end</code>
              +        </li>
              +      </div>
              +
              +  </ol>
              +</pre>
              + +

              </div>

              + +
                    <div class="source_table" id="b4329ad6968b64e413366d6f72079658b1192451">
              +<div class="header">
              +  <h3>spec/models/sei_process_spec.rb</h3>
              +  <h4>
              +    <span class="green">
              +97.44%
              + +

              </span>

              + +
                  lines covered
              +  </h4>
              +
              +  <div class="t-line-summary">
              +    <b>39</b> relevant lines.
              +    <span class="green"><b>38</b> lines covered</span> and
              +    <span class="red"><b>1</b> lines missed.</span>
              +  </div>
              +
              +</div>
              +
              +<pre>
              +  <ol>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="1">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">require &#39;rails_helper&#39;</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="2">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="3">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">RSpec.describe SeiProcess, type: :model do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="4">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  fixtures :users</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="5">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="6">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  let(:file) {</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="3" data-linenumber="7">
              +          <span class="hits">3</span>
              +
              +          <code class="ruby">    fixture_file_upload(Rails.root.join(&#39;public&#39;, &#39;TestImage.png&#39;), &#39;image/png&#39;)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="8">
              +
              +          <code class="ruby">  }</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="9">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="10">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  let(:valid_admin_params) {</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="2" data-linenumber="11">
              +          <span class="hits">2</span>
              +
              +          <code class="ruby">    {user_id: users(:admin).id, status: &#39;Espera&#39;, code: 0, documents: [file]}</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="12">
              +
              +          <code class="ruby">  }</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="13">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="14">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  let(:valid_prof_params) {</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="15">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">    {user_id: users(:prof).id, status: &#39;Espera&#39;, code: 0, documents: [file]}</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="16">
              +
              +          <code class="ruby">  }</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="17">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="18">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  let(:invalid_status_params) {</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="missed" data-hits="0" data-linenumber="19">
              +
              +          <code class="ruby">    {user_id: users(:prof).id, status: &#39;Aprovado&#39;, code: 0, documents: [file]}</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="20">
              +
              +          <code class="ruby">  }</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="21">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="22">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  let(:invalid_docs_params_by_admin) {</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="23">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">    {user_id: users(:admin).id, status: &#39;Espera&#39;, code: 0}</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="24">
              +
              +          <code class="ruby">  }</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="25">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="26">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  let(:invalid_docs_params_by_prof) {</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="27">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">    {user_id: users(:prof).id, status: &#39;Espera&#39;, code: 0}</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="28">
              +
              +          <code class="ruby">  }</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="29">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="30">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  describe &#39;checks an admins creation&#39; do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="31">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">    before(:each) do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="2" data-linenumber="32">
              +          <span class="hits">2</span>
              +
              +          <code class="ruby">      Current.user = users(:admin)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="33">
              +
              +          <code class="ruby">    end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="34">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="35">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">    context &#39;when a valid record&#39; do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="36">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">      it &#39;has valid attributes&#39; do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="37">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">        expect(</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="38">
              +
              +          <code class="ruby">          SeiProcess.new(valid_admin_params)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="39">
              +
              +          <code class="ruby">        ).to be_valid</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="40">
              +
              +          <code class="ruby">      end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="41">
              +
              +          <code class="ruby">    end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="42">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="43">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">    context &#39;when an invalid record&#39; do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="44">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">      it &#39;has no attached documents&#39; do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="45">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">        expect(</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="46">
              +
              +          <code class="ruby">          SeiProcess.new(invalid_docs_params_by_admin)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="47">
              +
              +          <code class="ruby">        ).to_not be_valid</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="48">
              +
              +          <code class="ruby">      end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="49">
              +
              +          <code class="ruby">    end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="50">
              +
              +          <code class="ruby">  end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="51">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="52">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  describe &#39;checks a non-admins creation&#39; do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="53">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">    before(:each) do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="2" data-linenumber="54">
              +          <span class="hits">2</span>
              +
              +          <code class="ruby">      Current.user = users(:prof)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="55">
              +
              +          <code class="ruby">    end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="56">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="57">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">    context &#39;when a valid record&#39; do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="58">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">      it &#39;has valid attributes&#39; do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="59">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">        expect(</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="60">
              +
              +          <code class="ruby">          SeiProcess.new(valid_prof_params)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="61">
              +
              +          <code class="ruby">        ).to be_valid</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="62">
              +
              +          <code class="ruby">      end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="63">
              +
              +          <code class="ruby">    end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="64">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="65">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">    context &#39;when an invalid record&#39; do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="66">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">      it &#39;has no attached documents&#39; do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="67">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">        expect(</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="68">
              +
              +          <code class="ruby">          SeiProcess.new(invalid_docs_params_by_prof)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="69">
              +
              +          <code class="ruby">        ).to_not be_valid</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="70">
              +
              +          <code class="ruby">      end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="71">
              +
              +          <code class="ruby">    end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="72">
              +
              +          <code class="ruby">  end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="73">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="74">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  describe &#39;checks a not signed in users creation&#39; do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="75">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">    before(:each) do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="76">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">      Current.user = nil</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="77">
              +
              +          <code class="ruby">    end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="78">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="79">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">    context &#39;when an invalid record&#39; do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="80">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">      it &#39;comes from not signed in user&#39; do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="81">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">        expect(</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="82">
              +
              +          <code class="ruby">          SeiProcess.new(valid_admin_params)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="83">
              +
              +          <code class="ruby">        ).to_not be_valid</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="84">
              +
              +          <code class="ruby">      end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="85">
              +
              +          <code class="ruby">    end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="86">
              +
              +          <code class="ruby">  end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="87">
              +
              +          <code class="ruby">end</code>
              +        </li>
              +      </div>
              +
              +  </ol>
              +</pre>
              + +

              </div>

              + +
                    <div class="source_table" id="06827b7f445ffc1f4818c27f1b51d5fa2c0a29e7">
              +<div class="header">
              +  <h3>spec/models/user_spec.rb</h3>
              +  <h4>
              +    <span class="green">
              +100.0%
              + +

              </span>

              + +
                  lines covered
              +  </h4>
              +
              +  <div class="t-line-summary">
              +    <b>0</b> relevant lines.
              +    <span class="green"><b>0</b> lines covered</span> and
              +    <span class="red"><b>0</b> lines missed.</span>
              +  </div>
              +
              +</div>
              +
              +<pre>
              +  <ol>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="1">
              +
              +          <code class="ruby"># require &#39;rails_helper&#39;</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="2">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="3">
              +
              +          <code class="ruby"># RSpec.describe User, type: :model do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="4">
              +
              +          <code class="ruby">#   pending &quot;add some examples to (or delete) #{__FILE__}&quot;</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="5">
              +
              +          <code class="ruby"># end</code>
              +        </li>
              +      </div>
              +
              +  </ol>
              +</pre>
              + +

              </div>

              + +
                    <div class="source_table" id="fe5007eeaa0339c6abb0ac1f6b4ad9b06e5e413d">
              +<div class="header">
              +  <h3>spec/routing/accreditations_routing_spec.rb</h3>
              +  <h4>
              +    <span class="green">
              +100.0%
              + +

              </span>

              + +
                  lines covered
              +  </h4>
              +
              +  <div class="t-line-summary">
              +    <b>19</b> relevant lines.
              +    <span class="green"><b>19</b> lines covered</span> and
              +    <span class="red"><b>0</b> lines missed.</span>
              +  </div>
              +
              +</div>
              +
              +<pre>
              +  <ol>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="1">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">require &quot;rails_helper&quot;</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="2">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="3">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">RSpec.describe AccreditationsController, type: :routing do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="4">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  describe &quot;routing&quot; do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="5">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">    it &quot;routes to #index&quot; do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="6">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">      expect(get: &quot;/accreditations&quot;).to route_to(&quot;accreditations#index&quot;)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="7">
              +
              +          <code class="ruby">    end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="8">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="9">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">    it &quot;routes to #new&quot; do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="10">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">      expect(get: &quot;/accreditations/new&quot;).to route_to(&quot;accreditations#new&quot;)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="11">
              +
              +          <code class="ruby">    end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="12">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="13">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">    it &quot;routes to #show&quot; do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="14">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">      expect(get: &quot;/accreditations/1&quot;).to route_to(&quot;accreditations#show&quot;, id: &quot;1&quot;)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="15">
              +
              +          <code class="ruby">    end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="16">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="17">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">    it &quot;routes to #edit&quot; do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="18">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">      expect(get: &quot;/accreditations/1/edit&quot;).to route_to(&quot;accreditations#edit&quot;, id: &quot;1&quot;)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="19">
              +
              +          <code class="ruby">    end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="20">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="21">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="22">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">    it &quot;routes to #create&quot; do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="23">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">      expect(post: &quot;/accreditations&quot;).to route_to(&quot;accreditations#create&quot;)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="24">
              +
              +          <code class="ruby">    end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="25">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="26">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">    it &quot;routes to #update via PUT&quot; do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="27">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">      expect(put: &quot;/accreditations/1&quot;).to route_to(&quot;accreditations#update&quot;, id: &quot;1&quot;)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="28">
              +
              +          <code class="ruby">    end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="29">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="30">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">    it &quot;routes to #update via PATCH&quot; do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="31">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">      expect(patch: &quot;/accreditations/1&quot;).to route_to(&quot;accreditations#update&quot;, id: &quot;1&quot;)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="32">
              +
              +          <code class="ruby">    end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="33">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="34">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">    it &quot;routes to #destroy&quot; do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="35">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">      expect(delete: &quot;/accreditations/1&quot;).to route_to(&quot;accreditations#destroy&quot;, id: &quot;1&quot;)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="36">
              +
              +          <code class="ruby">    end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="37">
              +
              +          <code class="ruby">  end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="38">
              +
              +          <code class="ruby">end</code>
              +        </li>
              +      </div>
              +
              +  </ol>
              +</pre>
              + +

              </div>

              + +
                    <div class="source_table" id="d10a71e41790ffdee58ed9fc3d98e923895d165f">
              +<div class="header">
              +  <h3>spec/routing/requirements_routing_spec.rb</h3>
              +  <h4>
              +    <span class="green">
              +100.0%
              + +

              </span>

              + +
                  lines covered
              +  </h4>
              +
              +  <div class="t-line-summary">
              +    <b>19</b> relevant lines.
              +    <span class="green"><b>19</b> lines covered</span> and
              +    <span class="red"><b>0</b> lines missed.</span>
              +  </div>
              +
              +</div>
              +
              +<pre>
              +  <ol>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="1">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">require &quot;rails_helper&quot;</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="2">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="3">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">RSpec.describe RequirementsController, type: :routing do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="4">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  describe &quot;routing&quot; do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="5">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">    it &quot;routes to #index&quot; do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="6">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">      expect(:get =&gt; &quot;/requirements&quot;).to route_to(&quot;requirements#index&quot;)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="7">
              +
              +          <code class="ruby">    end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="8">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="9">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">    it &quot;routes to #new&quot; do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="10">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">      expect(:get =&gt; &quot;/requirements/new&quot;).to route_to(&quot;requirements#new&quot;)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="11">
              +
              +          <code class="ruby">    end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="12">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="13">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">    it &quot;routes to #show&quot; do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="14">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">      expect(:get =&gt; &quot;/requirements/1&quot;).to route_to(&quot;requirements#show&quot;, :id =&gt; &quot;1&quot;)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="15">
              +
              +          <code class="ruby">    end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="16">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="17">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">    it &quot;routes to #edit&quot; do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="18">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">      expect(:get =&gt; &quot;/requirements/1/edit&quot;).to route_to(&quot;requirements#edit&quot;, :id =&gt; &quot;1&quot;)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="19">
              +
              +          <code class="ruby">    end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="20">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="21">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="22">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">    it &quot;routes to #create&quot; do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="23">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">      expect(:post =&gt; &quot;/requirements&quot;).to route_to(&quot;requirements#create&quot;)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="24">
              +
              +          <code class="ruby">    end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="25">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="26">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">    it &quot;routes to #update via PUT&quot; do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="27">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">      expect(:put =&gt; &quot;/requirements/1&quot;).to route_to(&quot;requirements#update&quot;, :id =&gt; &quot;1&quot;)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="28">
              +
              +          <code class="ruby">    end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="29">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="30">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">    it &quot;routes to #update via PATCH&quot; do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="31">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">      expect(:patch =&gt; &quot;/requirements/1&quot;).to route_to(&quot;requirements#update&quot;, :id =&gt; &quot;1&quot;)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="32">
              +
              +          <code class="ruby">    end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="33">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="34">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">    it &quot;routes to #destroy&quot; do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="35">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">      expect(:delete =&gt; &quot;/requirements/1&quot;).to route_to(&quot;requirements#destroy&quot;, :id =&gt; &quot;1&quot;)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="36">
              +
              +          <code class="ruby">    end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="37">
              +
              +          <code class="ruby">  end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="38">
              +
              +          <code class="ruby">end</code>
              +        </li>
              +      </div>
              +
              +  </ol>
              +</pre>
              + +

              </div>

              + +
                    <div class="source_table" id="15f5641fcd1d79cc88246102c75e4569d716a302">
              +<div class="header">
              +  <h3>spec/routing/sei_processes_routing_spec.rb</h3>
              +  <h4>
              +    <span class="green">
              +100.0%
              + +

              </span>

              + +
                  lines covered
              +  </h4>
              +
              +  <div class="t-line-summary">
              +    <b>19</b> relevant lines.
              +    <span class="green"><b>19</b> lines covered</span> and
              +    <span class="red"><b>0</b> lines missed.</span>
              +  </div>
              +
              +</div>
              +
              +<pre>
              +  <ol>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="1">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">require &quot;rails_helper&quot;</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="2">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="3">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">RSpec.describe SeiProcessesController, type: :routing do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="4">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">  describe &quot;routing&quot; do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="5">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">    it &quot;routes to #index&quot; do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="6">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">      expect(:get =&gt; &quot;/sei_processes&quot;).to route_to(&quot;sei_processes#index&quot;)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="7">
              +
              +          <code class="ruby">    end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="8">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="9">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">    it &quot;routes to #new&quot; do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="10">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">      expect(:get =&gt; &quot;/sei_processes/new&quot;).to route_to(&quot;sei_processes#new&quot;)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="11">
              +
              +          <code class="ruby">    end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="12">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="13">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">    it &quot;routes to #show&quot; do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="14">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">      expect(:get =&gt; &quot;/sei_processes/1&quot;).to route_to(&quot;sei_processes#show&quot;, :id =&gt; &quot;1&quot;)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="15">
              +
              +          <code class="ruby">    end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="16">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="17">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">    it &quot;routes to #edit&quot; do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="18">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">      expect(:get =&gt; &quot;/sei_processes/1/edit&quot;).to route_to(&quot;sei_processes#edit&quot;, :id =&gt; &quot;1&quot;)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="19">
              +
              +          <code class="ruby">    end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="20">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="21">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="22">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">    it &quot;routes to #create&quot; do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="23">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">      expect(:post =&gt; &quot;/sei_processes&quot;).to route_to(&quot;sei_processes#create&quot;)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="24">
              +
              +          <code class="ruby">    end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="25">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="26">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">    it &quot;routes to #update via PUT&quot; do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="27">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">      expect(:put =&gt; &quot;/sei_processes/1&quot;).to route_to(&quot;sei_processes#update&quot;, :id =&gt; &quot;1&quot;)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="28">
              +
              +          <code class="ruby">    end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="29">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="30">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">    it &quot;routes to #update via PATCH&quot; do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="31">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">      expect(:patch =&gt; &quot;/sei_processes/1&quot;).to route_to(&quot;sei_processes#update&quot;, :id =&gt; &quot;1&quot;)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="32">
              +
              +          <code class="ruby">    end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="33">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="34">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">    it &quot;routes to #destroy&quot; do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="covered" data-hits="1" data-linenumber="35">
              +          <span class="hits">1</span>
              +
              +          <code class="ruby">      expect(:delete =&gt; &quot;/sei_processes/1&quot;).to route_to(&quot;sei_processes#destroy&quot;, :id =&gt; &quot;1&quot;)</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="36">
              +
              +          <code class="ruby">    end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="37">
              +
              +          <code class="ruby">  end</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="38">
              +
              +          <code class="ruby">end</code>
              +        </li>
              +      </div>
              +
              +  </ol>
              +</pre>
              + +

              </div>

              + +
                    <div class="source_table" id="6b4ea0fd9ad8be03dbffc0d8e2262c3b65e2541e">
              +<div class="header">
              +  <h3>spec/views/home/index.html.erb_spec.rb</h3>
              +  <h4>
              +    <span class="green">
              +100.0%
              + +

              </span>

              + +
                  lines covered
              +  </h4>
              +
              +  <div class="t-line-summary">
              +    <b>0</b> relevant lines.
              +    <span class="green"><b>0</b> lines covered</span> and
              +    <span class="red"><b>0</b> lines missed.</span>
              +  </div>
              +
              +</div>
              +
              +<pre>
              +  <ol>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="1">
              +
              +          <code class="ruby"># require &#39;rails_helper&#39;</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="2">
              +
              +          <code class="ruby"></code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="3">
              +
              +          <code class="ruby"># RSpec.describe &quot;home/index.html.erb&quot;, type: :view do</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="4">
              +
              +          <code class="ruby">#   pending &quot;add some examples to (or delete) #{__FILE__}&quot;</code>
              +        </li>
              +      </div>
              +
              +      <div>
              +        <li class="never" data-hits="" data-linenumber="5">
              +
              +          <code class="ruby"># end</code>
              +        </li>
              +      </div>
              +
              +  </ol>
              +</pre>
              + +

              </div>

              + +
                  </div>
              +  </div>
              +</body>
              + +

              </html>

              + +
              + + + + + diff --git a/doc/created.rid b/doc/created.rid new file mode 100644 index 00000000..a9fbf3c1 --- /dev/null +++ b/doc/created.rid @@ -0,0 +1,210 @@ +Wed, 02 Dec 2020 18:23:27 -0300 +./report.json Wed, 02 Dec 2020 18:22:21 -0300 +./app/mailers/application_mailer.rb Wed, 02 Dec 2020 18:21:45 -0300 +./app/models/sei_process.rb Wed, 02 Dec 2020 18:22:21 -0300 +./app/models/accreditation.rb Wed, 02 Dec 2020 18:22:21 -0300 +./app/models/requirement.rb Wed, 02 Dec 2020 18:22:21 -0300 +./app/models/application_record.rb Wed, 02 Dec 2020 18:21:45 -0300 +./app/models/user.rb Wed, 02 Dec 2020 18:21:45 -0300 +./app/jobs/application_job.rb Wed, 02 Dec 2020 18:21:45 -0300 +./app/controllers/application_controller.rb Wed, 02 Dec 2020 18:22:21 -0300 +./app/controllers/accreditations_controller.rb Wed, 02 Dec 2020 18:22:21 -0300 +./app/controllers/requirements_controller.rb Wed, 02 Dec 2020 18:22:21 -0300 +./app/controllers/sei_processes_controller.rb Wed, 02 Dec 2020 18:22:21 -0300 +./app/controllers/home_controller.rb Wed, 02 Dec 2020 18:22:21 -0300 +./app/views/home/index.html.erb Wed, 02 Dec 2020 18:22:21 -0300 +./app/views/devise/unlocks/new.html.erb Wed, 02 Dec 2020 18:21:45 -0300 +./app/views/devise/passwords/edit.html.erb Wed, 02 Dec 2020 18:21:45 -0300 +./app/views/devise/passwords/new.html.erb Wed, 02 Dec 2020 18:21:45 -0300 +./app/views/devise/mailer/confirmation_instructions.html.erb Wed, 02 Dec 2020 18:21:45 -0300 +./app/views/devise/mailer/reset_password_instructions.html.erb Wed, 02 Dec 2020 18:21:45 -0300 +./app/views/devise/mailer/password_change.html.erb Wed, 02 Dec 2020 18:21:45 -0300 +./app/views/devise/mailer/email_changed.html.erb Wed, 02 Dec 2020 18:21:45 -0300 +./app/views/devise/mailer/unlock_instructions.html.erb Wed, 02 Dec 2020 18:21:45 -0300 +./app/views/devise/shared/_error_messages.html.erb Wed, 02 Dec 2020 18:21:45 -0300 +./app/views/devise/shared/_links.html.erb Wed, 02 Dec 2020 18:21:45 -0300 +./app/views/devise/sessions/new.html.erb Wed, 02 Dec 2020 18:21:45 -0300 +./app/views/devise/confirmations/new.html.erb Wed, 02 Dec 2020 18:21:45 -0300 +./app/views/devise/registrations/edit.html.erb Wed, 02 Dec 2020 18:21:45 -0300 +./app/views/devise/registrations/new.html.erb Wed, 02 Dec 2020 18:21:45 -0300 +./app/views/requirements/index.html.erb Wed, 02 Dec 2020 18:22:21 -0300 +./app/views/requirements/index.json.jbuilder Wed, 02 Dec 2020 18:22:21 -0300 +./app/views/requirements/show.json.jbuilder Wed, 02 Dec 2020 18:22:21 -0300 +./app/views/requirements/_form_edit.html.erb Wed, 02 Dec 2020 18:22:21 -0300 +./app/views/requirements/edit.html.erb Wed, 02 Dec 2020 18:22:21 -0300 +./app/views/requirements/show.html.erb Wed, 02 Dec 2020 18:22:21 -0300 +./app/views/requirements/_requirement.json.jbuilder Wed, 02 Dec 2020 18:22:21 -0300 +./app/views/requirements/_form_new.html.erb Wed, 02 Dec 2020 18:22:21 -0300 +./app/views/requirements/new.html.erb Wed, 02 Dec 2020 18:22:21 -0300 +./app/views/sei_processes/index.html.erb Wed, 02 Dec 2020 18:22:21 -0300 +./app/views/sei_processes/_sei_process.json.jbuilder Wed, 02 Dec 2020 18:22:21 -0300 +./app/views/sei_processes/index.json.jbuilder Wed, 02 Dec 2020 18:22:21 -0300 +./app/views/sei_processes/_index_admin.html.erb Wed, 02 Dec 2020 18:22:21 -0300 +./app/views/sei_processes/show.json.jbuilder Wed, 02 Dec 2020 18:22:21 -0300 +./app/views/sei_processes/_form_edit.html.erb Wed, 02 Dec 2020 18:22:21 -0300 +./app/views/sei_processes/edit.html.erb Wed, 02 Dec 2020 18:22:21 -0300 +./app/views/sei_processes/show.html.erb Wed, 02 Dec 2020 18:22:21 -0300 +./app/views/sei_processes/_form_new.html.erb Wed, 02 Dec 2020 18:22:21 -0300 +./app/views/sei_processes/_show_accreditation_requirements.html.erb Wed, 02 Dec 2020 18:22:21 -0300 +./app/views/sei_processes/new.html.erb Wed, 02 Dec 2020 18:22:21 -0300 +./app/views/sei_processes/_index_user.html.erb Wed, 02 Dec 2020 18:22:21 -0300 +./app/views/layouts/application.html.erb Wed, 02 Dec 2020 18:21:45 -0300 +./app/views/layouts/mailer.html.erb Wed, 02 Dec 2020 18:21:45 -0300 +./app/views/layouts/mailer.text.erb Wed, 02 Dec 2020 18:21:45 -0300 +./app/views/accreditations/index.html.erb Wed, 02 Dec 2020 18:22:21 -0300 +./app/views/accreditations/index.json.jbuilder Wed, 02 Dec 2020 18:22:21 -0300 +./app/views/accreditations/show.json.jbuilder Wed, 02 Dec 2020 18:22:21 -0300 +./app/views/accreditations/_form_edit.html.erb Wed, 02 Dec 2020 18:22:21 -0300 +./app/views/accreditations/edit.html.erb Wed, 02 Dec 2020 18:22:21 -0300 +./app/views/accreditations/show.html.erb Wed, 02 Dec 2020 18:22:21 -0300 +./app/views/accreditations/_accreditation.json.jbuilder Wed, 02 Dec 2020 18:22:21 -0300 +./app/assets/config/manifest.js Wed, 02 Dec 2020 18:21:45 -0300 +./app/assets/javascripts/home.coffee Wed, 02 Dec 2020 18:21:45 -0300 +./app/assets/javascripts/cable.js Wed, 02 Dec 2020 18:21:45 -0300 +./app/assets/javascripts/sei_processes.coffee Wed, 02 Dec 2020 18:22:21 -0300 +./app/assets/javascripts/requirements.coffee Wed, 02 Dec 2020 18:22:21 -0300 +./app/assets/javascripts/accreditations.coffee Wed, 02 Dec 2020 18:22:21 -0300 +./app/assets/javascripts/application.js Wed, 02 Dec 2020 18:21:45 -0300 +./app/assets/stylesheets/home.scss Wed, 02 Dec 2020 18:21:45 -0300 +./app/assets/stylesheets/scaffolds.scss Wed, 02 Dec 2020 18:21:45 -0300 +./app/assets/stylesheets/application.css Wed, 02 Dec 2020 18:21:45 -0300 +./app/assets/stylesheets/accreditations.scss Wed, 02 Dec 2020 18:22:21 -0300 +./app/assets/stylesheets/sei_processes.scss Wed, 02 Dec 2020 18:22:21 -0300 +./app/assets/stylesheets/requirements.scss Wed, 02 Dec 2020 18:22:21 -0300 +./app/helpers/sei_processes_helper.rb Wed, 02 Dec 2020 18:22:21 -0300 +./app/helpers/requirements_helper.rb Wed, 02 Dec 2020 18:22:21 -0300 +./app/helpers/home_helper.rb Wed, 02 Dec 2020 18:21:45 -0300 +./app/helpers/accreditations_helper.rb Wed, 02 Dec 2020 18:22:21 -0300 +./app/helpers/application_helper.rb Wed, 02 Dec 2020 18:21:45 -0300 +./app/channels/application_cable/connection.rb Wed, 02 Dec 2020 18:21:45 -0300 +./app/channels/application_cable/channel.rb Wed, 02 Dec 2020 18:21:45 -0300 +./test/application_system_test_case.rb Wed, 02 Dec 2020 18:21:45 -0300 +./test/test_helper.rb Wed, 02 Dec 2020 18:21:45 -0300 +./bin/update Wed, 02 Dec 2020 18:21:45 -0300 +./bin/rake Wed, 02 Dec 2020 18:21:45 -0300 +./bin/setup Wed, 02 Dec 2020 18:21:45 -0300 +./bin/bundle Wed, 02 Dec 2020 18:21:45 -0300 +./bin/yarn Wed, 02 Dec 2020 18:21:45 -0300 +./bin/spring Wed, 02 Dec 2020 18:21:45 -0300 +./bin/rails Wed, 02 Dec 2020 18:21:45 -0300 +./config/cucumber.yml Wed, 02 Dec 2020 18:21:45 -0300 +./config/routes.rb Wed, 02 Dec 2020 18:22:21 -0300 +./config/locales/en.yml Wed, 02 Dec 2020 18:21:45 -0300 +./config/locales/devise.en.yml Wed, 02 Dec 2020 18:21:45 -0300 +./config/cable.yml Wed, 02 Dec 2020 18:21:45 -0300 +./config/environments/production.rb Wed, 02 Dec 2020 18:21:45 -0300 +./config/environments/development.rb Wed, 02 Dec 2020 18:21:45 -0300 +./config/environments/test.rb Wed, 02 Dec 2020 18:21:45 -0300 +./config/spring.rb Wed, 02 Dec 2020 18:21:45 -0300 +./config/environment.rb Wed, 02 Dec 2020 18:21:45 -0300 +./config/storage.yml Wed, 02 Dec 2020 18:21:45 -0300 +./config/application.rb Wed, 02 Dec 2020 18:21:45 -0300 +./config/puma.rb Wed, 02 Dec 2020 18:21:45 -0300 +./config/credentials.yml.enc Wed, 02 Dec 2020 18:21:45 -0300 +./config/database.yml Wed, 02 Dec 2020 18:22:21 -0300 +./config/boot.rb Wed, 02 Dec 2020 18:21:45 -0300 +./config/initializers/application_controller_renderer.rb Wed, 02 Dec 2020 18:21:45 -0300 +./config/initializers/backtrace_silencers.rb Wed, 02 Dec 2020 18:21:45 -0300 +./config/initializers/mime_types.rb Wed, 02 Dec 2020 18:21:45 -0300 +./config/initializers/filter_parameter_logging.rb Wed, 02 Dec 2020 18:21:45 -0300 +./config/initializers/wrap_parameters.rb Wed, 02 Dec 2020 18:21:45 -0300 +./config/initializers/assets.rb Wed, 02 Dec 2020 18:21:45 -0300 +./config/initializers/cookies_serializer.rb Wed, 02 Dec 2020 18:21:45 -0300 +./config/initializers/devise.rb Wed, 02 Dec 2020 18:21:45 -0300 +./config/initializers/content_security_policy.rb Wed, 02 Dec 2020 18:21:45 -0300 +./config/initializers/inflections.rb Wed, 02 Dec 2020 18:21:45 -0300 +./detailed/app/models/accreditation.rb_cyclo.html Wed, 02 Dec 2020 18:22:21 -0300 +./detailed/app/models/sei_process.rb_cyclo.html Wed, 02 Dec 2020 18:22:21 -0300 +./detailed/app/models/user.rb_cyclo.html Wed, 02 Dec 2020 18:22:21 -0300 +./detailed/app/models/requirement.rb_cyclo.html Wed, 02 Dec 2020 18:22:21 -0300 +./detailed/app/controllers/accreditations_controller.rb_cyclo.html Wed, 02 Dec 2020 18:22:21 -0300 +./detailed/app/controllers/requirements_controller.rb_cyclo.html Wed, 02 Dec 2020 18:22:21 -0300 +./detailed/app/controllers/application_controller.rb_cyclo.html Wed, 02 Dec 2020 18:22:21 -0300 +./detailed/app/controllers/home_controller.rb_cyclo.html Wed, 02 Dec 2020 18:22:21 -0300 +./detailed/app/controllers/sei_processes_controller.rb_cyclo.html Wed, 02 Dec 2020 18:22:21 -0300 +./detailed/index_cyclo.html Wed, 02 Dec 2020 18:22:21 -0300 +./detailed/cmd.txt Wed, 02 Dec 2020 18:22:21 -0300 +./config.ru Wed, 02 Dec 2020 18:21:45 -0300 +./features/credenciamento_periodo.feature Wed, 02 Dec 2020 18:22:21 -0300 +./features/resources/ship.jpg Wed, 02 Dec 2020 18:22:21 -0300 +./features/resources/Formulário de Credenciamento.doc Wed, 02 Dec 2020 18:22:21 -0300 +./features/requisitos_necessarios.feature Wed, 02 Dec 2020 18:22:21 -0300 +./features/gerenciar_solicitacoes_credenciamento.feature Wed, 02 Dec 2020 18:22:21 -0300 +./features/support/selectors.rb Wed, 02 Dec 2020 18:21:45 -0300 +./features/support/env.rb Wed, 02 Dec 2020 18:22:21 -0300 +./features/support/paths.rb Wed, 02 Dec 2020 18:22:21 -0300 +./features/support/hooks.rb Wed, 02 Dec 2020 18:21:45 -0300 +./features/step_definitions/credenciamento_professores_steps.rb Wed, 02 Dec 2020 18:22:21 -0300 +./features/abrir_solicitacao_credenciamento.feature Wed, 02 Dec 2020 18:22:21 -0300 +./spec/spec_helper.rb Wed, 02 Dec 2020 18:22:21 -0300 +./spec/models/requirement_spec.rb Wed, 02 Dec 2020 18:22:21 -0300 +./spec/models/sei_process_spec.rb Wed, 02 Dec 2020 18:22:21 -0300 +./spec/models/user_spec.rb Wed, 02 Dec 2020 18:22:21 -0300 +./spec/models/accreditation_spec.rb Wed, 02 Dec 2020 18:22:21 -0300 +./spec/fixtures/users.yml Wed, 02 Dec 2020 18:21:45 -0300 +./spec/routing/requirements_routing_spec.rb Wed, 02 Dec 2020 18:22:21 -0300 +./spec/routing/accreditations_routing_spec.rb Wed, 02 Dec 2020 18:22:21 -0300 +./spec/routing/sei_processes_routing_spec.rb Wed, 02 Dec 2020 18:22:21 -0300 +./spec/controllers/sei_processes_controller_spec.rb Wed, 02 Dec 2020 18:22:21 -0300 +./spec/controllers/home_controller_spec.rb Wed, 02 Dec 2020 18:21:45 -0300 +./spec/controllers/requirements_controller_spec.rb Wed, 02 Dec 2020 18:22:21 -0300 +./spec/controllers/accreditations_controller_spec.rb Wed, 02 Dec 2020 18:22:21 -0300 +./spec/views/home/index.html.erb_spec.rb Wed, 02 Dec 2020 18:22:21 -0300 +./spec/rails_helper.rb Wed, 02 Dec 2020 18:22:21 -0300 +./spec/helpers/home_helper_spec.rb Wed, 02 Dec 2020 18:22:21 -0300 +./spike.rb Wed, 02 Dec 2020 18:22:21 -0300 +./script/cucumber Wed, 02 Dec 2020 18:21:45 -0300 +./README.md Wed, 02 Dec 2020 18:21:45 -0300 +./Rakefile Wed, 02 Dec 2020 18:21:45 -0300 +./public/TestImage.png Wed, 02 Dec 2020 18:22:21 -0300 +./public/favicon.ico Wed, 02 Dec 2020 18:21:45 -0300 +./public/422.html Wed, 02 Dec 2020 18:21:45 -0300 +./public/apple-touch-icon.png Wed, 02 Dec 2020 18:21:45 -0300 +./public/500.html Wed, 02 Dec 2020 18:21:45 -0300 +./public/404.html Wed, 02 Dec 2020 18:21:45 -0300 +./public/apple-touch-icon-precomposed.png Wed, 02 Dec 2020 18:21:45 -0300 +./public/robots.txt Wed, 02 Dec 2020 18:21:45 -0300 +./package.json Wed, 02 Dec 2020 18:21:45 -0300 +./lib/tasks/cucumber.rake Wed, 02 Dec 2020 18:21:45 -0300 +./db/schema.rb Wed, 02 Dec 2020 18:22:21 -0300 +./db/seeds.rb Wed, 02 Dec 2020 18:22:21 -0300 +./db/migrate/20191114163205_add_info_to_users.rb Wed, 02 Dec 2020 18:21:45 -0300 +./db/migrate/20201114202425_create_accreditations.rb Wed, 02 Dec 2020 18:22:21 -0300 +./db/migrate/20201113222004_create_sei_processes.rb Wed, 02 Dec 2020 18:22:21 -0300 +./db/migrate/20201113222556_create_active_storage_tables.active_storage.rb Wed, 02 Dec 2020 18:22:21 -0300 +./db/migrate/20191114162918_devise_create_users.rb Wed, 02 Dec 2020 18:21:45 -0300 +./db/migrate/20201113221041_create_requirements.rb Wed, 02 Dec 2020 18:22:21 -0300 +./Gemfile Wed, 02 Dec 2020 18:22:21 -0300 +./Gemfile.lock Wed, 02 Dec 2020 18:22:21 -0300 +./cucumber.yaml Wed, 02 Dec 2020 18:21:45 -0300 +./features.html Wed, 02 Dec 2020 18:22:21 -0300 +./coverage/index.html Wed, 02 Dec 2020 18:22:21 -0300 +./coverage/assets/0.12.3/images/ui-icons_cd0a0a_256x240.png Wed, 02 Dec 2020 18:22:21 -0300 +./coverage/assets/0.12.3/images/ui-icons_888888_256x240.png Wed, 02 Dec 2020 18:22:21 -0300 +./coverage/assets/0.12.3/images/ui-bg_glass_75_dadada_1x400.png Wed, 02 Dec 2020 18:22:21 -0300 +./coverage/assets/0.12.3/images/ui-icons_2e83ff_256x240.png Wed, 02 Dec 2020 18:22:21 -0300 +./coverage/assets/0.12.3/images/ui-bg_flat_75_ffffff_40x100.png Wed, 02 Dec 2020 18:22:21 -0300 +./coverage/assets/0.12.3/images/ui-bg_glass_75_e6e6e6_1x400.png Wed, 02 Dec 2020 18:22:21 -0300 +./coverage/assets/0.12.3/images/ui-bg_glass_65_ffffff_1x400.png Wed, 02 Dec 2020 18:22:21 -0300 +./coverage/assets/0.12.3/images/ui-bg_glass_95_fef1ec_1x400.png Wed, 02 Dec 2020 18:22:21 -0300 +./coverage/assets/0.12.3/images/ui-icons_222222_256x240.png Wed, 02 Dec 2020 18:22:21 -0300 +./coverage/assets/0.12.3/images/ui-bg_highlight-soft_75_cccccc_1x100.png Wed, 02 Dec 2020 18:22:21 -0300 +./coverage/assets/0.12.3/images/ui-bg_glass_55_fbf9ee_1x400.png Wed, 02 Dec 2020 18:22:21 -0300 +./coverage/assets/0.12.3/images/ui-icons_454545_256x240.png Wed, 02 Dec 2020 18:22:21 -0300 +./coverage/assets/0.12.3/images/ui-bg_flat_0_aaaaaa_40x100.png Wed, 02 Dec 2020 18:22:21 -0300 +./coverage/assets/0.12.3/application.css Wed, 02 Dec 2020 18:22:21 -0300 +./coverage/assets/0.12.3/loading.gif Wed, 02 Dec 2020 18:22:21 -0300 +./coverage/assets/0.12.3/colorbox/border.png Wed, 02 Dec 2020 18:22:21 -0300 +./coverage/assets/0.12.3/colorbox/loading.gif Wed, 02 Dec 2020 18:22:21 -0300 +./coverage/assets/0.12.3/colorbox/controls.png Wed, 02 Dec 2020 18:22:21 -0300 +./coverage/assets/0.12.3/colorbox/loading_background.png Wed, 02 Dec 2020 18:22:21 -0300 +./coverage/assets/0.12.3/favicon_red.png Wed, 02 Dec 2020 18:22:21 -0300 +./coverage/assets/0.12.3/favicon_green.png Wed, 02 Dec 2020 18:22:21 -0300 +./coverage/assets/0.12.3/favicon_yellow.png Wed, 02 Dec 2020 18:22:21 -0300 +./coverage/assets/0.12.3/DataTables-1.10.20/images/sort_asc_disabled.png Wed, 02 Dec 2020 18:22:21 -0300 +./coverage/assets/0.12.3/DataTables-1.10.20/images/sort_both.png Wed, 02 Dec 2020 18:22:21 -0300 +./coverage/assets/0.12.3/DataTables-1.10.20/images/sort_desc_disabled.png Wed, 02 Dec 2020 18:22:21 -0300 +./coverage/assets/0.12.3/DataTables-1.10.20/images/sort_desc.png Wed, 02 Dec 2020 18:22:21 -0300 +./coverage/assets/0.12.3/DataTables-1.10.20/images/sort_asc.png Wed, 02 Dec 2020 18:22:21 -0300 +./coverage/assets/0.12.3/magnify.png Wed, 02 Dec 2020 18:22:21 -0300 +./coverage/assets/0.12.3/application.js Wed, 02 Dec 2020 18:22:21 -0300 diff --git a/doc/css/fonts.css b/doc/css/fonts.css new file mode 100644 index 00000000..57302b51 --- /dev/null +++ b/doc/css/fonts.css @@ -0,0 +1,167 @@ +/* + * Copyright 2010, 2012 Adobe Systems Incorporated (http://www.adobe.com/), + * with Reserved Font Name "Source". All Rights Reserved. Source is a + * trademark of Adobe Systems Incorporated in the United States and/or other + * countries. + * + * This Font Software is licensed under the SIL Open Font License, Version + * 1.1. + * + * This license is copied below, and is also available with a FAQ at: + * http://scripts.sil.org/OFL + */ + +@font-face { + font-family: "Source Code Pro"; + font-style: normal; + font-weight: 400; + src: local("Source Code Pro"), + local("SourceCodePro-Regular"), + url("../fonts/SourceCodePro-Regular.ttf") format("truetype"); +} + +@font-face { + font-family: "Source Code Pro"; + font-style: normal; + font-weight: 700; + src: local("Source Code Pro Bold"), + local("SourceCodePro-Bold"), + url("../fonts/SourceCodePro-Bold.ttf") format("truetype"); +} + +/* + * Copyright (c) 2010, Łukasz Dziedzic (dziedzic@typoland.com), + * with Reserved Font Name Lato. + * + * This Font Software is licensed under the SIL Open Font License, Version + * 1.1. + * + * This license is copied below, and is also available with a FAQ at: + * http://scripts.sil.org/OFL + */ + +@font-face { + font-family: "Lato"; + font-style: normal; + font-weight: 300; + src: local("Lato Light"), + local("Lato-Light"), + url("../fonts/Lato-Light.ttf") format("truetype"); +} + +@font-face { + font-family: "Lato"; + font-style: italic; + font-weight: 300; + src: local("Lato Light Italic"), + local("Lato-LightItalic"), + url("../fonts/Lato-LightItalic.ttf") format("truetype"); +} + +@font-face { + font-family: "Lato"; + font-style: normal; + font-weight: 700; + src: local("Lato Regular"), + local("Lato-Regular"), + url("../fonts/Lato-Regular.ttf") format("truetype"); +} + +@font-face { + font-family: "Lato"; + font-style: italic; + font-weight: 700; + src: local("Lato Italic"), + local("Lato-Italic"), + url("../fonts/Lato-RegularItalic.ttf") format("truetype"); +} + +/* + * ----------------------------------------------------------- + * SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 + * ----------------------------------------------------------- + * + * PREAMBLE + * The goals of the Open Font License (OFL) are to stimulate worldwide + * development of collaborative font projects, to support the font creation + * efforts of academic and linguistic communities, and to provide a free and + * open framework in which fonts may be shared and improved in partnership + * with others. + * + * The OFL allows the licensed fonts to be used, studied, modified and + * redistributed freely as long as they are not sold by themselves. The + * fonts, including any derivative works, can be bundled, embedded, + * redistributed and/or sold with any software provided that any reserved + * names are not used by derivative works. The fonts and derivatives, + * however, cannot be released under any other type of license. The + * requirement for fonts to remain under this license does not apply + * to any document created using the fonts or their derivatives. + * + * DEFINITIONS + * "Font Software" refers to the set of files released by the Copyright + * Holder(s) under this license and clearly marked as such. This may + * include source files, build scripts and documentation. + * + * "Reserved Font Name" refers to any names specified as such after the + * copyright statement(s). + * + * "Original Version" refers to the collection of Font Software components as + * distributed by the Copyright Holder(s). + * + * "Modified Version" refers to any derivative made by adding to, deleting, + * or substituting -- in part or in whole -- any of the components of the + * Original Version, by changing formats or by porting the Font Software to a + * new environment. + * + * "Author" refers to any designer, engineer, programmer, technical + * writer or other person who contributed to the Font Software. + * + * PERMISSION & CONDITIONS + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of the Font Software, to use, study, copy, merge, embed, modify, + * redistribute, and sell modified and unmodified copies of the Font + * Software, subject to the following conditions: + * + * 1) Neither the Font Software nor any of its individual components, + * in Original or Modified Versions, may be sold by itself. + * + * 2) Original or Modified Versions of the Font Software may be bundled, + * redistributed and/or sold with any software, provided that each copy + * contains the above copyright notice and this license. These can be + * included either as stand-alone text files, human-readable headers or + * in the appropriate machine-readable metadata fields within text or + * binary files as long as those fields can be easily viewed by the user. + * + * 3) No Modified Version of the Font Software may use the Reserved Font + * Name(s) unless explicit written permission is granted by the corresponding + * Copyright Holder. This restriction only applies to the primary font name as + * presented to the users. + * + * 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font + * Software shall not be used to promote, endorse or advertise any + * Modified Version, except to acknowledge the contribution(s) of the + * Copyright Holder(s) and the Author(s) or with their explicit written + * permission. + * + * 5) The Font Software, modified or unmodified, in part or in whole, + * must be distributed entirely under this license, and must not be + * distributed under any other license. The requirement for fonts to + * remain under this license does not apply to any document created + * using the Font Software. + * + * TERMINATION + * This license becomes null and void if any of the above conditions are + * not met. + * + * DISCLAIMER + * THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT + * OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE + * COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL + * DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM + * OTHER DEALINGS IN THE FONT SOFTWARE. + */ + diff --git a/doc/css/rdoc.css b/doc/css/rdoc.css new file mode 100644 index 00000000..a52e44ff --- /dev/null +++ b/doc/css/rdoc.css @@ -0,0 +1,619 @@ +/* + * "Darkfish" Rdoc CSS + * $Id: rdoc.css 54 2009-01-27 01:09:48Z deveiant $ + * + * Author: Michael Granger + * + */ + +/* vim: ft=css et sw=2 ts=2 sts=2 */ +/* Base Green is: #6C8C22 */ + +.hide { display: none !important; } + +* { padding: 0; margin: 0; } + +body { + background: #fafafa; + font-family: Lato, sans-serif; + font-weight: 300; +} + +h1 span, +h2 span, +h3 span, +h4 span, +h5 span, +h6 span { + position: relative; + + display: none; + padding-left: 1em; + line-height: 0; + vertical-align: baseline; + font-size: 10px; +} + +h1 span { top: -1.3em; } +h2 span { top: -1.2em; } +h3 span { top: -1.0em; } +h4 span { top: -0.8em; } +h5 span { top: -0.5em; } +h6 span { top: -0.5em; } + +h1:hover span, +h2:hover span, +h3:hover span, +h4:hover span, +h5:hover span, +h6:hover span { + display: inline; +} + +h1:target, +h2:target, +h3:target, +h4:target, +h5:target, +h6:target { + margin-left: -10px; + border-left: 10px solid #f1edba; +} + +:link, +:visited { + color: #6C8C22; + text-decoration: none; +} + +:link:hover, +:visited:hover { + border-bottom: 1px dotted #6C8C22; +} + +code, +pre { + font-family: "Source Code Pro", Monaco, monospace; + background-color: rgba(27,31,35,0.05); + padding: 0em 0.2em; + border-radius: 0.2em; +} + +/* @group Generic Classes */ + +.initially-hidden { + display: none; +} + +#search-field { + width: 98%; + background: white; + border: none; + height: 1.5em; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + text-align: left; +} +#search-field:focus { + background: #f1edba; +} +#search-field:-moz-placeholder, +#search-field::-webkit-input-placeholder { + font-weight: bold; + color: #666; +} + +.missing-docs { + font-size: 120%; + background: white url(../images/wrench_orange.png) no-repeat 4px center; + color: #ccc; + line-height: 2em; + border: 1px solid #d00; + opacity: 1; + padding-left: 20px; + text-indent: 24px; + letter-spacing: 3px; + font-weight: bold; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; +} + +.target-section { + border: 2px solid #dcce90; + border-left-width: 8px; + padding: 0 1em; + background: #fff3c2; +} + +/* @end */ + +/* @group Index Page, Standalone file pages */ +.table-of-contents ul { + margin: 1em; + list-style: none; +} + +.table-of-contents ul ul { + margin-top: 0.25em; +} + +.table-of-contents ul :link, +.table-of-contents ul :visited { + font-size: 16px; +} + +.table-of-contents li { + margin-bottom: 0.25em; +} + +.table-of-contents li .toc-toggle { + width: 16px; + height: 16px; + background: url(../images/add.png) no-repeat; +} + +.table-of-contents li .toc-toggle.open { + background: url(../images/delete.png) no-repeat; +} + +/* @end */ + +/* @group Top-Level Structure */ + +nav { + float: left; + width: 260px; + font-family: Helvetica, sans-serif; + font-size: 14px; +} + +main { + display: block; + margin: 0 2em 5em 260px; + padding-left: 20px; + min-width: 340px; + font-size: 16px; +} + +main h1, +main h2, +main h3, +main h4, +main h5, +main h6 { + font-family: Helvetica, sans-serif; +} + +.table-of-contents main { + margin-left: 2em; +} + +#validator-badges { + clear: both; + margin: 1em 1em 2em; + font-size: smaller; +} + +/* @end */ + +/* @group navigation */ +nav { + margin-bottom: 1em; +} + +nav .nav-section { + margin-top: 2em; + border-top: 2px solid #aaa; + font-size: 90%; + overflow: hidden; +} + +nav h2 { + margin: 0; + padding: 2px 8px 2px 8px; + background-color: #e8e8e8; + color: #555; + font-size: 125%; + text-align: center; +} + +nav h3, +#table-of-contents-navigation { + margin: 0; + padding: 2px 8px 2px 8px; + text-align: right; + background-color: #e8e8e8; + color: #555; +} + +nav ul, +nav dl, +nav p { + padding: 4px 8px 0; + list-style: none; +} + +#project-navigation .nav-section { + margin: 0; + border-top: 0; +} + +#home-section h2 { + text-align: center; +} + +#table-of-contents-navigation { + font-size: 1.2em; + font-weight: bold; + text-align: center; +} + +#search-section { + margin-top: 0; + border-top: 0; +} + +#search-field-wrapper { + border-top: 1px solid #aaa; + border-bottom: 1px solid #aaa; + padding: 3px 8px; + background-color: #e8e8e8; + color: #555; +} + +ul.link-list li { + white-space: nowrap; + line-height: 1.4em; +} + +ul.link-list .type { + font-size: 8px; + text-transform: uppercase; + color: white; + background: #969696; + padding: 2px 4px; + -webkit-border-radius: 5px; +} + +dl.label-list dt { + float: left; + margin-right: 1em; +} + +.calls-super { + background: url(../images/arrow_up.png) no-repeat right center; +} + +/* @end */ + +/* @group Documentation Section */ +main { + color: #333; +} + +main > h1:first-child, +main > h2:first-child, +main > h3:first-child, +main > h4:first-child, +main > h5:first-child, +main > h6:first-child { + margin-top: 0px; +} + +main sup { + vertical-align: super; + font-size: 0.8em; +} + +/* The heading with the class name */ +main h1[class] { + margin-top: 0; + margin-bottom: 1em; + font-size: 2em; + color: #6C8C22; +} + +main h1 { + margin: 2em 0 0.5em; + font-size: 1.7em; +} + +main h2 { + margin: 2em 0 0.5em; + font-size: 1.5em; +} + +main h3 { + margin: 2em 0 0.5em; + font-size: 1.2em; +} + +main h4 { + margin: 2em 0 0.5em; + font-size: 1.1em; +} + +main h5 { + margin: 2em 0 0.5em; + font-size: 1em; +} + +main h6 { + margin: 2em 0 0.5em; + font-size: 1em; +} + +main p { + margin: 0 0 0.5em; + line-height: 1.4em; +} + +main pre { + margin: 1.2em 0.5em; + padding: 1em; + font-size: 0.8em; +} + +main hr { + margin: 1.5em 1em; + border: 2px solid #ddd; +} + +main blockquote { + margin: 0 2em 1.2em 1.2em; + padding-left: 0.5em; + border-left: 2px solid #ddd; +} + +main ol, +main ul { + margin: 1em 2em; +} + +main li > p { + margin-bottom: 0.5em; +} + +main dl { + margin: 1em 0.5em; +} + +main dt { + margin-bottom: 0.5em; + font-weight: bold; +} + +main dd { + margin: 0 1em 1em 0.5em; +} + +main header h2 { + margin-top: 2em; + border-width: 0; + border-top: 4px solid #bbb; + font-size: 130%; +} + +main header h3 { + margin: 2em 0 1.5em; + border-width: 0; + border-top: 3px solid #bbb; + font-size: 120%; +} + +.documentation-section-title { + position: relative; +} +.documentation-section-title .section-click-top { + position: absolute; + top: 6px; + left: 12px; + font-size: 10px; + color: #9b9877; + visibility: hidden; + padding-left: 0.5px; +} + +.documentation-section-title:hover .section-click-top { + visibility: visible; +} + +.constants-list > dl { + margin: 1em 0 2em; + border: 0; +} + +.constants-list > dl dt { + margin-bottom: 0.75em; + padding-left: 0; + font-family: "Source Code Pro", Monaco, monospace; + font-size: 110%; +} + +.constants-list > dl dt a { + color: inherit; +} + +.constants-list > dl dd { + margin: 0 0 2em 0; + padding: 0; + color: #666; +} + +.documentation-section h2 { + position: relative; +} + +.documentation-section h2 a { + position: absolute; + top: 8px; + right: 10px; + font-size: 12px; + color: #9b9877; + visibility: hidden; +} + +.documentation-section h2:hover a { + visibility: visible; +} + +/* @group Method Details */ + +main .method-source-code { + max-height: 0; + overflow: hidden; + transition-duration: 200ms; + transition-delay: 0ms; + transition-property: all; + transition-timing-function: ease-in-out; +} + +main .method-source-code.active-menu { + max-height: 100vh; +} + +main .method-description .method-calls-super { + color: #333; + font-weight: bold; +} + +main .method-detail { + margin-bottom: 2.5em; + cursor: pointer; +} + +main .method-detail:target { + margin-left: -10px; + border-left: 10px solid #f1edba; +} + +main .method-heading { + position: relative; + font-family: "Source Code Pro", Monaco, monospace; + font-size: 110%; + font-weight: bold; + color: #333; +} +main .method-heading :link, +main .method-heading :visited { + color: inherit; +} +main .method-click-advice { + position: absolute; + top: 2px; + right: 5px; + font-size: 12px; + color: #9b9877; + visibility: hidden; + padding-right: 20px; + line-height: 20px; + background: url(../images/zoom.png) no-repeat right top; +} +main .method-heading:hover .method-click-advice { + visibility: visible; +} + +main .method-alias .method-heading { + color: #666; +} + +main .method-description, +main .aliases { + margin-top: 0.75em; + color: #333; +} + +main .aliases { + padding-top: 4px; + font-style: italic; + cursor: default; +} +main .method-description ul { + margin-left: 1.5em; +} + +main #attribute-method-details .method-detail:hover { + background-color: transparent; + cursor: default; +} +main .attribute-access-type { + text-transform: uppercase; + padding: 0 1em; +} +/* @end */ + +/* @end */ + +/* @group Source Code */ + +pre { + margin: 0.5em 0; + border: 1px dashed #999; + padding: 0.5em; + background: #262626; + color: white; + overflow: auto; +} + +.ruby-constant { color: #7fffd4; background: transparent; } +.ruby-keyword { color: #00ffff; background: transparent; } +.ruby-ivar { color: #eedd82; background: transparent; } +.ruby-operator { color: #00ffee; background: transparent; } +.ruby-identifier { color: #ffdead; background: transparent; } +.ruby-node { color: #ffa07a; background: transparent; } +.ruby-comment { color: #dc0000; background: transparent; } +.ruby-regexp { color: #ffa07a; background: transparent; } +.ruby-value { color: #7fffd4; background: transparent; } + +/* @end */ + + +/* @group search results */ +#search-results { + font-family: Lato, sans-serif; + font-weight: 300; +} + +#search-results .search-match { + font-family: Helvetica, sans-serif; + font-weight: normal; +} + +#search-results .search-selected { + background: #e8e8e8; + border-bottom: 1px solid transparent; +} + +#search-results li { + list-style: none; + border-bottom: 1px solid #aaa; + margin-bottom: 0.5em; +} + +#search-results li:last-child { + border-bottom: none; + margin-bottom: 0; +} + +#search-results li p { + padding: 0; + margin: 0.5em; +} + +#search-results .search-namespace { + font-weight: bold; +} + +#search-results li em { + background: yellow; + font-style: normal; +} + +#search-results pre { + margin: 0.5em; + font-family: "Source Code Pro", Monaco, monospace; +} + +/* @end */ + diff --git a/doc/cucumber_yaml.html b/doc/cucumber_yaml.html new file mode 100644 index 00000000..0b5e3862 --- /dev/null +++ b/doc/cucumber_yaml.html @@ -0,0 +1,202 @@ + + + + + + +cucumber.yaml - RDoc Documentation + + + + + + + + + + + + + + + + + + +
              +
              + +

              default: -p html -p bdd -p json html: –format html –out=features.html dot: –format progress bdd: –format pretty json: –format json -o “report.json”

              + +
              + + + + + diff --git a/doc/detailed/app/controllers/accreditations_controller_rb_cyclo_html.html b/doc/detailed/app/controllers/accreditations_controller_rb_cyclo_html.html new file mode 100644 index 00000000..3842c4c0 --- /dev/null +++ b/doc/detailed/app/controllers/accreditations_controller_rb_cyclo_html.html @@ -0,0 +1,292 @@ + + + + + + +accreditations_controller.rb_cyclo.html - RDoc Documentation + + + + + + + + + + + + + + + + + + +
              + +

              <html><head><title>Cyclometric Complexity</title></head> <style> body {

              + +
              margin: 20px;
              +padding: 0;
              +font-size: 12px;
              +font-family: bitstream vera sans, verdana, arial, sans serif;
              +background-color: #efefef;
              + +

              }

              + +

              table {

              + +
              border-collapse: collapse;
              +/*border-spacing: 0;*/
              +border: 1px solid #666;
              +background-color: #fff;
              +margin-bottom: 20px;
              + +

              }

              + +

              table, th, th+th, td, td+td {

              + +
              border: 1px solid #ccc;
              + +

              }

              + +

              table th {

              + +
              font-size: 12px;
              +color: #fc0;
              +padding: 4px 0;
              +background-color: #336;
              + +

              }

              + +

              th, td {

              + +
              padding: 4px 10px;
              + +

              }

              + +

              td {

              + +
              font-size: 13px;
              + +

              }

              + +

              .class_name {

              + +
              font-size: 17px;
              +margin: 20px 0 0;
              + +

              }

              + +

              .class_complexity { margin: 0 auto; }

              + +

              .class_complexity>.class_complexity {

              + +
              margin: 0;
              + +

              }

              + +

              .class_total_complexity, .class_total_lines, .start_token_count, .file_count {

              + +
              font-size: 13px;
              +font-weight: bold;
              + +

              }

              + +

              .class_total_complexity, .class_total_lines {

              + +
              color: #c00;
              + +

              }

              + +

              .start_token_count, .file_count {

              + +
              color: #333;
              + +

              }

              + +

              .warning {

              + +
              background-color: yellow;
              + +

              }

              + +

              .error {

              + +
              background-color: #f00;
              + +

              } </style> <body> <div class=“class_complexity”> <h2 class=“class_name”>Class : AccreditationsController</h2> <div class=“class_total_complexity”>Total Complexity: 22</div> <div class=“class_total_lines”>Total Lines: 69</div> <table width=“100%” border=“1”> <tr><th>Method</th><th>Complexity</th><th># Lines</th></tr> <tr><td>index</td><td>2</td><td>6</td></tr> <tr><td>show</td><td>1</td><td>1</td></tr> <tr><td>new</td><td>1</td><td>1</td></tr> <tr><td>edit</td><td>1</td><td>1</td></tr> <tr><td>create</td><td>1</td><td>1</td></tr> <tr><td>update</td><td>7</td><td>10</td></tr> <tr><td>destroy</td><td>7</td><td>10</td></tr> <tr><td>set_accreditation</td><td>1</td><td>2</td></tr> <tr><td>accreditation_params</td><td>1</td><td>2</td></tr> </table> </div> </body> </html>

              + +
              + + + + + diff --git a/doc/detailed/app/controllers/application_controller_rb_cyclo_html.html b/doc/detailed/app/controllers/application_controller_rb_cyclo_html.html new file mode 100644 index 00000000..b1612c38 --- /dev/null +++ b/doc/detailed/app/controllers/application_controller_rb_cyclo_html.html @@ -0,0 +1,292 @@ + + + + + + +application_controller.rb_cyclo.html - RDoc Documentation + + + + + + + + + + + + + + + + + + +
              + +

              <html><head><title>Cyclometric Complexity</title></head> <style> body {

              + +
              margin: 20px;
              +padding: 0;
              +font-size: 12px;
              +font-family: bitstream vera sans, verdana, arial, sans serif;
              +background-color: #efefef;
              + +

              }

              + +

              table {

              + +
              border-collapse: collapse;
              +/*border-spacing: 0;*/
              +border: 1px solid #666;
              +background-color: #fff;
              +margin-bottom: 20px;
              + +

              }

              + +

              table, th, th+th, td, td+td {

              + +
              border: 1px solid #ccc;
              + +

              }

              + +

              table th {

              + +
              font-size: 12px;
              +color: #fc0;
              +padding: 4px 0;
              +background-color: #336;
              + +

              }

              + +

              th, td {

              + +
              padding: 4px 10px;
              + +

              }

              + +

              td {

              + +
              font-size: 13px;
              + +

              }

              + +

              .class_name {

              + +
              font-size: 17px;
              +margin: 20px 0 0;
              + +

              }

              + +

              .class_complexity { margin: 0 auto; }

              + +

              .class_complexity>.class_complexity {

              + +
              margin: 0;
              + +

              }

              + +

              .class_total_complexity, .class_total_lines, .start_token_count, .file_count {

              + +
              font-size: 13px;
              +font-weight: bold;
              + +

              }

              + +

              .class_total_complexity, .class_total_lines {

              + +
              color: #c00;
              + +

              }

              + +

              .start_token_count, .file_count {

              + +
              color: #333;
              + +

              }

              + +

              .warning {

              + +
              background-color: yellow;
              + +

              }

              + +

              .error {

              + +
              background-color: #f00;
              + +

              } </style> <body> <div class=“class_complexity”> <h2 class=“class_name”>Global : </h2> <div class=“class_total_complexity”>Total Complexity: 0</div> <div class=“class_total_lines”>Total Lines: 1</div> <table width=“100%” border=“1”> <tr><th>Method</th><th>Complexity</th><th># Lines</th></tr> </table> </div> <div class=“class_complexity”> <h2 class=“class_name”>Module : Current</h2> <div class=“class_total_complexity”>Total Complexity: 0</div> <div class=“class_total_lines”>Total Lines: 2</div> <table width=“100%” border=“1”> <tr><th>Method</th><th>Complexity</th><th># Lines</th></tr> </table> </div> <div class=“class_complexity”> <h2 class=“class_name”>Class : ApplicationController</h2> <div class=“class_total_complexity”>Total Complexity: 3</div> <div class=“class_total_lines”>Total Lines: 18</div> <table width=“100%” border=“1”> <tr><th>Method</th><th>Complexity</th><th># Lines</th></tr> <tr><td>set_current_user</td><td>1</td><td>6</td></tr> <tr><td>configure_permitted_parameters</td><td>1</td><td>2</td></tr> </table> </div> </body> </html>

              + +
              + + + + + diff --git a/doc/detailed/app/controllers/home_controller_rb_cyclo_html.html b/doc/detailed/app/controllers/home_controller_rb_cyclo_html.html new file mode 100644 index 00000000..7fdaaa30 --- /dev/null +++ b/doc/detailed/app/controllers/home_controller_rb_cyclo_html.html @@ -0,0 +1,292 @@ + + + + + + +home_controller.rb_cyclo.html - RDoc Documentation + + + + + + + + + + + + + + + + + + +
              + +

              <html><head><title>Cyclometric Complexity</title></head> <style> body {

              + +
              margin: 20px;
              +padding: 0;
              +font-size: 12px;
              +font-family: bitstream vera sans, verdana, arial, sans serif;
              +background-color: #efefef;
              + +

              }

              + +

              table {

              + +
              border-collapse: collapse;
              +/*border-spacing: 0;*/
              +border: 1px solid #666;
              +background-color: #fff;
              +margin-bottom: 20px;
              + +

              }

              + +

              table, th, th+th, td, td+td {

              + +
              border: 1px solid #ccc;
              + +

              }

              + +

              table th {

              + +
              font-size: 12px;
              +color: #fc0;
              +padding: 4px 0;
              +background-color: #336;
              + +

              }

              + +

              th, td {

              + +
              padding: 4px 10px;
              + +

              }

              + +

              td {

              + +
              font-size: 13px;
              + +

              }

              + +

              .class_name {

              + +
              font-size: 17px;
              +margin: 20px 0 0;
              + +

              }

              + +

              .class_complexity { margin: 0 auto; }

              + +

              .class_complexity>.class_complexity {

              + +
              margin: 0;
              + +

              }

              + +

              .class_total_complexity, .class_total_lines, .start_token_count, .file_count {

              + +
              font-size: 13px;
              +font-weight: bold;
              + +

              }

              + +

              .class_total_complexity, .class_total_lines {

              + +
              color: #c00;
              + +

              }

              + +

              .start_token_count, .file_count {

              + +
              color: #333;
              + +

              }

              + +

              .warning {

              + +
              background-color: yellow;
              + +

              }

              + +

              .error {

              + +
              background-color: #f00;
              + +

              } </style> <body> <div class=“class_complexity”> <h2 class=“class_name”>Class : HomeController</h2> <div class=“class_total_complexity”>Total Complexity: 1</div> <div class=“class_total_lines”>Total Lines: 3</div> <table width=“100%” border=“1”> <tr><th>Method</th><th>Complexity</th><th># Lines</th></tr> <tr><td>index</td><td>1</td><td>1</td></tr> </table> </div> </body> </html>

              + +
              + + + + + diff --git a/doc/detailed/app/controllers/requirements_controller_rb_cyclo_html.html b/doc/detailed/app/controllers/requirements_controller_rb_cyclo_html.html new file mode 100644 index 00000000..d3cc86e2 --- /dev/null +++ b/doc/detailed/app/controllers/requirements_controller_rb_cyclo_html.html @@ -0,0 +1,292 @@ + + + + + + +requirements_controller.rb_cyclo.html - RDoc Documentation + + + + + + + + + + + + + + + + + + +
              + +

              <html><head><title>Cyclometric Complexity</title></head> <style> body {

              + +
              margin: 20px;
              +padding: 0;
              +font-size: 12px;
              +font-family: bitstream vera sans, verdana, arial, sans serif;
              +background-color: #efefef;
              + +

              }

              + +

              table {

              + +
              border-collapse: collapse;
              +/*border-spacing: 0;*/
              +border: 1px solid #666;
              +background-color: #fff;
              +margin-bottom: 20px;
              + +

              }

              + +

              table, th, th+th, td, td+td {

              + +
              border: 1px solid #ccc;
              + +

              }

              + +

              table th {

              + +
              font-size: 12px;
              +color: #fc0;
              +padding: 4px 0;
              +background-color: #336;
              + +

              }

              + +

              th, td {

              + +
              padding: 4px 10px;
              + +

              }

              + +

              td {

              + +
              font-size: 13px;
              + +

              }

              + +

              .class_name {

              + +
              font-size: 17px;
              +margin: 20px 0 0;
              + +

              }

              + +

              .class_complexity { margin: 0 auto; }

              + +

              .class_complexity>.class_complexity {

              + +
              margin: 0;
              + +

              }

              + +

              .class_total_complexity, .class_total_lines, .start_token_count, .file_count {

              + +
              font-size: 13px;
              +font-weight: bold;
              + +

              }

              + +

              .class_total_complexity, .class_total_lines {

              + +
              color: #c00;
              + +

              }

              + +

              .start_token_count, .file_count {

              + +
              color: #333;
              + +

              }

              + +

              .warning {

              + +
              background-color: yellow;
              + +

              }

              + +

              .error {

              + +
              background-color: #f00;
              + +

              } </style> <body> <div class=“class_complexity”> <h2 class=“class_name”>Class : RequirementsController</h2> <div class=“class_total_complexity”>Total Complexity: 28</div> <div class=“class_total_lines”>Total Lines: 84</div> <table width=“100%” border=“1”> <tr><th>Method</th><th>Complexity</th><th># Lines</th></tr> <tr><td>index</td><td>1</td><td>2</td></tr> <tr><td>show</td><td>1</td><td>1</td></tr> <tr><td>new</td><td>1</td><td>2</td></tr> <tr><td>edit</td><td>1</td><td>1</td></tr> <tr><td>create</td><td>7</td><td>12</td></tr> <tr><td>delete_document_attachment</td><td>1</td><td>5</td></tr> <tr><td>update</td><td>7</td><td>10</td></tr> <tr><td>destroy</td><td>7</td><td>10</td></tr> <tr><td>set_requirement</td><td>1</td><td>2</td></tr> <tr><td>requirement_params</td><td>1</td><td>2</td></tr> </table> </div> </body> </html>

              + +
              + + + + + diff --git a/doc/detailed/app/controllers/sei_processes_controller_rb_cyclo_html.html b/doc/detailed/app/controllers/sei_processes_controller_rb_cyclo_html.html new file mode 100644 index 00000000..d7a4e683 --- /dev/null +++ b/doc/detailed/app/controllers/sei_processes_controller_rb_cyclo_html.html @@ -0,0 +1,292 @@ + + + + + + +sei_processes_controller.rb_cyclo.html - RDoc Documentation + + + + + + + + + + + + + + + + + + +
              + +

              <html><head><title>Cyclometric Complexity</title></head> <style> body {

              + +
              margin: 20px;
              +padding: 0;
              +font-size: 12px;
              +font-family: bitstream vera sans, verdana, arial, sans serif;
              +background-color: #efefef;
              + +

              }

              + +

              table {

              + +
              border-collapse: collapse;
              +/*border-spacing: 0;*/
              +border: 1px solid #666;
              +background-color: #fff;
              +margin-bottom: 20px;
              + +

              }

              + +

              table, th, th+th, td, td+td {

              + +
              border: 1px solid #ccc;
              + +

              }

              + +

              table th {

              + +
              font-size: 12px;
              +color: #fc0;
              +padding: 4px 0;
              +background-color: #336;
              + +

              }

              + +

              th, td {

              + +
              padding: 4px 10px;
              + +

              }

              + +

              td {

              + +
              font-size: 13px;
              + +

              }

              + +

              .class_name {

              + +
              font-size: 17px;
              +margin: 20px 0 0;
              + +

              }

              + +

              .class_complexity { margin: 0 auto; }

              + +

              .class_complexity>.class_complexity {

              + +
              margin: 0;
              + +

              }

              + +

              .class_total_complexity, .class_total_lines, .start_token_count, .file_count {

              + +
              font-size: 13px;
              +font-weight: bold;
              + +

              }

              + +

              .class_total_complexity, .class_total_lines {

              + +
              color: #c00;
              + +

              }

              + +

              .start_token_count, .file_count {

              + +
              color: #333;
              + +

              }

              + +

              .warning {

              + +
              background-color: yellow;
              + +

              }

              + +

              .error {

              + +
              background-color: #f00;
              + +

              } </style> <body> <div class=“class_complexity”> <h2 class=“class_name”>Class : SeiProcessesController</h2> <div class=“class_total_complexity”>Total Complexity: 29</div> <div class=“class_total_lines”>Total Lines: 93</div> <table width=“100%” border=“1”> <tr><th>Method</th><th>Complexity</th><th># Lines</th></tr> <tr><td>index</td><td>2</td><td>11</td></tr> <tr><td>show</td><td>1</td><td>1</td></tr> <tr><td>new</td><td>1</td><td>3</td></tr> <tr><td>edit</td><td>1</td><td>1</td></tr> <tr><td>create</td><td>7</td><td>13</td></tr> <tr><td>update</td><td>8</td><td>15</td></tr> <tr><td>destroy</td><td>7</td><td>10</td></tr> <tr><td>set_sei_process</td><td>1</td><td>2</td></tr> <tr><td>sei_process_params</td><td>1</td><td>2</td></tr> </table> </div> </body> </html>

              + +
              + + + + + diff --git a/doc/detailed/app/models/accreditation_rb_cyclo_html.html b/doc/detailed/app/models/accreditation_rb_cyclo_html.html new file mode 100644 index 00000000..a3350fff --- /dev/null +++ b/doc/detailed/app/models/accreditation_rb_cyclo_html.html @@ -0,0 +1,292 @@ + + + + + + +accreditation.rb_cyclo.html - RDoc Documentation + + + + + + + + + + + + + + + + + + +
              + +

              <html><head><title>Cyclometric Complexity</title></head> <style> body {

              + +
              margin: 20px;
              +padding: 0;
              +font-size: 12px;
              +font-family: bitstream vera sans, verdana, arial, sans serif;
              +background-color: #efefef;
              + +

              }

              + +

              table {

              + +
              border-collapse: collapse;
              +/*border-spacing: 0;*/
              +border: 1px solid #666;
              +background-color: #fff;
              +margin-bottom: 20px;
              + +

              }

              + +

              table, th, th+th, td, td+td {

              + +
              border: 1px solid #ccc;
              + +

              }

              + +

              table th {

              + +
              font-size: 12px;
              +color: #fc0;
              +padding: 4px 0;
              +background-color: #336;
              + +

              }

              + +

              th, td {

              + +
              padding: 4px 10px;
              + +

              }

              + +

              td {

              + +
              font-size: 13px;
              + +

              }

              + +

              .class_name {

              + +
              font-size: 17px;
              +margin: 20px 0 0;
              + +

              }

              + +

              .class_complexity { margin: 0 auto; }

              + +

              .class_complexity>.class_complexity {

              + +
              margin: 0;
              + +

              }

              + +

              .class_total_complexity, .class_total_lines, .start_token_count, .file_count {

              + +
              font-size: 13px;
              +font-weight: bold;
              + +

              }

              + +

              .class_total_complexity, .class_total_lines {

              + +
              color: #c00;
              + +

              }

              + +

              .start_token_count, .file_count {

              + +
              color: #333;
              + +

              }

              + +

              .warning {

              + +
              background-color: yellow;
              + +

              }

              + +

              .error {

              + +
              background-color: #f00;
              + +

              } </style> <body> <div class=“class_complexity”> <h2 class=“class_name”>Class : Accreditation</h2> <div class=“class_total_complexity”>Total Complexity: 8</div> <div class=“class_total_lines”>Total Lines: 33</div> <table width=“100%” border=“1”> <tr><th>Method</th><th>Complexity</th><th># Lines</th></tr> <tr><td>current_user_is_admin</td><td>1</td><td>2</td></tr> <tr><td>check_role</td><td>2</td><td>6</td></tr> <tr><td>check_date</td><td>2</td><td>6</td></tr> <tr><td>allow_deletion!</td><td>1</td><td>2</td></tr> <tr><td>check_permission</td><td>2</td><td>2</td></tr> </table> </div> </body> </html>

              + +
              + + + + + diff --git a/doc/detailed/app/models/requirement_rb_cyclo_html.html b/doc/detailed/app/models/requirement_rb_cyclo_html.html new file mode 100644 index 00000000..61efad52 --- /dev/null +++ b/doc/detailed/app/models/requirement_rb_cyclo_html.html @@ -0,0 +1,292 @@ + + + + + + +requirement.rb_cyclo.html - RDoc Documentation + + + + + + + + + + + + + + + + + + +
              + +

              <html><head><title>Cyclometric Complexity</title></head> <style> body {

              + +
              margin: 20px;
              +padding: 0;
              +font-size: 12px;
              +font-family: bitstream vera sans, verdana, arial, sans serif;
              +background-color: #efefef;
              + +

              }

              + +

              table {

              + +
              border-collapse: collapse;
              +/*border-spacing: 0;*/
              +border: 1px solid #666;
              +background-color: #fff;
              +margin-bottom: 20px;
              + +

              }

              + +

              table, th, th+th, td, td+td {

              + +
              border: 1px solid #ccc;
              + +

              }

              + +

              table th {

              + +
              font-size: 12px;
              +color: #fc0;
              +padding: 4px 0;
              +background-color: #336;
              + +

              }

              + +

              th, td {

              + +
              padding: 4px 10px;
              + +

              }

              + +

              td {

              + +
              font-size: 13px;
              + +

              }

              + +

              .class_name {

              + +
              font-size: 17px;
              +margin: 20px 0 0;
              + +

              }

              + +

              .class_complexity { margin: 0 auto; }

              + +

              .class_complexity>.class_complexity {

              + +
              margin: 0;
              + +

              }

              + +

              .class_total_complexity, .class_total_lines, .start_token_count, .file_count {

              + +
              font-size: 13px;
              +font-weight: bold;
              + +

              }

              + +

              .class_total_complexity, .class_total_lines {

              + +
              color: #c00;
              + +

              }

              + +

              .start_token_count, .file_count {

              + +
              color: #333;
              + +

              }

              + +

              .warning {

              + +
              background-color: yellow;
              + +

              }

              + +

              .error {

              + +
              background-color: #f00;
              + +

              } </style> <body> <div class=“class_complexity”> <h2 class=“class_name”>Class : Requirement</h2> <div class=“class_total_complexity”>Total Complexity: 6</div> <div class=“class_total_lines”>Total Lines: 25</div> <table width=“100%” border=“1”> <tr><th>Method</th><th>Complexity</th><th># Lines</th></tr> <tr><td>current_user_is_admin</td><td>1</td><td>2</td></tr> <tr><td>check_role</td><td>2</td><td>6</td></tr> <tr><td>allow_deletion!</td><td>1</td><td>2</td></tr> <tr><td>check_permission</td><td>2</td><td>4</td></tr> </table> </div> </body> </html>

              + +
              + + + + + diff --git a/doc/detailed/app/models/sei_process_rb_cyclo_html.html b/doc/detailed/app/models/sei_process_rb_cyclo_html.html new file mode 100644 index 00000000..03e7ebae --- /dev/null +++ b/doc/detailed/app/models/sei_process_rb_cyclo_html.html @@ -0,0 +1,292 @@ + + + + + + +sei_process.rb_cyclo.html - RDoc Documentation + + + + + + + + + + + + + + + + + + +
              + +

              <html><head><title>Cyclometric Complexity</title></head> <style> body {

              + +
              margin: 20px;
              +padding: 0;
              +font-size: 12px;
              +font-family: bitstream vera sans, verdana, arial, sans serif;
              +background-color: #efefef;
              + +

              }

              + +

              table {

              + +
              border-collapse: collapse;
              +/*border-spacing: 0;*/
              +border: 1px solid #666;
              +background-color: #fff;
              +margin-bottom: 20px;
              + +

              }

              + +

              table, th, th+th, td, td+td {

              + +
              border: 1px solid #ccc;
              + +

              }

              + +

              table th {

              + +
              font-size: 12px;
              +color: #fc0;
              +padding: 4px 0;
              +background-color: #336;
              + +

              }

              + +

              th, td {

              + +
              padding: 4px 10px;
              + +

              }

              + +

              td {

              + +
              font-size: 13px;
              + +

              }

              + +

              .class_name {

              + +
              font-size: 17px;
              +margin: 20px 0 0;
              + +

              }

              + +

              .class_complexity { margin: 0 auto; }

              + +

              .class_complexity>.class_complexity {

              + +
              margin: 0;
              + +

              }

              + +

              .class_total_complexity, .class_total_lines, .start_token_count, .file_count {

              + +
              font-size: 13px;
              +font-weight: bold;
              + +

              }

              + +

              .class_total_complexity, .class_total_lines {

              + +
              color: #c00;
              + +

              }

              + +

              .start_token_count, .file_count {

              + +
              color: #333;
              + +

              }

              + +

              .warning {

              + +
              background-color: yellow;
              + +

              }

              + +

              .error {

              + +
              background-color: #f00;
              + +

              } </style> <body> <div class=“class_complexity”> <h2 class=“class_name”>Class : SeiProcess</h2> <div class=“class_total_complexity”>Total Complexity: 8</div> <div class=“class_total_lines”>Total Lines: 40</div> <table width=“100%” border=“1”> <tr><th>Method</th><th>Complexity</th><th># Lines</th></tr> <tr><td>current_user_is_admin</td><td>1</td><td>2</td></tr> <tr><td>check_signed_in</td><td>2</td><td>6</td></tr> <tr><td>check_role</td><td>2</td><td>6</td></tr> <tr><td>allow_deletion!</td><td>1</td><td>2</td></tr> <tr><td>check_permission</td><td>2</td><td>2</td></tr> </table> </div> </body> </html>

              + +
              + + + + + diff --git a/doc/detailed/app/models/user_rb_cyclo_html.html b/doc/detailed/app/models/user_rb_cyclo_html.html new file mode 100644 index 00000000..e597da61 --- /dev/null +++ b/doc/detailed/app/models/user_rb_cyclo_html.html @@ -0,0 +1,292 @@ + + + + + + +user.rb_cyclo.html - RDoc Documentation + + + + + + + + + + + + + + + + + + +
              + +

              <html><head><title>Cyclometric Complexity</title></head> <style> body {

              + +
              margin: 20px;
              +padding: 0;
              +font-size: 12px;
              +font-family: bitstream vera sans, verdana, arial, sans serif;
              +background-color: #efefef;
              + +

              }

              + +

              table {

              + +
              border-collapse: collapse;
              +/*border-spacing: 0;*/
              +border: 1px solid #666;
              +background-color: #fff;
              +margin-bottom: 20px;
              + +

              }

              + +

              table, th, th+th, td, td+td {

              + +
              border: 1px solid #ccc;
              + +

              }

              + +

              table th {

              + +
              font-size: 12px;
              +color: #fc0;
              +padding: 4px 0;
              +background-color: #336;
              + +

              }

              + +

              th, td {

              + +
              padding: 4px 10px;
              + +

              }

              + +

              td {

              + +
              font-size: 13px;
              + +

              }

              + +

              .class_name {

              + +
              font-size: 17px;
              +margin: 20px 0 0;
              + +

              }

              + +

              .class_complexity { margin: 0 auto; }

              + +

              .class_complexity>.class_complexity {

              + +
              margin: 0;
              + +

              }

              + +

              .class_total_complexity, .class_total_lines, .start_token_count, .file_count {

              + +
              font-size: 13px;
              +font-weight: bold;
              + +

              }

              + +

              .class_total_complexity, .class_total_lines {

              + +
              color: #c00;
              + +

              }

              + +

              .start_token_count, .file_count {

              + +
              color: #333;
              + +

              }

              + +

              .warning {

              + +
              background-color: yellow;
              + +

              }

              + +

              .error {

              + +
              background-color: #f00;
              + +

              } </style> <body> <div class=“class_complexity”> <h2 class=“class_name”>Global : </h2> <div class=“class_total_complexity”>Total Complexity: 0</div> <div class=“class_total_lines”>Total Lines: 1</div> <table width=“100%” border=“1”> <tr><th>Method</th><th>Complexity</th><th># Lines</th></tr> </table> </div> <div class=“class_complexity”> <h2 class=“class_name”>Class : User</h2> <div class=“class_total_complexity”>Total Complexity: 0</div> <div class=“class_total_lines”>Total Lines: 10</div> <table width=“100%” border=“1”> <tr><th>Method</th><th>Complexity</th><th># Lines</th></tr> </table> </div> </body> </html>

              + +
              + + + + + diff --git a/doc/detailed/cmd_txt.html b/doc/detailed/cmd_txt.html new file mode 100644 index 00000000..828f5dca --- /dev/null +++ b/doc/detailed/cmd_txt.html @@ -0,0 +1,201 @@ + + + + + + +cmd - RDoc Documentation + + + + + + + + + + + + + + + + + + +
              + +

              saikuro -c -p app/models/user.rb -p app/models/accreditation.rb -p app/models/requirement.rb -p app/models/sei_process.rb -p app/controllers/application_controller.rb -p app/controllers/home_controller.rb -p app/controllers/accreditations_controller.rb -p app/controllers/requirements_controller.rb -p app/controllers/sei_processes_controller.rb -y 0 -w 11 -e 16 -o detailed/

              + +
              + + + + + diff --git a/doc/detailed/index_cyclo_html.html b/doc/detailed/index_cyclo_html.html new file mode 100644 index 00000000..bfbbc919 --- /dev/null +++ b/doc/detailed/index_cyclo_html.html @@ -0,0 +1,296 @@ + + + + + + +index_cyclo.html - RDoc Documentation + + + + + + + + + + + + + + + + + + +
              + +

              <html><head><title>Index for cyclomatic complexity</title></head> <style> body {

              + +
              margin: 20px;
              +padding: 0;
              +font-size: 12px;
              +font-family: bitstream vera sans, verdana, arial, sans serif;
              +background-color: #efefef;
              + +

              }

              + +

              table {

              + +
              border-collapse: collapse;
              +/*border-spacing: 0;*/
              +border: 1px solid #666;
              +background-color: #fff;
              +margin-bottom: 20px;
              + +

              }

              + +

              table, th, th+th, td, td+td {

              + +
              border: 1px solid #ccc;
              + +

              }

              + +

              table th {

              + +
              font-size: 12px;
              +color: #fc0;
              +padding: 4px 0;
              +background-color: #336;
              + +

              }

              + +

              th, td {

              + +
              padding: 4px 10px;
              + +

              }

              + +

              td {

              + +
              font-size: 13px;
              + +

              }

              + +

              .class_name {

              + +
              font-size: 17px;
              +margin: 20px 0 0;
              + +

              }

              + +

              .class_complexity { margin: 0 auto; }

              + +

              .class_complexity>.class_complexity {

              + +
              margin: 0;
              + +

              }

              + +

              .class_total_complexity, .class_total_lines, .start_token_count, .file_count {

              + +
              font-size: 13px;
              +font-weight: bold;
              + +

              }

              + +

              .class_total_complexity, .class_total_lines {

              + +
              color: #c00;
              + +

              }

              + +

              .start_token_count, .file_count {

              + +
              color: #333;
              + +

              }

              + +

              .warning {

              + +
              background-color: yellow;
              + +

              }

              + +

              .error {

              + +
              background-color: #f00;
              + +

              } </style>

              + +

              <body> <h1>Index for cyclomatic complexity</h1>

              + +

              <hr/> <h2 class=“class_name”>Analyzed Files</h2> <ul> <li> <p class=“file_name”><a href=“./app/models/user.rb_cyclo.html”>app/models/user.rb</a> </li> <li> <p class=“file_name”><a href=“./app/models/accreditation.rb_cyclo.html”>app/models/accreditation.rb</a> </li> <li> <p class=“file_name”><a href=“./app/models/requirement.rb_cyclo.html”>app/models/requirement.rb</a> </li> <li> <p class=“file_name”><a href=“./app/models/sei_process.rb_cyclo.html”>app/models/sei_process.rb</a> </li> <li> <p class=“file_name”><a href=“./app/controllers/application_controller.rb_cyclo.html”>app/controllers/application_controller.rb</a> </li> <li> <p class=“file_name”><a href=“./app/controllers/home_controller.rb_cyclo.html”>app/controllers/home_controller.rb</a> </li> <li> <p class=“file_name”><a href=“./app/controllers/accreditations_controller.rb_cyclo.html”>app/controllers/accreditations_controller.rb</a> </li> <li> <p class=“file_name”><a href=“./app/controllers/requirements_controller.rb_cyclo.html”>app/controllers/requirements_controller.rb</a> </li> <li> <p class=“file_name”><a href=“./app/controllers/sei_processes_controller.rb_cyclo.html”>app/controllers/sei_processes_controller.rb</a> </li> </ul> </body></html>

              + +
              + + + + + diff --git a/doc/features/abrir_solicitacao_credenciamento_feature.html b/doc/features/abrir_solicitacao_credenciamento_feature.html new file mode 100644 index 00000000..738dfa93 --- /dev/null +++ b/doc/features/abrir_solicitacao_credenciamento_feature.html @@ -0,0 +1,222 @@ + + + + + + +abrir_solicitacao_credenciamento.feature - RDoc Documentation + + + + + + + + + + + + + + + + + + +
              + +

              language: pt encoding: utf-8

              + +

              Funcionalidade: Abrir solicitação de credenciamento

              + +
              Como um professor autenticado no sistema,
              +Quero poder abrir uma solicitação de credenciamento
              +Para que eu possa ser um professor credenciado
              +
              +Contexto:
              +    Dado que eu esteja cadastrado e logado como "Lucas", "lucas@professor.com", "lucas123", "professor", "200000000"
              +    E que eu esteja na página de solicitações de credenciamento
              +    Quando eu clico em 'Abrir Novo Processo'
              +
              +Cenário: Solicitação enviada com sucesso
              +    Quando eu anexo o arquivo "features/resources/Formulário de Credenciamento.doc" em 'Documentos'
              +    E eu anexo o arquivo "features/resources/ship.jpg" em 'Documentos'
              +    E eu aperto 'Enviar'
              +    Então eu devo receber uma mensagem de sucesso
              +
              +Cenário: Solicitação não enviada (campo obrigatório em branco)
              +    Quando eu aperto 'Enviar'
              +    Então eu devo receber uma mensagem de erro
              + +
              + + + + + diff --git a/doc/features/credenciamento_periodo_feature.html b/doc/features/credenciamento_periodo_feature.html new file mode 100644 index 00000000..55b06fe6 --- /dev/null +++ b/doc/features/credenciamento_periodo_feature.html @@ -0,0 +1,229 @@ + + + + + + +credenciamento_periodo.feature - RDoc Documentation + + + + + + + + + + + + + + + + + + +
              + +

              language: pt encoding: utf-8

              + +

              Funcionalidade: credenciar de credenciamento dos professores

              + +
              Como um administrador autenticado no sistema,
              +Quero visualizar professores com credenciamento aprovado
              +Para credenciar de credenciamento dos professores
              +
              +Contexto:
              +  Dado que existam os seguintes credenciamentos sem prazo definido:
              +  | user_full_name | 
              +  | Alvin          |
              +  | Simon          |
              +  | Theodore       |
              +
              +  E que eu esteja cadastrado e logado como "Aécio", "aecio@admin.com", "aecio123", "administrator", "200000000"
              +  E que eu esteja na página de credenciamentos
              +
              +Cenário: Definir prazo inserindo uma data válida
              +  Quando eu escolho credenciar "Simon"
              +  E eu seleciono uma data final posterior a data inicial
              +  E eu aperto 'Salvar'
              +  Então eu devo receber uma mensagem de sucesso
              +
              +Cenário: Definir prazo inserindo data inválida
              +  Quando eu escolho credenciar "Theodore"
              +  E eu seleciono uma data final anterior a data inicial
              +  E eu aperto 'Salvar'
              +  Então eu devo receber uma mensagem de erro
              + +
              + + + + + diff --git a/doc/features/gerenciar_solicitacoes_credenciamento_feature.html b/doc/features/gerenciar_solicitacoes_credenciamento_feature.html new file mode 100644 index 00000000..d9897ea2 --- /dev/null +++ b/doc/features/gerenciar_solicitacoes_credenciamento_feature.html @@ -0,0 +1,250 @@ + + + + + + +gerenciar_solicitacoes_credenciamento.feature - RDoc Documentation + + + + + + + + + + + + + + + + + + +
              + +

              language: pt encoding: utf-8

              + +

              Funcionalidade: Gerenciar solicitações de credenciamento

              + +
              Como um admnistrador autenticado no sistema,
              +Quero visualizar uma solicitação de credencimento em aberto
              +Para decidir se vou aceitar ou recusar tal solicitação
              +
              +Contexto:
              +    Dado que existam as seguintes solicitações:
              +    | user_full_name | status |
              +    | Dave           | Espera |
              +    | Alvin          | Espera |
              +    | Simon          | Espera |
              +    | Theodore       | Espera |
              +
              +    E que eu esteja cadastrado e logado como "Gabriel", "gabriel@admin.com", "gabriel123", "administrator", "200000000"
              +    E que eu esteja na página de solicitações de credenciamento
              +
              +Cenário: Aceitar uma solicitação de credenciamento
              +    Quando eu escolho avaliar "Dave"
              +    E eu escolho 'Aprovado'
              +    E eu aperto 'Enviar'
              +    Então eu devo estar na página de solicitações de credenciamento
              +    Quando eu marco apenas os seguintes estados: Aprovado
              +    E eu aperto 'Atualizar'
              +    Então eu devo ver "Dave"
              +
              +Cenário: Encontrar um credenciamento correspondente a uma solicitação aprovada
              +    Quando eu escolho avaliar "Alvin"
              +    E eu escolho 'Aprovado'
              +    E eu aperto 'Enviar'
              +    Dado que eu esteja na página de credenciamentos
              +    Então eu devo ver "Alvin"
              +
              +Cenário: Recusar uma solicitação de credenciamento
              +    Quando eu escolho avaliar "Simon"
              +    E eu escolho 'Rejeitado'
              +    E eu aperto 'Enviar'
              +    Então eu devo estar na página de solicitações de credenciamento
              +    Quando eu marco apenas os seguintes estados: Rejeitado
              +    E eu aperto 'Atualizar'
              +    Então eu devo ver "Simon"
              +
              +Cenário: Não encontrar um credenciamento correspondente a uma solicitação rejeitada
              +    Quando eu escolho avaliar "Theodore"
              +    E eu escolho 'Rejeitado'
              +    E eu aperto 'Enviar'
              +    Dado que eu esteja na página de credenciamentos
              +    Então eu não devo ver "Theodore"
              + +
              + + + + + diff --git a/doc/features/requisitos_necessarios_feature.html b/doc/features/requisitos_necessarios_feature.html new file mode 100644 index 00000000..abf7e803 --- /dev/null +++ b/doc/features/requisitos_necessarios_feature.html @@ -0,0 +1,232 @@ + + + + + + +requisitos_necessarios.feature - RDoc Documentation + + + + + + + + + + + + + + + + + + +
              + +

              language: pt encoding: utf-8

              + +

              Funcionalidade: Disponibilizar os requisitos para o credenciamento

              + +
              Como um administrador autenticado no sistema,
              +Para que os professores possam abrir solicitações de credenciamento
              +Quero poder disponibilizar os requisitos necessários para o credenciamento
              +
              +Contexto:
              +  Dado que eu esteja cadastrado e logado como "Preihs", "preihs@admin.com", "preihs123", "administrator", "200000000"
              +  E que eu esteja na página de requisitos para o credenciamento
              +
              +  Cenário: Requisitos modificados com sucesso
              +    Quando eu clico em 'Adicionar Informação de Requisitos'
              +    E eu preencho com "Requisitos de Credenciamento" em 'Título'
              +    E eu anexo o arquivo "features/resources/Formulário de Credenciamento.doc" em 'Documentos'
              +    E eu aperto 'Enviar'
              +    Então eu devo receber uma mensagem de sucesso
              +
              +  Cenário: Requisitos não modificados (campo obrigatório em branco)
              +    Quando eu clico em 'Adicionar Informação de Requisitos'
              +    E eu anexo o arquivo "features/resources/Formulário de Credenciamento.doc" em 'Documentos'
              +    E eu aperto 'Enviar'
              +    Então eu devo receber uma mensagem de erro
              +
              +  Cenário: Requisitos não modificados (registro duplicado)
              +    Dado que o registro "Requisitos de Credenciamento" já exista na tabela de requisitos
              +    E que eu esteja na página de requisitos para o credenciamento
              +    Quando eu clico em 'Adicionar Informação de Requisitos'
              +    E eu preencho com "Requisitos de Credenciamento" em 'Título'
              +    E eu aperto 'Enviar'
              +    Então eu devo receber uma mensagem de erro
              + +
              + + + + + diff --git a/doc/features_html.html b/doc/features_html.html new file mode 100644 index 00000000..a1c25508 --- /dev/null +++ b/doc/features_html.html @@ -0,0 +1,708 @@ + + + + + + +features.html - RDoc Documentation + + + + + + + + + + + + + + + + + + +
              + +

              <!DOCTYPE html> <html lang=“en”> <head>

              + +
              <title>Cucumber</title>
              +<meta content="text/html;charset=utf-8" http-equiv="Content-Type">
              +<style>
              + +

              .cucumber-react .cucumber-status–passed {

              + +
              color: #2CB14A;
              + +

              } .cucumber-react .cucumber-status–skipped {

              + +
              color: #00A0CC;
              + +

              } .cucumber-react .cucumber-status–pending {

              + +
              color: #FFAD33;
              + +

              } .cucumber-react .cucumber-status–undefined {

              + +
              color: #FFAD33;
              + +

              } .cucumber-react .cucumber-status–ambiguous {

              + +
              color: #F4EBFD;
              + +

              } .cucumber-react .cucumber-status–failed {

              + +
              color: #BB0000;
              + +

              } .cucumber-react .cucumber-status–unknown {

              + +
              color: #B6BECB;
              + +

              } .cucumber-react h1, .cucumber-react h2, .cucumber-react h3 {

              + +
              padding: 0;
              +margin: 0;
              + +

              } .cucumber-react a {

              + +
              color: inherit;
              + +

              } .cucumber-react .gherkin-document-list {

              + +
              font: 14px "Open Sans", sans-serif;
              +color: #161C24;
              +background: #fff;
              +overflow-x: hidden;
              + +

              } .cucumber-react .cucumber-title {

              + +
              margin-top: 0.3em;
              +margin-bottom: 0;
              +display: inline-block;
              + +

              } .cucumber-react .cucumber-title__keyword {

              + +
              font-weight: bold;
              + +

              } .cucumber-react .cucumber-title__text {

              + +
              font-weight: normal;
              + +

              } .cucumber-react .cucumber-tags {

              + +
              padding: 0;
              +margin-bottom: 0;
              + +

              } .cucumber-react .cucumber-tags .cucumber-tag {

              + +
              display: inline;
              +list-style-type: none;
              +padding: 4px 8px 4px 8px;
              +margin-right: 6px;
              +background-color: #FFFFFF;
              +border-radius: 6px;
              + +

              } .cucumber-react .cucumber-feature__icon {

              + +
              padding-top: 0.35em;
              +padding-right: 0.5em;
              + +

              } .cucumber-react .cucumber-description, .cucumber-react .cucumber-children {

              + +
              margin-left: 1em;
              + +

              } .cucumber-react .cucumber-feature, .cucumber-react .cucumber-rule, .cucumber-react .cucumber-scenario, .cucumber-react .cucumber-background {

              + +
              margin-bottom: 1em;
              + +

              } .cucumber-react .cucumber-steps {

              + +
              list-style-type: none;
              +padding-left: 10px;
              + +

              } .cucumber-react .cucumber-steps .cucumber-step {

              + +
              display: flex;
              + +

              } .cucumber-react .cucumber-steps .cucumber-step__status {

              + +
              padding-top: 0.2em;
              +padding-right: 0.5em;
              + +

              } .cucumber-react .cucumber-steps .cucumber-step__content {

              + +
              flex-grow: 1;
              + +

              } .cucumber-react .cucumber-steps .cucumber-step__keyword {

              + +
              font-weight: bold;
              + +

              } .cucumber-react .cucumber-steps .cucumber-step__text {

              + +
              font-weight: normal;
              + +

              } .cucumber-react .cucumber-steps .cucumber-step__param {

              + +
              font-weight: normal;
              +font-style: italic;
              + +

              } .cucumber-react .cucumber-table {

              + +
              border-collapse: collapse;
              +margin-top: 0.5em;
              +margin-bottom: 0.5em;
              + +

              } .cucumber-react .cucumber-table__header-cell {

              + +
              border: 1px solid #4B5662;
              +padding: 0.3em;
              + +

              } .cucumber-react .cucumber-table__cell {

              + +
              border: 1px solid #4B5662;
              +padding: 0.3em;
              + +

              } .cucumber-react .cucumber-table__cell__status {

              + +
              padding: 0.5em 3px 3px 3px;
              + +

              } .cucumber-react .cucumber-table__cell__step {

              + +
              flex-grow: 1;
              + +

              } .cucumber-react .cucumber-code {

              + +
              padding: 0.25em;
              +background-color: #ebebeb;
              + +

              } .cucumber-react .cucumber-error {

              + +
              padding: 0.5em;
              +margin: 0;
              +overflow: scroll;
              + +

              } .cucumber-react .cucumber-no-documents {

              + +
              font: 14px "Open Sans", sans-serif;
              + +

              } .cucumber-react .cucumber-attachment {

              + +
              background-color: #ebebeb;
              +padding: 0.5em;
              + +

              } .cucumber-react .cucumber-attachment__icon {

              + +
              margin-right: 0.5em;
              + +

              } .cucumber-react .cucumber-attachment__image {

              + +
              margin-top: 1em;
              + +

              } .cucumber-react .cucumber-anchor {

              + +
              position: relative;
              +display: flex;
              +align-items: center;
              +margin-top: 0.3em;
              + +

              } .cucumber-react .cucumber-anchor__link {

              + +
              opacity: 0;
              +transition: all 0.35s ease-in-out;
              +position: absolute;
              +left: -20px;
              +display: flex;
              +align-items: center;
              + +

              } .cucumber-react .cucumber-anchor__icon {

              + +
              margin-right: 0.5em;
              + +

              } .cucumber-react .cucumber-anchor:hover a {

              + +
              opacity: 1;
              +width: max-content;
              +transition: all 0.35s ease-in-out;
              + +

              } .cucumber-react .cucumber-anchor > * {

              + +
              height: 100%;
              +margin-top: 0px;
              + +

              }

              + +

              .cucumber-report-header {

              + +
              width: 100%;
              +display: grid;
              +grid-template-columns: 1fr;
              +border: 1px solid rgba(0, 0, 0, 0.1);
              +font: 11px "Open Sans", sans-serif;
              +margin-bottom: 1em;
              + +

              } .cucumber-report-header > * {

              + +
              padding: 1em;
              + +

              } .cucumber-report-header .cucumber-status-filter {

              + +
              border-bottom: 1px solid rgba(0, 0, 0, 0.1);
              + +

              } .cucumber-report-header .cucumber-status-filter table {

              + +
              width: 100%;
              + +

              } .cucumber-report-header .cucumber-execution-data {

              + +
              border-bottom: 1px solid rgba(0, 0, 0, 0.1);
              + +

              } .cucumber-report-header .cucumber-search-bar {

              + +
              border-right: 0;
              + +

              } .cucumber-report-header .cucumber-search-bar form.cucumber-search-bar-search {

              + +
              width: 100%;
              +display: grid;
              +grid-template-columns: 9fr 1fr;
              + +

              } .cucumber-report-header .cucumber-search-bar form.cucumber-search-bar-search input {

              + +
              padding: 0.4em;
              +border-radius: 0;
              + +

              } .cucumber-report-header .cucumber-search-bar form.cucumber-search-bar-search button {

              + +
              height: 2.2em;
              +padding-left: 0.6em;
              +padding-right: 0.6em;
              + +

              } .cucumber-report-header .cucumber-search-bar p.help {

              + +
              font-size: 80%;
              + +

              } .cucumber-report-header .cucumber-search-bar form.cucumber-search-bar-filter ul {

              + +
              display: inline;
              + +

              } .cucumber-report-header .cucumber-search-bar form.cucumber-search-bar-filter ul li {

              + +
              list-style-type: none;
              +display: inline-block;
              + +

              } .cucumber-report-header .cucumber-search-bar form.cucumber-search-bar-filter ul li input {

              + +
              display: inline-block;
              +width: auto;
              +height: 0.6em;
              + +

              } .cucumber-report-header .cucumber-search-bar form.cucumber-search-bar-filter ul li label {

              + +
              padding-right: 1em;
              + +

              }

              + +

              @media only screen and (min-width: 600px) {

              + +
              .cucumber-report-header {
              +  grid-template-columns: 1fr 1fr;
              +}
              +.cucumber-report-header .cucumber-status-filter {
              +  border-right: 1px solid rgba(0, 0, 0, 0.1);
              +}
              +.cucumber-report-header .cucumber-search-bar {
              +  grid-column: 1/-1;
              +}
              + +

              } @media only screen and (min-width: 992px) {

              + +
              .cucumber-report-header {
              +  grid-template-columns: 1fr 1fr 2fr;
              +}
              +.cucumber-report-header .cucumber-status-filter {
              +  border-bottom: 0;
              +}
              +.cucumber-report-header .cucumber-execution-data {
              +  border-right: 1px solid rgba(0, 0, 0, 0.1);
              +  border-bottom: 0;
              +}
              +.cucumber-report-header .cucumber-search-bar {
              +  grid-column: auto;
              +}
              + +

              } .accordion {

              + +
              border: 1px solid rgba(0, 0, 0, 0.1);
              +border-radius: 2px;
              + +

              }

              + +

              .accordion__item + .accordion__item {

              + +
              border-top: 1px solid rgba(0, 0, 0, 0.1);
              + +

              }

              + +

              .accordion__button {

              + +
              background-color: #f4f4f4;
              +color: #444;
              +cursor: pointer;
              +padding: 10px;
              +width: 100%;
              +text-align: left;
              +border: none;
              + +

              }

              + +

              .accordion__button:hover {

              + +
              background-color: #ddd;
              + +

              }

              + +

              .accordion__button:before {

              + +
              display: inline-block;
              +content: '';
              +height: 10px;
              +width: 10px;
              +margin-right: 12px;
              +border-bottom: 2px solid currentColor;
              +border-right: 2px solid currentColor;
              +transform: rotate(-45deg);
              + +

              }

              + +

              .accordion__button::before, .accordion__button::before {

              + +
              transform: rotate(45deg);
              + +

              }

              + +

              .accordion__panel {

              + +
              padding: 20px;
              +animation: fadein 0.35s ease-in;
              + +

              }

              + +
              </style>
              + +

              </head> <body> <div id=“content”> </div> <script> window.CUCUMBER_MESSAGES = [ {“meta”:{“protocolVersion”:“13.2.0”,“implementation”:{“name”:“cucumber-ruby”,“version”:“5.2.0”},“runtime”:{“name”:“ruby”,“version”:“2.6.3”},“os”:{“name”:“linux”,“version”:“#488-Microsoft Mon Sep 01 13:43:00 PST 2020”},“cpu”:{“name”:“x86_64”}}}, {“hook”:{“id”:“4d61a40e-c221-4fbd-840e-6a035414a439”,“tagExpression”:“@javascript”,“sourceReference”:{“uri”:“cucumber-rails-2.2.0/lib/cucumber/rails/hooks/active_record.rb”,“location”:{“line”:14}}}}, {“hook”:{“id”:“c5c83f6f-d66e-4fa7-a64e-6af95970e761”,“tagExpression”:“not @javascript”,“sourceReference”:{“uri”:“cucumber-rails-2.2.0/lib/cucumber/rails/hooks/active_record.rb”,“location”:{“line”:18}}}}, {“hook”:{“id”:“51e0bca5-e38a-4d75-ba28-6ae3b1d3c029”,“sourceReference”:{“uri”:“cucumber-rails-2.2.0/lib/cucumber/rails/hooks/active_record.rb”,“location”:{“line”:22}}}}, {“hook”:{“id”:“4d3b602a-3c20-4905-b6e2-5ff88f9d0381”,“tagExpression”:“not @no-database-cleaner”,“sourceReference”:{“uri”:“cucumber-rails-2.2.0/lib/cucumber/rails/hooks/database_cleaner.rb”,“location”:{“line”:14}}}}, {“hook”:{“id”:“8dde38ee-8a77-4b8e-a219-846e4710f578”,“tagExpression”:“not @no-database-cleaner”,“sourceReference”:{“uri”:“cucumber-rails-2.2.0/lib/cucumber/rails/hooks/database_cleaner.rb”,“location”:{“line”:18}}}}, {“hook”:{“id”:“a0b95593-30ce-424e-8aca-ae66f22ab0e1”,“tagExpression”:“@allow-rescue”,“sourceReference”:{“uri”:“cucumber-rails-2.2.0/lib/cucumber/rails/hooks/allow_rescue.rb”,“location”:{“line”:3}}}}, {“hook”:{“id”:“62e56fa8-b884-4e20-8025-e2625ce42798”,“tagExpression”:“@allow-rescue”,“sourceReference”:{“uri”:“cucumber-rails-2.2.0/lib/cucumber/rails/hooks/allow_rescue.rb”,“location”:{“line”:8}}}}, {“hook”:{“id”:“fef496dd-2ab2-4114-830e-02aecb4b8fa9”,“sourceReference”:{“uri”:“cucumber-rails-2.2.0/lib/cucumber/rails/hooks/mail.rb”,“location”:{“line”:4}}}}, {“hook”:{“id”:“64ca9839-37e0-4b54-9187-98cd2c4d2356”,“sourceReference”:{“uri”:“capybara-3.33.0/lib/capybara/cucumber.rb”,“location”:{“line”:10}}}}, {“hook”:{“id”:“0717e035-c1be-40a4-97d2-96ef05cebead”,“sourceReference”:{“uri”:“capybara-3.33.0/lib/capybara/cucumber.rb”,“location”:{“line”:14}}}}, {“hook”:{“id”:“ba57d88e-cdce-4314-b412-c0d9744d36f1”,“tagExpression”:“@javascript”,“sourceReference”:{“uri”:“capybara-3.33.0/lib/capybara/cucumber.rb”,“location”:{“line”:18}}}}, {“hook”:{“id”:“24b36278-8ba8-4cb2-9afe-c5a9958e8860”,“sourceReference”:{“uri”:“capybara-3.33.0/lib/capybara/cucumber.rb”,“location”:{“line”:22}}}}, {“hook”:{“id”:“0e55cb2b-da7a-4fe3-bf80-9b4cd671ab21”,“tagExpression”:“not @no-js-emulation”,“sourceReference”:{“uri”:“cucumber-rails-2.2.0/lib/cucumber/rails/capybara/javascript_emulation.rb”,“location”:{“line”:109}}}}, {“hook”:{“id”:“ee4b720a-f6b5-44ec-bc88-9ca1f69dbc5e”,“tagExpression”:“@no-js-emulation”,“sourceReference”:{“uri”:“cucumber-rails-2.2.0/lib/cucumber/rails/capybara/javascript_emulation.rb”,“location”:{“line”:116}}}}, {“hook”:{“id”:“3ad2cb6c-9fba-4aa3-ba66-b9bd0778814a”,“sourceReference”:{“uri”:“features/support/hooks.rb”,“location”:{“line”:1}}}}, {“stepDefinition”:{“id”:“6588c05d-0add-4b4e-adfb-4ebc3579b6ba”,“pattern”:{“source”:“que existam as seguintes solicitações:”,“type”:“CUCUMBER_EXPRESSION”},“sourceReference”:{“uri”:“features/step_definitions/credenciamento_professores_steps.rb”,“location”:{“line”:55}}}}, {“stepDefinition”:{“id”:“48885d12-4469-4b41-a4af-dd16bc83478f”,“pattern”:{“source”:“que existam os seguintes credenciamentos sem prazo definido:”,“type”:“CUCUMBER_EXPRESSION”},“sourceReference”:{“uri”:“features/step_definitions/credenciamento_professores_steps.rb”,“location”:{“line”:78}}}}, {“stepDefinition”:{“id”:“bef0ecf5-54a1-460b-a992-1a4b55038a51”,“pattern”:{“source”:“^que o registro "([^"]*)" já exista na tabela de requisitos$”,“type”:“REGULAR_EXPRESSION”},“sourceReference”:{“uri”:“features/step_definitions/credenciamento_professores_steps.rb”,“location”:{“line”:106}}}}, {“stepDefinition”:{“id”:“24b83f7b-c2e6-4c43-8dbd-f7bffff43e1f”,“pattern”:{“source”:“^que eu esteja cadastrado e logado como (.*)$”,“type”:“REGULAR_EXPRESSION”},“sourceReference”:{“uri”:“features/step_definitions/credenciamento_professores_steps.rb”,“location”:{“line”:112}}}}, {“stepDefinition”:{“id”:“99dbc9f3-d662-44cd-a2c3-13da4db7325f”,“pattern”:{“source”:“^que eu esteja na página (.+)$”,“type”:“REGULAR_EXPRESSION”},“sourceReference”:{“uri”:“features/step_definitions/credenciamento_professores_steps.rb”,“location”:{“line”:121}}}}, {“stepDefinition”:{“id”:“adf545df-6b72-4db8-a58a-72ec38bdfaa8”,“pattern”:{“source”:“^eu escolho avaliar "([^"]*)"$”,“type”:“REGULAR_EXPRESSION”},“sourceReference”:{“uri”:“features/step_definitions/credenciamento_professores_steps.rb”,“location”:{“line”:125}}}}, {“stepDefinition”:{“id”:“49600a6d-202f-40de-91e5-e04eda1f1db9”,“pattern”:{“source”:“^eu escolho credenciar "([^"]*)"$”,“type”:“REGULAR_EXPRESSION”},“sourceReference”:{“uri”:“features/step_definitions/credenciamento_professores_steps.rb”,“location”:{“line”:131}}}}, {“stepDefinition”:{“id”:“80312e21-01a0-4001-b983-a799c5fa705b”,“pattern”:{“source”:“^eu anexo o arquivo "([^"]*)" em '([^']*)'$”,“type”:“REGULAR_EXPRESSION”},“sourceReference”:{“uri”:“features/step_definitions/credenciamento_professores_steps.rb”,“location”:{“line”:137}}}}, {“stepDefinition”:{“id”:“ab2cf283-e551-48be-a0dd-fe0ecbe6cbde”,“pattern”:{“source”:“^eu clico em '([^']*)'$”,“type”:“REGULAR_EXPRESSION”},“sourceReference”:{“uri”:“features/step_definitions/credenciamento_professores_steps.rb”,“location”:{“line”:141}}}}, {“stepDefinition”:{“id”:“8d41c1de-a4cf-460a-8248-a95e1ce7aa00”,“pattern”:{“source”:“^eu devo estar na página (.+)$”,“type”:“REGULAR_EXPRESSION”},“sourceReference”:{“uri”:“features/step_definitions/credenciamento_professores_steps.rb”,“location”:{“line”:145}}}}, {“stepDefinition”:{“id”:“9c179c11-f96f-4a70-8352-e302441d235d”,“pattern”:{“source”:“^eu escolho '([^']*)'$”,“type”:“REGULAR_EXPRESSION”},“sourceReference”:{“uri”:“features/step_definitions/credenciamento_professores_steps.rb”,“location”:{“line”:154}}}}, {“stepDefinition”:{“id”:“d56e767f-bd58-4b9c-9498-abef22329feb”,“pattern”:{“source”:“^eu marco apenas os seguintes estados: (.*)$”,“type”:“REGULAR_EXPRESSION”},“sourceReference”:{“uri”:“features/step_definitions/credenciamento_professores_steps.rb”,“location”:{“line”:158}}}}, {“stepDefinition”:{“id”:“237cf934-14ab-4b82-b06d-a78848b34f1e”,“pattern”:{“source”:“^eu preencho em '([^']*)' com”,“type”:“REGULAR_EXPRESSION”},“sourceReference”:{“uri”:“features/step_definitions/credenciamento_professores_steps.rb”,“location”:{“line”:167}}}}, {“stepDefinition”:{“id”:“48191dd2-1e2e-4c8c-8483-c494954049a4”,“pattern”:{“source”:“^eu preencho com "([^"]*)" em '([^']*)'$”,“type”:“REGULAR_EXPRESSION”},“sourceReference”:{“uri”:“features/step_definitions/credenciamento_professores_steps.rb”,“location”:{“line”:171}}}}, {“stepDefinition”:{“id”:“e87c6f55-4ea7-4093-9975-7e949a57ad5a”,“pattern”:{“source”:“^eu seleciono uma data final (posterior|anterior) a data inicial$”,“type”:“REGULAR_EXPRESSION”},“sourceReference”:{“uri”:“features/step_definitions/credenciamento_professores_steps.rb”,“location”:{“line”:175}}}}, {“stepDefinition”:{“id”:“5646c28e-1185-46ed-b808-094317f73f3a”,“pattern”:{“source”:“^eu aperto '([^']*)'$”,“type”:“REGULAR_EXPRESSION”},“sourceReference”:{“uri”:“features/step_definitions/credenciamento_professores_steps.rb”,“location”:{“line”:187}}}}, {“stepDefinition”:{“id”:“258e540f-1349-43d0-93f4-2eb9f7169dfd”,“pattern”:{“source”:“^eu devo ver "([^"]*)"$”,“type”:“REGULAR_EXPRESSION”},“sourceReference”:{“uri”:“features/step_definitions/credenciamento_professores_steps.rb”,“location”:{“line”:191}}}}, {“stepDefinition”:{“id”:“9158d4e9-d185-47b4-85e3-85cd64fbe18b”,“pattern”:{“source”:“^eu não devo ver "([^"]*)"$”,“type”:“REGULAR_EXPRESSION”},“sourceReference”:{“uri”:“features/step_definitions/credenciamento_professores_steps.rb”,“location”:{“line”:199}}}}, {“stepDefinition”:{“id”:“f9e842ce-7fc2-47fa-824e-d087345dedba”,“pattern”:{“source”:“^eu devo receber uma mensagem de (sucesso|erro)$”,“type”:“REGULAR_EXPRESSION”},“sourceReference”:{“uri”:“features/step_definitions/credenciamento_professores_steps.rb”,“location”:{“line”:207}}}}, {“source”:{“uri”:“features/abrir_solicitacao_credenciamento.feature”,“data”:“#language: ptrn#encoding: utf-8rnrnFuncionalidade: Abrir solicitação de credenciamentorn Como um professor autenticado no sistema,rn Quero poder abrir uma solicitação de credenciamentorn Para que eu possa ser um professor credenciadornrn Contexto:rn Dado que eu esteja cadastrado e logado como "Lucas", "lucas@professor.com", "lucas123", "professor", "200000000"rn E que eu esteja na página de solicitações de credenciamentorn Quando eu clico em 'Abrir Novo Processo'rnrn Cenário: Solicitação enviada com sucessorn Quando eu anexo o arquivo "features/resources/Formulário de Credenciamento.doc" em 'Documentos'rn E eu anexo o arquivo "features/resources/ship.jpg" em 'Documentos'rn E eu aperto 'Enviar'rn Então eu devo receber uma mensagem de sucessornrn Cenário: Solicitação não enviada (campo obrigatório em branco)rn Quando eu aperto 'Enviar'rn Então eu devo receber uma mensagem de errorn”,“mediaType”:“text/x.cucumber.gherkin+plain”}}, {“source”:{“uri”:“features/credenciamento_periodo.feature”,“data”:“#language: ptrn#encoding: utf-8rnrnFuncionalidade: credenciar de credenciamento dos professoresrn Como um administrador autenticado no sistema,rn Quero visualizar professores com credenciamento aprovadorn Para credenciar de credenciamento dos professoresrnrn Contexto:rn Dado que existam os seguintes credenciamentos sem prazo definido:rn | user_full_name | rn | Alvin |rn | Simon |rn | Theodore |rn rn E que eu esteja cadastrado e logado como "Aécio", "aecio@admin.com", "aecio123", "administrator", "200000000"rn E que eu esteja na página de credenciamentosrnrn Cenário: Definir prazo inserindo uma data válidarn Quando eu escolho credenciar "Simon"rn E eu seleciono uma data final posterior a data inicialrn E eu aperto 'Salvar'rn Então eu devo receber uma mensagem de sucessornrn Cenário: Definir prazo inserindo data inválidarn Quando eu escolho credenciar "Theodore"rn E eu seleciono uma data final anterior a data inicialrn E eu aperto 'Salvar'rn Então eu devo receber uma mensagem de errorn”,“mediaType”:“text/x.cucumber.gherkin+plain”}}, {“source”:{“uri”:“features/gerenciar_solicitacoes_credenciamento.feature”,“data”:“#language: ptrn#encoding: utf-8rnrnFuncionalidade: Gerenciar solicitações de credenciamentorn Como um admnistrador autenticado no sistema,rn Quero visualizar uma solicitação de credencimento em abertorn Para decidir se vou aceitar ou recusar tal solicitaçãornrn Contexto:rn Dado que existam as seguintes solicitações:rn | user_full_name | status |rn | Dave | Espera |rn | Alvin | Espera |rn | Simon | Espera |rn | Theodore | Espera |rnrn E que eu esteja cadastrado e logado como "Gabriel", "gabriel@admin.com", "gabriel123", "administrator", "200000000"rn E que eu esteja na página de solicitações de credenciamentorn rn Cenário: Aceitar uma solicitação de credenciamentorn Quando eu escolho avaliar "Dave"rn E eu escolho 'Aprovado'rn E eu aperto 'Enviar'rn Então eu devo estar na página de solicitações de credenciamentorn Quando eu marco apenas os seguintes estados: Aprovadorn E eu aperto 'Atualizar'rn Então eu devo ver "Dave"rnrn Cenário: Aceitar uma solicitação e encontrar o credenciamento correspondentern Quando eu escolho avaliar "Alvin"rn E eu escolho 'Aprovado'rn E eu aperto 'Enviar'rn Dado que eu esteja na página de credenciamentosrn Então eu devo ver "Alvin"rn rn Cenário: Recusar uma solicitação de credenciamentorn Quando eu escolho avaliar "Simon"rn E eu escolho 'Rejeitado'rn E eu aperto 'Enviar'rn Então eu devo estar na página de solicitações de credenciamentorn Quando eu marco apenas os seguintes estados: Rejeitadorn E eu aperto 'Atualizar'rn Então eu devo ver "Simon"rnrn Cenário: Recusar uma solicitação e não encontrar o credenciamento correspondentern Quando eu escolho avaliar "Theodore"rn E eu escolho 'Rejeitado'rn E eu aperto 'Enviar'rn Dado que eu esteja na página de credenciamentosrn Então eu não devo ver "Theodore"rn”,“mediaType”:“text/x.cucumber.gherkin+plain”}}, {“source”:{“uri”:“features/requisitos_necessarios.feature”,“data”:“#language: ptrn#encoding: utf-8rnrnFuncionalidade: Disponibilizar os requisitos para o credenciamentorn Como um administrador autenticado no sistema,rn Para que os professores possam abrir solicitações de credenciamentorn Quero poder disponibilizar os requisitos necessários para o credenciamentornrn Contexto:rn Dado que eu esteja cadastrado e logado como "Preihs", "preihs@admin.com", "preihs123", "administrator", "200000000"rn E que eu esteja na página de requisitos para o credenciamentornrn Cenário: Requisitos modificados com sucessorn Quando eu clico em 'Adicionar Informação de Requisitos'rn E eu preencho com "Requisitos de Credenciamento" em 'Título'rn E eu anexo o arquivo "features/resources/Formulário de Credenciamento.doc" em 'Documentos'rn E eu aperto 'Enviar'rn Então eu devo receber uma mensagem de sucessorn rn Cenário: Requisitos não modificados (campo obrigatório em branco)rn Quando eu clico em 'Adicionar Informação de Requisitos'rn E eu anexo o arquivo "features/resources/Formulário de Credenciamento.doc" em 'Documentos'rn E eu aperto 'Enviar'rn Então eu devo receber uma mensagem de errorn rn Cenário: Requisitos não modificados (registro duplicado)rn Dado que o registro "Requisitos de Credenciamento" já exista na tabela de requisitosrn E que eu esteja na página de requisitos para o credenciamentorn Quando eu clico em 'Adicionar Informação de Requisitos'rn E eu preencho com "Requisitos de Credenciamento" em 'Título'rn E eu aperto 'Enviar'rn Então eu devo receber uma mensagem de errorn”,“mediaType”:“text/x.cucumber.gherkin+plain”}}, {“gherkinDocument”:{“feature”:{“location”:{“line”:4,“column”:1},“language”:“pt”,“keyword”:“Funcionalidade”,“name”:“Abrir solicitação de credenciamento”,“description”:“ Como um professor autenticado no sistema,n Quero poder abrir uma solicitação de credenciamenton Para que eu possa ser um professor credenciado”,“children”:[{“background”:{“id”:“21e91023-cf90-4606-b821-29fd662120b8”,“location”:{“line”:9,“column”:5},“keyword”:“Contexto”,“steps”:[{“location”:{“line”:10,“column”:9},“keyword”:“Dado ”,“text”:“que eu esteja cadastrado e logado como "Lucas", "lucas@professor.com", "lucas123", "professor", "200000000"”,“id”:“6184d1e3-7197-42a6-ad62-876e8e4d9412”},{“location”:{“line”:11,“column”:9},“keyword”:“E ”,“text”:“que eu esteja na página de solicitações de credenciamento”,“id”:“afb271b6-f1dd-42c9-a852-11a0e561c405”},{“location”:{“line”:12,“column”:9},“keyword”:“Quando ”,“text”:“eu clico em 'Abrir Novo Processo'”,“id”:“b257175c-e439-41f5-b829-62dff14bb2ad”}]}},{“scenario”:{“id”:“ac0c937c-741c-455d-82e4-e5bc11fb9026”,“location”:{“line”:14,“column”:5},“keyword”:“Cenário”,“name”:“Solicitação enviada com sucesso”,“steps”:[{“location”:{“line”:15,“column”:9},“keyword”:“Quando ”,“text”:“eu anexo o arquivo "features/resources/Formulário de Credenciamento.doc" em 'Documentos'”,“id”:“03f42cf7-1c33-4458-9b7e-d212b77fa2c2”},{“location”:{“line”:16,“column”:9},“keyword”:“E ”,“text”:“eu anexo o arquivo "features/resources/ship.jpg" em 'Documentos'”,“id”:“72445143-d95f-41f6-8eec-fbc9db8d6a3d”},{“location”:{“line”:17,“column”:9},“keyword”:“E ”,“text”:“eu aperto 'Enviar'”,“id”:“d98dc978-d3d6-4af3-a18d-f9fbde4829e8”},{“location”:{“line”:18,“column”:9},“keyword”:“Então ”,“text”:“eu devo receber uma mensagem de sucesso”,“id”:“039608e3-197a-4531-9562-c2103637db61”}]}},{“scenario”:{“id”:“0b068d9d-d55a-41fa-9535-af055a109f81”,“location”:{“line”:20,“column”:5},“keyword”:“Cenário”,“name”:“Solicitação não enviada (campo obrigatório em branco)”,“steps”:[{“location”:{“line”:21,“column”:9},“keyword”:“Quando ”,“text”:“eu aperto 'Enviar'”,“id”:“1b683370-ca08-40e2-ad2d-581efa9372b1”},{“location”:{“line”:22,“column”:9},“keyword”:“Então ”,“text”:“eu devo receber uma mensagem de erro”,“id”:“01106193-310e-46d8-b5ad-85f6eb70a121”}]}}]},“comments”:[{“location”:{“line”:2,“column”:1},“text”:“#encoding: utf-8”}],“uri”:“features/abrir_solicitacao_credenciamento.feature”}}, {“pickle”:{“uri”:“features/abrir_solicitacao_credenciamento.feature”,“id”:“f0b3bc07-5889-4cd7-9766-d130adaebadf”,“name”:“Solicitação enviada com sucesso”,“language”:“pt”,“astNodeIds”:,“steps”:[{“id”:“b560d802-e6e5-4a10-9e69-5da951c6678b”,“astNodeIds”:,“text”:“que eu esteja cadastrado e logado como "Lucas", "lucas@professor.com", "lucas123", "professor", "200000000"”},{“id”:“b707c02e-84da-4289-b9d6-4f308fe1f7cd”,“astNodeIds”:,“text”:“que eu esteja na página de solicitações de credenciamento”},{“id”:“6b86aac3-cb7d-4702-86a4-866b26e2cd09”,“astNodeIds”:,“text”:“eu clico em 'Abrir Novo Processo'”},{“id”:“007d9a70-c25b-4255-9c42-76c587e22ddb”,“astNodeIds”:,“text”:“eu anexo o arquivo "features/resources/Formulário de Credenciamento.doc" em 'Documentos'”},{“id”:“fb502dfb-1609-49ae-907b-0bf5a95f23f3”,“astNodeIds”:,“text”:“eu anexo o arquivo "features/resources/ship.jpg" em 'Documentos'”},{“id”:“ae73294e-aaed-46bc-aa84-f3f958fdd7af”,“astNodeIds”:,“text”:“eu aperto 'Enviar'”},{“id”:“e12997f6-2d82-47f2-8326-2b638d7ecb72”,“astNodeIds”:,“text”:“eu devo receber uma mensagem de sucesso”}]}}, {“pickle”:{“uri”:“features/abrir_solicitacao_credenciamento.feature”,“id”:“4309bade-32c8-4e65-9182-190161bc4a1a”,“name”:“Solicitação não enviada (campo obrigatório em branco)”,“language”:“pt”,“astNodeIds”:,“steps”:[{“id”:“9a0fa3ff-adb1-41ad-b56e-91add7844150”,“astNodeIds”:,“text”:“que eu esteja cadastrado e logado como "Lucas", "lucas@professor.com", "lucas123", "professor", "200000000"”},{“id”:“a68a0bc6-4357-4ef3-b857-3388a034d248”,“astNodeIds”:,“text”:“que eu esteja na página de solicitações de credenciamento”},{“id”:“1c83b70e-ef8e-47ed-9d4d-b245fb829940”,“astNodeIds”:,“text”:“eu clico em 'Abrir Novo Processo'”},{“id”:“4334c64a-74d0-4426-8d81-0e011c473a8c”,“astNodeIds”:,“text”:“eu aperto 'Enviar'”},{“id”:“6245c86c-ddec-48d2-89d1-133385d0ab59”,“astNodeIds”:,“text”:“eu devo receber uma mensagem de erro”}]}}, {“gherkinDocument”:{“feature”:{“location”:{“line”:4,“column”:1},“language”:“pt”,“keyword”:“Funcionalidade”,“name”:“credenciar de credenciamento dos professores”,“description”:“ Como um administrador autenticado no sistema,n Quero visualizar professores com credenciamento aprovadon Para credenciar de credenciamento dos professores”,“children”:[{“background”:{“id”:“192b7f3a-a42e-4a54-9fc7-677b8ef4a269”,“location”:{“line”:9,“column”:3},“keyword”:“Contexto”,“steps”:[{“location”:{“line”:10,“column”:5},“keyword”:“Dado ”,“text”:“que existam os seguintes credenciamentos sem prazo definido:”,“dataTable”:{“location”:{“line”:11,“column”:5},“rows”:[{“id”:“410d8e7f-c230-41f4-a0a4-688fd5644225”,“location”:{“line”:11,“column”:5},“cells”:},{“id”:“bf89bfc3-0007-4f08-9299-bc8395f11fc0”,“location”:{“line”:12,“column”:5},“cells”:},{“id”:“de458872-0861-4c3c-901b-ad8e1129a68d”,“location”:{“line”:13,“column”:5},“cells”:},{“id”:“551b6c9b-1c94-4ace-8f19-f61b29d5be80”,“location”:{“line”:14,“column”:5},“cells”:}]},“id”:“c641d21d-bdd7-4238-a3a2-eb0e65f6b4f0”},{“location”:{“line”:16,“column”:5},“keyword”:“E ”,“text”:“que eu esteja cadastrado e logado como "Aécio", "aecio@admin.com", "aecio123", "administrator", "200000000"”,“id”:“45f4a32c-04c5-4051-8497-77c16845273d”},{“location”:{“line”:17,“column”:5},“keyword”:“E ”,“text”:“que eu esteja na página de credenciamentos”,“id”:“b9bbcdb1-f44c-4bb8-957f-c773a4a06d99”}]}},{“scenario”:{“id”:“522ab174-8fc6-4be1-a066-f456ec56a3b7”,“location”:{“line”:19,“column”:3},“keyword”:“Cenário”,“name”:“Definir prazo inserindo uma data válida”,“steps”:[{“location”:{“line”:20,“column”:5},“keyword”:“Quando ”,“text”:“eu escolho credenciar "Simon"”,“id”:“ad0d72ee-d380-44c2-aa67-3b37ed2b7fc0”},{“location”:{“line”:21,“column”:5},“keyword”:“E ”,“text”:“eu seleciono uma data final posterior a data inicial”,“id”:“c49ba2c8-5a0d-4760-93e3-09ec35694529”},{“location”:{“line”:22,“column”:5},“keyword”:“E ”,“text”:“eu aperto 'Salvar'”,“id”:“6a4ca6d5-5c91-4145-b541-975cc69c7e65”},{“location”:{“line”:23,“column”:5},“keyword”:“Então ”,“text”:“eu devo receber uma mensagem de sucesso”,“id”:“a2623af9-5fa3-4718-badc-30a611d0fd4a”}]}},{“scenario”:{“id”:“c005180b-905c-4730-a820-6cde2715fe10”,“location”:{“line”:25,“column”:3},“keyword”:“Cenário”,“name”:“Definir prazo inserindo data inválida”,“steps”:[{“location”:{“line”:26,“column”:5},“keyword”:“Quando ”,“text”:“eu escolho credenciar "Theodore"”,“id”:“7b6a984d-0c07-4bd7-84f4-af6ce4216f2f”},{“location”:{“line”:27,“column”:5},“keyword”:“E ”,“text”:“eu seleciono uma data final anterior a data inicial”,“id”:“3642a9ea-11dc-436d-aacf-6ae289a8848d”},{“location”:{“line”:28,“column”:5},“keyword”:“E ”,“text”:“eu aperto 'Salvar'”,“id”:“7de32aec-7730-43a8-a50b-13c902eed680”},{“location”:{“line”:29,“column”:5},“keyword”:“Então ”,“text”:“eu devo receber uma mensagem de erro”,“id”:“145fcb40-cb2d-4b21-a6a6-d0aa5fad631a”}]}}]},“comments”:[{“location”:{“line”:2,“column”:1},“text”:“#encoding: utf-8”}],“uri”:“features/credenciamento_periodo.feature”}}, {“pickle”:{“uri”:“features/credenciamento_periodo.feature”,“id”:“977538ff-1b44-48a0-bb27-62ec43ff24ec”,“name”:“Definir prazo inserindo uma data válida”,“language”:“pt”,“astNodeIds”:,“steps”:[{“id”:“0c0d9f43-406f-4562-8935-bd42a2a0ff4e”,“astNodeIds”:,“text”:“que existam os seguintes credenciamentos sem prazo definido:”,“argument”:{“dataTable”:{“rows”:[{“cells”:},{“cells”:},{“cells”:},{“cells”:}]}}},{“id”:“6302d0bf-c862-4d8d-82ca-f2c8032cfa04”,“astNodeIds”:,“text”:“que eu esteja cadastrado e logado como "Aécio", "aecio@admin.com", "aecio123", "administrator", "200000000"”},{“id”:“d4fc3697-6a76-4ff3-9004-d9519778585a”,“astNodeIds”:,“text”:“que eu esteja na página de credenciamentos”},{“id”:“978762d6-5b64-4833-83a7-7c820bbd90da”,“astNodeIds”:,“text”:“eu escolho credenciar "Simon"”},{“id”:“cf2341c9-d5b2-4144-997e-e90bc7bb5798”,“astNodeIds”:,“text”:“eu seleciono uma data final posterior a data inicial”},{“id”:“4940e7c2-f1c8-41c5-ac5e-788ff372ee63”,“astNodeIds”:,“text”:“eu aperto 'Salvar'”},{“id”:“b8451601-6b97-4026-a125-ea8ec10a4372”,“astNodeIds”:,“text”:“eu devo receber uma mensagem de sucesso”}]}}, {“pickle”:{“uri”:“features/credenciamento_periodo.feature”,“id”:“c4349f96-6de8-486a-a8cb-0834d90b925d”,“name”:“Definir prazo inserindo data inválida”,“language”:“pt”,“astNodeIds”:,“steps”:[{“id”:“1a0b0a3e-ad61-4fce-93af-f43f71376203”,“astNodeIds”:,“text”:“que existam os seguintes credenciamentos sem prazo definido:”,“argument”:{“dataTable”:{“rows”:[{“cells”:},{“cells”:},{“cells”:},{“cells”:}]}}},{“id”:“729d9234-ba06-4861-8c83-e78520f22419”,“astNodeIds”:,“text”:“que eu esteja cadastrado e logado como "Aécio", "aecio@admin.com", "aecio123", "administrator", "200000000"”},{“id”:“b3bd5709-2caf-46b9-b46f-01700b40e3f7”,“astNodeIds”:,“text”:“que eu esteja na página de credenciamentos”},{“id”:“86ad32b9-e12c-43ac-aa1d-bcb37cffda9a”,“astNodeIds”:,“text”:“eu escolho credenciar "Theodore"”},{“id”:“b20141a1-aa41-430e-8820-e11096d51200”,“astNodeIds”:,“text”:“eu seleciono uma data final anterior a data inicial”},{“id”:“d7e2a1aa-0096-49d8-9067-d1fedc172e37”,“astNodeIds”:,“text”:“eu aperto 'Salvar'”},{“id”:“d9b19d72-2b76-4c23-9c6f-d27baba02878”,“astNodeIds”:,“text”:“eu devo receber uma mensagem de erro”}]}}, {“gherkinDocument”:{“feature”:{“location”:{“line”:4,“column”:1},“language”:“pt”,“keyword”:“Funcionalidade”,“name”:“Gerenciar solicitações de credenciamento”,“description”:“ Como um admnistrador autenticado no sistema,n Quero visualizar uma solicitação de credencimento em aberton Para decidir se vou aceitar ou recusar tal solicitação”,“children”:[{“background”:{“id”:“cd933969-f53f-4bca-b708-f1c348160ea9”,“location”:{“line”:9,“column”:5},“keyword”:“Contexto”,“steps”:[{“location”:{“line”:10,“column”:9},“keyword”:“Dado ”,“text”:“que existam as seguintes solicitações:”,“dataTable”:{“location”:{“line”:11,“column”:9},“rows”:[{“id”:“1511ec2f-8695-4b74-b924-962b414a8664”,“location”:{“line”:11,“column”:9},“cells”:},{“id”:“73a0ac4c-0cd5-4e97-8ab4-a706c9f543b3”,“location”:{“line”:12,“column”:9},“cells”:},{“id”:“4e65208f-823e-4c03-b20d-eda2cea0c021”,“location”:{“line”:13,“column”:9},“cells”:},{“id”:“a55e4977-1526-4218-ba7f-60a4906b0c2a”,“location”:{“line”:14,“column”:9},“cells”:},{“id”:“132029f2-f9d2-4dd0-b119-403b8628dd9e”,“location”:{“line”:15,“column”:9},“cells”:}]},“id”:“b105070b-1e49-4331-9514-1185a745db7a”},{“location”:{“line”:17,“column”:9},“keyword”:“E ”,“text”:“que eu esteja cadastrado e logado como "Gabriel", "gabriel@admin.com", "gabriel123", "administrator", "200000000"”,“id”:“045bd4c1-5f2d-4c6b-b38c-c89e6eee92fb”},{“location”:{“line”:18,“column”:9},“keyword”:“E ”,“text”:“que eu esteja na página de solicitações de credenciamento”,“id”:“5503e3c3-530f-467b-80d8-bde1646781ec”}]}},{“scenario”:{“id”:“b26d7104-8a11-4d46-bfe8-d788459a135a”,“location”:{“line”:20,“column”:5},“keyword”:“Cenário”,“name”:“Aceitar uma solicitação de credenciamento”,“steps”:[{“location”:{“line”:21,“column”:9},“keyword”:“Quando ”,“text”:“eu escolho avaliar "Dave"”,“id”:“0f22b940-46ca-424d-a0d8-873e174838dd”},{“location”:{“line”:22,“column”:9},“keyword”:“E ”,“text”:“eu escolho 'Aprovado'”,“id”:“53d81217-a55f-4706-a813-8a7da251a17a”},{“location”:{“line”:23,“column”:9},“keyword”:“E ”,“text”:“eu aperto 'Enviar'”,“id”:“9436b25f-c6f0-4706-bcd7-fee9848f1905”},{“location”:{“line”:24,“column”:9},“keyword”:“Então ”,“text”:“eu devo estar na página de solicitações de credenciamento”,“id”:“e17dd8c9-d219-4caf-a259-5f3b7cee6d13”},{“location”:{“line”:25,“column”:9},“keyword”:“Quando ”,“text”:“eu marco apenas os seguintes estados: Aprovado”,“id”:“1de74246-2c22-4527-9d5f-7da0781c378f”},{“location”:{“line”:26,“column”:9},“keyword”:“E ”,“text”:“eu aperto 'Atualizar'”,“id”:“a679a9bd-667b-4a19-a87e-a6f364799901”},{“location”:{“line”:27,“column”:9},“keyword”:“Então ”,“text”:“eu devo ver "Dave"”,“id”:“a2b79c8f-a867-4f19-a70c-a92f2bfa9d1a”}]}},{“scenario”:{“id”:“0691dc0d-c542-4cea-9dca-f4c71f6c7c47”,“location”:{“line”:29,“column”:5},“keyword”:“Cenário”,“name”:“Aceitar uma solicitação e encontrar o credenciamento correspondente”,“steps”:[{“location”:{“line”:30,“column”:9},“keyword”:“Quando ”,“text”:“eu escolho avaliar "Alvin"”,“id”:“b442964b-ac01-468a-8bdf-dab5a960eef3”},{“location”:{“line”:31,“column”:9},“keyword”:“E ”,“text”:“eu escolho 'Aprovado'”,“id”:“a098a7ae-0239-4971-a4f6-625eabe2fdeb”},{“location”:{“line”:32,“column”:9},“keyword”:“E ”,“text”:“eu aperto 'Enviar'”,“id”:“81b81c0e-6268-4a20-9e13-266fd5096297”},{“location”:{“line”:33,“column”:9},“keyword”:“Dado ”,“text”:“que eu esteja na página de credenciamentos”,“id”:“ff0ac013-273d-4738-9d0e-51b269cbd520”},{“location”:{“line”:34,“column”:9},“keyword”:“Então ”,“text”:“eu devo ver "Alvin"”,“id”:“4fa5b151-a70e-452c-bcac-46b6679b9c05”}]}},{“scenario”:{“id”:“8375e760-0f72-4e18-8e4e-ed6a8bab81b3”,“location”:{“line”:36,“column”:5},“keyword”:“Cenário”,“name”:“Recusar uma solicitação de credenciamento”,“steps”:[{“location”:{“line”:37,“column”:9},“keyword”:“Quando ”,“text”:“eu escolho avaliar "Simon"”,“id”:“141c68ac-eec3-4375-a8f6-e72eed8cdd75”},{“location”:{“line”:38,“column”:9},“keyword”:“E ”,“text”:“eu escolho 'Rejeitado'”,“id”:“e06bc3e3-c82e-47f2-ac6d-e265d71a4988”},{“location”:{“line”:39,“column”:9},“keyword”:“E ”,“text”:“eu aperto 'Enviar'”,“id”:“88981e28-fa17-431d-acac-fcef72fe322c”},{“location”:{“line”:40,“column”:9},“keyword”:“Então ”,“text”:“eu devo estar na página de solicitações de credenciamento”,“id”:“59630892-fc68-4bcc-9dc9-567893a6d2f7”},{“location”:{“line”:41,“column”:9},“keyword”:“Quando ”,“text”:“eu marco apenas os seguintes estados: Rejeitado”,“id”:“440aa711-d0c9-4d35-8c82-b906996f34a6”},{“location”:{“line”:42,“column”:9},“keyword”:“E ”,“text”:“eu aperto 'Atualizar'”,“id”:“0f4ec97b-5628-4aff-9101-bd8bb2a29dd2”},{“location”:{“line”:43,“column”:9},“keyword”:“Então ”,“text”:“eu devo ver "Simon"”,“id”:“3efd2ebb-fef8-4cd0-b314-90aa4ab97a51”}]}},{“scenario”:{“id”:“85654c2d-f3a8-466a-b1ad-8b983fd772ea”,“location”:{“line”:45,“column”:5},“keyword”:“Cenário”,“name”:“Recusar uma solicitação e não encontrar o credenciamento correspondente”,“steps”:[{“location”:{“line”:46,“column”:9},“keyword”:“Quando ”,“text”:“eu escolho avaliar "Theodore"”,“id”:“515ac266-c4e3-4853-a7e7-e75bbc3f17e5”},{“location”:{“line”:47,“column”:9},“keyword”:“E ”,“text”:“eu escolho 'Rejeitado'”,“id”:“65f4eb80-106f-4c73-a55d-9891c470964d”},{“location”:{“line”:48,“column”:9},“keyword”:“E ”,“text”:“eu aperto 'Enviar'”,“id”:“c1c5c57c-848f-48af-8f3f-e0b38b5a66d6”},{“location”:{“line”:49,“column”:9},“keyword”:“Dado ”,“text”:“que eu esteja na página de credenciamentos”,“id”:“714525b2-c9fb-4882-9766-220d88d756a3”},{“location”:{“line”:50,“column”:9},“keyword”:“Então ”,“text”:“eu não devo ver "Theodore"”,“id”:“f6f43aaf-dc66-4128-b9c7-5abcf575a14f”}]}}]},“comments”:[{“location”:{“line”:2,“column”:1},“text”:“#encoding: utf-8”}],“uri”:“features/gerenciar_solicitacoes_credenciamento.feature”}}, {“pickle”:{“uri”:“features/gerenciar_solicitacoes_credenciamento.feature”,“id”:“8ea4da4b-237e-4f05-b3a4-1903e3497059”,“name”:“Aceitar uma solicitação de credenciamento”,“language”:“pt”,“astNodeIds”:,“steps”:[{“id”:“26deb52d-5165-4881-bffe-ad4ea4696beb”,“astNodeIds”:,“text”:“que existam as seguintes solicitações:”,“argument”:{“dataTable”:{“rows”:[{“cells”:},{“cells”:},{“cells”:},{“cells”:},{“cells”:}]}}},{“id”:“3fdb4560-8e45-4878-84e0-145a556b7ba6”,“astNodeIds”:,“text”:“que eu esteja cadastrado e logado como "Gabriel", "gabriel@admin.com", "gabriel123", "administrator", "200000000"”},{“id”:“9459f6e3-f056-4581-8982-26dc219dac43”,“astNodeIds”:,“text”:“que eu esteja na página de solicitações de credenciamento”},{“id”:“ec8650c9-70cf-4889-b4c0-b5091a98071d”,“astNodeIds”:,“text”:“eu escolho avaliar "Dave"”},{“id”:“1f2cd37d-ee5c-4d41-b8ba-18e9c2292570”,“astNodeIds”:,“text”:“eu escolho 'Aprovado'”},{“id”:“a512064d-cc54-480f-8973-5eed8f7cb332”,“astNodeIds”:,“text”:“eu aperto 'Enviar'”},{“id”:“7729cd48-8897-49cf-b5b5-4629ac149726”,“astNodeIds”:,“text”:“eu devo estar na página de solicitações de credenciamento”},{“id”:“42382c4a-bdd7-44b6-b38a-de84c97c0bfc”,“astNodeIds”:,“text”:“eu marco apenas os seguintes estados: Aprovado”},{“id”:“ea781d88-2b9e-42bc-bae2-f63cf583aed4”,“astNodeIds”:,“text”:“eu aperto 'Atualizar'”},{“id”:“bd2b9760-ad40-4634-8cea-3f5db52d33e5”,“astNodeIds”:,“text”:“eu devo ver "Dave"”}]}}, {“pickle”:{“uri”:“features/gerenciar_solicitacoes_credenciamento.feature”,“id”:“2522c726-a4b5-437b-bae6-957d7bb4cc1b”,“name”:“Aceitar uma solicitação e encontrar o credenciamento correspondente”,“language”:“pt”,“astNodeIds”:,“steps”:[{“id”:“2b9cd3ba-2939-48eb-a8d8-e9f17968f3d5”,“astNodeIds”:,“text”:“que existam as seguintes solicitações:”,“argument”:{“dataTable”:{“rows”:[{“cells”:},{“cells”:},{“cells”:},{“cells”:},{“cells”:}]}}},{“id”:“0928afe4-5a6f-4296-b0c4-2797c2a280bd”,“astNodeIds”:,“text”:“que eu esteja cadastrado e logado como "Gabriel", "gabriel@admin.com", "gabriel123", "administrator", "200000000"”},{“id”:“cc136d70-d499-4832-93bb-37af4f741296”,“astNodeIds”:,“text”:“que eu esteja na página de solicitações de credenciamento”},{“id”:“f7ba5911-03fb-4478-bf33-e5832ade342a”,“astNodeIds”:,“text”:“eu escolho avaliar "Alvin"”},{“id”:“a1cd948e-8103-44e3-ab45-0de813078e48”,“astNodeIds”:,“text”:“eu escolho 'Aprovado'”},{“id”:“da67cc6a-a085-4fb8-a414-de922b0e588a”,“astNodeIds”:,“text”:“eu aperto 'Enviar'”},{“id”:“1da91f3f-f027-4928-bb6e-639f73531b97”,“astNodeIds”:,“text”:“que eu esteja na página de credenciamentos”},{“id”:“e72ebf7a-8a97-44d3-b6f7-def1e05c4300”,“astNodeIds”:,“text”:“eu devo ver "Alvin"”}]}}, {“pickle”:{“uri”:“features/gerenciar_solicitacoes_credenciamento.feature”,“id”:“f8a5efe6-2ed6-40e8-89a1-59ac26df8369”,“name”:“Recusar uma solicitação de credenciamento”,“language”:“pt”,“astNodeIds”:,“steps”:[{“id”:“829fb2d1-1e8a-473f-b961-c0f30e3989d9”,“astNodeIds”:,“text”:“que existam as seguintes solicitações:”,“argument”:{“dataTable”:{“rows”:[{“cells”:},{“cells”:},{“cells”:},{“cells”:},{“cells”:}]}}},{“id”:“fef245a4-4b21-431c-96c3-ccce5e10e7da”,“astNodeIds”:,“text”:“que eu esteja cadastrado e logado como "Gabriel", "gabriel@admin.com", "gabriel123", "administrator", "200000000"”},{“id”:“042848db-8044-4ada-acbf-9004e7dd7221”,“astNodeIds”:,“text”:“que eu esteja na página de solicitações de credenciamento”},{“id”:“5b20ffb1-8fdc-45c0-81af-bc845bd7b35b”,“astNodeIds”:,“text”:“eu escolho avaliar "Simon"”},{“id”:“baff4981-b7ab-4f1d-88b8-32ceca21cee1”,“astNodeIds”:,“text”:“eu escolho 'Rejeitado'”},{“id”:“5a1a8c02-30c7-4f71-838e-50d3a427ced0”,“astNodeIds”:,“text”:“eu aperto 'Enviar'”},{“id”:“1a92d517-0c0f-4579-a3c3-9c4ccdf83aef”,“astNodeIds”:,“text”:“eu devo estar na página de solicitações de credenciamento”},{“id”:“67c84028-0310-46fb-b2b4-4fba1650fa91”,“astNodeIds”:,“text”:“eu marco apenas os seguintes estados: Rejeitado”},{“id”:“10efe596-8403-4f68-996a-7e51fd5cc251”,“astNodeIds”:,“text”:“eu aperto 'Atualizar'”},{“id”:“ea0542d9-536a-4c02-9585-a2e7310b5e0d”,“astNodeIds”:,“text”:“eu devo ver "Simon"”}]}}, {“pickle”:{“uri”:“features/gerenciar_solicitacoes_credenciamento.feature”,“id”:“f6988527-1f56-4a95-9033-488eb2e13734”,“name”:“Recusar uma solicitação e não encontrar o credenciamento correspondente”,“language”:“pt”,“astNodeIds”:,“steps”:[{“id”:“49df1a26-a7a2-402a-8957-b5e982d8cc07”,“astNodeIds”:,“text”:“que existam as seguintes solicitações:”,“argument”:{“dataTable”:{“rows”:[{“cells”:},{“cells”:},{“cells”:},{“cells”:},{“cells”:}]}}},{“id”:“74f0b384-908b-4595-b5bf-a7eb43d7a23c”,“astNodeIds”:,“text”:“que eu esteja cadastrado e logado como "Gabriel", "gabriel@admin.com", "gabriel123", "administrator", "200000000"”},{“id”:“d42486a5-92dc-4d19-9872-f26c7a7ee991”,“astNodeIds”:,“text”:“que eu esteja na página de solicitações de credenciamento”},{“id”:“9656fb74-c474-456b-ae7c-de2b967d0f59”,“astNodeIds”:,“text”:“eu escolho avaliar "Theodore"”},{“id”:“ef8e5c02-5f18-4eef-81e2-f10e4fde800a”,“astNodeIds”:,“text”:“eu escolho 'Rejeitado'”},{“id”:“340144ce-31e3-4481-9785-b10fe712af4b”,“astNodeIds”:,“text”:“eu aperto 'Enviar'”},{“id”:“c07eddea-773a-41db-92a1-f3b2be31cfce”,“astNodeIds”:,“text”:“que eu esteja na página de credenciamentos”},{“id”:“7f59ddab-42b3-4607-b46a-2c76f801ea40”,“astNodeIds”:,“text”:“eu não devo ver "Theodore"”}]}}, {“gherkinDocument”:{“feature”:{“location”:{“line”:4,“column”:1},“language”:“pt”,“keyword”:“Funcionalidade”,“name”:“Disponibilizar os requisitos para o credenciamento”,“description”:“ Como um administrador autenticado no sistema,n Para que os professores possam abrir solicitações de credenciamenton Quero poder disponibilizar os requisitos necessários para o credenciamento”,“children”:[{“background”:{“id”:“365805e6-e910-406c-8c0d-9bcb3e0b017d”,“location”:{“line”:9,“column”:3},“keyword”:“Contexto”,“steps”:[{“location”:{“line”:10,“column”:5},“keyword”:“Dado ”,“text”:“que eu esteja cadastrado e logado como "Preihs", "preihs@admin.com", "preihs123", "administrator", "200000000"”,“id”:“40ebee2f-4abc-4bf4-bd20-99a646011536”},{“location”:{“line”:11,“column”:5},“keyword”:“E ”,“text”:“que eu esteja na página de requisitos para o credenciamento”,“id”:“97524ad0-8298-4d76-905e-472c494d8003”}]}},{“scenario”:{“id”:“4f066cb2-c012-4853-bdd2-ff51bb371680”,“location”:{“line”:13,“column”:5},“keyword”:“Cenário”,“name”:“Requisitos modificados com sucesso”,“steps”:[{“location”:{“line”:14,“column”:7},“keyword”:“Quando ”,“text”:“eu clico em 'Adicionar Informação de Requisitos'”,“id”:“657d917a-b5d0-4b7f-a553-cdc9355c1699”},{“location”:{“line”:15,“column”:7},“keyword”:“E ”,“text”:“eu preencho com "Requisitos de Credenciamento" em 'Título'”,“id”:“459cf419-946b-4f2f-8dec-a0bc838f85d5”},{“location”:{“line”:16,“column”:7},“keyword”:“E ”,“text”:“eu anexo o arquivo "features/resources/Formulário de Credenciamento.doc" em 'Documentos'”,“id”:“adf38b50-f327-4518-a779-cb150138c768”},{“location”:{“line”:17,“column”:7},“keyword”:“E ”,“text”:“eu aperto 'Enviar'”,“id”:“6eb15daf-c096-4bca-85e2-6f9f3f92b064”},{“location”:{“line”:18,“column”:7},“keyword”:“Então ”,“text”:“eu devo receber uma mensagem de sucesso”,“id”:“a610c0cf-89f5-4766-af4a-f69969f0fe69”}]}},{“scenario”:{“id”:“283be9b9-3191-4742-892e-0d8bb88e053f”,“location”:{“line”:20,“column”:5},“keyword”:“Cenário”,“name”:“Requisitos não modificados (campo obrigatório em branco)”,“steps”:[{“location”:{“line”:21,“column”:7},“keyword”:“Quando ”,“text”:“eu clico em 'Adicionar Informação de Requisitos'”,“id”:“d6c92f02-8e4a-4bbf-967a-95cf3f844440”},{“location”:{“line”:22,“column”:7},“keyword”:“E ”,“text”:“eu anexo o arquivo "features/resources/Formulário de Credenciamento.doc" em 'Documentos'”,“id”:“10825bab-195d-4ce7-bbc0-19843344cbb3”},{“location”:{“line”:23,“column”:7},“keyword”:“E ”,“text”:“eu aperto 'Enviar'”,“id”:“adb19b99-ce57-4159-ae8b-37af3fa48bbe”},{“location”:{“line”:24,“column”:7},“keyword”:“Então ”,“text”:“eu devo receber uma mensagem de erro”,“id”:“f76da65d-229d-49b4-ba31-ea7ea4822420”}]}},{“scenario”:{“id”:“9932a7a8-88f4-4e99-960e-b6ed53a574d1”,“location”:{“line”:26,“column”:5},“keyword”:“Cenário”,“name”:“Requisitos não modificados (registro duplicado)”,“steps”:[{“location”:{“line”:27,“column”:7},“keyword”:“Dado ”,“text”:“que o registro "Requisitos de Credenciamento" já exista na tabela de requisitos”,“id”:“a3f8a940-fe82-4692-a0a1-d3768302558e”},{“location”:{“line”:28,“column”:7},“keyword”:“E ”,“text”:“que eu esteja na página de requisitos para o credenciamento”,“id”:“45b670b1-6d53-44c8-b0fb-9253cc00d896”},{“location”:{“line”:29,“column”:7},“keyword”:“Quando ”,“text”:“eu clico em 'Adicionar Informação de Requisitos'”,“id”:“c769bddc-920c-4871-876d-fdca38df842f”},{“location”:{“line”:30,“column”:7},“keyword”:“E ”,“text”:“eu preencho com "Requisitos de Credenciamento" em 'Título'”,“id”:“c39e6a2f-c35c-4c8a-a514-98199efa5687”},{“location”:{“line”:31,“column”:7},“keyword”:“E ”,“text”:“eu aperto 'Enviar'”,“id”:“33a56de3-83a7-46ce-a876-8ca3c6563101”},{“location”:{“line”:32,“column”:7},“keyword”:“Então ”,“text”:“eu devo receber uma mensagem de erro”,“id”:“84712ae2-0f0c-44c2-a91c-e5b692152919”}]}}]},“comments”:[{“location”:{“line”:2,“column”:1},“text”:“#encoding: utf-8”}],“uri”:“features/requisitos_necessarios.feature”}}, {“pickle”:{“uri”:“features/requisitos_necessarios.feature”,“id”:“8b37d728-b771-4c66-ae33-eb80274a950a”,“name”:“Requisitos modificados com sucesso”,“language”:“pt”,“astNodeIds”:,“steps”:[{“id”:“632aa8c1-bec5-44c9-9097-df600d620d1d”,“astNodeIds”:,“text”:“que eu esteja cadastrado e logado como "Preihs", "preihs@admin.com", "preihs123", "administrator", "200000000"”},{“id”:“59f377b9-2993-47df-9aa6-20fec1b1eb75”,“astNodeIds”:,“text”:“que eu esteja na página de requisitos para o credenciamento”},{“id”:“e5cccadb-7773-48f7-9ff2-e4a60af11aac”,“astNodeIds”:,“text”:“eu clico em 'Adicionar Informação de Requisitos'”},{“id”:“d055c205-19b7-4516-97a8-d00ab408a1f7”,“astNodeIds”:,“text”:“eu preencho com "Requisitos de Credenciamento" em 'Título'”},{“id”:“5af3c3b9-91ab-4a02-8a51-bd832530503a”,“astNodeIds”:,“text”:“eu anexo o arquivo "features/resources/Formulário de Credenciamento.doc" em 'Documentos'”},{“id”:“0e51daed-e80b-427d-8f53-32364a5b5f4c”,“astNodeIds”:,“text”:“eu aperto 'Enviar'”},{“id”:“d52d17da-c2ba-4096-bf2d-07d0d9a7a4e3”,“astNodeIds”:,“text”:“eu devo receber uma mensagem de sucesso”}]}}, {“pickle”:{“uri”:“features/requisitos_necessarios.feature”,“id”:“f806ba72-64ef-4363-aad2-dd63d6661857”,“name”:“Requisitos não modificados (campo obrigatório em branco)”,“language”:“pt”,“astNodeIds”:,“steps”:[{“id”:“6e62b400-662f-4b83-94c4-303fb6789e1f”,“astNodeIds”:,“text”:“que eu esteja cadastrado e logado como "Preihs", "preihs@admin.com", "preihs123", "administrator", "200000000"”},{“id”:“ca16b4f9-a1ec-462c-b7e1-3ade62726cd4”,“astNodeIds”:,“text”:“que eu esteja na página de requisitos para o credenciamento”},{“id”:“7bf377d7-8cc0-4cc8-a450-402fa083fbbb”,“astNodeIds”:,“text”:“eu clico em 'Adicionar Informação de Requisitos'”},{“id”:“2fcce8f4-11ad-4f34-907a-1d6897ef3440”,“astNodeIds”:,“text”:“eu anexo o arquivo "features/resources/Formulário de Credenciamento.doc" em 'Documentos'”},{“id”:“69e110fd-d842-4b9a-b1cb-4dc4b1eb4967”,“astNodeIds”:,“text”:“eu aperto 'Enviar'”},{“id”:“8cb2bd77-0edd-4375-9241-681828517679”,“astNodeIds”:,“text”:“eu devo receber uma mensagem de erro”}]}}, {“pickle”:{“uri”:“features/requisitos_necessarios.feature”,“id”:“ed38a039-665a-4467-b0d6-fc31c9716176”,“name”:“Requisitos não modificados (registro duplicado)”,“language”:“pt”,“astNodeIds”:,“steps”:[{“id”:“feb70ae4-dd9a-4816-adb1-471eb6eac7ec”,“astNodeIds”:,“text”:“que eu esteja cadastrado e logado como "Preihs", "preihs@admin.com", "preihs123", "administrator", "200000000"”},{“id”:“d054d6a6-cd6b-41db-9f6b-bc202ffbd30c”,“astNodeIds”:,“text”:“que eu esteja na página de requisitos para o credenciamento”},{“id”:“4331082f-c29c-4210-aea5-379902b8e40e”,“astNodeIds”:,“text”:“que o registro "Requisitos de Credenciamento" já exista na tabela de requisitos”},{“id”:“e453f6f8-cf32-4293-bd1b-42f54190a51a”,“astNodeIds”:,“text”:“que eu esteja na página de requisitos para o credenciamento”},{“id”:“9a4e4929-1087-422f-8ebd-7353d97376c7”,“astNodeIds”:,“text”:“eu clico em 'Adicionar Informação de Requisitos'”},{“id”:“ed17bb92-6f96-48a4-a3a3-cc6194f28924”,“astNodeIds”:,“text”:“eu preencho com "Requisitos de Credenciamento" em 'Título'”},{“id”:“ecb71673-bc80-4aa1-9b4d-e052ea81e93f”,“astNodeIds”:,“text”:“eu aperto 'Enviar'”},{“id”:“e9e1d89e-8559-4b6b-8d67-4a3fef0026c2”,“astNodeIds”:,“text”:“eu devo receber uma mensagem de erro”}]}}, {“testCase”:{“id”:“c5ba9d7f-a2fe-4b9c-bd84-0a52665b8478”,“pickleId”:“f0b3bc07-5889-4cd7-9766-d130adaebadf”,“testSteps”:[{“id”:“010eb46b-f79f-4f63-a157-485889bcd653”,“hookId”:“c5c83f6f-d66e-4fa7-a64e-6af95970e761”},{“id”:“a9c5773c-34d0-4659-99b1-766a5ebeb5bf”,“hookId”:“4d3b602a-3c20-4905-b6e2-5ff88f9d0381”},{“id”:“b4a376a5-ca1c-4f26-8ace-ce91985f8eb4”,“hookId”:“fef496dd-2ab2-4114-830e-02aecb4b8fa9”},{“id”:“845da1f0-1256-4a64-ba0c-0c0d92083714”,“hookId”:“0717e035-c1be-40a4-97d2-96ef05cebead”},{“id”:“20da556e-fc1d-4263-918b-5efda0f267cb”,“hookId”:“24b36278-8ba8-4cb2-9afe-c5a9958e8860”},{“id”:“2ff53260-24c4-42f1-8174-b230696466c1”,“hookId”:“0e55cb2b-da7a-4fe3-bf80-9b4cd671ab21”},{“id”:“71a1ff7f-62de-4bf2-a485-b10f19e1b2da”,“pickleStepId”:“b560d802-e6e5-4a10-9e69-5da951c6678b”,“stepDefinitionIds”:,“stepMatchArgumentsLists”:[{“stepMatchArguments”:[{“group”:{“start”:39,“value”:“"Lucas", "lucas@professor.com", "lucas123", "professor", "200000000"”}}]}]},{“id”:“97a78edd-897d-41f0-9c3e-9e5016be2884”,“pickleStepId”:“b707c02e-84da-4289-b9d6-4f308fe1f7cd”,“stepDefinitionIds”:,“stepMatchArgumentsLists”:[{“stepMatchArguments”:[{“group”:{“start”:24,“value”:“de solicitações de credenciamento”}}]}]},{“id”:“24524336-fcd5-4d49-8f11-27e44edd84ba”,“pickleStepId”:“6b86aac3-cb7d-4702-86a4-866b26e2cd09”,“stepDefinitionIds”:,“stepMatchArgumentsLists”:[{“stepMatchArguments”:[{“group”:{“start”:13,“value”:“Abrir Novo Processo”}}]}]},{“id”:“f35a2300-8d13-4cf7-9a1b-7e62082befbe”,“pickleStepId”:“007d9a70-c25b-4255-9c42-76c587e22ddb”,“stepDefinitionIds”:,“stepMatchArgumentsLists”:[{“stepMatchArguments”:[{“group”:{“start”:20,“value”:“features/resources/Formulário de Credenciamento.doc”}},{“group”:{“start”:77,“value”:“Documentos”}}]}]},{“id”:“8b22e090-1cfe-4e37-b4b5-0677e6150a81”,“pickleStepId”:“fb502dfb-1609-49ae-907b-0bf5a95f23f3”,“stepDefinitionIds”:,“stepMatchArgumentsLists”:[{“stepMatchArguments”:}]},{“id”:“3cba487e-83d5-4e49-a694-ff01d0ffdf78”,“pickleStepId”:“ae73294e-aaed-46bc-aa84-f3f958fdd7af”,“stepDefinitionIds”:,“stepMatchArgumentsLists”:[{“stepMatchArguments”:}]},{“id”:“ebf75428-6c42-4be4-87c2-633286dafe71”,“pickleStepId”:“e12997f6-2d82-47f2-8326-2b638d7ecb72”,“stepDefinitionIds”:,“stepMatchArgumentsLists”:[{“stepMatchArguments”:}]},{“id”:“7083d235-f9f3-49f5-925c-9809291f3beb”,“hookId”:“3ad2cb6c-9fba-4aa3-ba66-b9bd0778814a”},{“id”:“3b711036-277f-45fb-9cd7-b22f581ae340”,“hookId”:“64ca9839-37e0-4b54-9187-98cd2c4d2356”},{“id”:“7dbb6988-a0d5-4868-b793-32ce6a5c1e0e”,“hookId”:“8dde38ee-8a77-4b8e-a219-846e4710f578”},{“id”:“73a9c3e0-a108-4b9f-91d3-3bcf861ed2fc”,“hookId”:“51e0bca5-e38a-4d75-ba28-6ae3b1d3c029”}]}}, {“testCase”:{“id”:“1fe33b5d-893e-4ee2-bb0c-c2f4e55c271c”,“pickleId”:“4309bade-32c8-4e65-9182-190161bc4a1a”,“testSteps”:[{“id”:“4000f77e-7977-4e79-8eb1-6c228ebb3bef”,“hookId”:“c5c83f6f-d66e-4fa7-a64e-6af95970e761”},{“id”:“8c2c1f23-2cbe-4479-89d8-7e65fbadb0c6”,“hookId”:“4d3b602a-3c20-4905-b6e2-5ff88f9d0381”},{“id”:“fb90dedc-bbfd-4ee4-8d0f-c013c6235dde”,“hookId”:“fef496dd-2ab2-4114-830e-02aecb4b8fa9”},{“id”:“e6f86227-fcba-4343-9268-dbab0b8a70b9”,“hookId”:“0717e035-c1be-40a4-97d2-96ef05cebead”},{“id”:“1f9d819f-2aac-4e1e-8ab5-d52d79524924”,“hookId”:“24b36278-8ba8-4cb2-9afe-c5a9958e8860”},{“id”:“5a9e98c8-d2ff-41fc-b359-e74b75d6c6c6”,“hookId”:“0e55cb2b-da7a-4fe3-bf80-9b4cd671ab21”},{“id”:“8a55516e-8be4-47f9-b3b1-4a9b38d75838”,“pickleStepId”:“9a0fa3ff-adb1-41ad-b56e-91add7844150”,“stepDefinitionIds”:,“stepMatchArgumentsLists”:[{“stepMatchArguments”:[{“group”:{“start”:39,“value”:“"Lucas", "lucas@professor.com", "lucas123", "professor", "200000000"”}}]}]},{“id”:“792ae3f6-5baa-4bc8-a203-7e4be4a0aaad”,“pickleStepId”:“a68a0bc6-4357-4ef3-b857-3388a034d248”,“stepDefinitionIds”:,“stepMatchArgumentsLists”:[{“stepMatchArguments”:[{“group”:{“start”:24,“value”:“de solicitações de credenciamento”}}]}]},{“id”:“1688a8b6-db09-4f0c-b38f-922d2a292563”,“pickleStepId”:“1c83b70e-ef8e-47ed-9d4d-b245fb829940”,“stepDefinitionIds”:,“stepMatchArgumentsLists”:[{“stepMatchArguments”:[{“group”:{“start”:13,“value”:“Abrir Novo Processo”}}]}]},{“id”:“315d9208-1d01-487d-b0db-3a1cfc31bcd4”,“pickleStepId”:“4334c64a-74d0-4426-8d81-0e011c473a8c”,“stepDefinitionIds”:,“stepMatchArgumentsLists”:[{“stepMatchArguments”:}]},{“id”:“0cbdc0e6-933f-4c31-833d-d2b2ea26cc3f”,“pickleStepId”:“6245c86c-ddec-48d2-89d1-133385d0ab59”,“stepDefinitionIds”:,“stepMatchArgumentsLists”:[{“stepMatchArguments”:}]},{“id”:“181ddd52-c011-41da-823c-a47ff5f14ff5”,“hookId”:“3ad2cb6c-9fba-4aa3-ba66-b9bd0778814a”},{“id”:“1c51343a-5759-49a1-9b38-a1e6c93c661b”,“hookId”:“64ca9839-37e0-4b54-9187-98cd2c4d2356”},{“id”:“425e3218-55b1-4802-93b2-b59a04dc31f6”,“hookId”:“8dde38ee-8a77-4b8e-a219-846e4710f578”},{“id”:“ab5d4989-e7b6-4318-bbbb-3f92b63ce92d”,“hookId”:“51e0bca5-e38a-4d75-ba28-6ae3b1d3c029”}]}}, {“testCase”:{“id”:“56010d1c-e71a-4cfc-b00e-1245229eebf1”,“pickleId”:“977538ff-1b44-48a0-bb27-62ec43ff24ec”,“testSteps”:[{“id”:“32901df5-7132-4041-bf97-3fc0a7ab4d05”,“hookId”:“c5c83f6f-d66e-4fa7-a64e-6af95970e761”},{“id”:“219a16c8-e257-4135-9435-927b650fc206”,“hookId”:“4d3b602a-3c20-4905-b6e2-5ff88f9d0381”},{“id”:“8a73c411-e035-4765-bc6a-3be74fdfa079”,“hookId”:“fef496dd-2ab2-4114-830e-02aecb4b8fa9”},{“id”:“59c2c0cc-22ca-44b8-872f-97b305262884”,“hookId”:“0717e035-c1be-40a4-97d2-96ef05cebead”},{“id”:“f4194ca3-5b5a-4f06-9550-320b58144ab9”,“hookId”:“24b36278-8ba8-4cb2-9afe-c5a9958e8860”},{“id”:“bf2d2df6-80ac-46c5-8420-434886adaec5”,“hookId”:“0e55cb2b-da7a-4fe3-bf80-9b4cd671ab21”},{“id”:“a904af99-fcce-401e-8aee-de69cc15d821”,“pickleStepId”:“0c0d9f43-406f-4562-8935-bd42a2a0ff4e”,“stepDefinitionIds”:,“stepMatchArgumentsLists”:},{“id”:“0f2a0734-de47-4730-9ad0-0b50debf64dd”,“pickleStepId”:“6302d0bf-c862-4d8d-82ca-f2c8032cfa04”,“stepDefinitionIds”:,“stepMatchArgumentsLists”:[{“stepMatchArguments”:[{“group”:{“start”:39,“value”:“"Aécio", "aecio@admin.com", "aecio123", "administrator", "200000000"”}}]}]},{“id”:“8e222d7e-7abe-41a6-9277-5d47a56ddd9a”,“pickleStepId”:“d4fc3697-6a76-4ff3-9004-d9519778585a”,“stepDefinitionIds”:,“stepMatchArgumentsLists”:[{“stepMatchArguments”:[{“group”:{“start”:24,“value”:“de credenciamentos”}}]}]},{“id”:“9f3df2a9-21a1-4a2a-9347-db65a5ec67a6”,“pickleStepId”:“978762d6-5b64-4833-83a7-7c820bbd90da”,“stepDefinitionIds”:,“stepMatchArgumentsLists”:[{“stepMatchArguments”:}]},{“id”:“0d9e58eb-bd07-4192-b058-33ff11b15de6”,“pickleStepId”:“cf2341c9-d5b2-4144-997e-e90bc7bb5798”,“stepDefinitionIds”:,“stepMatchArgumentsLists”:[{“stepMatchArguments”:}]},{“id”:“f5375727-5687-4ff3-af9c-196258b5032a”,“pickleStepId”:“4940e7c2-f1c8-41c5-ac5e-788ff372ee63”,“stepDefinitionIds”:,“stepMatchArgumentsLists”:[{“stepMatchArguments”:}]},{“id”:“b1298054-f268-4923-9eba-3b21eefd1700”,“pickleStepId”:“b8451601-6b97-4026-a125-ea8ec10a4372”,“stepDefinitionIds”:,“stepMatchArgumentsLists”:[{“stepMatchArguments”:}]},{“id”:“e82c7301-f6c0-4f0d-a0a8-e3778d886b60”,“hookId”:“3ad2cb6c-9fba-4aa3-ba66-b9bd0778814a”},{“id”:“ab0b2693-052e-41aa-80ca-911551b41eb1”,“hookId”:“64ca9839-37e0-4b54-9187-98cd2c4d2356”},{“id”:“a985f7bd-d6a2-46b4-a087-8961b864985c”,“hookId”:“8dde38ee-8a77-4b8e-a219-846e4710f578”},{“id”:“055aa844-6fc2-4473-ba62-ed6bfaec4ad8”,“hookId”:“51e0bca5-e38a-4d75-ba28-6ae3b1d3c029”}]}}, {“testCase”:{“id”:“1ca6af2a-f235-4d50-b151-bc90caaf4683”,“pickleId”:“c4349f96-6de8-486a-a8cb-0834d90b925d”,“testSteps”:[{“id”:“15c0331b-86a8-4eef-a852-bc5755b85e2f”,“hookId”:“c5c83f6f-d66e-4fa7-a64e-6af95970e761”},{“id”:“03c3f6ec-61c0-457e-8fb8-90500a303270”,“hookId”:“4d3b602a-3c20-4905-b6e2-5ff88f9d0381”},{“id”:“f5c19fef-34ee-49f6-9638-5e3b4f276e38”,“hookId”:“fef496dd-2ab2-4114-830e-02aecb4b8fa9”},{“id”:“1069cbcd-4875-4538-a546-eba90a48a7c3”,“hookId”:“0717e035-c1be-40a4-97d2-96ef05cebead”},{“id”:“d476d623-9103-4dfe-9d27-867b25c3f1e4”,“hookId”:“24b36278-8ba8-4cb2-9afe-c5a9958e8860”},{“id”:“13c3160e-1753-4d76-829d-89c9b00e2760”,“hookId”:“0e55cb2b-da7a-4fe3-bf80-9b4cd671ab21”},{“id”:“83fd9655-f328-41aa-953a-47aace16ab6c”,“pickleStepId”:“1a0b0a3e-ad61-4fce-93af-f43f71376203”,“stepDefinitionIds”:,“stepMatchArgumentsLists”:},{“id”:“11bc1a44-4a1c-46e5-a595-bdd78905e6c8”,“pickleStepId”:“729d9234-ba06-4861-8c83-e78520f22419”,“stepDefinitionIds”:,“stepMatchArgumentsLists”:[{“stepMatchArguments”:[{“group”:{“start”:39,“value”:“"Aécio", "aecio@admin.com", "aecio123", "administrator", "200000000"”}}]}]},{“id”:“66fd5b4e-384e-4755-b6f9-363437ecbf3f”,“pickleStepId”:“b3bd5709-2caf-46b9-b46f-01700b40e3f7”,“stepDefinitionIds”:,“stepMatchArgumentsLists”:[{“stepMatchArguments”:[{“group”:{“start”:24,“value”:“de credenciamentos”}}]}]},{“id”:“b9c754ce-e28a-47a9-8c4f-4432e16f7865”,“pickleStepId”:“86ad32b9-e12c-43ac-aa1d-bcb37cffda9a”,“stepDefinitionIds”:,“stepMatchArgumentsLists”:[{“stepMatchArguments”:}]},{“id”:“edaf3330-c086-4b71-b03f-2f6864594cc2”,“pickleStepId”:“b20141a1-aa41-430e-8820-e11096d51200”,“stepDefinitionIds”:,“stepMatchArgumentsLists”:[{“stepMatchArguments”:}]},{“id”:“e1d18566-0ba9-458a-b22d-2841ab8a3bae”,“pickleStepId”:“d7e2a1aa-0096-49d8-9067-d1fedc172e37”,“stepDefinitionIds”:,“stepMatchArgumentsLists”:[{“stepMatchArguments”:}]},{“id”:“6aa46e13-99cb-42e2-b501-5cb7cd703163”,“pickleStepId”:“d9b19d72-2b76-4c23-9c6f-d27baba02878”,“stepDefinitionIds”:,“stepMatchArgumentsLists”:[{“stepMatchArguments”:}]},{“id”:“3f67d027-4bf6-45c4-8aa5-778c92c2d6c2”,“hookId”:“3ad2cb6c-9fba-4aa3-ba66-b9bd0778814a”},{“id”:“8588f5a5-b62c-448b-84f0-2c65c97bb46d”,“hookId”:“64ca9839-37e0-4b54-9187-98cd2c4d2356”},{“id”:“3c390f86-f381-4a9c-912c-47faf4176578”,“hookId”:“8dde38ee-8a77-4b8e-a219-846e4710f578”},{“id”:“67fa1637-ae4f-4938-822c-728a4e59bd39”,“hookId”:“51e0bca5-e38a-4d75-ba28-6ae3b1d3c029”}]}}, {“testCase”:{“id”:“101a253c-1185-4ef4-9226-d84c3a18a424”,“pickleId”:“8ea4da4b-237e-4f05-b3a4-1903e3497059”,“testSteps”:[{“id”:“d9314036-1625-45ad-9df0-2324b832db6e”,“hookId”:“c5c83f6f-d66e-4fa7-a64e-6af95970e761”},{“id”:“da3af721-d44f-426b-bacb-a26ec6a028bb”,“hookId”:“4d3b602a-3c20-4905-b6e2-5ff88f9d0381”},{“id”:“25250273-90be-4a10-84cb-878d24f7b24f”,“hookId”:“fef496dd-2ab2-4114-830e-02aecb4b8fa9”},{“id”:“07534b3c-8192-472e-a734-4ea6ed64a9a5”,“hookId”:“0717e035-c1be-40a4-97d2-96ef05cebead”},{“id”:“2932baac-fdd1-435a-83d4-c0f3a19312e0”,“hookId”:“24b36278-8ba8-4cb2-9afe-c5a9958e8860”},{“id”:“bbd1091c-e043-492e-8195-0252fcc1ac8a”,“hookId”:“0e55cb2b-da7a-4fe3-bf80-9b4cd671ab21”},{“id”:“0e4c7f42-dfd4-41a4-b659-a781ca1d0c51”,“pickleStepId”:“26deb52d-5165-4881-bffe-ad4ea4696beb”,“stepDefinitionIds”:,“stepMatchArgumentsLists”:},{“id”:“8ff4087d-df97-4680-acbc-45271eea175e”,“pickleStepId”:“3fdb4560-8e45-4878-84e0-145a556b7ba6”,“stepDefinitionIds”:,“stepMatchArgumentsLists”:[{“stepMatchArguments”:[{“group”:{“start”:39,“value”:“"Gabriel", "gabriel@admin.com", "gabriel123", "administrator", "200000000"”}}]}]},{“id”:“0852e75b-3bac-4dfc-9ea1-b0c9c993fca0”,“pickleStepId”:“9459f6e3-f056-4581-8982-26dc219dac43”,“stepDefinitionIds”:,“stepMatchArgumentsLists”:[{“stepMatchArguments”:[{“group”:{“start”:24,“value”:“de solicitações de credenciamento”}}]}]},{“id”:“1f73da74-a791-4e7b-a7d8-af7d252b5398”,“pickleStepId”:“ec8650c9-70cf-4889-b4c0-b5091a98071d”,“stepDefinitionIds”:,“stepMatchArgumentsLists”:[{“stepMatchArguments”:}]},{“id”:“59caebd7-3ec6-411e-894d-b1ece2c2409b”,“pickleStepId”:“1f2cd37d-ee5c-4d41-b8ba-18e9c2292570”,“stepDefinitionIds”:,“stepMatchArgumentsLists”:[{“stepMatchArguments”:}]},{“id”:“3a014e40-ea56-4da0-82ac-14c1ef6ccddb”,“pickleStepId”:“a512064d-cc54-480f-8973-5eed8f7cb332”,“stepDefinitionIds”:,“stepMatchArgumentsLists”:[{“stepMatchArguments”:}]},{“id”:“a09e2a3d-23bf-498f-a0ee-3466b18b8c73”,“pickleStepId”:“7729cd48-8897-49cf-b5b5-4629ac149726”,“stepDefinitionIds”:,“stepMatchArgumentsLists”:[{“stepMatchArguments”:[{“group”:{“start”:24,“value”:“de solicitações de credenciamento”}}]}]},{“id”:“9f6d4ac9-4b82-4ae5-968d-53fdf8207573”,“pickleStepId”:“42382c4a-bdd7-44b6-b38a-de84c97c0bfc”,“stepDefinitionIds”:,“stepMatchArgumentsLists”:[{“stepMatchArguments”:}]},{“id”:“e2bf79c8-f3bb-4784-9611-ef62e6570656”,“pickleStepId”:“ea781d88-2b9e-42bc-bae2-f63cf583aed4”,“stepDefinitionIds”:,“stepMatchArgumentsLists”:[{“stepMatchArguments”:}]},{“id”:“1658f5cc-0efb-4edd-8deb-1d6e21b9b402”,“pickleStepId”:“bd2b9760-ad40-4634-8cea-3f5db52d33e5”,“stepDefinitionIds”:,“stepMatchArgumentsLists”:[{“stepMatchArguments”:}]},{“id”:“034fc3c5-f3fd-4ced-8ec8-54c5b011a77b”,“hookId”:“3ad2cb6c-9fba-4aa3-ba66-b9bd0778814a”},{“id”:“ff2126a2-8944-4b4a-865a-8e4305a44141”,“hookId”:“64ca9839-37e0-4b54-9187-98cd2c4d2356”},{“id”:“5df0aa40-6f49-4b37-882f-d55e10f29f55”,“hookId”:“8dde38ee-8a77-4b8e-a219-846e4710f578”},{“id”:“9faa2422-23ac-476d-8693-e4c6ea8b4ce8”,“hookId”:“51e0bca5-e38a-4d75-ba28-6ae3b1d3c029”}]}}, {“testCase”:{“id”:“284f1913-68eb-4519-90b4-4b7d8bb12cb2”,“pickleId”:“2522c726-a4b5-437b-bae6-957d7bb4cc1b”,“testSteps”:[{“id”:“b25fd37f-3a82-49c9-adca-ac17136dbf5c”,“hookId”:“c5c83f6f-d66e-4fa7-a64e-6af95970e761”},{“id”:“da3c3f43-f757-46bc-8a3f-30f558ed40c0”,“hookId”:“4d3b602a-3c20-4905-b6e2-5ff88f9d0381”},{“id”:“7dfddd13-dc0d-47f5-b461-bceef351e71b”,“hookId”:“fef496dd-2ab2-4114-830e-02aecb4b8fa9”},{“id”:“7b82148b-35b6-43d5-bfd7-227985b708ba”,“hookId”:“0717e035-c1be-40a4-97d2-96ef05cebead”},{“id”:“13d88276-8a80-4808-9bd8-2877bed21830”,“hookId”:“24b36278-8ba8-4cb2-9afe-c5a9958e8860”},{“id”:“1113526c-feb2-43fa-8090-41375a5e1a3b”,“hookId”:“0e55cb2b-da7a-4fe3-bf80-9b4cd671ab21”},{“id”:“231fd0d7-ce0b-45ae-aa99-37f734ef21f2”,“pickleStepId”:“2b9cd3ba-2939-48eb-a8d8-e9f17968f3d5”,“stepDefinitionIds”:,“stepMatchArgumentsLists”:},{“id”:“c25319aa-fe95-4595-b8f6-65c537eaf54b”,“pickleStepId”:“0928afe4-5a6f-4296-b0c4-2797c2a280bd”,“stepDefinitionIds”:,“stepMatchArgumentsLists”:[{“stepMatchArguments”:[{“group”:{“start”:39,“value”:“"Gabriel", "gabriel@admin.com", "gabriel123", "administrator", "200000000"”}}]}]},{“id”:“59ab9731-da1b-42fc-b0f7-48c813d47feb”,“pickleStepId”:“cc136d70-d499-4832-93bb-37af4f741296”,“stepDefinitionIds”:,“stepMatchArgumentsLists”:[{“stepMatchArguments”:[{“group”:{“start”:24,“value”:“de solicitações de credenciamento”}}]}]},{“id”:“a208f90e-81a1-46df-96ef-d61c1d222a9f”,“pickleStepId”:“f7ba5911-03fb-4478-bf33-e5832ade342a”,“stepDefinitionIds”:,“stepMatchArgumentsLists”:[{“stepMatchArguments”:}]},{“id”:“d8e8e153-5d28-426f-984f-010cd4211531”,“pickleStepId”:“a1cd948e-8103-44e3-ab45-0de813078e48”,“stepDefinitionIds”:,“stepMatchArgumentsLists”:[{“stepMatchArguments”:}]},{“id”:“828d547c-611e-43e2-8d5e-d37a3933eff5”,“pickleStepId”:“da67cc6a-a085-4fb8-a414-de922b0e588a”,“stepDefinitionIds”:,“stepMatchArgumentsLists”:[{“stepMatchArguments”:}]},{“id”:“5ec155ab-fa73-4e45-836b-0e0ae007ef26”,“pickleStepId”:“1da91f3f-f027-4928-bb6e-639f73531b97”,“stepDefinitionIds”:,“stepMatchArgumentsLists”:[{“stepMatchArguments”:[{“group”:{“start”:24,“value”:“de credenciamentos”}}]}]},{“id”:“f68e7792-67a5-49fa-afb4-31a182b1aac4”,“pickleStepId”:“e72ebf7a-8a97-44d3-b6f7-def1e05c4300”,“stepDefinitionIds”:,“stepMatchArgumentsLists”:[{“stepMatchArguments”:}]},{“id”:“fd51b72f-adf2-4234-a75e-b8fa8794d35b”,“hookId”:“3ad2cb6c-9fba-4aa3-ba66-b9bd0778814a”},{“id”:“e7f780dd-af43-4f57-acc3-a68091cc83d5”,“hookId”:“64ca9839-37e0-4b54-9187-98cd2c4d2356”},{“id”:“93b6154b-414e-4fd1-9eb8-4c3c8cedbbec”,“hookId”:“8dde38ee-8a77-4b8e-a219-846e4710f578”},{“id”:“adb887fe-ecff-40c5-9d2d-5dbddfc34bd1”,“hookId”:“51e0bca5-e38a-4d75-ba28-6ae3b1d3c029”}]}}, {“testCase”:{“id”:“14907e61-7d0c-4bcb-9ecd-f113fa48031e”,“pickleId”:“f8a5efe6-2ed6-40e8-89a1-59ac26df8369”,“testSteps”:[{“id”:“3671ac83-49b0-4fc3-a7c7-dc235b4d3e5c”,“hookId”:“c5c83f6f-d66e-4fa7-a64e-6af95970e761”},{“id”:“53b706f2-b391-4457-aa2c-3abeeea8ce92”,“hookId”:“4d3b602a-3c20-4905-b6e2-5ff88f9d0381”},{“id”:“91d03690-67ac-4e94-976e-b13f937bdcea”,“hookId”:“fef496dd-2ab2-4114-830e-02aecb4b8fa9”},{“id”:“b49ed7b6-4b7c-4ce4-867d-ca61a7917926”,“hookId”:“0717e035-c1be-40a4-97d2-96ef05cebead”},{“id”:“0bfa1cd3-028b-46cd-acad-91c22b5fb4e5”,“hookId”:“24b36278-8ba8-4cb2-9afe-c5a9958e8860”},{“id”:“a2a67835-8dad-4e66-9eb4-d57e39235de4”,“hookId”:“0e55cb2b-da7a-4fe3-bf80-9b4cd671ab21”},{“id”:“ead74443-034d-4b59-afd9-865ee143f5cf”,“pickleStepId”:“829fb2d1-1e8a-473f-b961-c0f30e3989d9”,“stepDefinitionIds”:,“stepMatchArgumentsLists”:},{“id”:“b0d6918b-b0cd-4638-afac-e644c02d6909”,“pickleStepId”:“fef245a4-4b21-431c-96c3-ccce5e10e7da”,“stepDefinitionIds”:,“stepMatchArgumentsLists”:[{“stepMatchArguments”:[{“group”:{“start”:39,“value”:“"Gabriel", "gabriel@admin.com", "gabriel123", "administrator", "200000000"”}}]}]},{“id”:“6af4d933-16f0-4a67-b271-deeac41ad782”,“pickleStepId”:“042848db-8044-4ada-acbf-9004e7dd7221”,“stepDefinitionIds”:,“stepMatchArgumentsLists”:[{“stepMatchArguments”:[{“group”:{“start”:24,“value”:“de solicitações de credenciamento”}}]}]},{“id”:“eb34bc66-c287-4dfa-9ef9-c4ffa8543532”,“pickleStepId”:“5b20ffb1-8fdc-45c0-81af-bc845bd7b35b”,“stepDefinitionIds”:,“stepMatchArgumentsLists”:[{“stepMatchArguments”:}]},{“id”:“ddbd0496-0d55-49b4-ac3e-371685dfe6c6”,“pickleStepId”:“baff4981-b7ab-4f1d-88b8-32ceca21cee1”,“stepDefinitionIds”:,“stepMatchArgumentsLists”:[{“stepMatchArguments”:}]},{“id”:“4aa498f7-990c-43c2-903d-eecee726dc69”,“pickleStepId”:“5a1a8c02-30c7-4f71-838e-50d3a427ced0”,“stepDefinitionIds”:,“stepMatchArgumentsLists”:[{“stepMatchArguments”:}]},{“id”:“2dd01616-944e-421e-8534-4609f0339735”,“pickleStepId”:“1a92d517-0c0f-4579-a3c3-9c4ccdf83aef”,“stepDefinitionIds”:,“stepMatchArgumentsLists”:[{“stepMatchArguments”:[{“group”:{“start”:24,“value”:“de solicitações de credenciamento”}}]}]},{“id”:“b925ff51-838a-4001-8e3a-1b094bdc287c”,“pickleStepId”:“67c84028-0310-46fb-b2b4-4fba1650fa91”,“stepDefinitionIds”:,“stepMatchArgumentsLists”:[{“stepMatchArguments”:}]},{“id”:“8d82ccd6-1063-4262-bf4a-f3d8a76db0c0”,“pickleStepId”:“10efe596-8403-4f68-996a-7e51fd5cc251”,“stepDefinitionIds”:,“stepMatchArgumentsLists”:[{“stepMatchArguments”:}]},{“id”:“ea4d4b86-fbac-4922-b7cf-ef9b1f86e7b2”,“pickleStepId”:“ea0542d9-536a-4c02-9585-a2e7310b5e0d”,“stepDefinitionIds”:,“stepMatchArgumentsLists”:[{“stepMatchArguments”:}]},{“id”:“5bb23153-20b1-4a9f-b42f-cc219b4a9b1d”,“hookId”:“3ad2cb6c-9fba-4aa3-ba66-b9bd0778814a”},{“id”:“fe7c52a9-65e4-49c9-908d-40360948469d”,“hookId”:“64ca9839-37e0-4b54-9187-98cd2c4d2356”},{“id”:“aad924ec-fee0-4dfa-84ca-623ab9f53645”,“hookId”:“8dde38ee-8a77-4b8e-a219-846e4710f578”},{“id”:“443e1b06-295e-4b8b-b678-cfb787a61728”,“hookId”:“51e0bca5-e38a-4d75-ba28-6ae3b1d3c029”}]}}, {“testCase”:{“id”:“34fbec63-cb86-4734-b4a7-bcacd192c775”,“pickleId”:“f6988527-1f56-4a95-9033-488eb2e13734”,“testSteps”:[{“id”:“b8c0f75c-ca23-43f3-a244-c232c5e05e7b”,“hookId”:“c5c83f6f-d66e-4fa7-a64e-6af95970e761”},{“id”:“ba677d00-e70c-414c-9293-c133fac5e936”,“hookId”:“4d3b602a-3c20-4905-b6e2-5ff88f9d0381”},{“id”:“37dc0f88-c81c-41b8-9183-33dde2558c74”,“hookId”:“fef496dd-2ab2-4114-830e-02aecb4b8fa9”},{“id”:“d9400300-9771-4798-86e1-06ff800977bf”,“hookId”:“0717e035-c1be-40a4-97d2-96ef05cebead”},{“id”:“0afad2b0-6484-4eaf-a2ba-7a9422bd8160”,“hookId”:“24b36278-8ba8-4cb2-9afe-c5a9958e8860”},{“id”:“63a50a4e-8425-484a-aca9-457e92d951ec”,“hookId”:“0e55cb2b-da7a-4fe3-bf80-9b4cd671ab21”},{“id”:“2ee788d8-204a-43d2-ae65-b787cf26ec86”,“pickleStepId”:“49df1a26-a7a2-402a-8957-b5e982d8cc07”,“stepDefinitionIds”:,“stepMatchArgumentsLists”:},{“id”:“c13ea8c6-3da0-44ac-acf1-d90407a089fa”,“pickleStepId”:“74f0b384-908b-4595-b5bf-a7eb43d7a23c”,“stepDefinitionIds”:,“stepMatchArgumentsLists”:[{“stepMatchArguments”:[{“group”:{“start”:39,“value”:“"Gabriel", "gabriel@admin.com", "gabriel123", "administrator", "200000000"”}}]}]},{“id”:“d9c6f191-acb8-4aed-8d44-37dacdcbfbaa”,“pickleStepId”:“d42486a5-92dc-4d19-9872-f26c7a7ee991”,“stepDefinitionIds”:,“stepMatchArgumentsLists”:[{“stepMatchArguments”:[{“group”:{“start”:24,“value”:“de solicitações de credenciamento”}}]}]},{“id”:“8cdfd863-bc82-4936-9261-07dd90bc93c6”,“pickleStepId”:“9656fb74-c474-456b-ae7c-de2b967d0f59”,“stepDefinitionIds”:,“stepMatchArgumentsLists”:[{“stepMatchArguments”:}]},{“id”:“e7ebc489-01bd-42a0-8d3d-79a8899acdb7”,“pickleStepId”:“ef8e5c02-5f18-4eef-81e2-f10e4fde800a”,“stepDefinitionIds”:,“stepMatchArgumentsLists”:[{“stepMatchArguments”:}]},{“id”:“e7b3ce7e-f65a-411d-93cf-7bde343e41d0”,“pickleStepId”:“340144ce-31e3-4481-9785-b10fe712af4b”,“stepDefinitionIds”:,“stepMatchArgumentsLists”:[{“stepMatchArguments”:}]},{“id”:“e5ae8de9-9a7f-4d2e-a132-f3cbaf5960c8”,“pickleStepId”:“c07eddea-773a-41db-92a1-f3b2be31cfce”,“stepDefinitionIds”:,“stepMatchArgumentsLists”:[{“stepMatchArguments”:[{“group”:{“start”:24,“value”:“de credenciamentos”}}]}]},{“id”:“e417fb5c-3e46-4a6f-b2a9-1958080cf9a6”,“pickleStepId”:“7f59ddab-42b3-4607-b46a-2c76f801ea40”,“stepDefinitionIds”:,“stepMatchArgumentsLists”:[{“stepMatchArguments”:}]},{“id”:“dc31c8f2-841c-404a-a3a8-872ac9ce1e80”,“hookId”:“3ad2cb6c-9fba-4aa3-ba66-b9bd0778814a”},{“id”:“f076eee2-77f6-4675-8ff0-00bc8931e8a7”,“hookId”:“64ca9839-37e0-4b54-9187-98cd2c4d2356”},{“id”:“f71dce88-776a-4767-a32f-e7a65da59b69”,“hookId”:“8dde38ee-8a77-4b8e-a219-846e4710f578”},{“id”:“3d0fa0c0-a28d-4d08-b2bd-f80ba3f79902”,“hookId”:“51e0bca5-e38a-4d75-ba28-6ae3b1d3c029”}]}}, {“testCase”:{“id”:“eea7a04e-abf0-48e6-9841-66bf3e6593ee”,“pickleId”:“8b37d728-b771-4c66-ae33-eb80274a950a”,“testSteps”:[{“id”:“46d330f7-73c4-4802-84d2-abcb2c867bfe”,“hookId”:“c5c83f6f-d66e-4fa7-a64e-6af95970e761”},{“id”:“cb9f5d5a-4312-4197-b27e-b0ce8ecba281”,“hookId”:“4d3b602a-3c20-4905-b6e2-5ff88f9d0381”},{“id”:“0c5193c1-e67d-4842-b55e-14bdbb3c7080”,“hookId”:“fef496dd-2ab2-4114-830e-02aecb4b8fa9”},{“id”:“52a03e6d-ffb0-492e-8a04-c779b80c7488”,“hookId”:“0717e035-c1be-40a4-97d2-96ef05cebead”},{“id”:“989a4d2a-2eb0-44f0-ba68-5ef970e10189”,“hookId”:“24b36278-8ba8-4cb2-9afe-c5a9958e8860”},{“id”:“04f12714-2233-4914-84d3-76bd8615005a”,“hookId”:“0e55cb2b-da7a-4fe3-bf80-9b4cd671ab21”},{“id”:“290d1118-7ae3-4d34-864f-61802261b872”,“pickleStepId”:“632aa8c1-bec5-44c9-9097-df600d620d1d”,“stepDefinitionIds”:,“stepMatchArgumentsLists”:[{“stepMatchArguments”:[{“group”:{“start”:39,“value”:“"Preihs", "preihs@admin.com", "preihs123", "administrator", "200000000"”}}]}]},{“id”:“c6344377-0ab3-46c6-9986-3fcb2548c837”,“pickleStepId”:“59f377b9-2993-47df-9aa6-20fec1b1eb75”,“stepDefinitionIds”:,“stepMatchArgumentsLists”:[{“stepMatchArguments”:[{“group”:{“start”:24,“value”:“de requisitos para o credenciamento”}}]}]},{“id”:“37f94ebe-8309-42b8-b071-7a9c9a34c062”,“pickleStepId”:“e5cccadb-7773-48f7-9ff2-e4a60af11aac”,“stepDefinitionIds”:,“stepMatchArgumentsLists”:[{“stepMatchArguments”:[{“group”:{“start”:13,“value”:“Adicionar Informação de Requisitos”}}]}]},{“id”:“c3ecae4f-4c0f-4dfe-a0df-2c2cb44a58ab”,“pickleStepId”:“d055c205-19b7-4516-97a8-d00ab408a1f7”,“stepDefinitionIds”:,“stepMatchArgumentsLists”:[{“stepMatchArguments”:[{“group”:{“start”:17,“value”:“Requisitos de Credenciamento”}},{“group”:{“start”:51,“value”:“Título”}}]}]},{“id”:“261c7ea3-c0a7-40d0-a2de-35b9865a7e64”,“pickleStepId”:“5af3c3b9-91ab-4a02-8a51-bd832530503a”,“stepDefinitionIds”:,“stepMatchArgumentsLists”:[{“stepMatchArguments”:[{“group”:{“start”:20,“value”:“features/resources/Formulário de Credenciamento.doc”}},{“group”:{“start”:77,“value”:“Documentos”}}]}]},{“id”:“dd35fb52-2834-46e4-a99c-223f6a282244”,“pickleStepId”:“0e51daed-e80b-427d-8f53-32364a5b5f4c”,“stepDefinitionIds”:,“stepMatchArgumentsLists”:[{“stepMatchArguments”:}]},{“id”:“51eb3f27-941e-4457-a62a-54e636974a30”,“pickleStepId”:“d52d17da-c2ba-4096-bf2d-07d0d9a7a4e3”,“stepDefinitionIds”:,“stepMatchArgumentsLists”:[{“stepMatchArguments”:}]},{“id”:“72369ab1-28f5-429c-8500-691c70144305”,“hookId”:“3ad2cb6c-9fba-4aa3-ba66-b9bd0778814a”},{“id”:“0ca42d6c-d574-48c7-9f2a-1ce39066829a”,“hookId”:“64ca9839-37e0-4b54-9187-98cd2c4d2356”},{“id”:“d770e9d1-e33a-468e-ab08-777bd6ec94cf”,“hookId”:“8dde38ee-8a77-4b8e-a219-846e4710f578”},{“id”:“dcbdaa84-3877-4fde-bc82-868108584c16”,“hookId”:“51e0bca5-e38a-4d75-ba28-6ae3b1d3c029”}]}}, {“testCase”:{“id”:“8ec8d5b2-1b07-4d90-aefa-1105a68bf8d0”,“pickleId”:“f806ba72-64ef-4363-aad2-dd63d6661857”,“testSteps”:[{“id”:“4d041d09-63fe-4f61-a7ce-5efff55cab27”,“hookId”:“c5c83f6f-d66e-4fa7-a64e-6af95970e761”},{“id”:“d874af46-c4d0-4420-9c56-ec401d56eb96”,“hookId”:“4d3b602a-3c20-4905-b6e2-5ff88f9d0381”},{“id”:“29773482-3bc3-49f1-8438-cea1799e7278”,“hookId”:“fef496dd-2ab2-4114-830e-02aecb4b8fa9”},{“id”:“f6b73e84-d5b7-482e-b39f-c62bafe27837”,“hookId”:“0717e035-c1be-40a4-97d2-96ef05cebead”},{“id”:“33345871-1a4f-4057-bc38-1334be373c58”,“hookId”:“24b36278-8ba8-4cb2-9afe-c5a9958e8860”},{“id”:“6d51eb29-7bf3-457c-a212-f072ceb232d9”,“hookId”:“0e55cb2b-da7a-4fe3-bf80-9b4cd671ab21”},{“id”:“20ce0618-fbbd-4a0e-ab94-81a775199c13”,“pickleStepId”:“6e62b400-662f-4b83-94c4-303fb6789e1f”,“stepDefinitionIds”:,“stepMatchArgumentsLists”:[{“stepMatchArguments”:[{“group”:{“start”:39,“value”:“"Preihs", "preihs@admin.com", "preihs123", "administrator", "200000000"”}}]}]},{“id”:“1febd08d-870a-4767-aff0-2d97644539fb”,“pickleStepId”:“ca16b4f9-a1ec-462c-b7e1-3ade62726cd4”,“stepDefinitionIds”:,“stepMatchArgumentsLists”:[{“stepMatchArguments”:[{“group”:{“start”:24,“value”:“de requisitos para o credenciamento”}}]}]},{“id”:“11b405f6-1818-4fa9-a316-0fa399563904”,“pickleStepId”:“7bf377d7-8cc0-4cc8-a450-402fa083fbbb”,“stepDefinitionIds”:,“stepMatchArgumentsLists”:[{“stepMatchArguments”:[{“group”:{“start”:13,“value”:“Adicionar Informação de Requisitos”}}]}]},{“id”:“dbf5f257-cf62-4b09-b206-064640f4afdf”,“pickleStepId”:“2fcce8f4-11ad-4f34-907a-1d6897ef3440”,“stepDefinitionIds”:,“stepMatchArgumentsLists”:[{“stepMatchArguments”:[{“group”:{“start”:20,“value”:“features/resources/Formulário de Credenciamento.doc”}},{“group”:{“start”:77,“value”:“Documentos”}}]}]},{“id”:“e9a8ad7b-6cb7-4ecb-85d4-22711c3250b3”,“pickleStepId”:“69e110fd-d842-4b9a-b1cb-4dc4b1eb4967”,“stepDefinitionIds”:,“stepMatchArgumentsLists”:[{“stepMatchArguments”:}]},{“id”:“321f3090-bb13-46cc-bc97-45b33e33d12a”,“pickleStepId”:“8cb2bd77-0edd-4375-9241-681828517679”,“stepDefinitionIds”:,“stepMatchArgumentsLists”:[{“stepMatchArguments”:}]},{“id”:“268aeec1-dc9e-495a-9402-657623c209fd”,“hookId”:“3ad2cb6c-9fba-4aa3-ba66-b9bd0778814a”},{“id”:“7861a7f0-0173-4f67-90df-d3380efc5398”,“hookId”:“64ca9839-37e0-4b54-9187-98cd2c4d2356”},{“id”:“0ba27819-52f3-4dfa-a09a-a7cf0cc40a9e”,“hookId”:“8dde38ee-8a77-4b8e-a219-846e4710f578”},{“id”:“1d6cf6fd-46f1-48a5-adfd-82b2abdf355f”,“hookId”:“51e0bca5-e38a-4d75-ba28-6ae3b1d3c029”}]}}, {“testCase”:{“id”:“cd512130-72a0-402e-864c-0e9f5a9a7ea7”,“pickleId”:“ed38a039-665a-4467-b0d6-fc31c9716176”,“testSteps”:[{“id”:“3cd60a17-7e62-4c02-8e9d-75f2e8052011”,“hookId”:“c5c83f6f-d66e-4fa7-a64e-6af95970e761”},{“id”:“8c230165-5167-4d2a-bd16-ada0e817d25d”,“hookId”:“4d3b602a-3c20-4905-b6e2-5ff88f9d0381”},{“id”:“0778aeda-4678-4ba0-a021-8b5150a2980b”,“hookId”:“fef496dd-2ab2-4114-830e-02aecb4b8fa9”},{“id”:“700cb6ea-0915-43c0-a860-59d050ac826c”,“hookId”:“0717e035-c1be-40a4-97d2-96ef05cebead”},{“id”:“c6b575de-5731-4935-88ea-1edd1d2bcbc7”,“hookId”:“24b36278-8ba8-4cb2-9afe-c5a9958e8860”},{“id”:“87206ef4-a304-4749-becb-9d14cb10ba32”,“hookId”:“0e55cb2b-da7a-4fe3-bf80-9b4cd671ab21”},{“id”:“a35a085a-7353-4f9e-b8f1-dcf64dd20024”,“pickleStepId”:“feb70ae4-dd9a-4816-adb1-471eb6eac7ec”,“stepDefinitionIds”:,“stepMatchArgumentsLists”:[{“stepMatchArguments”:[{“group”:{“start”:39,“value”:“"Preihs", "preihs@admin.com", "preihs123", "administrator", "200000000"”}}]}]},{“id”:“744263c1-4965-45de-a9a0-bba5fac5314b”,“pickleStepId”:“d054d6a6-cd6b-41db-9f6b-bc202ffbd30c”,“stepDefinitionIds”:,“stepMatchArgumentsLists”:[{“stepMatchArguments”:[{“group”:{“start”:24,“value”:“de requisitos para o credenciamento”}}]}]},{“id”:“d9c113c7-ff2e-4e51-9ea2-630351b8775f”,“pickleStepId”:“4331082f-c29c-4210-aea5-379902b8e40e”,“stepDefinitionIds”:,“stepMatchArgumentsLists”:[{“stepMatchArguments”:[{“group”:{“start”:16,“value”:“Requisitos de Credenciamento”}}]}]},{“id”:“509f3efa-1014-4454-9270-3929a3984002”,“pickleStepId”:“e453f6f8-cf32-4293-bd1b-42f54190a51a”,“stepDefinitionIds”:,“stepMatchArgumentsLists”:[{“stepMatchArguments”:[{“group”:{“start”:24,“value”:“de requisitos para o credenciamento”}}]}]},{“id”:“e1aabc42-246d-4e50-a0c2-d9f4f7874b62”,“pickleStepId”:“9a4e4929-1087-422f-8ebd-7353d97376c7”,“stepDefinitionIds”:,“stepMatchArgumentsLists”:[{“stepMatchArguments”:[{“group”:{“start”:13,“value”:“Adicionar Informação de Requisitos”}}]}]},{“id”:“2872a24c-1b4f-49d5-a177-e0260de8adf3”,“pickleStepId”:“ed17bb92-6f96-48a4-a3a3-cc6194f28924”,“stepDefinitionIds”:,“stepMatchArgumentsLists”:[{“stepMatchArguments”:[{“group”:{“start”:17,“value”:“Requisitos de Credenciamento”}},{“group”:{“start”:51,“value”:“Título”}}]}]},{“id”:“886ff138-9634-445f-b697-260f5f604192”,“pickleStepId”:“ecb71673-bc80-4aa1-9b4d-e052ea81e93f”,“stepDefinitionIds”:,“stepMatchArgumentsLists”:[{“stepMatchArguments”:}]},{“id”:“181ac8ce-0895-463a-9976-641931d427ee”,“pickleStepId”:“e9e1d89e-8559-4b6b-8d67-4a3fef0026c2”,“stepDefinitionIds”:,“stepMatchArgumentsLists”:[{“stepMatchArguments”:}]},{“id”:“65b4ae5c-9c2d-4a97-a686-da9594bb21c4”,“hookId”:“3ad2cb6c-9fba-4aa3-ba66-b9bd0778814a”},{“id”:“d0718a0b-4620-4905-9d9f-e355b96e6c83”,“hookId”:“64ca9839-37e0-4b54-9187-98cd2c4d2356”},{“id”:“735e787f-6a51-49ac-a0c9-983120d0766e”,“hookId”:“8dde38ee-8a77-4b8e-a219-846e4710f578”},{“id”:“ca6e8558-e132-4f22-ba8c-0bfc7d240f5f”,“hookId”:“51e0bca5-e38a-4d75-ba28-6ae3b1d3c029”}]}}, {“testRunStarted”:{“timestamp”:{“seconds”:“1606494810”,“nanos”:25685100}}}, {“testCaseStarted”:{“id”:“628bad4a-27a0-498f-9dc2-c52c5cb31bbe”,“testCaseId”:“c5ba9d7f-a2fe-4b9c-bd84-0a52665b8478”,“timestamp”:{“seconds”:“1606494810”,“nanos”:28339700},“attempt”:1}}, {“testStepStarted”:{“testStepId”:“010eb46b-f79f-4f63-a157-485889bcd653”,“testCaseStartedId”:“628bad4a-27a0-498f-9dc2-c52c5cb31bbe”,“timestamp”:{“seconds”:“1606494810”,“nanos”:54359600}}}, {“testStepFinished”:{“testStepId”:“010eb46b-f79f-4f63-a157-485889bcd653”,“testCaseStartedId”:“628bad4a-27a0-498f-9dc2-c52c5cb31bbe”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:32300}},“timestamp”:{“seconds”:“1606494810”,“nanos”:54705100}}}, {“testStepStarted”:{“testStepId”:“a9c5773c-34d0-4659-99b1-766a5ebeb5bf”,“testCaseStartedId”:“628bad4a-27a0-498f-9dc2-c52c5cb31bbe”,“timestamp”:{“seconds”:“1606494810”,“nanos”:54933200}}}, {“testStepFinished”:{“testStepId”:“a9c5773c-34d0-4659-99b1-766a5ebeb5bf”,“testCaseStartedId”:“628bad4a-27a0-498f-9dc2-c52c5cb31bbe”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:1106400}},“timestamp”:{“seconds”:“1606494810”,“nanos”:56213300}}}, {“testStepStarted”:{“testStepId”:“b4a376a5-ca1c-4f26-8ace-ce91985f8eb4”,“testCaseStartedId”:“628bad4a-27a0-498f-9dc2-c52c5cb31bbe”,“timestamp”:{“seconds”:“1606494810”,“nanos”:56469100}}}, {“testStepFinished”:{“testStepId”:“b4a376a5-ca1c-4f26-8ace-ce91985f8eb4”,“testCaseStartedId”:“628bad4a-27a0-498f-9dc2-c52c5cb31bbe”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:57736700}},“timestamp”:{“seconds”:“1606494810”,“nanos”:114403800}}}, {“testStepStarted”:{“testStepId”:“845da1f0-1256-4a64-ba0c-0c0d92083714”,“testCaseStartedId”:“628bad4a-27a0-498f-9dc2-c52c5cb31bbe”,“timestamp”:{“seconds”:“1606494810”,“nanos”:114675400}}}, {“testStepFinished”:{“testStepId”:“845da1f0-1256-4a64-ba0c-0c0d92083714”,“testCaseStartedId”:“628bad4a-27a0-498f-9dc2-c52c5cb31bbe”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:19500}},“timestamp”:{“seconds”:“1606494810”,“nanos”:114891600}}}, {“testStepStarted”:{“testStepId”:“20da556e-fc1d-4263-918b-5efda0f267cb”,“testCaseStartedId”:“628bad4a-27a0-498f-9dc2-c52c5cb31bbe”,“timestamp”:{“seconds”:“1606494810”,“nanos”:115141100}}}, {“testStepFinished”:{“testStepId”:“20da556e-fc1d-4263-918b-5efda0f267cb”,“testCaseStartedId”:“628bad4a-27a0-498f-9dc2-c52c5cb31bbe”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:17400}},“timestamp”:{“seconds”:“1606494810”,“nanos”:115293800}}}, {“testStepStarted”:{“testStepId”:“2ff53260-24c4-42f1-8174-b230696466c1”,“testCaseStartedId”:“628bad4a-27a0-498f-9dc2-c52c5cb31bbe”,“timestamp”:{“seconds”:“1606494810”,“nanos”:115499800}}}, {“testStepFinished”:{“testStepId”:“2ff53260-24c4-42f1-8174-b230696466c1”,“testCaseStartedId”:“628bad4a-27a0-498f-9dc2-c52c5cb31bbe”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:12600}},“timestamp”:{“seconds”:“1606494810”,“nanos”:115670800}}}, {“testStepStarted”:{“testStepId”:“71a1ff7f-62de-4bf2-a485-b10f19e1b2da”,“testCaseStartedId”:“628bad4a-27a0-498f-9dc2-c52c5cb31bbe”,“timestamp”:{“seconds”:“1606494810”,“nanos”:115868700}}}, {“testStepFinished”:{“testStepId”:“71a1ff7f-62de-4bf2-a485-b10f19e1b2da”,“testCaseStartedId”:“628bad4a-27a0-498f-9dc2-c52c5cb31bbe”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:273705000}},“timestamp”:{“seconds”:“1606494810”,“nanos”:390336100}}}, {“testStepStarted”:{“testStepId”:“97a78edd-897d-41f0-9c3e-9e5016be2884”,“testCaseStartedId”:“628bad4a-27a0-498f-9dc2-c52c5cb31bbe”,“timestamp”:{“seconds”:“1606494810”,“nanos”:390778300}}}, {“testStepFinished”:{“testStepId”:“97a78edd-897d-41f0-9c3e-9e5016be2884”,“testCaseStartedId”:“628bad4a-27a0-498f-9dc2-c52c5cb31bbe”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:26552900}},“timestamp”:{“seconds”:“1606494810”,“nanos”:417977700}}}, {“testStepStarted”:{“testStepId”:“24524336-fcd5-4d49-8f11-27e44edd84ba”,“testCaseStartedId”:“628bad4a-27a0-498f-9dc2-c52c5cb31bbe”,“timestamp”:{“seconds”:“1606494810”,“nanos”:418306700}}}, {“testStepFinished”:{“testStepId”:“24524336-fcd5-4d49-8f11-27e44edd84ba”,“testCaseStartedId”:“628bad4a-27a0-498f-9dc2-c52c5cb31bbe”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:31130200}},“timestamp”:{“seconds”:“1606494810”,“nanos”:450027200}}}, {“testStepStarted”:{“testStepId”:“f35a2300-8d13-4cf7-9a1b-7e62082befbe”,“testCaseStartedId”:“628bad4a-27a0-498f-9dc2-c52c5cb31bbe”,“timestamp”:{“seconds”:“1606494810”,“nanos”:451139700}}}, {“testStepFinished”:{“testStepId”:“f35a2300-8d13-4cf7-9a1b-7e62082befbe”,“testCaseStartedId”:“628bad4a-27a0-498f-9dc2-c52c5cb31bbe”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:1622200}},“timestamp”:{“seconds”:“1606494810”,“nanos”:453527800}}}, {“testStepStarted”:{“testStepId”:“8b22e090-1cfe-4e37-b4b5-0677e6150a81”,“testCaseStartedId”:“628bad4a-27a0-498f-9dc2-c52c5cb31bbe”,“timestamp”:{“seconds”:“1606494810”,“nanos”:453827400}}}, {“testStepFinished”:{“testStepId”:“8b22e090-1cfe-4e37-b4b5-0677e6150a81”,“testCaseStartedId”:“628bad4a-27a0-498f-9dc2-c52c5cb31bbe”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:994900}},“timestamp”:{“seconds”:“1606494810”,“nanos”:455545000}}}, {“testStepStarted”:{“testStepId”:“3cba487e-83d5-4e49-a694-ff01d0ffdf78”,“testCaseStartedId”:“628bad4a-27a0-498f-9dc2-c52c5cb31bbe”,“timestamp”:{“seconds”:“1606494810”,“nanos”:455833000}}}, {“testStepFinished”:{“testStepId”:“3cba487e-83d5-4e49-a694-ff01d0ffdf78”,“testCaseStartedId”:“628bad4a-27a0-498f-9dc2-c52c5cb31bbe”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:144610200}},“timestamp”:{“seconds”:“1606494810”,“nanos”:601775400}}}, {“testStepStarted”:{“testStepId”:“ebf75428-6c42-4be4-87c2-633286dafe71”,“testCaseStartedId”:“628bad4a-27a0-498f-9dc2-c52c5cb31bbe”,“timestamp”:{“seconds”:“1606494810”,“nanos”:603242600}}}, {“testStepFinished”:{“testStepId”:“ebf75428-6c42-4be4-87c2-633286dafe71”,“testCaseStartedId”:“628bad4a-27a0-498f-9dc2-c52c5cb31bbe”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:1184400}},“timestamp”:{“seconds”:“1606494810”,“nanos”:607152200}}}, {“testStepStarted”:{“testStepId”:“7083d235-f9f3-49f5-925c-9809291f3beb”,“testCaseStartedId”:“628bad4a-27a0-498f-9dc2-c52c5cb31bbe”,“timestamp”:{“seconds”:“1606494810”,“nanos”:609069800}}}, {“attachment”:{“testStepId”:“7083d235-f9f3-49f5-925c-9809291f3beb”,“testCaseStartedId”:“628bad4a-27a0-498f-9dc2-c52c5cb31bbe”,“mediaType”:“image/png”,“contentEncoding”:“BASE64”,“body”:“bG9nL3NjcmVlbnNob3RzL3NvbGljaXRhb2VudmlhZGFjb21zdWNlc3NvLnBuZw==”}}, {“testStepFinished”:{“testStepId”:“7083d235-f9f3-49f5-925c-9809291f3beb”,“testCaseStartedId”:“628bad4a-27a0-498f-9dc2-c52c5cb31bbe”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:1842100}},“timestamp”:{“seconds”:“1606494810”,“nanos”:611218500}}}, {“testStepStarted”:{“testStepId”:“3b711036-277f-45fb-9cd7-b22f581ae340”,“testCaseStartedId”:“628bad4a-27a0-498f-9dc2-c52c5cb31bbe”,“timestamp”:{“seconds”:“1606494810”,“nanos”:612547000}}}, {“testStepFinished”:{“testStepId”:“3b711036-277f-45fb-9cd7-b22f581ae340”,“testCaseStartedId”:“628bad4a-27a0-498f-9dc2-c52c5cb31bbe”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:25800}},“timestamp”:{“seconds”:“1606494810”,“nanos”:613658200}}}, {“testStepStarted”:{“testStepId”:“7dbb6988-a0d5-4868-b793-32ce6a5c1e0e”,“testCaseStartedId”:“628bad4a-27a0-498f-9dc2-c52c5cb31bbe”,“timestamp”:{“seconds”:“1606494810”,“nanos”:614758100}}}, {“testStepFinished”:{“testStepId”:“7dbb6988-a0d5-4868-b793-32ce6a5c1e0e”,“testCaseStartedId”:“628bad4a-27a0-498f-9dc2-c52c5cb31bbe”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:1300900}},“timestamp”:{“seconds”:“1606494810”,“nanos”:617313000}}}, {“testStepStarted”:{“testStepId”:“73a9c3e0-a108-4b9f-91d3-3bcf861ed2fc”,“testCaseStartedId”:“628bad4a-27a0-498f-9dc2-c52c5cb31bbe”,“timestamp”:{“seconds”:“1606494810”,“nanos”:617603400}}}, {“testStepFinished”:{“testStepId”:“73a9c3e0-a108-4b9f-91d3-3bcf861ed2fc”,“testCaseStartedId”:“628bad4a-27a0-498f-9dc2-c52c5cb31bbe”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:21300}},“timestamp”:{“seconds”:“1606494810”,“nanos”:618755600}}}, {“testCaseFinished”:{“testCaseStartedId”:“628bad4a-27a0-498f-9dc2-c52c5cb31bbe”,“timestamp”:{“seconds”:“1606494810”,“nanos”:619944500}}}, {“testCaseStarted”:{“id”:“5d193a50-d14b-494f-ba04-f43aea557213”,“testCaseId”:“1fe33b5d-893e-4ee2-bb0c-c2f4e55c271c”,“timestamp”:{“seconds”:“1606494810”,“nanos”:621658500},“attempt”:1}}, {“testStepStarted”:{“testStepId”:“4000f77e-7977-4e79-8eb1-6c228ebb3bef”,“testCaseStartedId”:“5d193a50-d14b-494f-ba04-f43aea557213”,“timestamp”:{“seconds”:“1606494810”,“nanos”:622782100}}}, {“testStepFinished”:{“testStepId”:“4000f77e-7977-4e79-8eb1-6c228ebb3bef”,“testCaseStartedId”:“5d193a50-d14b-494f-ba04-f43aea557213”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:28000}},“timestamp”:{“seconds”:“1606494810”,“nanos”:623241500}}}, {“testStepStarted”:{“testStepId”:“8c2c1f23-2cbe-4479-89d8-7e65fbadb0c6”,“testCaseStartedId”:“5d193a50-d14b-494f-ba04-f43aea557213”,“timestamp”:{“seconds”:“1606494810”,“nanos”:623825000}}}, {“testStepFinished”:{“testStepId”:“8c2c1f23-2cbe-4479-89d8-7e65fbadb0c6”,“testCaseStartedId”:“5d193a50-d14b-494f-ba04-f43aea557213”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:4293500}},“timestamp”:{“seconds”:“1606494810”,“nanos”:628862600}}}, {“testStepStarted”:{“testStepId”:“fb90dedc-bbfd-4ee4-8d0f-c013c6235dde”,“testCaseStartedId”:“5d193a50-d14b-494f-ba04-f43aea557213”,“timestamp”:{“seconds”:“1606494810”,“nanos”:630372800}}}, {“testStepFinished”:{“testStepId”:“fb90dedc-bbfd-4ee4-8d0f-c013c6235dde”,“testCaseStartedId”:“5d193a50-d14b-494f-ba04-f43aea557213”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:21900}},“timestamp”:{“seconds”:“1606494810”,“nanos”:630608600}}}, {“testStepStarted”:{“testStepId”:“e6f86227-fcba-4343-9268-dbab0b8a70b9”,“testCaseStartedId”:“5d193a50-d14b-494f-ba04-f43aea557213”,“timestamp”:{“seconds”:“1606494810”,“nanos”:632006900}}}, {“testStepFinished”:{“testStepId”:“e6f86227-fcba-4343-9268-dbab0b8a70b9”,“testCaseStartedId”:“5d193a50-d14b-494f-ba04-f43aea557213”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:18400}},“timestamp”:{“seconds”:“1606494810”,“nanos”:633310600}}}, {“testStepStarted”:{“testStepId”:“1f9d819f-2aac-4e1e-8ab5-d52d79524924”,“testCaseStartedId”:“5d193a50-d14b-494f-ba04-f43aea557213”,“timestamp”:{“seconds”:“1606494810”,“nanos”:634608300}}}, {“testStepFinished”:{“testStepId”:“1f9d819f-2aac-4e1e-8ab5-d52d79524924”,“testCaseStartedId”:“5d193a50-d14b-494f-ba04-f43aea557213”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:15300}},“timestamp”:{“seconds”:“1606494810”,“nanos”:635859900}}}, {“testStepStarted”:{“testStepId”:“5a9e98c8-d2ff-41fc-b359-e74b75d6c6c6”,“testCaseStartedId”:“5d193a50-d14b-494f-ba04-f43aea557213”,“timestamp”:{“seconds”:“1606494810”,“nanos”:636074500}}}, {“testStepFinished”:{“testStepId”:“5a9e98c8-d2ff-41fc-b359-e74b75d6c6c6”,“testCaseStartedId”:“5d193a50-d14b-494f-ba04-f43aea557213”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:16800}},“timestamp”:{“seconds”:“1606494810”,“nanos”:637307300}}}, {“testStepStarted”:{“testStepId”:“8a55516e-8be4-47f9-b3b1-4a9b38d75838”,“testCaseStartedId”:“5d193a50-d14b-494f-ba04-f43aea557213”,“timestamp”:{“seconds”:“1606494810”,“nanos”:638470000}}}, {“testStepFinished”:{“testStepId”:“8a55516e-8be4-47f9-b3b1-4a9b38d75838”,“testCaseStartedId”:“5d193a50-d14b-494f-ba04-f43aea557213”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:50928900}},“timestamp”:{“seconds”:“1606494810”,“nanos”:690156400}}}, {“testStepStarted”:{“testStepId”:“792ae3f6-5baa-4bc8-a203-7e4be4a0aaad”,“testCaseStartedId”:“5d193a50-d14b-494f-ba04-f43aea557213”,“timestamp”:{“seconds”:“1606494810”,“nanos”:691577000}}}, {“testStepFinished”:{“testStepId”:“792ae3f6-5baa-4bc8-a203-7e4be4a0aaad”,“testCaseStartedId”:“5d193a50-d14b-494f-ba04-f43aea557213”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:9949300}},“timestamp”:{“seconds”:“1606494810”,“nanos”:701775300}}}, {“testStepStarted”:{“testStepId”:“1688a8b6-db09-4f0c-b38f-922d2a292563”,“testCaseStartedId”:“5d193a50-d14b-494f-ba04-f43aea557213”,“timestamp”:{“seconds”:“1606494810”,“nanos”:702022000}}}, {“testStepFinished”:{“testStepId”:“1688a8b6-db09-4f0c-b38f-922d2a292563”,“testCaseStartedId”:“5d193a50-d14b-494f-ba04-f43aea557213”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:15498900}},“timestamp”:{“seconds”:“1606494810”,“nanos”:718210200}}}, {“testStepStarted”:{“testStepId”:“315d9208-1d01-487d-b0db-3a1cfc31bcd4”,“testCaseStartedId”:“5d193a50-d14b-494f-ba04-f43aea557213”,“timestamp”:{“seconds”:“1606494810”,“nanos”:718889600}}}, {“testStepFinished”:{“testStepId”:“315d9208-1d01-487d-b0db-3a1cfc31bcd4”,“testCaseStartedId”:“5d193a50-d14b-494f-ba04-f43aea557213”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:17916400}},“timestamp”:{“seconds”:“1606494810”,“nanos”:738493000}}}, {“testStepStarted”:{“testStepId”:“0cbdc0e6-933f-4c31-833d-d2b2ea26cc3f”,“testCaseStartedId”:“5d193a50-d14b-494f-ba04-f43aea557213”,“timestamp”:{“seconds”:“1606494810”,“nanos”:739378900}}}, {“testStepFinished”:{“testStepId”:“0cbdc0e6-933f-4c31-833d-d2b2ea26cc3f”,“testCaseStartedId”:“5d193a50-d14b-494f-ba04-f43aea557213”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:2106400}},“timestamp”:{“seconds”:“1606494810”,“nanos”:742185100}}}, {“testStepStarted”:{“testStepId”:“181ddd52-c011-41da-823c-a47ff5f14ff5”,“testCaseStartedId”:“5d193a50-d14b-494f-ba04-f43aea557213”,“timestamp”:{“seconds”:“1606494810”,“nanos”:743635100}}}, {“attachment”:{“testStepId”:“181ddd52-c011-41da-823c-a47ff5f14ff5”,“testCaseStartedId”:“5d193a50-d14b-494f-ba04-f43aea557213”,“mediaType”:“image/png”,“contentEncoding”:“BASE64”,“body”:“bG9nL3NjcmVlbnNob3RzL3NvbGljaXRhb25vZW52aWFkYWNhbXBvb2JyaWdhdHJpb2VtYnJhbmNvLnBuZw==”}}, {“testStepFinished”:{“testStepId”:“181ddd52-c011-41da-823c-a47ff5f14ff5”,“testCaseStartedId”:“5d193a50-d14b-494f-ba04-f43aea557213”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:343100}},“timestamp”:{“seconds”:“1606494810”,“nanos”:745312800}}}, {“testStepStarted”:{“testStepId”:“1c51343a-5759-49a1-9b38-a1e6c93c661b”,“testCaseStartedId”:“5d193a50-d14b-494f-ba04-f43aea557213”,“timestamp”:{“seconds”:“1606494810”,“nanos”:745983600}}}, {“testStepFinished”:{“testStepId”:“1c51343a-5759-49a1-9b38-a1e6c93c661b”,“testCaseStartedId”:“5d193a50-d14b-494f-ba04-f43aea557213”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:21300}},“timestamp”:{“seconds”:“1606494810”,“nanos”:746172500}}}, {“testStepStarted”:{“testStepId”:“425e3218-55b1-4802-93b2-b59a04dc31f6”,“testCaseStartedId”:“5d193a50-d14b-494f-ba04-f43aea557213”,“timestamp”:{“seconds”:“1606494810”,“nanos”:746718900}}}, {“testStepFinished”:{“testStepId”:“425e3218-55b1-4802-93b2-b59a04dc31f6”,“testCaseStartedId”:“5d193a50-d14b-494f-ba04-f43aea557213”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:558700}},“timestamp”:{“seconds”:“1606494810”,“nanos”:747779200}}}, {“testStepStarted”:{“testStepId”:“ab5d4989-e7b6-4318-bbbb-3f92b63ce92d”,“testCaseStartedId”:“5d193a50-d14b-494f-ba04-f43aea557213”,“timestamp”:{“seconds”:“1606494810”,“nanos”:748336900}}}, {“testStepFinished”:{“testStepId”:“ab5d4989-e7b6-4318-bbbb-3f92b63ce92d”,“testCaseStartedId”:“5d193a50-d14b-494f-ba04-f43aea557213”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:19300}},“timestamp”:{“seconds”:“1606494810”,“nanos”:748594300}}}, {“testCaseFinished”:{“testCaseStartedId”:“5d193a50-d14b-494f-ba04-f43aea557213”,“timestamp”:{“seconds”:“1606494810”,“nanos”:748882900}}}, {“testCaseStarted”:{“id”:“0a7da79a-8113-4e55-acc9-05f2d5cefe5a”,“testCaseId”:“56010d1c-e71a-4cfc-b00e-1245229eebf1”,“timestamp”:{“seconds”:“1606494810”,“nanos”:781528800},“attempt”:1}}, {“testStepStarted”:{“testStepId”:“32901df5-7132-4041-bf97-3fc0a7ab4d05”,“testCaseStartedId”:“0a7da79a-8113-4e55-acc9-05f2d5cefe5a”,“timestamp”:{“seconds”:“1606494810”,“nanos”:782150800}}}, {“testStepFinished”:{“testStepId”:“32901df5-7132-4041-bf97-3fc0a7ab4d05”,“testCaseStartedId”:“0a7da79a-8113-4e55-acc9-05f2d5cefe5a”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:23700}},“timestamp”:{“seconds”:“1606494810”,“nanos”:782537600}}}, {“testStepStarted”:{“testStepId”:“219a16c8-e257-4135-9435-927b650fc206”,“testCaseStartedId”:“0a7da79a-8113-4e55-acc9-05f2d5cefe5a”,“timestamp”:{“seconds”:“1606494810”,“nanos”:782941700}}}, {“testStepFinished”:{“testStepId”:“219a16c8-e257-4135-9435-927b650fc206”,“testCaseStartedId”:“0a7da79a-8113-4e55-acc9-05f2d5cefe5a”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:1016500}},“timestamp”:{“seconds”:“1606494810”,“nanos”:784199700}}}, {“testStepStarted”:{“testStepId”:“8a73c411-e035-4765-bc6a-3be74fdfa079”,“testCaseStartedId”:“0a7da79a-8113-4e55-acc9-05f2d5cefe5a”,“timestamp”:{“seconds”:“1606494810”,“nanos”:784526100}}}, {“testStepFinished”:{“testStepId”:“8a73c411-e035-4765-bc6a-3be74fdfa079”,“testCaseStartedId”:“0a7da79a-8113-4e55-acc9-05f2d5cefe5a”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:16900}},“timestamp”:{“seconds”:“1606494810”,“nanos”:784765300}}}, {“testStepStarted”:{“testStepId”:“59c2c0cc-22ca-44b8-872f-97b305262884”,“testCaseStartedId”:“0a7da79a-8113-4e55-acc9-05f2d5cefe5a”,“timestamp”:{“seconds”:“1606494810”,“nanos”:784991800}}}, {“testStepFinished”:{“testStepId”:“59c2c0cc-22ca-44b8-872f-97b305262884”,“testCaseStartedId”:“0a7da79a-8113-4e55-acc9-05f2d5cefe5a”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:13600}},“timestamp”:{“seconds”:“1606494810”,“nanos”:785201300}}}, {“testStepStarted”:{“testStepId”:“f4194ca3-5b5a-4f06-9550-320b58144ab9”,“testCaseStartedId”:“0a7da79a-8113-4e55-acc9-05f2d5cefe5a”,“timestamp”:{“seconds”:“1606494810”,“nanos”:785437500}}}, {“testStepFinished”:{“testStepId”:“f4194ca3-5b5a-4f06-9550-320b58144ab9”,“testCaseStartedId”:“0a7da79a-8113-4e55-acc9-05f2d5cefe5a”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:10500}},“timestamp”:{“seconds”:“1606494810”,“nanos”:785577000}}}, {“testStepStarted”:{“testStepId”:“bf2d2df6-80ac-46c5-8420-434886adaec5”,“testCaseStartedId”:“0a7da79a-8113-4e55-acc9-05f2d5cefe5a”,“timestamp”:{“seconds”:“1606494810”,“nanos”:785811200}}}, {“testStepFinished”:{“testStepId”:“bf2d2df6-80ac-46c5-8420-434886adaec5”,“testCaseStartedId”:“0a7da79a-8113-4e55-acc9-05f2d5cefe5a”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:14700}},“timestamp”:{“seconds”:“1606494810”,“nanos”:786021400}}}, {“testStepStarted”:{“testStepId”:“a904af99-fcce-401e-8aee-de69cc15d821”,“testCaseStartedId”:“0a7da79a-8113-4e55-acc9-05f2d5cefe5a”,“timestamp”:{“seconds”:“1606494810”,“nanos”:786250300}}}, {“testStepFinished”:{“testStepId”:“a904af99-fcce-401e-8aee-de69cc15d821”,“testCaseStartedId”:“0a7da79a-8113-4e55-acc9-05f2d5cefe5a”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:171472900}},“timestamp”:{“seconds”:“1606494810”,“nanos”:960291900}}}, {“testStepStarted”:{“testStepId”:“0f2a0734-de47-4730-9ad0-0b50debf64dd”,“testCaseStartedId”:“0a7da79a-8113-4e55-acc9-05f2d5cefe5a”,“timestamp”:{“seconds”:“1606494810”,“nanos”:961119000}}}, {“testStepFinished”:{“testStepId”:“0f2a0734-de47-4730-9ad0-0b50debf64dd”,“testCaseStartedId”:“0a7da79a-8113-4e55-acc9-05f2d5cefe5a”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:39487000}},“timestamp”:{“seconds”:“1606494811”,“nanos”:2030100}}}, {“testStepStarted”:{“testStepId”:“8e222d7e-7abe-41a6-9277-5d47a56ddd9a”,“testCaseStartedId”:“0a7da79a-8113-4e55-acc9-05f2d5cefe5a”,“timestamp”:{“seconds”:“1606494811”,“nanos”:2380700}}}, {“testStepFinished”:{“testStepId”:“8e222d7e-7abe-41a6-9277-5d47a56ddd9a”,“testCaseStartedId”:“0a7da79a-8113-4e55-acc9-05f2d5cefe5a”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:18830400}},“timestamp”:{“seconds”:“1606494811”,“nanos”:21785200}}}, {“testStepStarted”:{“testStepId”:“9f3df2a9-21a1-4a2a-9347-db65a5ec67a6”,“testCaseStartedId”:“0a7da79a-8113-4e55-acc9-05f2d5cefe5a”,“timestamp”:{“seconds”:“1606494811”,“nanos”:22454500}}}, {“testStepFinished”:{“testStepId”:“9f3df2a9-21a1-4a2a-9347-db65a5ec67a6”,“testCaseStartedId”:“0a7da79a-8113-4e55-acc9-05f2d5cefe5a”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:31907199}},“timestamp”:{“seconds”:“1606494811”,“nanos”:55617600}}}, {“testStepStarted”:{“testStepId”:“0d9e58eb-bd07-4192-b058-33ff11b15de6”,“testCaseStartedId”:“0a7da79a-8113-4e55-acc9-05f2d5cefe5a”,“timestamp”:{“seconds”:“1606494811”,“nanos”:55973100}}}, {“testStepFinished”:{“testStepId”:“0d9e58eb-bd07-4192-b058-33ff11b15de6”,“testCaseStartedId”:“0a7da79a-8113-4e55-acc9-05f2d5cefe5a”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:3781700}},“timestamp”:{“seconds”:“1606494811”,“nanos”:60611400}}}, {“testStepStarted”:{“testStepId”:“f5375727-5687-4ff3-af9c-196258b5032a”,“testCaseStartedId”:“0a7da79a-8113-4e55-acc9-05f2d5cefe5a”,“timestamp”:{“seconds”:“1606494811”,“nanos”:61255000}}}, {“testStepFinished”:{“testStepId”:“f5375727-5687-4ff3-af9c-196258b5032a”,“testCaseStartedId”:“0a7da79a-8113-4e55-acc9-05f2d5cefe5a”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:22029200}},“timestamp”:{“seconds”:“1606494811”,“nanos”:84931900}}}, {“testStepStarted”:{“testStepId”:“b1298054-f268-4923-9eba-3b21eefd1700”,“testCaseStartedId”:“0a7da79a-8113-4e55-acc9-05f2d5cefe5a”,“timestamp”:{“seconds”:“1606494811”,“nanos”:85240300}}}, {“testStepFinished”:{“testStepId”:“b1298054-f268-4923-9eba-3b21eefd1700”,“testCaseStartedId”:“0a7da79a-8113-4e55-acc9-05f2d5cefe5a”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:1080100}},“timestamp”:{“seconds”:“1606494811”,“nanos”:86975000}}}, {“testStepStarted”:{“testStepId”:“e82c7301-f6c0-4f0d-a0a8-e3778d886b60”,“testCaseStartedId”:“0a7da79a-8113-4e55-acc9-05f2d5cefe5a”,“timestamp”:{“seconds”:“1606494811”,“nanos”:87262300}}}, {“attachment”:{“testStepId”:“e82c7301-f6c0-4f0d-a0a8-e3778d886b60”,“testCaseStartedId”:“0a7da79a-8113-4e55-acc9-05f2d5cefe5a”,“mediaType”:“image/png”,“contentEncoding”:“BASE64”,“body”:“bG9nL3NjcmVlbnNob3RzL2RlZmluaXJwcmF6b2luc2VyaW5kb3VtYWRhdGF2bGlkYS5wbmc=”}}, {“testStepFinished”:{“testStepId”:“e82c7301-f6c0-4f0d-a0a8-e3778d886b60”,“testCaseStartedId”:“0a7da79a-8113-4e55-acc9-05f2d5cefe5a”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:303700}},“timestamp”:{“seconds”:“1606494811”,“nanos”:87794900}}}, {“testStepStarted”:{“testStepId”:“ab0b2693-052e-41aa-80ca-911551b41eb1”,“testCaseStartedId”:“0a7da79a-8113-4e55-acc9-05f2d5cefe5a”,“timestamp”:{“seconds”:“1606494811”,“nanos”:88109000}}}, {“testStepFinished”:{“testStepId”:“ab0b2693-052e-41aa-80ca-911551b41eb1”,“testCaseStartedId”:“0a7da79a-8113-4e55-acc9-05f2d5cefe5a”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:21900}},“timestamp”:{“seconds”:“1606494811”,“nanos”:88293900}}}, {“testStepStarted”:{“testStepId”:“a985f7bd-d6a2-46b4-a087-8961b864985c”,“testCaseStartedId”:“0a7da79a-8113-4e55-acc9-05f2d5cefe5a”,“timestamp”:{“seconds”:“1606494811”,“nanos”:88480100}}}, {“testStepFinished”:{“testStepId”:“a985f7bd-d6a2-46b4-a087-8961b864985c”,“testCaseStartedId”:“0a7da79a-8113-4e55-acc9-05f2d5cefe5a”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:538800}},“timestamp”:{“seconds”:“1606494811”,“nanos”:89187000}}}, {“testStepStarted”:{“testStepId”:“055aa844-6fc2-4473-ba62-ed6bfaec4ad8”,“testCaseStartedId”:“0a7da79a-8113-4e55-acc9-05f2d5cefe5a”,“timestamp”:{“seconds”:“1606494811”,“nanos”:89431800}}}, {“testStepFinished”:{“testStepId”:“055aa844-6fc2-4473-ba62-ed6bfaec4ad8”,“testCaseStartedId”:“0a7da79a-8113-4e55-acc9-05f2d5cefe5a”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:17500}},“timestamp”:{“seconds”:“1606494811”,“nanos”:89608300}}}, {“testCaseFinished”:{“testCaseStartedId”:“0a7da79a-8113-4e55-acc9-05f2d5cefe5a”,“timestamp”:{“seconds”:“1606494811”,“nanos”:89840900}}}, {“testCaseStarted”:{“id”:“9529cbbc-32d0-4343-a4e2-15b706c22db8”,“testCaseId”:“1ca6af2a-f235-4d50-b151-bc90caaf4683”,“timestamp”:{“seconds”:“1606494811”,“nanos”:90707200},“attempt”:1}}, {“testStepStarted”:{“testStepId”:“15c0331b-86a8-4eef-a852-bc5755b85e2f”,“testCaseStartedId”:“9529cbbc-32d0-4343-a4e2-15b706c22db8”,“timestamp”:{“seconds”:“1606494811”,“nanos”:91303200}}}, {“testStepFinished”:{“testStepId”:“15c0331b-86a8-4eef-a852-bc5755b85e2f”,“testCaseStartedId”:“9529cbbc-32d0-4343-a4e2-15b706c22db8”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:25600}},“timestamp”:{“seconds”:“1606494811”,“nanos”:91664000}}}, {“testStepStarted”:{“testStepId”:“03c3f6ec-61c0-457e-8fb8-90500a303270”,“testCaseStartedId”:“9529cbbc-32d0-4343-a4e2-15b706c22db8”,“timestamp”:{“seconds”:“1606494811”,“nanos”:92092000}}}, {“testStepFinished”:{“testStepId”:“03c3f6ec-61c0-457e-8fb8-90500a303270”,“testCaseStartedId”:“9529cbbc-32d0-4343-a4e2-15b706c22db8”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:2610800}},“timestamp”:{“seconds”:“1606494811”,“nanos”:95473900}}}, {“testStepStarted”:{“testStepId”:“f5c19fef-34ee-49f6-9638-5e3b4f276e38”,“testCaseStartedId”:“9529cbbc-32d0-4343-a4e2-15b706c22db8”,“timestamp”:{“seconds”:“1606494811”,“nanos”:95751800}}}, {“testStepFinished”:{“testStepId”:“f5c19fef-34ee-49f6-9638-5e3b4f276e38”,“testCaseStartedId”:“9529cbbc-32d0-4343-a4e2-15b706c22db8”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:22900}},“timestamp”:{“seconds”:“1606494811”,“nanos”:95997400}}}, {“testStepStarted”:{“testStepId”:“1069cbcd-4875-4538-a546-eba90a48a7c3”,“testCaseStartedId”:“9529cbbc-32d0-4343-a4e2-15b706c22db8”,“timestamp”:{“seconds”:“1606494811”,“nanos”:96195300}}}, {“testStepFinished”:{“testStepId”:“1069cbcd-4875-4538-a546-eba90a48a7c3”,“testCaseStartedId”:“9529cbbc-32d0-4343-a4e2-15b706c22db8”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:16000}},“timestamp”:{“seconds”:“1606494811”,“nanos”:96352700}}}, {“testStepStarted”:{“testStepId”:“d476d623-9103-4dfe-9d27-867b25c3f1e4”,“testCaseStartedId”:“9529cbbc-32d0-4343-a4e2-15b706c22db8”,“timestamp”:{“seconds”:“1606494811”,“nanos”:96537100}}}, {“testStepFinished”:{“testStepId”:“d476d623-9103-4dfe-9d27-867b25c3f1e4”,“testCaseStartedId”:“9529cbbc-32d0-4343-a4e2-15b706c22db8”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:11000}},“timestamp”:{“seconds”:“1606494811”,“nanos”:96680400}}}, {“testStepStarted”:{“testStepId”:“13c3160e-1753-4d76-829d-89c9b00e2760”,“testCaseStartedId”:“9529cbbc-32d0-4343-a4e2-15b706c22db8”,“timestamp”:{“seconds”:“1606494811”,“nanos”:96848800}}}, {“testStepFinished”:{“testStepId”:“13c3160e-1753-4d76-829d-89c9b00e2760”,“testCaseStartedId”:“9529cbbc-32d0-4343-a4e2-15b706c22db8”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:16000}},“timestamp”:{“seconds”:“1606494811”,“nanos”:96994300}}}, {“testStepStarted”:{“testStepId”:“83fd9655-f328-41aa-953a-47aace16ab6c”,“testCaseStartedId”:“9529cbbc-32d0-4343-a4e2-15b706c22db8”,“timestamp”:{“seconds”:“1606494811”,“nanos”:97152300}}}, {“testStepFinished”:{“testStepId”:“83fd9655-f328-41aa-953a-47aace16ab6c”,“testCaseStartedId”:“9529cbbc-32d0-4343-a4e2-15b706c22db8”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:291766700}},“timestamp”:{“seconds”:“1606494811”,“nanos”:389143500}}}, {“testStepStarted”:{“testStepId”:“11bc1a44-4a1c-46e5-a595-bdd78905e6c8”,“testCaseStartedId”:“9529cbbc-32d0-4343-a4e2-15b706c22db8”,“timestamp”:{“seconds”:“1606494811”,“nanos”:389425500}}}, {“testStepFinished”:{“testStepId”:“11bc1a44-4a1c-46e5-a595-bdd78905e6c8”,“testCaseStartedId”:“9529cbbc-32d0-4343-a4e2-15b706c22db8”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:37367900}},“timestamp”:{“seconds”:“1606494811”,“nanos”:427051300}}}, {“testStepStarted”:{“testStepId”:“66fd5b4e-384e-4755-b6f9-363437ecbf3f”,“testCaseStartedId”:“9529cbbc-32d0-4343-a4e2-15b706c22db8”,“timestamp”:{“seconds”:“1606494811”,“nanos”:427618000}}}, {“testStepFinished”:{“testStepId”:“66fd5b4e-384e-4755-b6f9-363437ecbf3f”,“testCaseStartedId”:“9529cbbc-32d0-4343-a4e2-15b706c22db8”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:15747100}},“timestamp”:{“seconds”:“1606494811”,“nanos”:444362700}}}, {“testStepStarted”:{“testStepId”:“b9c754ce-e28a-47a9-8c4f-4432e16f7865”,“testCaseStartedId”:“9529cbbc-32d0-4343-a4e2-15b706c22db8”,“timestamp”:{“seconds”:“1606494811”,“nanos”:445006800}}}, {“testStepFinished”:{“testStepId”:“b9c754ce-e28a-47a9-8c4f-4432e16f7865”,“testCaseStartedId”:“9529cbbc-32d0-4343-a4e2-15b706c22db8”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:25176100}},“timestamp”:{“seconds”:“1606494811”,“nanos”:473136200}}}, {“testStepStarted”:{“testStepId”:“edaf3330-c086-4b71-b03f-2f6864594cc2”,“testCaseStartedId”:“9529cbbc-32d0-4343-a4e2-15b706c22db8”,“timestamp”:{“seconds”:“1606494811”,“nanos”:474283300}}}, {“testStepFinished”:{“testStepId”:“edaf3330-c086-4b71-b03f-2f6864594cc2”,“testCaseStartedId”:“9529cbbc-32d0-4343-a4e2-15b706c22db8”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:4105000}},“timestamp”:{“seconds”:“1606494811”,“nanos”:479411100}}}, {“testStepStarted”:{“testStepId”:“e1d18566-0ba9-458a-b22d-2841ab8a3bae”,“testCaseStartedId”:“9529cbbc-32d0-4343-a4e2-15b706c22db8”,“timestamp”:{“seconds”:“1606494811”,“nanos”:479977900}}}, {“testStepFinished”:{“testStepId”:“e1d18566-0ba9-458a-b22d-2841ab8a3bae”,“testCaseStartedId”:“9529cbbc-32d0-4343-a4e2-15b706c22db8”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:30732600}},“timestamp”:{“seconds”:“1606494811”,“nanos”:514975300}}}, {“testStepStarted”:{“testStepId”:“6aa46e13-99cb-42e2-b501-5cb7cd703163”,“testCaseStartedId”:“9529cbbc-32d0-4343-a4e2-15b706c22db8”,“timestamp”:{“seconds”:“1606494811”,“nanos”:515831600}}}, {“testStepFinished”:{“testStepId”:“6aa46e13-99cb-42e2-b501-5cb7cd703163”,“testCaseStartedId”:“9529cbbc-32d0-4343-a4e2-15b706c22db8”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:2457800}},“timestamp”:{“seconds”:“1606494811”,“nanos”:519208700}}}, {“testStepStarted”:{“testStepId”:“3f67d027-4bf6-45c4-8aa5-778c92c2d6c2”,“testCaseStartedId”:“9529cbbc-32d0-4343-a4e2-15b706c22db8”,“timestamp”:{“seconds”:“1606494811”,“nanos”:519507100}}}, {“attachment”:{“testStepId”:“3f67d027-4bf6-45c4-8aa5-778c92c2d6c2”,“testCaseStartedId”:“9529cbbc-32d0-4343-a4e2-15b706c22db8”,“mediaType”:“image/png”,“contentEncoding”:“BASE64”,“body”:“bG9nL3NjcmVlbnNob3RzL2RlZmluaXJwcmF6b2luc2VyaW5kb2RhdGFpbnZsaWRhLnBuZw==”}}, {“testStepFinished”:{“testStepId”:“3f67d027-4bf6-45c4-8aa5-778c92c2d6c2”,“testCaseStartedId”:“9529cbbc-32d0-4343-a4e2-15b706c22db8”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:317300}},“timestamp”:{“seconds”:“1606494811”,“nanos”:520020200}}}, {“testStepStarted”:{“testStepId”:“8588f5a5-b62c-448b-84f0-2c65c97bb46d”,“testCaseStartedId”:“9529cbbc-32d0-4343-a4e2-15b706c22db8”,“timestamp”:{“seconds”:“1606494811”,“nanos”:520278700}}}, {“testStepFinished”:{“testStepId”:“8588f5a5-b62c-448b-84f0-2c65c97bb46d”,“testCaseStartedId”:“9529cbbc-32d0-4343-a4e2-15b706c22db8”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:32600}},“timestamp”:{“seconds”:“1606494811”,“nanos”:520800000}}}, {“testStepStarted”:{“testStepId”:“3c390f86-f381-4a9c-912c-47faf4176578”,“testCaseStartedId”:“9529cbbc-32d0-4343-a4e2-15b706c22db8”,“timestamp”:{“seconds”:“1606494811”,“nanos”:521170800}}}, {“testStepFinished”:{“testStepId”:“3c390f86-f381-4a9c-912c-47faf4176578”,“testCaseStartedId”:“9529cbbc-32d0-4343-a4e2-15b706c22db8”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:1220000}},“timestamp”:{“seconds”:“1606494811”,“nanos”:522713800}}}, {“testStepStarted”:{“testStepId”:“67fa1637-ae4f-4938-822c-728a4e59bd39”,“testCaseStartedId”:“9529cbbc-32d0-4343-a4e2-15b706c22db8”,“timestamp”:{“seconds”:“1606494811”,“nanos”:523224700}}}, {“testStepFinished”:{“testStepId”:“67fa1637-ae4f-4938-822c-728a4e59bd39”,“testCaseStartedId”:“9529cbbc-32d0-4343-a4e2-15b706c22db8”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:29300}},“timestamp”:{“seconds”:“1606494811”,“nanos”:523665700}}}, {“testCaseFinished”:{“testCaseStartedId”:“9529cbbc-32d0-4343-a4e2-15b706c22db8”,“timestamp”:{“seconds”:“1606494811”,“nanos”:524940800}}}, {“testCaseStarted”:{“id”:“71cf850b-ac25-4fcb-a73e-95b3de73d8c4”,“testCaseId”:“101a253c-1185-4ef4-9226-d84c3a18a424”,“timestamp”:{“seconds”:“1606494811”,“nanos”:533025200},“attempt”:1}}, {“testStepStarted”:{“testStepId”:“d9314036-1625-45ad-9df0-2324b832db6e”,“testCaseStartedId”:“71cf850b-ac25-4fcb-a73e-95b3de73d8c4”,“timestamp”:{“seconds”:“1606494811”,“nanos”:535419700}}}, {“testStepFinished”:{“testStepId”:“d9314036-1625-45ad-9df0-2324b832db6e”,“testCaseStartedId”:“71cf850b-ac25-4fcb-a73e-95b3de73d8c4”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:38200}},“timestamp”:{“seconds”:“1606494811”,“nanos”:536142200}}}, {“testStepStarted”:{“testStepId”:“da3af721-d44f-426b-bacb-a26ec6a028bb”,“testCaseStartedId”:“71cf850b-ac25-4fcb-a73e-95b3de73d8c4”,“timestamp”:{“seconds”:“1606494811”,“nanos”:536492600}}}, {“testStepFinished”:{“testStepId”:“da3af721-d44f-426b-bacb-a26ec6a028bb”,“testCaseStartedId”:“71cf850b-ac25-4fcb-a73e-95b3de73d8c4”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:980600}},“timestamp”:{“seconds”:“1606494811”,“nanos”:537784200}}}, {“testStepStarted”:{“testStepId”:“25250273-90be-4a10-84cb-878d24f7b24f”,“testCaseStartedId”:“71cf850b-ac25-4fcb-a73e-95b3de73d8c4”,“timestamp”:{“seconds”:“1606494811”,“nanos”:538021500}}}, {“testStepFinished”:{“testStepId”:“25250273-90be-4a10-84cb-878d24f7b24f”,“testCaseStartedId”:“71cf850b-ac25-4fcb-a73e-95b3de73d8c4”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:20300}},“timestamp”:{“seconds”:“1606494811”,“nanos”:538188300}}}, {“testStepStarted”:{“testStepId”:“07534b3c-8192-472e-a734-4ea6ed64a9a5”,“testCaseStartedId”:“71cf850b-ac25-4fcb-a73e-95b3de73d8c4”,“timestamp”:{“seconds”:“1606494811”,“nanos”:538422700}}}, {“testStepFinished”:{“testStepId”:“07534b3c-8192-472e-a734-4ea6ed64a9a5”,“testCaseStartedId”:“71cf850b-ac25-4fcb-a73e-95b3de73d8c4”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:18500}},“timestamp”:{“seconds”:“1606494811”,“nanos”:538598400}}}, {“testStepStarted”:{“testStepId”:“2932baac-fdd1-435a-83d4-c0f3a19312e0”,“testCaseStartedId”:“71cf850b-ac25-4fcb-a73e-95b3de73d8c4”,“timestamp”:{“seconds”:“1606494811”,“nanos”:538915300}}}, {“testStepFinished”:{“testStepId”:“2932baac-fdd1-435a-83d4-c0f3a19312e0”,“testCaseStartedId”:“71cf850b-ac25-4fcb-a73e-95b3de73d8c4”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:26100}},“timestamp”:{“seconds”:“1606494811”,“nanos”:539304900}}}, {“testStepStarted”:{“testStepId”:“bbd1091c-e043-492e-8195-0252fcc1ac8a”,“testCaseStartedId”:“71cf850b-ac25-4fcb-a73e-95b3de73d8c4”,“timestamp”:{“seconds”:“1606494811”,“nanos”:539742200}}}, {“testStepFinished”:{“testStepId”:“bbd1091c-e043-492e-8195-0252fcc1ac8a”,“testCaseStartedId”:“71cf850b-ac25-4fcb-a73e-95b3de73d8c4”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:156700}},“timestamp”:{“seconds”:“1606494811”,“nanos”:540427700}}}, {“testStepStarted”:{“testStepId”:“0e4c7f42-dfd4-41a4-b659-a781ca1d0c51”,“testCaseStartedId”:“71cf850b-ac25-4fcb-a73e-95b3de73d8c4”,“timestamp”:{“seconds”:“1606494811”,“nanos”:541026600}}}, {“testStepFinished”:{“testStepId”:“0e4c7f42-dfd4-41a4-b659-a781ca1d0c51”,“testCaseStartedId”:“71cf850b-ac25-4fcb-a73e-95b3de73d8c4”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:115471800}},“timestamp”:{“seconds”:“1606494811”,“nanos”:658611800}}}, {“testStepStarted”:{“testStepId”:“8ff4087d-df97-4680-acbc-45271eea175e”,“testCaseStartedId”:“71cf850b-ac25-4fcb-a73e-95b3de73d8c4”,“timestamp”:{“seconds”:“1606494811”,“nanos”:658915800}}}, {“testStepFinished”:{“testStepId”:“8ff4087d-df97-4680-acbc-45271eea175e”,“testCaseStartedId”:“71cf850b-ac25-4fcb-a73e-95b3de73d8c4”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:23295400}},“timestamp”:{“seconds”:“1606494811”,“nanos”:683015800}}}, {“testStepStarted”:{“testStepId”:“0852e75b-3bac-4dfc-9ea1-b0c9c993fca0”,“testCaseStartedId”:“71cf850b-ac25-4fcb-a73e-95b3de73d8c4”,“timestamp”:{“seconds”:“1606494811”,“nanos”:683310600}}}, {“testStepFinished”:{“testStepId”:“0852e75b-3bac-4dfc-9ea1-b0c9c993fca0”,“testCaseStartedId”:“71cf850b-ac25-4fcb-a73e-95b3de73d8c4”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:13948600}},“timestamp”:{“seconds”:“1606494811”,“nanos”:697907300}}}, {“testStepStarted”:{“testStepId”:“1f73da74-a791-4e7b-a7d8-af7d252b5398”,“testCaseStartedId”:“71cf850b-ac25-4fcb-a73e-95b3de73d8c4”,“timestamp”:{“seconds”:“1606494811”,“nanos”:698649700}}}, {“testStepFinished”:{“testStepId”:“1f73da74-a791-4e7b-a7d8-af7d252b5398”,“testCaseStartedId”:“71cf850b-ac25-4fcb-a73e-95b3de73d8c4”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:21358800}},“timestamp”:{“seconds”:“1606494811”,“nanos”:720610600}}}, {“testStepStarted”:{“testStepId”:“59caebd7-3ec6-411e-894d-b1ece2c2409b”,“testCaseStartedId”:“71cf850b-ac25-4fcb-a73e-95b3de73d8c4”,“timestamp”:{“seconds”:“1606494811”,“nanos”:720900000}}}, {“testStepFinished”:{“testStepId”:“59caebd7-3ec6-411e-894d-b1ece2c2409b”,“testCaseStartedId”:“71cf850b-ac25-4fcb-a73e-95b3de73d8c4”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:1681600}},“timestamp”:{“seconds”:“1606494811”,“nanos”:723119500}}}, {“testStepStarted”:{“testStepId”:“3a014e40-ea56-4da0-82ac-14c1ef6ccddb”,“testCaseStartedId”:“71cf850b-ac25-4fcb-a73e-95b3de73d8c4”,“timestamp”:{“seconds”:“1606494811”,“nanos”:723407100}}}, {“testStepFinished”:{“testStepId”:“3a014e40-ea56-4da0-82ac-14c1ef6ccddb”,“testCaseStartedId”:“71cf850b-ac25-4fcb-a73e-95b3de73d8c4”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:46517900}},“timestamp”:{“seconds”:“1606494811”,“nanos”:808199400}}}, {“testStepStarted”:{“testStepId”:“a09e2a3d-23bf-498f-a0ee-3466b18b8c73”,“testCaseStartedId”:“71cf850b-ac25-4fcb-a73e-95b3de73d8c4”,“timestamp”:{“seconds”:“1606494811”,“nanos”:809056100}}}, {“testStepFinished”:{“testStepId”:“a09e2a3d-23bf-498f-a0ee-3466b18b8c73”,“testCaseStartedId”:“71cf850b-ac25-4fcb-a73e-95b3de73d8c4”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:6728000}},“timestamp”:{“seconds”:“1606494811”,“nanos”:819283800}}}, {“testStepStarted”:{“testStepId”:“9f6d4ac9-4b82-4ae5-968d-53fdf8207573”,“testCaseStartedId”:“71cf850b-ac25-4fcb-a73e-95b3de73d8c4”,“timestamp”:{“seconds”:“1606494811”,“nanos”:820641700}}}, {“testStepFinished”:{“testStepId”:“9f6d4ac9-4b82-4ae5-968d-53fdf8207573”,“testCaseStartedId”:“71cf850b-ac25-4fcb-a73e-95b3de73d8c4”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:8294100}},“timestamp”:{“seconds”:“1606494811”,“nanos”:830313900}}}, {“testStepStarted”:{“testStepId”:“e2bf79c8-f3bb-4784-9611-ef62e6570656”,“testCaseStartedId”:“71cf850b-ac25-4fcb-a73e-95b3de73d8c4”,“timestamp”:{“seconds”:“1606494811”,“nanos”:830755500}}}, {“testStepFinished”:{“testStepId”:“e2bf79c8-f3bb-4784-9611-ef62e6570656”,“testCaseStartedId”:“71cf850b-ac25-4fcb-a73e-95b3de73d8c4”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:10455200}},“timestamp”:{“seconds”:“1606494811”,“nanos”:842011500}}}, {“testStepStarted”:{“testStepId”:“1658f5cc-0efb-4edd-8deb-1d6e21b9b402”,“testCaseStartedId”:“71cf850b-ac25-4fcb-a73e-95b3de73d8c4”,“timestamp”:{“seconds”:“1606494811”,“nanos”:842343800}}}, {“testStepFinished”:{“testStepId”:“1658f5cc-0efb-4edd-8deb-1d6e21b9b402”,“testCaseStartedId”:“71cf850b-ac25-4fcb-a73e-95b3de73d8c4”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:2633700}},“timestamp”:{“seconds”:“1606494811”,“nanos”:846084400}}}, {“testStepStarted”:{“testStepId”:“034fc3c5-f3fd-4ced-8ec8-54c5b011a77b”,“testCaseStartedId”:“71cf850b-ac25-4fcb-a73e-95b3de73d8c4”,“timestamp”:{“seconds”:“1606494811”,“nanos”:846409000}}}, {“attachment”:{“testStepId”:“034fc3c5-f3fd-4ced-8ec8-54c5b011a77b”,“testCaseStartedId”:“71cf850b-ac25-4fcb-a73e-95b3de73d8c4”,“mediaType”:“image/png”,“contentEncoding”:“BASE64”,“body”:“bG9nL3NjcmVlbnNob3RzL2FjZWl0YXJ1bWFzb2xpY2l0YW9kZWNyZWRlbmNpYW1lbnRvLnBuZw==”}}, {“testStepFinished”:{“testStepId”:“034fc3c5-f3fd-4ced-8ec8-54c5b011a77b”,“testCaseStartedId”:“71cf850b-ac25-4fcb-a73e-95b3de73d8c4”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:315600}},“timestamp”:{“seconds”:“1606494811”,“nanos”:846907300}}}, {“testStepStarted”:{“testStepId”:“ff2126a2-8944-4b4a-865a-8e4305a44141”,“testCaseStartedId”:“71cf850b-ac25-4fcb-a73e-95b3de73d8c4”,“timestamp”:{“seconds”:“1606494811”,“nanos”:847133900}}}, {“testStepFinished”:{“testStepId”:“ff2126a2-8944-4b4a-865a-8e4305a44141”,“testCaseStartedId”:“71cf850b-ac25-4fcb-a73e-95b3de73d8c4”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:18300}},“timestamp”:{“seconds”:“1606494811”,“nanos”:847309600}}}, {“testStepStarted”:{“testStepId”:“5df0aa40-6f49-4b37-882f-d55e10f29f55”,“testCaseStartedId”:“71cf850b-ac25-4fcb-a73e-95b3de73d8c4”,“timestamp”:{“seconds”:“1606494811”,“nanos”:847507700}}}, {“testStepFinished”:{“testStepId”:“5df0aa40-6f49-4b37-882f-d55e10f29f55”,“testCaseStartedId”:“71cf850b-ac25-4fcb-a73e-95b3de73d8c4”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:623000}},“timestamp”:{“seconds”:“1606494811”,“nanos”:848340000}}}, {“testStepStarted”:{“testStepId”:“9faa2422-23ac-476d-8693-e4c6ea8b4ce8”,“testCaseStartedId”:“71cf850b-ac25-4fcb-a73e-95b3de73d8c4”,“timestamp”:{“seconds”:“1606494811”,“nanos”:848615800}}}, {“testStepFinished”:{“testStepId”:“9faa2422-23ac-476d-8693-e4c6ea8b4ce8”,“testCaseStartedId”:“71cf850b-ac25-4fcb-a73e-95b3de73d8c4”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:19600}},“timestamp”:{“seconds”:“1606494811”,“nanos”:848796900}}}, {“testCaseFinished”:{“testCaseStartedId”:“71cf850b-ac25-4fcb-a73e-95b3de73d8c4”,“timestamp”:{“seconds”:“1606494811”,“nanos”:849046600}}}, {“testCaseStarted”:{“id”:“f876d259-3436-45b1-8596-dccdae62f0a6”,“testCaseId”:“284f1913-68eb-4519-90b4-4b7d8bb12cb2”,“timestamp”:{“seconds”:“1606494811”,“nanos”:850022900},“attempt”:1}}, {“testStepStarted”:{“testStepId”:“b25fd37f-3a82-49c9-adca-ac17136dbf5c”,“testCaseStartedId”:“f876d259-3436-45b1-8596-dccdae62f0a6”,“timestamp”:{“seconds”:“1606494811”,“nanos”:850405200}}}, {“testStepFinished”:{“testStepId”:“b25fd37f-3a82-49c9-adca-ac17136dbf5c”,“testCaseStartedId”:“f876d259-3436-45b1-8596-dccdae62f0a6”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:17900}},“timestamp”:{“seconds”:“1606494811”,“nanos”:850665600}}}, {“testStepStarted”:{“testStepId”:“da3c3f43-f757-46bc-8a3f-30f558ed40c0”,“testCaseStartedId”:“f876d259-3436-45b1-8596-dccdae62f0a6”,“timestamp”:{“seconds”:“1606494811”,“nanos”:850875400}}}, {“testStepFinished”:{“testStepId”:“da3c3f43-f757-46bc-8a3f-30f558ed40c0”,“testCaseStartedId”:“f876d259-3436-45b1-8596-dccdae62f0a6”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:1054100}},“timestamp”:{“seconds”:“1606494811”,“nanos”:852152500}}}, {“testStepStarted”:{“testStepId”:“7dfddd13-dc0d-47f5-b461-bceef351e71b”,“testCaseStartedId”:“f876d259-3436-45b1-8596-dccdae62f0a6”,“timestamp”:{“seconds”:“1606494811”,“nanos”:852411100}}}, {“testStepFinished”:{“testStepId”:“7dfddd13-dc0d-47f5-b461-bceef351e71b”,“testCaseStartedId”:“f876d259-3436-45b1-8596-dccdae62f0a6”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:18300}},“timestamp”:{“seconds”:“1606494811”,“nanos”:852593000}}}, {“testStepStarted”:{“testStepId”:“7b82148b-35b6-43d5-bfd7-227985b708ba”,“testCaseStartedId”:“f876d259-3436-45b1-8596-dccdae62f0a6”,“timestamp”:{“seconds”:“1606494811”,“nanos”:852770000}}}, {“testStepFinished”:{“testStepId”:“7b82148b-35b6-43d5-bfd7-227985b708ba”,“testCaseStartedId”:“f876d259-3436-45b1-8596-dccdae62f0a6”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:12800}},“timestamp”:{“seconds”:“1606494811”,“nanos”:852914800}}}, {“testStepStarted”:{“testStepId”:“13d88276-8a80-4808-9bd8-2877bed21830”,“testCaseStartedId”:“f876d259-3436-45b1-8596-dccdae62f0a6”,“timestamp”:{“seconds”:“1606494811”,“nanos”:853090000}}}, {“testStepFinished”:{“testStepId”:“13d88276-8a80-4808-9bd8-2877bed21830”,“testCaseStartedId”:“f876d259-3436-45b1-8596-dccdae62f0a6”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:10100}},“timestamp”:{“seconds”:“1606494811”,“nanos”:853230600}}}, {“testStepStarted”:{“testStepId”:“1113526c-feb2-43fa-8090-41375a5e1a3b”,“testCaseStartedId”:“f876d259-3436-45b1-8596-dccdae62f0a6”,“timestamp”:{“seconds”:“1606494811”,“nanos”:853397100}}}, {“testStepFinished”:{“testStepId”:“1113526c-feb2-43fa-8090-41375a5e1a3b”,“testCaseStartedId”:“f876d259-3436-45b1-8596-dccdae62f0a6”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:14200}},“timestamp”:{“seconds”:“1606494811”,“nanos”:853537000}}}, {“testStepStarted”:{“testStepId”:“231fd0d7-ce0b-45ae-aa99-37f734ef21f2”,“testCaseStartedId”:“f876d259-3436-45b1-8596-dccdae62f0a6”,“timestamp”:{“seconds”:“1606494811”,“nanos”:853701700}}}, {“testStepFinished”:{“testStepId”:“231fd0d7-ce0b-45ae-aa99-37f734ef21f2”,“testCaseStartedId”:“f876d259-3436-45b1-8596-dccdae62f0a6”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:121748500}},“timestamp”:{“seconds”:“1606494811”,“nanos”:975669300}}}, {“testStepStarted”:{“testStepId”:“c25319aa-fe95-4595-b8f6-65c537eaf54b”,“testCaseStartedId”:“f876d259-3436-45b1-8596-dccdae62f0a6”,“timestamp”:{“seconds”:“1606494811”,“nanos”:976041300}}}, {“testStepFinished”:{“testStepId”:“c25319aa-fe95-4595-b8f6-65c537eaf54b”,“testCaseStartedId”:“f876d259-3436-45b1-8596-dccdae62f0a6”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:21298900}},“timestamp”:{“seconds”:“1606494811”,“nanos”:997836100}}}, {“testStepStarted”:{“testStepId”:“59ab9731-da1b-42fc-b0f7-48c813d47feb”,“testCaseStartedId”:“f876d259-3436-45b1-8596-dccdae62f0a6”,“timestamp”:{“seconds”:“1606494811”,“nanos”:998083000}}}, {“testStepFinished”:{“testStepId”:“59ab9731-da1b-42fc-b0f7-48c813d47feb”,“testCaseStartedId”:“f876d259-3436-45b1-8596-dccdae62f0a6”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:8610700}},“timestamp”:{“seconds”:“1606494812”,“nanos”:6901900}}}, {“testStepStarted”:{“testStepId”:“a208f90e-81a1-46df-96ef-d61c1d222a9f”,“testCaseStartedId”:“f876d259-3436-45b1-8596-dccdae62f0a6”,“timestamp”:{“seconds”:“1606494812”,“nanos”:7152900}}}, {“testStepFinished”:{“testStepId”:“a208f90e-81a1-46df-96ef-d61c1d222a9f”,“testCaseStartedId”:“f876d259-3436-45b1-8596-dccdae62f0a6”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:10694000}},“timestamp”:{“seconds”:“1606494812”,“nanos”:19104500}}}, {“testStepStarted”:{“testStepId”:“d8e8e153-5d28-426f-984f-010cd4211531”,“testCaseStartedId”:“f876d259-3436-45b1-8596-dccdae62f0a6”,“timestamp”:{“seconds”:“1606494812”,“nanos”:19391900}}}, {“testStepFinished”:{“testStepId”:“d8e8e153-5d28-426f-984f-010cd4211531”,“testCaseStartedId”:“f876d259-3436-45b1-8596-dccdae62f0a6”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:1286800}},“timestamp”:{“seconds”:“1606494812”,“nanos”:21710100}}}, {“testStepStarted”:{“testStepId”:“828d547c-611e-43e2-8d5e-d37a3933eff5”,“testCaseStartedId”:“f876d259-3436-45b1-8596-dccdae62f0a6”,“timestamp”:{“seconds”:“1606494812”,“nanos”:21989600}}}, {“testStepFinished”:{“testStepId”:“828d547c-611e-43e2-8d5e-d37a3933eff5”,“testCaseStartedId”:“f876d259-3436-45b1-8596-dccdae62f0a6”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:26202600}},“timestamp”:{“seconds”:“1606494812”,“nanos”:48861700}}}, {“testStepStarted”:{“testStepId”:“5ec155ab-fa73-4e45-836b-0e0ae007ef26”,“testCaseStartedId”:“f876d259-3436-45b1-8596-dccdae62f0a6”,“timestamp”:{“seconds”:“1606494812”,“nanos”:49134600}}}, {“testStepFinished”:{“testStepId”:“5ec155ab-fa73-4e45-836b-0e0ae007ef26”,“testCaseStartedId”:“f876d259-3436-45b1-8596-dccdae62f0a6”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:6238400}},“timestamp”:{“seconds”:“1606494812”,“nanos”:56057300}}}, {“testStepStarted”:{“testStepId”:“f68e7792-67a5-49fa-afb4-31a182b1aac4”,“testCaseStartedId”:“f876d259-3436-45b1-8596-dccdae62f0a6”,“timestamp”:{“seconds”:“1606494812”,“nanos”:56324800}}}, {“testStepFinished”:{“testStepId”:“f68e7792-67a5-49fa-afb4-31a182b1aac4”,“testCaseStartedId”:“f876d259-3436-45b1-8596-dccdae62f0a6”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:1225900}},“timestamp”:{“seconds”:“1606494812”,“nanos”:58099100}}}, {“testStepStarted”:{“testStepId”:“fd51b72f-adf2-4234-a75e-b8fa8794d35b”,“testCaseStartedId”:“f876d259-3436-45b1-8596-dccdae62f0a6”,“timestamp”:{“seconds”:“1606494812”,“nanos”:58341300}}}, {“attachment”:{“testStepId”:“fd51b72f-adf2-4234-a75e-b8fa8794d35b”,“testCaseStartedId”:“f876d259-3436-45b1-8596-dccdae62f0a6”,“mediaType”:“image/png”,“contentEncoding”:“BASE64”,“body”:“bG9nL3NjcmVlbnNob3RzL2FjZWl0YXJ1bWFzb2xpY2l0YW9lZW5jb250cmFyb2NyZWRlbmNpYW1lbnRvY29ycmVzcG9uZGVudGUucG5n”}}, {“testStepFinished”:{“testStepId”:“fd51b72f-adf2-4234-a75e-b8fa8794d35b”,“testCaseStartedId”:“f876d259-3436-45b1-8596-dccdae62f0a6”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:291500}},“timestamp”:{“seconds”:“1606494812”,“nanos”:58793600}}}, {“testStepStarted”:{“testStepId”:“e7f780dd-af43-4f57-acc3-a68091cc83d5”,“testCaseStartedId”:“f876d259-3436-45b1-8596-dccdae62f0a6”,“timestamp”:{“seconds”:“1606494812”,“nanos”:58993700}}}, {“testStepFinished”:{“testStepId”:“e7f780dd-af43-4f57-acc3-a68091cc83d5”,“testCaseStartedId”:“f876d259-3436-45b1-8596-dccdae62f0a6”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:16200}},“timestamp”:{“seconds”:“1606494812”,“nanos”:59153400}}}, {“testStepStarted”:{“testStepId”:“93b6154b-414e-4fd1-9eb8-4c3c8cedbbec”,“testCaseStartedId”:“f876d259-3436-45b1-8596-dccdae62f0a6”,“timestamp”:{“seconds”:“1606494812”,“nanos”:59920200}}}, {“testStepFinished”:{“testStepId”:“93b6154b-414e-4fd1-9eb8-4c3c8cedbbec”,“testCaseStartedId”:“f876d259-3436-45b1-8596-dccdae62f0a6”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:962100}},“timestamp”:{“seconds”:“1606494812”,“nanos”:61337800}}}, {“testStepStarted”:{“testStepId”:“adb887fe-ecff-40c5-9d2d-5dbddfc34bd1”,“testCaseStartedId”:“f876d259-3436-45b1-8596-dccdae62f0a6”,“timestamp”:{“seconds”:“1606494812”,“nanos”:61787200}}}, {“testStepFinished”:{“testStepId”:“adb887fe-ecff-40c5-9d2d-5dbddfc34bd1”,“testCaseStartedId”:“f876d259-3436-45b1-8596-dccdae62f0a6”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:37700}},“timestamp”:{“seconds”:“1606494812”,“nanos”:62154000}}}, {“testCaseFinished”:{“testCaseStartedId”:“f876d259-3436-45b1-8596-dccdae62f0a6”,“timestamp”:{“seconds”:“1606494812”,“nanos”:62651800}}}, {“testCaseStarted”:{“id”:“fd25cbf7-1696-4d60-992e-d540f091ee93”,“testCaseId”:“14907e61-7d0c-4bcb-9ecd-f113fa48031e”,“timestamp”:{“seconds”:“1606494812”,“nanos”:63950500},“attempt”:1}}, {“testStepStarted”:{“testStepId”:“3671ac83-49b0-4fc3-a7c7-dc235b4d3e5c”,“testCaseStartedId”:“fd25cbf7-1696-4d60-992e-d540f091ee93”,“timestamp”:{“seconds”:“1606494812”,“nanos”:64317800}}}, {“testStepFinished”:{“testStepId”:“3671ac83-49b0-4fc3-a7c7-dc235b4d3e5c”,“testCaseStartedId”:“fd25cbf7-1696-4d60-992e-d540f091ee93”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:16800}},“timestamp”:{“seconds”:“1606494812”,“nanos”:64534900}}}, {“testStepStarted”:{“testStepId”:“53b706f2-b391-4457-aa2c-3abeeea8ce92”,“testCaseStartedId”:“fd25cbf7-1696-4d60-992e-d540f091ee93”,“timestamp”:{“seconds”:“1606494812”,“nanos”:64730300}}}, {“testStepFinished”:{“testStepId”:“53b706f2-b391-4457-aa2c-3abeeea8ce92”,“testCaseStartedId”:“fd25cbf7-1696-4d60-992e-d540f091ee93”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:984600}},“timestamp”:{“seconds”:“1606494812”,“nanos”:65873100}}}, {“testStepStarted”:{“testStepId”:“91d03690-67ac-4e94-976e-b13f937bdcea”,“testCaseStartedId”:“fd25cbf7-1696-4d60-992e-d540f091ee93”,“timestamp”:{“seconds”:“1606494812”,“nanos”:66085600}}}, {“testStepFinished”:{“testStepId”:“91d03690-67ac-4e94-976e-b13f937bdcea”,“testCaseStartedId”:“fd25cbf7-1696-4d60-992e-d540f091ee93”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:15500}},“timestamp”:{“seconds”:“1606494812”,“nanos”:66247600}}}, {“testStepStarted”:{“testStepId”:“b49ed7b6-4b7c-4ce4-867d-ca61a7917926”,“testCaseStartedId”:“fd25cbf7-1696-4d60-992e-d540f091ee93”,“timestamp”:{“seconds”:“1606494812”,“nanos”:66419000}}}, {“testStepFinished”:{“testStepId”:“b49ed7b6-4b7c-4ce4-867d-ca61a7917926”,“testCaseStartedId”:“fd25cbf7-1696-4d60-992e-d540f091ee93”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:12300}},“timestamp”:{“seconds”:“1606494812”,“nanos”:66568900}}}, {“testStepStarted”:{“testStepId”:“0bfa1cd3-028b-46cd-acad-91c22b5fb4e5”,“testCaseStartedId”:“fd25cbf7-1696-4d60-992e-d540f091ee93”,“timestamp”:{“seconds”:“1606494812”,“nanos”:66749700}}}, {“testStepFinished”:{“testStepId”:“0bfa1cd3-028b-46cd-acad-91c22b5fb4e5”,“testCaseStartedId”:“fd25cbf7-1696-4d60-992e-d540f091ee93”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:10500}},“timestamp”:{“seconds”:“1606494812”,“nanos”:66894800}}}, {“testStepStarted”:{“testStepId”:“a2a67835-8dad-4e66-9eb4-d57e39235de4”,“testCaseStartedId”:“fd25cbf7-1696-4d60-992e-d540f091ee93”,“timestamp”:{“seconds”:“1606494812”,“nanos”:67071000}}}, {“testStepFinished”:{“testStepId”:“a2a67835-8dad-4e66-9eb4-d57e39235de4”,“testCaseStartedId”:“fd25cbf7-1696-4d60-992e-d540f091ee93”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:20000}},“timestamp”:{“seconds”:“1606494812”,“nanos”:67309200}}}, {“testStepStarted”:{“testStepId”:“ead74443-034d-4b59-afd9-865ee143f5cf”,“testCaseStartedId”:“fd25cbf7-1696-4d60-992e-d540f091ee93”,“timestamp”:{“seconds”:“1606494812”,“nanos”:67657700}}}, {“testStepFinished”:{“testStepId”:“ead74443-034d-4b59-afd9-865ee143f5cf”,“testCaseStartedId”:“fd25cbf7-1696-4d60-992e-d540f091ee93”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:105091200}},“timestamp”:{“seconds”:“1606494812”,“nanos”:173086000}}}, {“testStepStarted”:{“testStepId”:“b0d6918b-b0cd-4638-afac-e644c02d6909”,“testCaseStartedId”:“fd25cbf7-1696-4d60-992e-d540f091ee93”,“timestamp”:{“seconds”:“1606494812”,“nanos”:173327300}}}, {“testStepFinished”:{“testStepId”:“b0d6918b-b0cd-4638-afac-e644c02d6909”,“testCaseStartedId”:“fd25cbf7-1696-4d60-992e-d540f091ee93”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:22619800}},“timestamp”:{“seconds”:“1606494812”,“nanos”:196217000}}}, {“testStepStarted”:{“testStepId”:“6af4d933-16f0-4a67-b271-deeac41ad782”,“testCaseStartedId”:“fd25cbf7-1696-4d60-992e-d540f091ee93”,“timestamp”:{“seconds”:“1606494812”,“nanos”:196790300}}}, {“testStepFinished”:{“testStepId”:“6af4d933-16f0-4a67-b271-deeac41ad782”,“testCaseStartedId”:“fd25cbf7-1696-4d60-992e-d540f091ee93”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:12850000}},“timestamp”:{“seconds”:“1606494812”,“nanos”:210039400}}}, {“testStepStarted”:{“testStepId”:“eb34bc66-c287-4dfa-9ef9-c4ffa8543532”,“testCaseStartedId”:“fd25cbf7-1696-4d60-992e-d540f091ee93”,“timestamp”:{“seconds”:“1606494812”,“nanos”:210298400}}}, {“testStepFinished”:{“testStepId”:“eb34bc66-c287-4dfa-9ef9-c4ffa8543532”,“testCaseStartedId”:“fd25cbf7-1696-4d60-992e-d540f091ee93”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:10256500}},“timestamp”:{“seconds”:“1606494812”,“nanos”:221693400}}}, {“testStepStarted”:{“testStepId”:“ddbd0496-0d55-49b4-ac3e-371685dfe6c6”,“testCaseStartedId”:“fd25cbf7-1696-4d60-992e-d540f091ee93”,“timestamp”:{“seconds”:“1606494812”,“nanos”:221972600}}}, {“testStepFinished”:{“testStepId”:“ddbd0496-0d55-49b4-ac3e-371685dfe6c6”,“testCaseStartedId”:“fd25cbf7-1696-4d60-992e-d540f091ee93”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:1102000}},“timestamp”:{“seconds”:“1606494812”,“nanos”:223722500}}}, {“testStepStarted”:{“testStepId”:“4aa498f7-990c-43c2-903d-eecee726dc69”,“testCaseStartedId”:“fd25cbf7-1696-4d60-992e-d540f091ee93”,“timestamp”:{“seconds”:“1606494812”,“nanos”:223966800}}}, {“testStepFinished”:{“testStepId”:“4aa498f7-990c-43c2-903d-eecee726dc69”,“testCaseStartedId”:“fd25cbf7-1696-4d60-992e-d540f091ee93”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:20300700}},“timestamp”:{“seconds”:“1606494812”,“nanos”:245163600}}}, {“testStepStarted”:{“testStepId”:“2dd01616-944e-421e-8534-4609f0339735”,“testCaseStartedId”:“fd25cbf7-1696-4d60-992e-d540f091ee93”,“timestamp”:{“seconds”:“1606494812”,“nanos”:245762400}}}, {“testStepFinished”:{“testStepId”:“2dd01616-944e-421e-8534-4609f0339735”,“testCaseStartedId”:“fd25cbf7-1696-4d60-992e-d540f091ee93”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:520900}},“timestamp”:{“seconds”:“1606494812”,“nanos”:247013700}}}, {“testStepStarted”:{“testStepId”:“b925ff51-838a-4001-8e3a-1b094bdc287c”,“testCaseStartedId”:“fd25cbf7-1696-4d60-992e-d540f091ee93”,“timestamp”:{“seconds”:“1606494812”,“nanos”:247288500}}}, {“testStepFinished”:{“testStepId”:“b925ff51-838a-4001-8e3a-1b094bdc287c”,“testCaseStartedId”:“fd25cbf7-1696-4d60-992e-d540f091ee93”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:2365000}},“timestamp”:{“seconds”:“1606494812”,“nanos”:250227000}}}, {“testStepStarted”:{“testStepId”:“8d82ccd6-1063-4262-bf4a-f3d8a76db0c0”,“testCaseStartedId”:“fd25cbf7-1696-4d60-992e-d540f091ee93”,“timestamp”:{“seconds”:“1606494812”,“nanos”:250488300}}}, {“testStepFinished”:{“testStepId”:“8d82ccd6-1063-4262-bf4a-f3d8a76db0c0”,“testCaseStartedId”:“fd25cbf7-1696-4d60-992e-d540f091ee93”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:24184300}},“timestamp”:{“seconds”:“1606494812”,“nanos”:275730600}}}, {“testStepStarted”:{“testStepId”:“ea4d4b86-fbac-4922-b7cf-ef9b1f86e7b2”,“testCaseStartedId”:“fd25cbf7-1696-4d60-992e-d540f091ee93”,“timestamp”:{“seconds”:“1606494812”,“nanos”:276384200}}}, {“testStepFinished”:{“testStepId”:“ea4d4b86-fbac-4922-b7cf-ef9b1f86e7b2”,“testCaseStartedId”:“fd25cbf7-1696-4d60-992e-d540f091ee93”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:2568700}},“timestamp”:{“seconds”:“1606494812”,“nanos”:280174400}}}, {“testStepStarted”:{“testStepId”:“5bb23153-20b1-4a9f-b42f-cc219b4a9b1d”,“testCaseStartedId”:“fd25cbf7-1696-4d60-992e-d540f091ee93”,“timestamp”:{“seconds”:“1606494812”,“nanos”:280476300}}}, {“attachment”:{“testStepId”:“5bb23153-20b1-4a9f-b42f-cc219b4a9b1d”,“testCaseStartedId”:“fd25cbf7-1696-4d60-992e-d540f091ee93”,“mediaType”:“image/png”,“contentEncoding”:“BASE64”,“body”:“bG9nL3NjcmVlbnNob3RzL3JlY3VzYXJ1bWFzb2xpY2l0YW9kZWNyZWRlbmNpYW1lbnRvLnBuZw==”}}, {“testStepFinished”:{“testStepId”:“5bb23153-20b1-4a9f-b42f-cc219b4a9b1d”,“testCaseStartedId”:“fd25cbf7-1696-4d60-992e-d540f091ee93”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:318700}},“timestamp”:{“seconds”:“1606494812”,“nanos”:280981500}}}, {“testStepStarted”:{“testStepId”:“fe7c52a9-65e4-49c9-908d-40360948469d”,“testCaseStartedId”:“fd25cbf7-1696-4d60-992e-d540f091ee93”,“timestamp”:{“seconds”:“1606494812”,“nanos”:281206900}}}, {“testStepFinished”:{“testStepId”:“fe7c52a9-65e4-49c9-908d-40360948469d”,“testCaseStartedId”:“fd25cbf7-1696-4d60-992e-d540f091ee93”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:17800}},“timestamp”:{“seconds”:“1606494812”,“nanos”:281381500}}}, {“testStepStarted”:{“testStepId”:“aad924ec-fee0-4dfa-84ca-623ab9f53645”,“testCaseStartedId”:“fd25cbf7-1696-4d60-992e-d540f091ee93”,“timestamp”:{“seconds”:“1606494812”,“nanos”:281635000}}}, {“testStepFinished”:{“testStepId”:“aad924ec-fee0-4dfa-84ca-623ab9f53645”,“testCaseStartedId”:“fd25cbf7-1696-4d60-992e-d540f091ee93”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:463800}},“timestamp”:{“seconds”:“1606494812”,“nanos”:282264100}}}, {“testStepStarted”:{“testStepId”:“443e1b06-295e-4b8b-b678-cfb787a61728”,“testCaseStartedId”:“fd25cbf7-1696-4d60-992e-d540f091ee93”,“timestamp”:{“seconds”:“1606494812”,“nanos”:282480400}}}, {“testStepFinished”:{“testStepId”:“443e1b06-295e-4b8b-b678-cfb787a61728”,“testCaseStartedId”:“fd25cbf7-1696-4d60-992e-d540f091ee93”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:13500}},“timestamp”:{“seconds”:“1606494812”,“nanos”:282649700}}}, {“testCaseFinished”:{“testCaseStartedId”:“fd25cbf7-1696-4d60-992e-d540f091ee93”,“timestamp”:{“seconds”:“1606494812”,“nanos”:282887100}}}, {“testCaseStarted”:{“id”:“565d2b4c-7da2-402a-a684-73ab44fe9aed”,“testCaseId”:“34fbec63-cb86-4734-b4a7-bcacd192c775”,“timestamp”:{“seconds”:“1606494812”,“nanos”:283720100},“attempt”:1}}, {“testStepStarted”:{“testStepId”:“b8c0f75c-ca23-43f3-a244-c232c5e05e7b”,“testCaseStartedId”:“565d2b4c-7da2-402a-a684-73ab44fe9aed”,“timestamp”:{“seconds”:“1606494812”,“nanos”:284052700}}}, {“testStepFinished”:{“testStepId”:“b8c0f75c-ca23-43f3-a244-c232c5e05e7b”,“testCaseStartedId”:“565d2b4c-7da2-402a-a684-73ab44fe9aed”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:14300}},“timestamp”:{“seconds”:“1606494812”,“nanos”:284253300}}}, {“testStepStarted”:{“testStepId”:“ba677d00-e70c-414c-9293-c133fac5e936”,“testCaseStartedId”:“565d2b4c-7da2-402a-a684-73ab44fe9aed”,“timestamp”:{“seconds”:“1606494812”,“nanos”:284464500}}}, {“testStepFinished”:{“testStepId”:“ba677d00-e70c-414c-9293-c133fac5e936”,“testCaseStartedId”:“565d2b4c-7da2-402a-a684-73ab44fe9aed”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:846500}},“timestamp”:{“seconds”:“1606494812”,“nanos”:285479700}}}, {“testStepStarted”:{“testStepId”:“37dc0f88-c81c-41b8-9183-33dde2558c74”,“testCaseStartedId”:“565d2b4c-7da2-402a-a684-73ab44fe9aed”,“timestamp”:{“seconds”:“1606494812”,“nanos”:285707700}}}, {“testStepFinished”:{“testStepId”:“37dc0f88-c81c-41b8-9183-33dde2558c74”,“testCaseStartedId”:“565d2b4c-7da2-402a-a684-73ab44fe9aed”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:14600}},“timestamp”:{“seconds”:“1606494812”,“nanos”:285882200}}}, {“testStepStarted”:{“testStepId”:“d9400300-9771-4798-86e1-06ff800977bf”,“testCaseStartedId”:“565d2b4c-7da2-402a-a684-73ab44fe9aed”,“timestamp”:{“seconds”:“1606494812”,“nanos”:286076300}}}, {“testStepFinished”:{“testStepId”:“d9400300-9771-4798-86e1-06ff800977bf”,“testCaseStartedId”:“565d2b4c-7da2-402a-a684-73ab44fe9aed”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:13300}},“timestamp”:{“seconds”:“1606494812”,“nanos”:286240100}}}, {“testStepStarted”:{“testStepId”:“0afad2b0-6484-4eaf-a2ba-7a9422bd8160”,“testCaseStartedId”:“565d2b4c-7da2-402a-a684-73ab44fe9aed”,“timestamp”:{“seconds”:“1606494812”,“nanos”:286440100}}}, {“testStepFinished”:{“testStepId”:“0afad2b0-6484-4eaf-a2ba-7a9422bd8160”,“testCaseStartedId”:“565d2b4c-7da2-402a-a684-73ab44fe9aed”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:10700}},“timestamp”:{“seconds”:“1606494812”,“nanos”:286602500}}}, {“testStepStarted”:{“testStepId”:“63a50a4e-8425-484a-aca9-457e92d951ec”,“testCaseStartedId”:“565d2b4c-7da2-402a-a684-73ab44fe9aed”,“timestamp”:{“seconds”:“1606494812”,“nanos”:286797800}}}, {“testStepFinished”:{“testStepId”:“63a50a4e-8425-484a-aca9-457e92d951ec”,“testCaseStartedId”:“565d2b4c-7da2-402a-a684-73ab44fe9aed”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:14400}},“timestamp”:{“seconds”:“1606494812”,“nanos”:286960500}}}, {“testStepStarted”:{“testStepId”:“2ee788d8-204a-43d2-ae65-b787cf26ec86”,“testCaseStartedId”:“565d2b4c-7da2-402a-a684-73ab44fe9aed”,“timestamp”:{“seconds”:“1606494812”,“nanos”:287184800}}}, {“testStepFinished”:{“testStepId”:“2ee788d8-204a-43d2-ae65-b787cf26ec86”,“testCaseStartedId”:“565d2b4c-7da2-402a-a684-73ab44fe9aed”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:103470100}},“timestamp”:{“seconds”:“1606494812”,“nanos”:390904900}}}, {“testStepStarted”:{“testStepId”:“c13ea8c6-3da0-44ac-acf1-d90407a089fa”,“testCaseStartedId”:“565d2b4c-7da2-402a-a684-73ab44fe9aed”,“timestamp”:{“seconds”:“1606494812”,“nanos”:391165100}}}, {“testStepFinished”:{“testStepId”:“c13ea8c6-3da0-44ac-acf1-d90407a089fa”,“testCaseStartedId”:“565d2b4c-7da2-402a-a684-73ab44fe9aed”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:20804100}},“timestamp”:{“seconds”:“1606494812”,“nanos”:412179300}}}, {“testStepStarted”:{“testStepId”:“d9c6f191-acb8-4aed-8d44-37dacdcbfbaa”,“testCaseStartedId”:“565d2b4c-7da2-402a-a684-73ab44fe9aed”,“timestamp”:{“seconds”:“1606494812”,“nanos”:412428300}}}, {“testStepFinished”:{“testStepId”:“d9c6f191-acb8-4aed-8d44-37dacdcbfbaa”,“testCaseStartedId”:“565d2b4c-7da2-402a-a684-73ab44fe9aed”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:8252400}},“timestamp”:{“seconds”:“1606494812”,“nanos”:420889600}}}, {“testStepStarted”:{“testStepId”:“8cdfd863-bc82-4936-9261-07dd90bc93c6”,“testCaseStartedId”:“565d2b4c-7da2-402a-a684-73ab44fe9aed”,“timestamp”:{“seconds”:“1606494812”,“nanos”:421156000}}}, {“testStepFinished”:{“testStepId”:“8cdfd863-bc82-4936-9261-07dd90bc93c6”,“testCaseStartedId”:“565d2b4c-7da2-402a-a684-73ab44fe9aed”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:10467000}},“timestamp”:{“seconds”:“1606494812”,“nanos”:432810300}}}, {“testStepStarted”:{“testStepId”:“e7ebc489-01bd-42a0-8d3d-79a8899acdb7”,“testCaseStartedId”:“565d2b4c-7da2-402a-a684-73ab44fe9aed”,“timestamp”:{“seconds”:“1606494812”,“nanos”:433097100}}}, {“testStepFinished”:{“testStepId”:“e7ebc489-01bd-42a0-8d3d-79a8899acdb7”,“testCaseStartedId”:“565d2b4c-7da2-402a-a684-73ab44fe9aed”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:1135000}},“timestamp”:{“seconds”:“1606494812”,“nanos”:434770900}}}, {“testStepStarted”:{“testStepId”:“e7b3ce7e-f65a-411d-93cf-7bde343e41d0”,“testCaseStartedId”:“565d2b4c-7da2-402a-a684-73ab44fe9aed”,“timestamp”:{“seconds”:“1606494812”,“nanos”:435026100}}}, {“testStepFinished”:{“testStepId”:“e7b3ce7e-f65a-411d-93cf-7bde343e41d0”,“testCaseStartedId”:“565d2b4c-7da2-402a-a684-73ab44fe9aed”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:19701000}},“timestamp”:{“seconds”:“1606494812”,“nanos”:455353100}}}, {“testStepStarted”:{“testStepId”:“e5ae8de9-9a7f-4d2e-a132-f3cbaf5960c8”,“testCaseStartedId”:“565d2b4c-7da2-402a-a684-73ab44fe9aed”,“timestamp”:{“seconds”:“1606494812”,“nanos”:455621500}}}, {“testStepFinished”:{“testStepId”:“e5ae8de9-9a7f-4d2e-a132-f3cbaf5960c8”,“testCaseStartedId”:“565d2b4c-7da2-402a-a684-73ab44fe9aed”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:6737000}},“timestamp”:{“seconds”:“1606494812”,“nanos”:463523200}}}, {“testStepStarted”:{“testStepId”:“e417fb5c-3e46-4a6f-b2a9-1958080cf9a6”,“testCaseStartedId”:“565d2b4c-7da2-402a-a684-73ab44fe9aed”,“timestamp”:{“seconds”:“1606494812”,“nanos”:463824500}}}, {“testStepFinished”:{“testStepId”:“e417fb5c-3e46-4a6f-b2a9-1958080cf9a6”,“testCaseStartedId”:“565d2b4c-7da2-402a-a684-73ab44fe9aed”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:1134900}},“timestamp”:{“seconds”:“1606494812”,“nanos”:465545500}}}, {“testStepStarted”:{“testStepId”:“dc31c8f2-841c-404a-a3a8-872ac9ce1e80”,“testCaseStartedId”:“565d2b4c-7da2-402a-a684-73ab44fe9aed”,“timestamp”:{“seconds”:“1606494812”,“nanos”:465796000}}}, {“attachment”:{“testStepId”:“dc31c8f2-841c-404a-a3a8-872ac9ce1e80”,“testCaseStartedId”:“565d2b4c-7da2-402a-a684-73ab44fe9aed”,“mediaType”:“image/png”,“contentEncoding”:“BASE64”,“body”:“bG9nL3NjcmVlbnNob3RzL3JlY3VzYXJ1bWFzb2xpY2l0YW9lbm9lbmNvbnRyYXJvY3JlZGVuY2lhbWVudG9jb3JyZXNwb25kZW50ZS5wbmc=”}}, {“testStepFinished”:{“testStepId”:“dc31c8f2-841c-404a-a3a8-872ac9ce1e80”,“testCaseStartedId”:“565d2b4c-7da2-402a-a684-73ab44fe9aed”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:308200}},“timestamp”:{“seconds”:“1606494812”,“nanos”:466271700}}}, {“testStepStarted”:{“testStepId”:“f076eee2-77f6-4675-8ff0-00bc8931e8a7”,“testCaseStartedId”:“565d2b4c-7da2-402a-a684-73ab44fe9aed”,“timestamp”:{“seconds”:“1606494812”,“nanos”:466458800}}}, {“testStepFinished”:{“testStepId”:“f076eee2-77f6-4675-8ff0-00bc8931e8a7”,“testCaseStartedId”:“565d2b4c-7da2-402a-a684-73ab44fe9aed”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:17400}},“timestamp”:{“seconds”:“1606494812”,“nanos”:466654600}}}, {“testStepStarted”:{“testStepId”:“f71dce88-776a-4767-a32f-e7a65da59b69”,“testCaseStartedId”:“565d2b4c-7da2-402a-a684-73ab44fe9aed”,“timestamp”:{“seconds”:“1606494812”,“nanos”:466825100}}}, {“testStepFinished”:{“testStepId”:“f71dce88-776a-4767-a32f-e7a65da59b69”,“testCaseStartedId”:“565d2b4c-7da2-402a-a684-73ab44fe9aed”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:437800}},“timestamp”:{“seconds”:“1606494812”,“nanos”:467421700}}}, {“testStepStarted”:{“testStepId”:“3d0fa0c0-a28d-4d08-b2bd-f80ba3f79902”,“testCaseStartedId”:“565d2b4c-7da2-402a-a684-73ab44fe9aed”,“timestamp”:{“seconds”:“1606494812”,“nanos”:467680800}}}, {“testStepFinished”:{“testStepId”:“3d0fa0c0-a28d-4d08-b2bd-f80ba3f79902”,“testCaseStartedId”:“565d2b4c-7da2-402a-a684-73ab44fe9aed”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:23300}},“timestamp”:{“seconds”:“1606494812”,“nanos”:467876100}}}, {“testCaseFinished”:{“testCaseStartedId”:“565d2b4c-7da2-402a-a684-73ab44fe9aed”,“timestamp”:{“seconds”:“1606494812”,“nanos”:468103200}}}, {“testCaseStarted”:{“id”:“fa03ce71-568b-41d0-ba85-2c9b21011049”,“testCaseId”:“eea7a04e-abf0-48e6-9841-66bf3e6593ee”,“timestamp”:{“seconds”:“1606494812”,“nanos”:469699300},“attempt”:1}}, {“testStepStarted”:{“testStepId”:“46d330f7-73c4-4802-84d2-abcb2c867bfe”,“testCaseStartedId”:“fa03ce71-568b-41d0-ba85-2c9b21011049”,“timestamp”:{“seconds”:“1606494812”,“nanos”:470090800}}}, {“testStepFinished”:{“testStepId”:“46d330f7-73c4-4802-84d2-abcb2c867bfe”,“testCaseStartedId”:“fa03ce71-568b-41d0-ba85-2c9b21011049”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:16900}},“timestamp”:{“seconds”:“1606494812”,“nanos”:470300500}}}, {“testStepStarted”:{“testStepId”:“cb9f5d5a-4312-4197-b27e-b0ce8ecba281”,“testCaseStartedId”:“fa03ce71-568b-41d0-ba85-2c9b21011049”,“timestamp”:{“seconds”:“1606494812”,“nanos”:470488400}}}, {“testStepFinished”:{“testStepId”:“cb9f5d5a-4312-4197-b27e-b0ce8ecba281”,“testCaseStartedId”:“fa03ce71-568b-41d0-ba85-2c9b21011049”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:854900}},“timestamp”:{“seconds”:“1606494812”,“nanos”:471495700}}}, {“testStepStarted”:{“testStepId”:“0c5193c1-e67d-4842-b55e-14bdbb3c7080”,“testCaseStartedId”:“fa03ce71-568b-41d0-ba85-2c9b21011049”,“timestamp”:{“seconds”:“1606494812”,“nanos”:471709700}}}, {“testStepFinished”:{“testStepId”:“0c5193c1-e67d-4842-b55e-14bdbb3c7080”,“testCaseStartedId”:“fa03ce71-568b-41d0-ba85-2c9b21011049”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:15300}},“timestamp”:{“seconds”:“1606494812”,“nanos”:471872800}}}, {“testStepStarted”:{“testStepId”:“52a03e6d-ffb0-492e-8a04-c779b80c7488”,“testCaseStartedId”:“fa03ce71-568b-41d0-ba85-2c9b21011049”,“timestamp”:{“seconds”:“1606494812”,“nanos”:472054700}}}, {“testStepFinished”:{“testStepId”:“52a03e6d-ffb0-492e-8a04-c779b80c7488”,“testCaseStartedId”:“fa03ce71-568b-41d0-ba85-2c9b21011049”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:12700}},“timestamp”:{“seconds”:“1606494812”,“nanos”:472208600}}}, {“testStepStarted”:{“testStepId”:“989a4d2a-2eb0-44f0-ba68-5ef970e10189”,“testCaseStartedId”:“fa03ce71-568b-41d0-ba85-2c9b21011049”,“timestamp”:{“seconds”:“1606494812”,“nanos”:472396400}}}, {“testStepFinished”:{“testStepId”:“989a4d2a-2eb0-44f0-ba68-5ef970e10189”,“testCaseStartedId”:“fa03ce71-568b-41d0-ba85-2c9b21011049”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:10000}},“timestamp”:{“seconds”:“1606494812”,“nanos”:472544800}}}, {“testStepStarted”:{“testStepId”:“04f12714-2233-4914-84d3-76bd8615005a”,“testCaseStartedId”:“fa03ce71-568b-41d0-ba85-2c9b21011049”,“timestamp”:{“seconds”:“1606494812”,“nanos”:472727000}}}, {“testStepFinished”:{“testStepId”:“04f12714-2233-4914-84d3-76bd8615005a”,“testCaseStartedId”:“fa03ce71-568b-41d0-ba85-2c9b21011049”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:14600}},“timestamp”:{“seconds”:“1606494812”,“nanos”:472880500}}}, {“testStepStarted”:{“testStepId”:“290d1118-7ae3-4d34-864f-61802261b872”,“testCaseStartedId”:“fa03ce71-568b-41d0-ba85-2c9b21011049”,“timestamp”:{“seconds”:“1606494812”,“nanos”:473062400}}}, {“testStepFinished”:{“testStepId”:“290d1118-7ae3-4d34-864f-61802261b872”,“testCaseStartedId”:“fa03ce71-568b-41d0-ba85-2c9b21011049”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:24972600}},“timestamp”:{“seconds”:“1606494812”,“nanos”:499200300}}}, {“testStepStarted”:{“testStepId”:“c6344377-0ab3-46c6-9986-3fcb2548c837”,“testCaseStartedId”:“fa03ce71-568b-41d0-ba85-2c9b21011049”,“timestamp”:{“seconds”:“1606494812”,“nanos”:499482400}}}, {“testStepFinished”:{“testStepId”:“c6344377-0ab3-46c6-9986-3fcb2548c837”,“testCaseStartedId”:“fa03ce71-568b-41d0-ba85-2c9b21011049”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:15262900}},“timestamp”:{“seconds”:“1606494812”,“nanos”:515315900}}}, {“testStepStarted”:{“testStepId”:“37f94ebe-8309-42b8-b071-7a9c9a34c062”,“testCaseStartedId”:“fa03ce71-568b-41d0-ba85-2c9b21011049”,“timestamp”:{“seconds”:“1606494812”,“nanos”:516034500}}}, {“testStepFinished”:{“testStepId”:“37f94ebe-8309-42b8-b071-7a9c9a34c062”,“testCaseStartedId”:“fa03ce71-568b-41d0-ba85-2c9b21011049”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:18696600}},“timestamp”:{“seconds”:“1606494812”,“nanos”:535377100}}}, {“testStepStarted”:{“testStepId”:“c3ecae4f-4c0f-4dfe-a0df-2c2cb44a58ab”,“testCaseStartedId”:“fa03ce71-568b-41d0-ba85-2c9b21011049”,“timestamp”:{“seconds”:“1606494812”,“nanos”:535646300}}}, {“testStepFinished”:{“testStepId”:“c3ecae4f-4c0f-4dfe-a0df-2c2cb44a58ab”,“testCaseStartedId”:“fa03ce71-568b-41d0-ba85-2c9b21011049”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:1424000}},“timestamp”:{“seconds”:“1606494812”,“nanos”:537831500}}}, {“testStepStarted”:{“testStepId”:“261c7ea3-c0a7-40d0-a2de-35b9865a7e64”,“testCaseStartedId”:“fa03ce71-568b-41d0-ba85-2c9b21011049”,“timestamp”:{“seconds”:“1606494812”,“nanos”:538093100}}}, {“testStepFinished”:{“testStepId”:“261c7ea3-c0a7-40d0-a2de-35b9865a7e64”,“testCaseStartedId”:“fa03ce71-568b-41d0-ba85-2c9b21011049”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:935100}},“timestamp”:{“seconds”:“1606494812”,“nanos”:539571700}}}, {“testStepStarted”:{“testStepId”:“dd35fb52-2834-46e4-a99c-223f6a282244”,“testCaseStartedId”:“fa03ce71-568b-41d0-ba85-2c9b21011049”,“timestamp”:{“seconds”:“1606494812”,“nanos”:539828200}}}, {“testStepFinished”:{“testStepId”:“dd35fb52-2834-46e4-a99c-223f6a282244”,“testCaseStartedId”:“fa03ce71-568b-41d0-ba85-2c9b21011049”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:66987200}},“timestamp”:{“seconds”:“1606494812”,“nanos”:607897700}}}, {“testStepStarted”:{“testStepId”:“51eb3f27-941e-4457-a62a-54e636974a30”,“testCaseStartedId”:“fa03ce71-568b-41d0-ba85-2c9b21011049”,“timestamp”:{“seconds”:“1606494812”,“nanos”:608177800}}}, {“testStepFinished”:{“testStepId”:“51eb3f27-941e-4457-a62a-54e636974a30”,“testCaseStartedId”:“fa03ce71-568b-41d0-ba85-2c9b21011049”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:874400}},“timestamp”:{“seconds”:“1606494812”,“nanos”:609795100}}}, {“testStepStarted”:{“testStepId”:“72369ab1-28f5-429c-8500-691c70144305”,“testCaseStartedId”:“fa03ce71-568b-41d0-ba85-2c9b21011049”,“timestamp”:{“seconds”:“1606494812”,“nanos”:610225700}}}, {“attachment”:{“testStepId”:“72369ab1-28f5-429c-8500-691c70144305”,“testCaseStartedId”:“fa03ce71-568b-41d0-ba85-2c9b21011049”,“mediaType”:“image/png”,“contentEncoding”:“BASE64”,“body”:“bG9nL3NjcmVlbnNob3RzL3JlcXVpc2l0b3Ntb2RpZmljYWRvc2NvbXN1Y2Vzc28ucG5n”}}, {“testStepFinished”:{“testStepId”:“72369ab1-28f5-429c-8500-691c70144305”,“testCaseStartedId”:“fa03ce71-568b-41d0-ba85-2c9b21011049”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:396300}},“timestamp”:{“seconds”:“1606494812”,“nanos”:610837900}}}, {“testStepStarted”:{“testStepId”:“0ca42d6c-d574-48c7-9f2a-1ce39066829a”,“testCaseStartedId”:“fa03ce71-568b-41d0-ba85-2c9b21011049”,“timestamp”:{“seconds”:“1606494812”,“nanos”:611104900}}}, {“testStepFinished”:{“testStepId”:“0ca42d6c-d574-48c7-9f2a-1ce39066829a”,“testCaseStartedId”:“fa03ce71-568b-41d0-ba85-2c9b21011049”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:23100}},“timestamp”:{“seconds”:“1606494812”,“nanos”:611285300}}}, {“testStepStarted”:{“testStepId”:“d770e9d1-e33a-468e-ab08-777bd6ec94cf”,“testCaseStartedId”:“fa03ce71-568b-41d0-ba85-2c9b21011049”,“timestamp”:{“seconds”:“1606494812”,“nanos”:611638800}}}, {“testStepFinished”:{“testStepId”:“d770e9d1-e33a-468e-ab08-777bd6ec94cf”,“testCaseStartedId”:“fa03ce71-568b-41d0-ba85-2c9b21011049”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:692400}},“timestamp”:{“seconds”:“1606494812”,“nanos”:612505800}}}, {“testStepStarted”:{“testStepId”:“dcbdaa84-3877-4fde-bc82-868108584c16”,“testCaseStartedId”:“fa03ce71-568b-41d0-ba85-2c9b21011049”,“timestamp”:{“seconds”:“1606494812”,“nanos”:612727900}}}, {“testStepFinished”:{“testStepId”:“dcbdaa84-3877-4fde-bc82-868108584c16”,“testCaseStartedId”:“fa03ce71-568b-41d0-ba85-2c9b21011049”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:17100}},“timestamp”:{“seconds”:“1606494812”,“nanos”:612879900}}}, {“testCaseFinished”:{“testCaseStartedId”:“fa03ce71-568b-41d0-ba85-2c9b21011049”,“timestamp”:{“seconds”:“1606494812”,“nanos”:613090900}}}, {“testCaseStarted”:{“id”:“c6b0da87-1ace-444a-aa26-d878c5039898”,“testCaseId”:“8ec8d5b2-1b07-4d90-aefa-1105a68bf8d0”,“timestamp”:{“seconds”:“1606494812”,“nanos”:613964800},“attempt”:1}}, {“testStepStarted”:{“testStepId”:“4d041d09-63fe-4f61-a7ce-5efff55cab27”,“testCaseStartedId”:“c6b0da87-1ace-444a-aa26-d878c5039898”,“timestamp”:{“seconds”:“1606494812”,“nanos”:614279500}}}, {“testStepFinished”:{“testStepId”:“4d041d09-63fe-4f61-a7ce-5efff55cab27”,“testCaseStartedId”:“c6b0da87-1ace-444a-aa26-d878c5039898”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:15000}},“timestamp”:{“seconds”:“1606494812”,“nanos”:614473400}}}, {“testStepStarted”:{“testStepId”:“d874af46-c4d0-4420-9c56-ec401d56eb96”,“testCaseStartedId”:“c6b0da87-1ace-444a-aa26-d878c5039898”,“timestamp”:{“seconds”:“1606494812”,“nanos”:614659100}}}, {“testStepFinished”:{“testStepId”:“d874af46-c4d0-4420-9c56-ec401d56eb96”,“testCaseStartedId”:“c6b0da87-1ace-444a-aa26-d878c5039898”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:935000}},“timestamp”:{“seconds”:“1606494812”,“nanos”:615758600}}}, {“testStepStarted”:{“testStepId”:“29773482-3bc3-49f1-8438-cea1799e7278”,“testCaseStartedId”:“c6b0da87-1ace-444a-aa26-d878c5039898”,“timestamp”:{“seconds”:“1606494812”,“nanos”:615968200}}}, {“testStepFinished”:{“testStepId”:“29773482-3bc3-49f1-8438-cea1799e7278”,“testCaseStartedId”:“c6b0da87-1ace-444a-aa26-d878c5039898”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:16000}},“timestamp”:{“seconds”:“1606494812”,“nanos”:616118300}}}, {“testStepStarted”:{“testStepId”:“f6b73e84-d5b7-482e-b39f-c62bafe27837”,“testCaseStartedId”:“c6b0da87-1ace-444a-aa26-d878c5039898”,“timestamp”:{“seconds”:“1606494812”,“nanos”:616274900}}}, {“testStepFinished”:{“testStepId”:“f6b73e84-d5b7-482e-b39f-c62bafe27837”,“testCaseStartedId”:“c6b0da87-1ace-444a-aa26-d878c5039898”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:12400}},“timestamp”:{“seconds”:“1606494812”,“nanos”:616413700}}}, {“testStepStarted”:{“testStepId”:“33345871-1a4f-4057-bc38-1334be373c58”,“testCaseStartedId”:“c6b0da87-1ace-444a-aa26-d878c5039898”,“timestamp”:{“seconds”:“1606494812”,“nanos”:616577200}}}, {“testStepFinished”:{“testStepId”:“33345871-1a4f-4057-bc38-1334be373c58”,“testCaseStartedId”:“c6b0da87-1ace-444a-aa26-d878c5039898”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:9600}},“timestamp”:{“seconds”:“1606494812”,“nanos”:616707100}}}, {“testStepStarted”:{“testStepId”:“6d51eb29-7bf3-457c-a212-f072ceb232d9”,“testCaseStartedId”:“c6b0da87-1ace-444a-aa26-d878c5039898”,“timestamp”:{“seconds”:“1606494812”,“nanos”:616863600}}}, {“testStepFinished”:{“testStepId”:“6d51eb29-7bf3-457c-a212-f072ceb232d9”,“testCaseStartedId”:“c6b0da87-1ace-444a-aa26-d878c5039898”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:13700}},“timestamp”:{“seconds”:“1606494812”,“nanos”:616996900}}}, {“testStepStarted”:{“testStepId”:“20ce0618-fbbd-4a0e-ab94-81a775199c13”,“testCaseStartedId”:“c6b0da87-1ace-444a-aa26-d878c5039898”,“timestamp”:{“seconds”:“1606494812”,“nanos”:617145200}}}, {“testStepFinished”:{“testStepId”:“20ce0618-fbbd-4a0e-ab94-81a775199c13”,“testCaseStartedId”:“c6b0da87-1ace-444a-aa26-d878c5039898”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:21425500}},“timestamp”:{“seconds”:“1606494812”,“nanos”:638760100}}}, {“testStepStarted”:{“testStepId”:“1febd08d-870a-4767-aff0-2d97644539fb”,“testCaseStartedId”:“c6b0da87-1ace-444a-aa26-d878c5039898”,“timestamp”:{“seconds”:“1606494812”,“nanos”:639013100}}}, {“testStepFinished”:{“testStepId”:“1febd08d-870a-4767-aff0-2d97644539fb”,“testCaseStartedId”:“c6b0da87-1ace-444a-aa26-d878c5039898”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:5375800}},“timestamp”:{“seconds”:“1606494812”,“nanos”:644627600}}}, {“testStepStarted”:{“testStepId”:“11b405f6-1818-4fa9-a316-0fa399563904”,“testCaseStartedId”:“c6b0da87-1ace-444a-aa26-d878c5039898”,“timestamp”:{“seconds”:“1606494812”,“nanos”:644907000}}}, {“testStepFinished”:{“testStepId”:“11b405f6-1818-4fa9-a316-0fa399563904”,“testCaseStartedId”:“c6b0da87-1ace-444a-aa26-d878c5039898”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:5371300}},“timestamp”:{“seconds”:“1606494812”,“nanos”:651326500}}}, {“testStepStarted”:{“testStepId”:“dbf5f257-cf62-4b09-b206-064640f4afdf”,“testCaseStartedId”:“c6b0da87-1ace-444a-aa26-d878c5039898”,“timestamp”:{“seconds”:“1606494812”,“nanos”:651604400}}}, {“testStepFinished”:{“testStepId”:“dbf5f257-cf62-4b09-b206-064640f4afdf”,“testCaseStartedId”:“c6b0da87-1ace-444a-aa26-d878c5039898”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:1171600}},“timestamp”:{“seconds”:“1606494812”,“nanos”:653337100}}}, {“testStepStarted”:{“testStepId”:“e9a8ad7b-6cb7-4ecb-85d4-22711c3250b3”,“testCaseStartedId”:“c6b0da87-1ace-444a-aa26-d878c5039898”,“timestamp”:{“seconds”:“1606494812”,“nanos”:653590000}}}, {“testStepFinished”:{“testStepId”:“e9a8ad7b-6cb7-4ecb-85d4-22711c3250b3”,“testCaseStartedId”:“c6b0da87-1ace-444a-aa26-d878c5039898”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:36157900}},“timestamp”:{“seconds”:“1606494812”,“nanos”:690816000}}}, {“testStepStarted”:{“testStepId”:“321f3090-bb13-46cc-bc97-45b33e33d12a”,“testCaseStartedId”:“c6b0da87-1ace-444a-aa26-d878c5039898”,“timestamp”:{“seconds”:“1606494812”,“nanos”:691131100}}}, {“testStepFinished”:{“testStepId”:“321f3090-bb13-46cc-bc97-45b33e33d12a”,“testCaseStartedId”:“c6b0da87-1ace-444a-aa26-d878c5039898”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:767600}},“timestamp”:{“seconds”:“1606494812”,“nanos”:692423000}}}, {“testStepStarted”:{“testStepId”:“268aeec1-dc9e-495a-9402-657623c209fd”,“testCaseStartedId”:“c6b0da87-1ace-444a-aa26-d878c5039898”,“timestamp”:{“seconds”:“1606494812”,“nanos”:692659900}}}, {“attachment”:{“testStepId”:“268aeec1-dc9e-495a-9402-657623c209fd”,“testCaseStartedId”:“c6b0da87-1ace-444a-aa26-d878c5039898”,“mediaType”:“image/png”,“contentEncoding”:“BASE64”,“body”:“bG9nL3NjcmVlbnNob3RzL3JlcXVpc2l0b3Nub21vZGlmaWNhZG9zY2FtcG9vYnJpZ2F0cmlvZW1icmFuY28ucG5n”}}, {“testStepFinished”:{“testStepId”:“268aeec1-dc9e-495a-9402-657623c209fd”,“testCaseStartedId”:“c6b0da87-1ace-444a-aa26-d878c5039898”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:991700}},“timestamp”:{“seconds”:“1606494812”,“nanos”:693955600}}}, {“testStepStarted”:{“testStepId”:“7861a7f0-0173-4f67-90df-d3380efc5398”,“testCaseStartedId”:“c6b0da87-1ace-444a-aa26-d878c5039898”,“timestamp”:{“seconds”:“1606494812”,“nanos”:694475600}}}, {“testStepFinished”:{“testStepId”:“7861a7f0-0173-4f67-90df-d3380efc5398”,“testCaseStartedId”:“c6b0da87-1ace-444a-aa26-d878c5039898”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:27500}},“timestamp”:{“seconds”:“1606494812”,“nanos”:694715300}}}, {“testStepStarted”:{“testStepId”:“0ba27819-52f3-4dfa-a09a-a7cf0cc40a9e”,“testCaseStartedId”:“c6b0da87-1ace-444a-aa26-d878c5039898”,“timestamp”:{“seconds”:“1606494812”,“nanos”:695113800}}}, {“testStepFinished”:{“testStepId”:“0ba27819-52f3-4dfa-a09a-a7cf0cc40a9e”,“testCaseStartedId”:“c6b0da87-1ace-444a-aa26-d878c5039898”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:1564000}},“timestamp”:{“seconds”:“1606494812”,“nanos”:697033500}}}, {“testStepStarted”:{“testStepId”:“1d6cf6fd-46f1-48a5-adfd-82b2abdf355f”,“testCaseStartedId”:“c6b0da87-1ace-444a-aa26-d878c5039898”,“timestamp”:{“seconds”:“1606494812”,“nanos”:697336300}}}, {“testStepFinished”:{“testStepId”:“1d6cf6fd-46f1-48a5-adfd-82b2abdf355f”,“testCaseStartedId”:“c6b0da87-1ace-444a-aa26-d878c5039898”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:20900}},“timestamp”:{“seconds”:“1606494812”,“nanos”:697584200}}}, {“testCaseFinished”:{“testCaseStartedId”:“c6b0da87-1ace-444a-aa26-d878c5039898”,“timestamp”:{“seconds”:“1606494812”,“nanos”:716867600}}}, {“testCaseStarted”:{“id”:“e1a7da05-fea1-4bba-8837-a9f064fd447f”,“testCaseId”:“cd512130-72a0-402e-864c-0e9f5a9a7ea7”,“timestamp”:{“seconds”:“1606494812”,“nanos”:718178500},“attempt”:1}}, {“testStepStarted”:{“testStepId”:“3cd60a17-7e62-4c02-8e9d-75f2e8052011”,“testCaseStartedId”:“e1a7da05-fea1-4bba-8837-a9f064fd447f”,“timestamp”:{“seconds”:“1606494812”,“nanos”:718561100}}}, {“testStepFinished”:{“testStepId”:“3cd60a17-7e62-4c02-8e9d-75f2e8052011”,“testCaseStartedId”:“e1a7da05-fea1-4bba-8837-a9f064fd447f”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:17000}},“timestamp”:{“seconds”:“1606494812”,“nanos”:718797100}}}, {“testStepStarted”:{“testStepId”:“8c230165-5167-4d2a-bd16-ada0e817d25d”,“testCaseStartedId”:“e1a7da05-fea1-4bba-8837-a9f064fd447f”,“timestamp”:{“seconds”:“1606494812”,“nanos”:719032500}}}, {“testStepFinished”:{“testStepId”:“8c230165-5167-4d2a-bd16-ada0e817d25d”,“testCaseStartedId”:“e1a7da05-fea1-4bba-8837-a9f064fd447f”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:853300}},“timestamp”:{“seconds”:“1606494812”,“nanos”:720096700}}}, {“testStepStarted”:{“testStepId”:“0778aeda-4678-4ba0-a021-8b5150a2980b”,“testCaseStartedId”:“e1a7da05-fea1-4bba-8837-a9f064fd447f”,“timestamp”:{“seconds”:“1606494812”,“nanos”:720339800}}}, {“testStepFinished”:{“testStepId”:“0778aeda-4678-4ba0-a021-8b5150a2980b”,“testCaseStartedId”:“e1a7da05-fea1-4bba-8837-a9f064fd447f”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:15900}},“timestamp”:{“seconds”:“1606494812”,“nanos”:720519500}}}, {“testStepStarted”:{“testStepId”:“700cb6ea-0915-43c0-a860-59d050ac826c”,“testCaseStartedId”:“e1a7da05-fea1-4bba-8837-a9f064fd447f”,“timestamp”:{“seconds”:“1606494812”,“nanos”:720719000}}}, {“testStepFinished”:{“testStepId”:“700cb6ea-0915-43c0-a860-59d050ac826c”,“testCaseStartedId”:“e1a7da05-fea1-4bba-8837-a9f064fd447f”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:13100}},“timestamp”:{“seconds”:“1606494812”,“nanos”:720888000}}}, {“testStepStarted”:{“testStepId”:“c6b575de-5731-4935-88ea-1edd1d2bcbc7”,“testCaseStartedId”:“e1a7da05-fea1-4bba-8837-a9f064fd447f”,“timestamp”:{“seconds”:“1606494812”,“nanos”:721114300}}}, {“testStepFinished”:{“testStepId”:“c6b575de-5731-4935-88ea-1edd1d2bcbc7”,“testCaseStartedId”:“e1a7da05-fea1-4bba-8837-a9f064fd447f”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:10900}},“timestamp”:{“seconds”:“1606494812”,“nanos”:721278600}}}, {“testStepStarted”:{“testStepId”:“87206ef4-a304-4749-becb-9d14cb10ba32”,“testCaseStartedId”:“e1a7da05-fea1-4bba-8837-a9f064fd447f”,“timestamp”:{“seconds”:“1606494812”,“nanos”:721477000}}}, {“testStepFinished”:{“testStepId”:“87206ef4-a304-4749-becb-9d14cb10ba32”,“testCaseStartedId”:“e1a7da05-fea1-4bba-8837-a9f064fd447f”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:14300}},“timestamp”:{“seconds”:“1606494812”,“nanos”:721640500}}}, {“testStepStarted”:{“testStepId”:“a35a085a-7353-4f9e-b8f1-dcf64dd20024”,“testCaseStartedId”:“e1a7da05-fea1-4bba-8837-a9f064fd447f”,“timestamp”:{“seconds”:“1606494812”,“nanos”:721835100}}}, {“testStepFinished”:{“testStepId”:“a35a085a-7353-4f9e-b8f1-dcf64dd20024”,“testCaseStartedId”:“e1a7da05-fea1-4bba-8837-a9f064fd447f”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:25622600}},“timestamp”:{“seconds”:“1606494812”,“nanos”:747680200}}}, {“testStepStarted”:{“testStepId”:“744263c1-4965-45de-a9a0-bba5fac5314b”,“testCaseStartedId”:“e1a7da05-fea1-4bba-8837-a9f064fd447f”,“timestamp”:{“seconds”:“1606494812”,“nanos”:747942200}}}, {“testStepFinished”:{“testStepId”:“744263c1-4965-45de-a9a0-bba5fac5314b”,“testCaseStartedId”:“e1a7da05-fea1-4bba-8837-a9f064fd447f”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:4720500}},“timestamp”:{“seconds”:“1606494812”,“nanos”:752902800}}}, {“testStepStarted”:{“testStepId”:“d9c113c7-ff2e-4e51-9ea2-630351b8775f”,“testCaseStartedId”:“e1a7da05-fea1-4bba-8837-a9f064fd447f”,“timestamp”:{“seconds”:“1606494812”,“nanos”:753169900}}}, {“testStepFinished”:{“testStepId”:“d9c113c7-ff2e-4e51-9ea2-630351b8775f”,“testCaseStartedId”:“e1a7da05-fea1-4bba-8837-a9f064fd447f”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:64378300}},“timestamp”:{“seconds”:“1606494812”,“nanos”:818107000}}}, {“testStepStarted”:{“testStepId”:“509f3efa-1014-4454-9270-3929a3984002”,“testCaseStartedId”:“e1a7da05-fea1-4bba-8837-a9f064fd447f”,“timestamp”:{“seconds”:“1606494812”,“nanos”:818408100}}}, {“testStepFinished”:{“testStepId”:“509f3efa-1014-4454-9270-3929a3984002”,“testCaseStartedId”:“e1a7da05-fea1-4bba-8837-a9f064fd447f”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:5163300}},“timestamp”:{“seconds”:“1606494812”,“nanos”:824238400}}}, {“testStepStarted”:{“testStepId”:“e1aabc42-246d-4e50-a0c2-d9f4f7874b62”,“testCaseStartedId”:“e1a7da05-fea1-4bba-8837-a9f064fd447f”,“timestamp”:{“seconds”:“1606494812”,“nanos”:824505900}}}, {“testStepFinished”:{“testStepId”:“e1aabc42-246d-4e50-a0c2-d9f4f7874b62”,“testCaseStartedId”:“e1a7da05-fea1-4bba-8837-a9f064fd447f”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:6373400}},“timestamp”:{“seconds”:“1606494812”,“nanos”:831548600}}}, {“testStepStarted”:{“testStepId”:“2872a24c-1b4f-49d5-a177-e0260de8adf3”,“testCaseStartedId”:“e1a7da05-fea1-4bba-8837-a9f064fd447f”,“timestamp”:{“seconds”:“1606494812”,“nanos”:831816400}}}, {“testStepFinished”:{“testStepId”:“2872a24c-1b4f-49d5-a177-e0260de8adf3”,“testCaseStartedId”:“e1a7da05-fea1-4bba-8837-a9f064fd447f”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:1189700}},“timestamp”:{“seconds”:“1606494812”,“nanos”:833666000}}}, {“testStepStarted”:{“testStepId”:“886ff138-9634-445f-b697-260f5f604192”,“testCaseStartedId”:“e1a7da05-fea1-4bba-8837-a9f064fd447f”,“timestamp”:{“seconds”:“1606494812”,“nanos”:833914000}}}, {“testStepFinished”:{“testStepId”:“886ff138-9634-445f-b697-260f5f604192”,“testCaseStartedId”:“e1a7da05-fea1-4bba-8837-a9f064fd447f”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:13192900}},“timestamp”:{“seconds”:“1606494812”,“nanos”:847796300}}}, {“testStepStarted”:{“testStepId”:“181ac8ce-0895-463a-9976-641931d427ee”,“testCaseStartedId”:“e1a7da05-fea1-4bba-8837-a9f064fd447f”,“timestamp”:{“seconds”:“1606494812”,“nanos”:848075600}}}, {“testStepFinished”:{“testStepId”:“181ac8ce-0895-463a-9976-641931d427ee”,“testCaseStartedId”:“e1a7da05-fea1-4bba-8837-a9f064fd447f”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:847000}},“timestamp”:{“seconds”:“1606494812”,“nanos”:849568100}}}, {“testStepStarted”:{“testStepId”:“65b4ae5c-9c2d-4a97-a686-da9594bb21c4”,“testCaseStartedId”:“e1a7da05-fea1-4bba-8837-a9f064fd447f”,“timestamp”:{“seconds”:“1606494812”,“nanos”:849823500}}}, {“attachment”:{“testStepId”:“65b4ae5c-9c2d-4a97-a686-da9594bb21c4”,“testCaseStartedId”:“e1a7da05-fea1-4bba-8837-a9f064fd447f”,“mediaType”:“image/png”,“contentEncoding”:“BASE64”,“body”:“bG9nL3NjcmVlbnNob3RzL3JlcXVpc2l0b3Nub21vZGlmaWNhZG9zcmVnaXN0cm9kdXBsaWNhZG8ucG5n”}}, {“testStepFinished”:{“testStepId”:“65b4ae5c-9c2d-4a97-a686-da9594bb21c4”,“testCaseStartedId”:“e1a7da05-fea1-4bba-8837-a9f064fd447f”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:296200}},“timestamp”:{“seconds”:“1606494812”,“nanos”:850286100}}}, {“testStepStarted”:{“testStepId”:“d0718a0b-4620-4905-9d9f-e355b96e6c83”,“testCaseStartedId”:“e1a7da05-fea1-4bba-8837-a9f064fd447f”,“timestamp”:{“seconds”:“1606494812”,“nanos”:850484900}}}, {“testStepFinished”:{“testStepId”:“d0718a0b-4620-4905-9d9f-e355b96e6c83”,“testCaseStartedId”:“e1a7da05-fea1-4bba-8837-a9f064fd447f”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:16600}},“timestamp”:{“seconds”:“1606494812”,“nanos”:850647800}}}, {“testStepStarted”:{“testStepId”:“735e787f-6a51-49ac-a0c9-983120d0766e”,“testCaseStartedId”:“e1a7da05-fea1-4bba-8837-a9f064fd447f”,“timestamp”:{“seconds”:“1606494812”,“nanos”:850832400}}}, {“testStepFinished”:{“testStepId”:“735e787f-6a51-49ac-a0c9-983120d0766e”,“testCaseStartedId”:“e1a7da05-fea1-4bba-8837-a9f064fd447f”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:495100}},“timestamp”:{“seconds”:“1606494812”,“nanos”:851478500}}}, {“testStepStarted”:{“testStepId”:“ca6e8558-e132-4f22-ba8c-0bfc7d240f5f”,“testCaseStartedId”:“e1a7da05-fea1-4bba-8837-a9f064fd447f”,“timestamp”:{“seconds”:“1606494812”,“nanos”:851725200}}}, {“testStepFinished”:{“testStepId”:“ca6e8558-e132-4f22-ba8c-0bfc7d240f5f”,“testCaseStartedId”:“e1a7da05-fea1-4bba-8837-a9f064fd447f”,“testStepResult”:{“status”:“PASSED”,“duration”:{“nanos”:13200}},“timestamp”:{“seconds”:“1606494812”,“nanos”:851889000}}}, {“testCaseFinished”:{“testCaseStartedId”:“e1a7da05-fea1-4bba-8837-a9f064fd447f”,“timestamp”:{“seconds”:“1606494812”,“nanos”:852126600}}}, {“testRunFinished”:{“timestamp”:{“seconds”:“1606494812”,“nanos”:854144200}}}]; </script> <script>

              + +

              !function(e){var t={};function n®{if(t)return t.exports;var i=t={i:r,l:!1,exports:{}};return e.call(i.exports,i,i.exports,n),i.l=!0,i.exports}n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){“undefined”!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:“Module”}),Object.defineProperty(e,“__esModule”,{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&“object”==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r®,Object.defineProperty(r,“default”,{enumerable:!0,value:e}),2&t&&“string”!=typeof e)for(var i in e)n.d(r,i,function(t){return e}.bind(null,i));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,“a”,t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p=“”,n(n.s=92)}([function(e,t,n){“use strict”;e.exports=n(132)},function(e,t,n){e.exports=n(154)()},function(e,t,n){“use strict”;var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n),Object.defineProperty(e,r,{enumerable:!0,get:function(){return t}})}:function(e,t,n,r){void 0===r&&(r=n),e=t}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,“default”,{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)“default”!==n&&Object.hasOwnProperty.call(e,n)&&r(t,e,n);return i(t,e),t},o=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,“__esModule”,{value:!0}),t.version=t.IdGenerator=t.TimeConversion=t.NdjsonToMessageStream=t.BinaryToMessageStream=t.MessageToNdjsonStream=t.MessageToBinaryStream=t.messages=void 0;var c=o(n(93));t.MessageToBinaryStream=c.default;var s=o(n(106));t.MessageToNdjsonStream=s.default;var u=o(n(107));t.BinaryToMessageStream=u.default;var l=o(n(125));t.NdjsonToMessageStream=l.default;var f=a(n(126));t.TimeConversion=f;var h=a(n(127));t.IdGenerator=h;var d=n(128).io.cucumber.messages;t.messages=d;var p=n(130);Object.defineProperty(t,“version”,{enumerable:!0,get:function(){return p.version}})},function(e,t,n){“use strict”;var r,i,a=e.exports=n(6),o=n(65);a.codegen=n(120),a.fetch=n(121),a.path=n(122),a.fs=a.inquire(“fs”),a.toArray=function(e){if(e){for(var t=Object.keys(e),n=new Array(t.length),r=0;r=e[t];return n}return[]},a.toObject=function(e){for(var t={},n=0;n<e.length;){var r=e,i=e;void 0!==i&&(t=i)}return t};var c=/\/g,s=/“/g;a.isReserved=function(e){return/^(?:do|if|in|for|let|new|try|var|case|else|enum|eval|false|null|this|true|void|with|break|catch|class|const|super|throw|while|yield|delete|export|import|public|return|static|switch|typeof|default|extends|finally|package|private|continue|debugger|function|arguments|interface|protected|implements|instanceof)$/.test(e)},a.safeProp=function(e){return!/^+$/.test(e)||a.isReserved(e)?‘':”.“+e},a.ucFirst=function(e){return e.charAt(0).toUpperCase()+e.substring(1)};var u=/_()/g;a.camelCase=function(e){return e.substring(0,1)+e.substring(1).replace(u,(function(e,t){return t.toUpperCase()}))},a.compareFieldsById=function(e,t){return e.id-t.id},a.decorateType=function(e,t){if(e.$type)return t&&e.$type.name!==t&&(a.decorateRoot.remove(e.$type),e.$type.name=t,a.decorateRoot.add(e.$type)),e.$type;r||(r=n(42));var i=new r(t||e.name);return a.decorateRoot.add(i),i.ctor=e,Object.defineProperty(e,”$type“,{value:i,enumerable:!1}),Object.defineProperty(e.prototype,”$type“,{value:i,enumerable:!1}),i};var l=0;a.decorateEnum=function(e){if(e.$type)return e.$type;i||(i=n(5));var t=new i(”Enum“l+,e);return a.decorateRoot.add(t),Object.defineProperty(e,”$type“,{value:t,enumerable:!1}),t},a.setProperty=function(e,t,n){if(”object“!=typeof e)throw TypeError(”dst must be an object“);if(!t)throw TypeError(”path must be specified“);return function e(t,n,r){var i=n.shift();if(n.length>0)t=e(t||{},n,r);else{var a=t;a&&(r=[].concat(a).concat®),t=r}return t}(e,t=t.split(”.“),n)},Object.defineProperty(a,”decorateRoot“,{get:function(){return o.decorated||(o.decorated=new(n(47)))}})},function(e,t){var n;n=function(){return this}();try{n=n||new Function(”return this“)()}catch(e){”object“==typeof window&&(n=window)}e.exports=n},function(e,t,n){”use strict“;e.exports=o;var r=n(16);((o.prototype=Object.create(r.prototype)).constructor=o).className=”Enum“;var i=n(21),a=n(3);function o(e,t,n,i,a){if(r.call(this,e,n),t&&”object“!=typeof t)throw TypeError(”values must be an object“);if(this.valuesById={},this.values=Object.create(this.valuesById),this.comment=i,this.comments=a||{},this.reserved=void 0,t)for(var o=Object.keys(t),c=0;c<o.length;++c)”number“==typeof t[o]&&(this.valuesById[this.values[o]=t[o]]=o)}o.fromJSON=function(e,t){var n=new o(e,t.values,t.options,t.comment,t.comments);return n.reserved=t.reserved,n},o.prototype.toJSON=function(e){var t=!!e&&Boolean(e.keepComments);return a.toObject([”options“,this.options,”values“,this.values,”reserved“,this.reserved&&this.reserved.length?this.reserved:void 0,”comment“,t?this.comment:void 0,”comments“,t?this.comments:void 0])},o.prototype.add=function(e,t,n){if(!a.isString(e))throw TypeError(”name must be a string“);if(!a.isInteger(t))throw TypeError(”id must be an integer“);if(void 0!==this.values)throw Error(”duplicate name '“e”' in “+this);if(this.isReservedId(t))throw Error(”id “t” is reserved in “+this);if(this.isReservedName(e))throw Error(”name '“e”' is reserved in “+this);if(void 0!==this.valuesById){if(!this.options||!this.options.allow_alias)throw Error(”duplicate id “t” in “+this);this.values=t}else this.valuesById[this.values=t]=e;return this.comments=n||null,this},o.prototype.remove=function(e){if(!a.isString(e))throw TypeError(”name must be a string“);var t=this.values;if(null==t)throw Error(”name '“e”' does not exist in “+this);return delete this.valuesById,delete this.values,delete this.comments,this},o.prototype.isReservedId=function(e){return i.isReservedId(this.reserved,e)},o.prototype.isReservedName=function(e){return i.isReservedName(this.reserved,e)}},function(e,t,n){”use strict“;(function(e){var r=t;function i(e,t,n){for(var r=Object.keys(t),i=0;i<r.length;++i)void 0!==e[r]&&n||(e[r]=t[r]);return e}function a(e){function t(e,n){if(!(this instanceof t))return new t(e,n);Object.defineProperty(this,”message“,{get:function(){return e}}),Error.captureStackTrace?Error.captureStackTrace(this,t):Object.defineProperty(this,”stack“,{value:(new Error).stack||”“}),n&&i(this,n)}return(t.prototype=Object.create(Error.prototype)).constructor=t,Object.defineProperty(t.prototype,”name“,{get:function(){return e}}),t.prototype.toString=function(){return this.name+”: “+this.message},t}r.asPromise=n(62),r.base64=n(111),r.EventEmitter=n(112),r.float=n(113),r.inquire=n(63),r.utf8=n(114),r.pool=n(115),r.LongBits=n(116),r.isNode=Boolean(void 0!==e&&e&&e.process&&e.process.versions&&e.process.versions.node),r.global=r.isNode&&e||”undefined“!=typeof window&&window||”undefined“!=typeof self&&self||this,r.emptyArray=Object.freeze?Object.freeze([]):,r.emptyObject=Object.freeze?Object.freeze({}):{},r.isInteger=Number.isInteger||function(e){return”number“==typeof e&&isFinite(e)&&Math.floor(e)===e},r.isString=function(e){return”string“==typeof e||e instanceof String},r.isObject=function(e){return e&&”object“==typeof e},r.isset=r.isSet=function(e,t){var n=e;return!(null==n||!e.hasOwnProperty(t))&&(”object“!=typeof n||(Array.isArray(n)?n.length:Object.keys(n).length)>0)},r.Buffer=function(){try{var e=r.inquire(”buffer“).Buffer;return e.prototype.utf8Write?e:null}catch(e){return null}}(),r._Buffer_from=null,r._Buffer_allocUnsafe=null,r.newBuffer=function(e){return”number“==typeof e?r.Buffer?r._Buffer_allocUnsafe(e):new r.Array(e):r.Buffer?r._Buffer_from(e):”undefined“==typeof Uint8Array?e:new Uint8Array(e)},r.Array=”undefined“!=typeof Uint8Array?Uint8Array:Array,r.Long=r.global.dcodeIO&&r.global.dcodeIO.Long||r.global.Long||r.inquire(”long“),r.key2Re=/^true|false|0|1$/,r.key32Re=/^-?(?:0|[0-9]*)$/,r.key64Re=/^(?:{8}|-?(?:0|[0-9]*))$/,r.longToHash=function(e){return e?r.LongBits.from(e).toHash():r.LongBits.zeroHash},r.longFromHash=function(e,t){var n=r.LongBits.fromHash(e);return r.Long?r.Long.fromBits(n.lo,n.hi,t):n.toNumber(Boolean(t))},r.merge=i,r.lcFirst=function(e){return e.charAt(0).toLowerCase()+e.substring(1)},r.newError=a,r.ProtocolError=a(”ProtocolError“),r.oneOfGetter=function(e){for(var t={},n=0;n]=1;return function(){for(var e=Object.keys(this),n=e.length-1;n>-1;–n)if(1===t[e]&&void 0!==this[e]&&null!==this[e])return e}},r.oneOfSetter=function(e){return function(t){for(var n=0;n!==t&&delete this[e]}},r.toJSONOptions={longs:String,enums:String,bytes:String,json:!0},r._configure=function(){var e=r.Buffer;e?(r._Buffer_from=e.from!==Uint8Array.from&&e.from||function(t,n){return new e(t,n)},r._Buffer_allocUnsafe=e.allocUnsafe||function(t){return new e(t)}):r._Buffer_from=r._Buffer_allocUnsafe=null}}).call(this,n(4))},function(e,t,n){e.exports=i;var r=n(37).EventEmitter;function i(){r.call(this)}n(15)(i,r),i.Readable=n(38),i.Writable=n(102),i.Duplex=n(103),i.Transform=n(104),i.PassThrough=n(105),i.Stream=i,i.prototype.pipe=function(e,t){var n=this;function i(t){e.writable&&!1===e.write(t)&&n.pause&&n.pause()}function a(){n.readable&&n.resume&&n.resume()}n.on(”data“,i),e.on(”drain“,a),e._isStdio||t&&!1===t.end||(n.on(”end“,c),n.on(”close“,s));var o=!1;function c(){o||(o=!0,e.end())}function s(){o||(o=!0,”function“==typeof e.destroy&&e.destroy())}function u(e){if(l(),0===r.listenerCount(this,”error“))throw e}function l(){n.removeListener(”data“,i),e.removeListener(”drain“,a),n.removeListener(”end“,c),n.removeListener(”close“,s),n.removeListener(”error“,u),e.removeListener(”error“,u),n.removeListener(”end“,l),n.removeListener(”close“,l),e.removeListener(”close“,l)}return n.on(”error“,u),e.on(”error“,u),n.on(”end“,l),n.on(”close“,l),e.on(”close“,l),e.emit(”pipe“,n),e}},function(e,t,n){”use strict“;var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,”__esModule“,{value:!0});var i=r(n(0)),a=n(135),o=r(n(28)),c=r(n(22)),s=function(e,t){return t.reduce((function(t,n){var r=e.slice(n.start,n.end);return n.highlight?t+”<mark>“r”</mark>“:”“+t+r}),”“)};t.default=function(e){var t=e.text,n=e.htmlText,r=void 0!==n&&n,u=e.className,l=void 0===u?”“:u,f=i.default.useContext(o.default),h=function(e){return e.reduce((function(e,t){var n=c.default.stemmer(t);return e.push(t),n!==t&&e.push(n),e}),[])}(f.query?f.query.split(” “):[]),d=a.findAll({searchWords:h,textToHighlight:t,htmlText:r}),p=l?”highlight “+l:”highlight“;return r?i.default.createElement(”div“,{className:p,dangerouslySetInnerHTML:{__html:s(t,d)}}):i.default.createElement(”span“,{className:p},function(e,t){var n=-1;return t.reduce((function(t,r){var a=e.slice(r.start,r.end);return n+=1,r.highlight?t.push(i.default.createElement(”mark“,{key:n},a)):t.push(i.default.createElement(”span“,{key:n},a)),t}),[])}(t,d))}},function(e,t,n){”use strict“;var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,”__esModule“,{value:!0});var i=r(n(0)),a=n(75);t.default=i.default.createContext(new a.Query)},function(e,t,n){”use strict“;var r=n(25),i=Object.keys||function(e){var t=[];for(var n in e)t.push(n);return t};e.exports=f;var a=Object.create(n(20));a.inherits=n(15);var o=n(54),c=n(39);a.inherits(f,o);for(var s=i(c.prototype),u=0;u<s.length;u++){var l=s;f.prototype||(f.prototype=c.prototype)}function f(e){if(!(this instanceof f))return new f(e);o.call(this,e),c.call(this,e),e&&!1===e.readable&&(this.readable=!1),e&&!1===e.writable&&(this.writable=!1),this.allowHalfOpen=!0,e&&!1===e.allowHalfOpen&&(this.allowHalfOpen=!1),this.once(”end“,h)}function h(){this.allowHalfOpen||this._writableState.ended||r.nextTick(d,this)}function d(e){e.end()}Object.defineProperty(f.prototype,”writableHighWaterMark“,{enumerable:!1,get:function(){return this._writableState.highWaterMark}}),Object.defineProperty(f.prototype,”destroyed“,{get:function(){return void 0!==this._readableState&&void 0!==this._writableState&&(this._readableState.destroyed&&this._writableState.destroyed)},set:function(e){void 0!==this._readableState&&void 0!==this._writableState&&(this._readableState.destroyed=e,this._writableState.destroyed=e)}}),f.prototype._destroy=function(e,t){this.push(null),this.end(),r.nextTick(t,e)}},function(e,t,n){”use strict“;e.exports=u;var r=n(16);((u.prototype=Object.create(r.prototype)).constructor=u).className=”Field“;var i,a=n(5),o=n(17),c=n(3),s=/^required|optional|repeated$/;function u(e,t,n,i,a,u,l){if(c.isObject(i)?(l=a,u=i,i=a=void 0):c.isObject(a)&&(l=u,u=a,a=void 0),r.call(this,e,u),!c.isInteger(t)||t<0)throw TypeError(”id must be a non-negative integer“);if(!c.isString(n))throw TypeError(”type must be a string“);if(void 0!==i&&!s.test(i=i.toString().toLowerCase()))throw TypeError(”rule must be a string rule“);if(void 0!==a&&!c.isString(a))throw TypeError(”extend must be a string“);this.rule=i&&”optional“!==i?i:void 0,this.type=n,this.id=t,this.extend=a||void 0,this.required=”required“===i,this.optional=!this.required,this.repeated=”repeated“===i,this.map=!1,this.message=null,this.partOf=null,this.typeDefault=null,this.defaultValue=null,this.long=!!c.Long&&void 0!==o.long,this.bytes=”bytes“===n,this.resolvedType=null,this.extensionField=null,this.declaringField=null,this._packed=null,this.comment=l}u.fromJSON=function(e,t){return new u(e,t.id,t.type,t.rule,t.extend,t.options,t.comment)},Object.defineProperty(u.prototype,”packed“,{get:function(){return null===this._packed&&(this._packed=!1!==this.getOption(”packed“)),this._packed}}),u.prototype.setOption=function(e,t,n){return”packed“===e&&(this._packed=null),r.prototype.setOption.call(this,e,t,n)},u.prototype.toJSON=function(e){var t=!!e&&Boolean(e.keepComments);return c.toObject([”rule“,”optional“!==this.rule&&this.rule||void 0,”type“,this.type,”id“,this.id,”extend“,this.extend,”options“,this.options,”comment“,t?this.comment:void 0])},u.prototype.resolve=function(){if(this.resolved)return this;if(void 0===(this.typeDefault=o.defaults)&&(this.resolvedType=(this.declaringField?this.declaringField.parent:this.parent).lookupTypeOrEnum(this.type),this.resolvedType instanceof i?this.typeDefault=null:this.typeDefault=this.resolvedType.values[Object.keys(this.resolvedType.values)]),this.options&&null!=this.options.default&&(this.typeDefault=this.options.default,this.resolvedType instanceof a&&”string“==typeof this.typeDefault&&(this.typeDefault=this.resolvedType.values)),this.options&&(!0!==this.options.packed&&(void 0===this.options.packed||!this.resolvedType||this.resolvedType instanceof a)||delete this.options.packed,Object.keys(this.options).length||(this.options=void 0)),this.long)this.typeDefault=c.Long.fromNumber(this.typeDefault,”u“===this.type.charAt(0)),Object.freeze&&Object.freeze(this.typeDefault);else if(this.bytes&&”string“==typeof this.typeDefault){var e;c.base64.test(this.typeDefault)?c.base64.decode(this.typeDefault,e=c.newBuffer(c.base64.length(this.typeDefault)),0):c.utf8.write(this.typeDefault,e=c.newBuffer(c.utf8.length(this.typeDefault)),0),this.typeDefault=e}return this.map?this.defaultValue=c.emptyObject:this.repeated?this.defaultValue=c.emptyArray:this.defaultValue=this.typeDefault,this.parent instanceof i&&(this.parent.ctor.prototype=this.defaultValue),r.prototype.resolve.call(this)},u.d=function(e,t,n,r){return”function“==typeof t?t=c.decorateType(t).name:t&&”object“==typeof t&&(t=c.decorateEnum(t).name),function(i,a){c.decorateType(i.constructor).add(new u(a,e,t,n,{default:r}))}},u._configure=function(e){i=e}},function(e,t,n){”use strict“;var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,”__esModule“,{value:!0});var i=r(n(0)),a=n(78);t.default=i.default.createContext(new a.Query)},function(e,t,n){”use strict“;n.r(t),n.d(t,”fas“,(function(){return Hg})),n.d(t,”prefix“,(function(){return r})),n.d(t,”faAd“,(function(){return i})),n.d(t,”faAddressBook“,(function(){return a})),n.d(t,”faAddressCard“,(function(){return o})),n.d(t,”faAdjust“,(function(){return c})),n.d(t,”faAirFreshener“,(function(){return s})),n.d(t,”faAlignCenter“,(function(){return u})),n.d(t,”faAlignJustify“,(function(){return l})),n.d(t,”faAlignLeft“,(function(){return f})),n.d(t,”faAlignRight“,(function(){return h})),n.d(t,”faAllergies“,(function(){return d})),n.d(t,”faAmbulance“,(function(){return p})),n.d(t,”faAmericanSignLanguageInterpreting“,(function(){return m})),n.d(t,”faAnchor“,(function(){return v})),n.d(t,”faAngleDoubleDown“,(function(){return g})),n.d(t,”faAngleDoubleLeft“,(function(){return y})),n.d(t,”faAngleDoubleRight“,(function(){return b})),n.d(t,”faAngleDoubleUp“,(function(){return w})),n.d(t,”faAngleDown“,(function(){return x})),n.d(t,”faAngleLeft“,(function(){return S})),n.d(t,”faAngleRight“,(function(){return k})),n.d(t,”faAngleUp“,(function(){return _})),n.d(t,”faAngry“,(function(){return z})),n.d(t,”faAnkh“,(function(){return C})),n.d(t,”faAppleAlt“,(function(){return M})),n.d(t,”faArchive“,(function(){return O})),n.d(t,”faArchway“,(function(){return T})),n.d(t,”faArrowAltCircleDown“,(function(){return E})),n.d(t,”faArrowAltCircleLeft“,(function(){return L})),n.d(t,”faArrowAltCircleRight“,(function(){return A})),n.d(t,”faArrowAltCircleUp“,(function(){return R})),n.d(t,”faArrowCircleDown“,(function(){return N})),n.d(t,”faArrowCircleLeft“,(function(){return H})),n.d(t,”faArrowCircleRight“,(function(){return P})),n.d(t,”faArrowCircleUp“,(function(){return j})),n.d(t,”faArrowDown“,(function(){return V})),n.d(t,”faArrowLeft“,(function(){return D})),n.d(t,”faArrowRight“,(function(){return I})),n.d(t,”faArrowUp“,(function(){return F})),n.d(t,”faArrowsAlt“,(function(){return B})),n.d(t,”faArrowsAltH“,(function(){return U})),n.d(t,”faArrowsAltV“,(function(){return q})),n.d(t,”faAssistiveListeningSystems“,(function(){return G})),n.d(t,”faAsterisk“,(function(){return W})),n.d(t,”faAt“,(function(){return Z})),n.d(t,”faAtlas“,(function(){return $})),n.d(t,”faAtom“,(function(){return J})),n.d(t,”faAudioDescription“,(function(){return K})),n.d(t,”faAward“,(function(){return Q})),n.d(t,”faBaby“,(function(){return Y})),n.d(t,”faBabyCarriage“,(function(){return X})),n.d(t,”faBackspace“,(function(){return ee})),n.d(t,”faBackward“,(function(){return te})),n.d(t,”faBacon“,(function(){return ne})),n.d(t,”faBacteria“,(function(){return re})),n.d(t,”faBacterium“,(function(){return ie})),n.d(t,”faBahai“,(function(){return ae})),n.d(t,”faBalanceScale“,(function(){return oe})),n.d(t,”faBalanceScaleLeft“,(function(){return ce})),n.d(t,”faBalanceScaleRight“,(function(){return se})),n.d(t,”faBan“,(function(){return ue})),n.d(t,”faBandAid“,(function(){return le})),n.d(t,”faBarcode“,(function(){return fe})),n.d(t,”faBars“,(function(){return he})),n.d(t,”faBaseballBall“,(function(){return de})),n.d(t,”faBasketballBall“,(function(){return pe})),n.d(t,”faBath“,(function(){return me})),n.d(t,”faBatteryEmpty“,(function(){return ve})),n.d(t,”faBatteryFull“,(function(){return ge})),n.d(t,”faBatteryHalf“,(function(){return ye})),n.d(t,”faBatteryQuarter“,(function(){return be})),n.d(t,”faBatteryThreeQuarters“,(function(){return we})),n.d(t,”faBed“,(function(){return xe})),n.d(t,”faBeer“,(function(){return Se})),n.d(t,”faBell“,(function(){return ke})),n.d(t,”faBellSlash“,(function(){return _e})),n.d(t,”faBezierCurve“,(function(){return ze})),n.d(t,”faBible“,(function(){return Ce})),n.d(t,”faBicycle“,(function(){return Me})),n.d(t,”faBiking“,(function(){return Oe})),n.d(t,”faBinoculars“,(function(){return Te})),n.d(t,”faBiohazard“,(function(){return Ee})),n.d(t,”faBirthdayCake“,(function(){return Le})),n.d(t,”faBlender“,(function(){return Ae})),n.d(t,”faBlenderPhone“,(function(){return Re})),n.d(t,”faBlind“,(function(){return Ne})),n.d(t,”faBlog“,(function(){return He})),n.d(t,”faBold“,(function(){return Pe})),n.d(t,”faBolt“,(function(){return je})),n.d(t,”faBomb“,(function(){return Ve})),n.d(t,”faBone“,(function(){return De})),n.d(t,”faBong“,(function(){return Ie})),n.d(t,”faBook“,(function(){return Fe})),n.d(t,”faBookDead“,(function(){return Be})),n.d(t,”faBookMedical“,(function(){return Ue})),n.d(t,”faBookOpen“,(function(){return qe})),n.d(t,”faBookReader“,(function(){return Ge})),n.d(t,”faBookmark“,(function(){return We})),n.d(t,”faBorderAll“,(function(){return Ze})),n.d(t,”faBorderNone“,(function(){return $e})),n.d(t,”faBorderStyle“,(function(){return Je})),n.d(t,”faBowlingBall“,(function(){return Ke})),n.d(t,”faBox“,(function(){return Qe})),n.d(t,”faBoxOpen“,(function(){return Ye})),n.d(t,”faBoxTissue“,(function(){return Xe})),n.d(t,”faBoxes“,(function(){return et})),n.d(t,”faBraille“,(function(){return tt})),n.d(t,”faBrain“,(function(){return nt})),n.d(t,”faBreadSlice“,(function(){return rt})),n.d(t,”faBriefcase“,(function(){return it})),n.d(t,”faBriefcaseMedical“,(function(){return at})),n.d(t,”faBroadcastTower“,(function(){return ot})),n.d(t,”faBroom“,(function(){return ct})),n.d(t,”faBrush“,(function(){return st})),n.d(t,”faBug“,(function(){return ut})),n.d(t,”faBuilding“,(function(){return lt})),n.d(t,”faBullhorn“,(function(){return ft})),n.d(t,”faBullseye“,(function(){return ht})),n.d(t,”faBurn“,(function(){return dt})),n.d(t,”faBus“,(function(){return pt})),n.d(t,”faBusAlt“,(function(){return mt})),n.d(t,”faBusinessTime“,(function(){return vt})),n.d(t,”faCalculator“,(function(){return gt})),n.d(t,”faCalendar“,(function(){return yt})),n.d(t,”faCalendarAlt“,(function(){return bt})),n.d(t,”faCalendarCheck“,(function(){return wt})),n.d(t,”faCalendarDay“,(function(){return xt})),n.d(t,”faCalendarMinus“,(function(){return St})),n.d(t,”faCalendarPlus“,(function(){return kt})),n.d(t,”faCalendarTimes“,(function(){return _t})),n.d(t,”faCalendarWeek“,(function(){return zt})),n.d(t,”faCamera“,(function(){return Ct})),n.d(t,”faCameraRetro“,(function(){return Mt})),n.d(t,”faCampground“,(function(){return Ot})),n.d(t,”faCandyCane“,(function(){return Tt})),n.d(t,”faCannabis“,(function(){return Et})),n.d(t,”faCapsules“,(function(){return Lt})),n.d(t,”faCar“,(function(){return At})),n.d(t,”faCarAlt“,(function(){return Rt})),n.d(t,”faCarBattery“,(function(){return Nt})),n.d(t,”faCarCrash“,(function(){return Ht})),n.d(t,”faCarSide“,(function(){return Pt})),n.d(t,”faCaravan“,(function(){return jt})),n.d(t,”faCaretDown“,(function(){return Vt})),n.d(t,”faCaretLeft“,(function(){return Dt})),n.d(t,”faCaretRight“,(function(){return It})),n.d(t,”faCaretSquareDown“,(function(){return Ft})),n.d(t,”faCaretSquareLeft“,(function(){return Bt})),n.d(t,”faCaretSquareRight“,(function(){return Ut})),n.d(t,”faCaretSquareUp“,(function(){return qt})),n.d(t,”faCaretUp“,(function(){return Gt})),n.d(t,”faCarrot“,(function(){return Wt})),n.d(t,”faCartArrowDown“,(function(){return Zt})),n.d(t,”faCartPlus“,(function(){return $t})),n.d(t,”faCashRegister“,(function(){return Jt})),n.d(t,”faCat“,(function(){return Kt})),n.d(t,”faCertificate“,(function(){return Qt})),n.d(t,”faChair“,(function(){return Yt})),n.d(t,”faChalkboard“,(function(){return Xt})),n.d(t,”faChalkboardTeacher“,(function(){return en})),n.d(t,”faChargingStation“,(function(){return tn})),n.d(t,”faChartArea“,(function(){return nn})),n.d(t,”faChartBar“,(function(){return rn})),n.d(t,”faChartLine“,(function(){return an})),n.d(t,”faChartPie“,(function(){return on})),n.d(t,”faCheck“,(function(){return cn})),n.d(t,”faCheckCircle“,(function(){return sn})),n.d(t,”faCheckDouble“,(function(){return un})),n.d(t,”faCheckSquare“,(function(){return ln})),n.d(t,”faCheese“,(function(){return fn})),n.d(t,”faChess“,(function(){return hn})),n.d(t,”faChessBishop“,(function(){return dn})),n.d(t,”faChessBoard“,(function(){return pn})),n.d(t,”faChessKing“,(function(){return mn})),n.d(t,”faChessKnight“,(function(){return vn})),n.d(t,”faChessPawn“,(function(){return gn})),n.d(t,”faChessQueen“,(function(){return yn})),n.d(t,”faChessRook“,(function(){return bn})),n.d(t,”faChevronCircleDown“,(function(){return wn})),n.d(t,”faChevronCircleLeft“,(function(){return xn})),n.d(t,”faChevronCircleRight“,(function(){return Sn})),n.d(t,”faChevronCircleUp“,(function(){return kn})),n.d(t,”faChevronDown“,(function(){return _n})),n.d(t,”faChevronLeft“,(function(){return zn})),n.d(t,”faChevronRight“,(function(){return Cn})),n.d(t,”faChevronUp“,(function(){return Mn})),n.d(t,”faChild“,(function(){return On})),n.d(t,”faChurch“,(function(){return Tn})),n.d(t,”faCircle“,(function(){return En})),n.d(t,”faCircleNotch“,(function(){return Ln})),n.d(t,”faCity“,(function(){return An})),n.d(t,”faClinicMedical“,(function(){return Rn})),n.d(t,”faClipboard“,(function(){return Nn})),n.d(t,”faClipboardCheck“,(function(){return Hn})),n.d(t,”faClipboardList“,(function(){return Pn})),n.d(t,”faClock“,(function(){return jn})),n.d(t,”faClone“,(function(){return Vn})),n.d(t,”faClosedCaptioning“,(function(){return Dn})),n.d(t,”faCloud“,(function(){return In})),n.d(t,”faCloudDownloadAlt“,(function(){return Fn})),n.d(t,”faCloudMeatball“,(function(){return Bn})),n.d(t,”faCloudMoon“,(function(){return Un})),n.d(t,”faCloudMoonRain“,(function(){return qn})),n.d(t,”faCloudRain“,(function(){return Gn})),n.d(t,”faCloudShowersHeavy“,(function(){return Wn})),n.d(t,”faCloudSun“,(function(){return Zn})),n.d(t,”faCloudSunRain“,(function(){return $n})),n.d(t,”faCloudUploadAlt“,(function(){return Jn})),n.d(t,”faCocktail“,(function(){return Kn})),n.d(t,”faCode“,(function(){return Qn})),n.d(t,”faCodeBranch“,(function(){return Yn})),n.d(t,”faCoffee“,(function(){return Xn})),n.d(t,”faCog“,(function(){return er})),n.d(t,”faCogs“,(function(){return tr})),n.d(t,”faCoins“,(function(){return nr})),n.d(t,”faColumns“,(function(){return rr})),n.d(t,”faComment“,(function(){return ir})),n.d(t,”faCommentAlt“,(function(){return ar})),n.d(t,”faCommentDollar“,(function(){return or})),n.d(t,”faCommentDots“,(function(){return cr})),n.d(t,”faCommentMedical“,(function(){return sr})),n.d(t,”faCommentSlash“,(function(){return ur})),n.d(t,”faComments“,(function(){return lr})),n.d(t,”faCommentsDollar“,(function(){return fr})),n.d(t,”faCompactDisc“,(function(){return hr})),n.d(t,”faCompass“,(function(){return dr})),n.d(t,”faCompress“,(function(){return pr})),n.d(t,”faCompressAlt“,(function(){return mr})),n.d(t,”faCompressArrowsAlt“,(function(){return vr})),n.d(t,”faConciergeBell“,(function(){return gr})),n.d(t,”faCookie“,(function(){return yr})),n.d(t,”faCookieBite“,(function(){return br})),n.d(t,”faCopy“,(function(){return wr})),n.d(t,”faCopyright“,(function(){return xr})),n.d(t,”faCouch“,(function(){return Sr})),n.d(t,”faCreditCard“,(function(){return kr})),n.d(t,”faCrop“,(function(){return _r})),n.d(t,”faCropAlt“,(function(){return zr})),n.d(t,”faCross“,(function(){return Cr})),n.d(t,”faCrosshairs“,(function(){return Mr})),n.d(t,”faCrow“,(function(){return Or})),n.d(t,”faCrown“,(function(){return Tr})),n.d(t,”faCrutch“,(function(){return Er})),n.d(t,”faCube“,(function(){return Lr})),n.d(t,”faCubes“,(function(){return Ar})),n.d(t,”faCut“,(function(){return Rr})),n.d(t,”faDatabase“,(function(){return Nr})),n.d(t,”faDeaf“,(function(){return Hr})),n.d(t,”faDemocrat“,(function(){return Pr})),n.d(t,”faDesktop“,(function(){return jr})),n.d(t,”faDharmachakra“,(function(){return Vr})),n.d(t,”faDiagnoses“,(function(){return Dr})),n.d(t,”faDice“,(function(){return Ir})),n.d(t,”faDiceD20“,(function(){return Fr})),n.d(t,”faDiceD6“,(function(){return Br})),n.d(t,”faDiceFive“,(function(){return Ur})),n.d(t,”faDiceFour“,(function(){return qr})),n.d(t,”faDiceOne“,(function(){return Gr})),n.d(t,”faDiceSix“,(function(){return Wr})),n.d(t,”faDiceThree“,(function(){return Zr})),n.d(t,”faDiceTwo“,(function(){return $r})),n.d(t,”faDigitalTachograph“,(function(){return Jr})),n.d(t,”faDirections“,(function(){return Kr})),n.d(t,”faDisease“,(function(){return Qr})),n.d(t,”faDivide“,(function(){return Yr})),n.d(t,”faDizzy“,(function(){return Xr})),n.d(t,”faDna“,(function(){return ei})),n.d(t,”faDog“,(function(){return ti})),n.d(t,”faDollarSign“,(function(){return ni})),n.d(t,”faDolly“,(function(){return ri})),n.d(t,”faDollyFlatbed“,(function(){return ii})),n.d(t,”faDonate“,(function(){return ai})),n.d(t,”faDoorClosed“,(function(){return oi})),n.d(t,”faDoorOpen“,(function(){return ci})),n.d(t,”faDotCircle“,(function(){return si})),n.d(t,”faDove“,(function(){return ui})),n.d(t,”faDownload“,(function(){return li})),n.d(t,”faDraftingCompass“,(function(){return fi})),n.d(t,”faDragon“,(function(){return hi})),n.d(t,”faDrawPolygon“,(function(){return di})),n.d(t,”faDrum“,(function(){return pi})),n.d(t,”faDrumSteelpan“,(function(){return mi})),n.d(t,”faDrumstickBite“,(function(){return vi})),n.d(t,”faDumbbell“,(function(){return gi})),n.d(t,”faDumpster“,(function(){return yi})),n.d(t,”faDumpsterFire“,(function(){return bi})),n.d(t,”faDungeon“,(function(){return wi})),n.d(t,”faEdit“,(function(){return xi})),n.d(t,”faEgg“,(function(){return Si})),n.d(t,”faEject“,(function(){return ki})),n.d(t,”faEllipsisH“,(function(){return _i})),n.d(t,”faEllipsisV“,(function(){return zi})),n.d(t,”faEnvelope“,(function(){return Ci})),n.d(t,”faEnvelopeOpen“,(function(){return Mi})),n.d(t,”faEnvelopeOpenText“,(function(){return Oi})),n.d(t,”faEnvelopeSquare“,(function(){return Ti})),n.d(t,”faEquals“,(function(){return Ei})),n.d(t,”faEraser“,(function(){return Li})),n.d(t,”faEthernet“,(function(){return Ai})),n.d(t,”faEuroSign“,(function(){return Ri})),n.d(t,”faExchangeAlt“,(function(){return Ni})),n.d(t,”faExclamation“,(function(){return Hi})),n.d(t,”faExclamationCircle“,(function(){return Pi})),n.d(t,”faExclamationTriangle“,(function(){return ji})),n.d(t,”faExpand“,(function(){return Vi})),n.d(t,”faExpandAlt“,(function(){return Di})),n.d(t,”faExpandArrowsAlt“,(function(){return Ii})),n.d(t,”faExternalLinkAlt“,(function(){return Fi})),n.d(t,”faExternalLinkSquareAlt“,(function(){return Bi})),n.d(t,”faEye“,(function(){return Ui})),n.d(t,”faEyeDropper“,(function(){return qi})),n.d(t,”faEyeSlash“,(function(){return Gi})),n.d(t,”faFan“,(function(){return Wi})),n.d(t,”faFastBackward“,(function(){return Zi})),n.d(t,”faFastForward“,(function(){return $i})),n.d(t,”faFaucet“,(function(){return Ji})),n.d(t,”faFax“,(function(){return Ki})),n.d(t,”faFeather“,(function(){return Qi})),n.d(t,”faFeatherAlt“,(function(){return Yi})),n.d(t,”faFemale“,(function(){return Xi})),n.d(t,”faFighterJet“,(function(){return ea})),n.d(t,”faFile“,(function(){return ta})),n.d(t,”faFileAlt“,(function(){return na})),n.d(t,”faFileArchive“,(function(){return ra})),n.d(t,”faFileAudio“,(function(){return ia})),n.d(t,”faFileCode“,(function(){return aa})),n.d(t,”faFileContract“,(function(){return oa})),n.d(t,”faFileCsv“,(function(){return ca})),n.d(t,”faFileDownload“,(function(){return sa})),n.d(t,”faFileExcel“,(function(){return ua})),n.d(t,”faFileExport“,(function(){return la})),n.d(t,”faFileImage“,(function(){return fa})),n.d(t,”faFileImport“,(function(){return ha})),n.d(t,”faFileInvoice“,(function(){return da})),n.d(t,”faFileInvoiceDollar“,(function(){return pa})),n.d(t,”faFileMedical“,(function(){return ma})),n.d(t,”faFileMedicalAlt“,(function(){return va})),n.d(t,”faFilePdf“,(function(){return ga})),n.d(t,”faFilePowerpoint“,(function(){return ya})),n.d(t,”faFilePrescription“,(function(){return ba})),n.d(t,”faFileSignature“,(function(){return wa})),n.d(t,”faFileUpload“,(function(){return xa})),n.d(t,”faFileVideo“,(function(){return Sa})),n.d(t,”faFileWord“,(function(){return ka})),n.d(t,”faFill“,(function(){return _a})),n.d(t,”faFillDrip“,(function(){return za})),n.d(t,”faFilm“,(function(){return Ca})),n.d(t,”faFilter“,(function(){return Ma})),n.d(t,”faFingerprint“,(function(){return Oa})),n.d(t,”faFire“,(function(){return Ta})),n.d(t,”faFireAlt“,(function(){return Ea})),n.d(t,”faFireExtinguisher“,(function(){return La})),n.d(t,”faFirstAid“,(function(){return Aa})),n.d(t,”faFish“,(function(){return Ra})),n.d(t,”faFistRaised“,(function(){return Na})),n.d(t,”faFlag“,(function(){return Ha})),n.d(t,”faFlagCheckered“,(function(){return Pa})),n.d(t,”faFlagUsa“,(function(){return ja})),n.d(t,”faFlask“,(function(){return Va})),n.d(t,”faFlushed“,(function(){return Da})),n.d(t,”faFolder“,(function(){return Ia})),n.d(t,”faFolderMinus“,(function(){return Fa})),n.d(t,”faFolderOpen“,(function(){return Ba})),n.d(t,”faFolderPlus“,(function(){return Ua})),n.d(t,”faFont“,(function(){return qa})),n.d(t,”faFontAwesomeLogoFull“,(function(){return Ga})),n.d(t,”faFootballBall“,(function(){return Wa})),n.d(t,”faForward“,(function(){return Za})),n.d(t,”faFrog“,(function(){return $a})),n.d(t,”faFrown“,(function(){return Ja})),n.d(t,”faFrownOpen“,(function(){return Ka})),n.d(t,”faFunnelDollar“,(function(){return Qa})),n.d(t,”faFutbol“,(function(){return Ya})),n.d(t,”faGamepad“,(function(){return Xa})),n.d(t,”faGasPump“,(function(){return eo})),n.d(t,”faGavel“,(function(){return to})),n.d(t,”faGem“,(function(){return no})),n.d(t,”faGenderless“,(function(){return ro})),n.d(t,”faGhost“,(function(){return io})),n.d(t,”faGift“,(function(){return ao})),n.d(t,”faGifts“,(function(){return oo})),n.d(t,”faGlassCheers“,(function(){return co})),n.d(t,”faGlassMartini“,(function(){return so})),n.d(t,”faGlassMartiniAlt“,(function(){return uo})),n.d(t,”faGlassWhiskey“,(function(){return lo})),n.d(t,”faGlasses“,(function(){return fo})),n.d(t,”faGlobe“,(function(){return ho})),n.d(t,”faGlobeAfrica“,(function(){return po})),n.d(t,”faGlobeAmericas“,(function(){return mo})),n.d(t,”faGlobeAsia“,(function(){return vo})),n.d(t,”faGlobeEurope“,(function(){return go})),n.d(t,”faGolfBall“,(function(){return yo})),n.d(t,”faGopuram“,(function(){return bo})),n.d(t,”faGraduationCap“,(function(){return wo})),n.d(t,”faGreaterThan“,(function(){return xo})),n.d(t,”faGreaterThanEqual“,(function(){return So})),n.d(t,”faGrimace“,(function(){return ko})),n.d(t,”faGrin“,(function(){return _o})),n.d(t,”faGrinAlt“,(function(){return zo})),n.d(t,”faGrinBeam“,(function(){return Co})),n.d(t,”faGrinBeamSweat“,(function(){return Mo})),n.d(t,”faGrinHearts“,(function(){return Oo})),n.d(t,”faGrinSquint“,(function(){return To})),n.d(t,”faGrinSquintTears“,(function(){return Eo})),n.d(t,”faGrinStars“,(function(){return Lo})),n.d(t,”faGrinTears“,(function(){return Ao})),n.d(t,”faGrinTongue“,(function(){return Ro})),n.d(t,”faGrinTongueSquint“,(function(){return No})),n.d(t,”faGrinTongueWink“,(function(){return Ho})),n.d(t,”faGrinWink“,(function(){return Po})),n.d(t,”faGripHorizontal“,(function(){return jo})),n.d(t,”faGripLines“,(function(){return Vo})),n.d(t,”faGripLinesVertical“,(function(){return Do})),n.d(t,”faGripVertical“,(function(){return Io})),n.d(t,”faGuitar“,(function(){return Fo})),n.d(t,”faHSquare“,(function(){return Bo})),n.d(t,”faHamburger“,(function(){return Uo})),n.d(t,”faHammer“,(function(){return qo})),n.d(t,”faHamsa“,(function(){return Go})),n.d(t,”faHandHolding“,(function(){return Wo})),n.d(t,”faHandHoldingHeart“,(function(){return Zo})),n.d(t,”faHandHoldingMedical“,(function(){return $o})),n.d(t,”faHandHoldingUsd“,(function(){return Jo})),n.d(t,”faHandHoldingWater“,(function(){return Ko})),n.d(t,”faHandLizard“,(function(){return Qo})),n.d(t,”faHandMiddleFinger“,(function(){return Yo})),n.d(t,”faHandPaper“,(function(){return Xo})),n.d(t,”faHandPeace“,(function(){return ec})),n.d(t,”faHandPointDown“,(function(){return tc})),n.d(t,”faHandPointLeft“,(function(){return nc})),n.d(t,”faHandPointRight“,(function(){return rc})),n.d(t,”faHandPointUp“,(function(){return ic})),n.d(t,”faHandPointer“,(function(){return ac})),n.d(t,”faHandRock“,(function(){return oc})),n.d(t,”faHandScissors“,(function(){return cc})),n.d(t,”faHandSparkles“,(function(){return sc})),n.d(t,”faHandSpock“,(function(){return uc})),n.d(t,”faHands“,(function(){return lc})),n.d(t,”faHandsHelping“,(function(){return fc})),n.d(t,”faHandsWash“,(function(){return hc})),n.d(t,”faHandshake“,(function(){return dc})),n.d(t,”faHandshakeAltSlash“,(function(){return pc})),n.d(t,”faHandshakeSlash“,(function(){return mc})),n.d(t,”faHanukiah“,(function(){return vc})),n.d(t,”faHardHat“,(function(){return gc})),n.d(t,”faHashtag“,(function(){return yc})),n.d(t,”faHatCowboy“,(function(){return bc})),n.d(t,”faHatCowboySide“,(function(){return wc})),n.d(t,”faHatWizard“,(function(){return xc})),n.d(t,”faHdd“,(function(){return Sc})),n.d(t,”faHeadSideCough“,(function(){return kc})),n.d(t,”faHeadSideCoughSlash“,(function(){return _c})),n.d(t,”faHeadSideMask“,(function(){return zc})),n.d(t,”faHeadSideVirus“,(function(){return Cc})),n.d(t,”faHeading“,(function(){return Mc})),n.d(t,”faHeadphones“,(function(){return Oc})),n.d(t,”faHeadphonesAlt“,(function(){return Tc})),n.d(t,”faHeadset“,(function(){return Ec})),n.d(t,”faHeart“,(function(){return Lc})),n.d(t,”faHeartBroken“,(function(){return Ac})),n.d(t,”faHeartbeat“,(function(){return Rc})),n.d(t,”faHelicopter“,(function(){return Nc})),n.d(t,”faHighlighter“,(function(){return Hc})),n.d(t,”faHiking“,(function(){return Pc})),n.d(t,”faHippo“,(function(){return jc})),n.d(t,”faHistory“,(function(){return Vc})),n.d(t,”faHockeyPuck“,(function(){return Dc})),n.d(t,”faHollyBerry“,(function(){return Ic})),n.d(t,”faHome“,(function(){return Fc})),n.d(t,”faHorse“,(function(){return Bc})),n.d(t,”faHorseHead“,(function(){return Uc})),n.d(t,”faHospital“,(function(){return qc})),n.d(t,”faHospitalAlt“,(function(){return Gc})),n.d(t,”faHospitalSymbol“,(function(){return Wc})),n.d(t,”faHospitalUser“,(function(){return Zc})),n.d(t,”faHotTub“,(function(){return $c})),n.d(t,”faHotdog“,(function(){return Jc})),n.d(t,”faHotel“,(function(){return Kc})),n.d(t,”faHourglass“,(function(){return Qc})),n.d(t,”faHourglassEnd“,(function(){return Yc})),n.d(t,”faHourglassHalf“,(function(){return Xc})),n.d(t,”faHourglassStart“,(function(){return es})),n.d(t,”faHouseDamage“,(function(){return ts})),n.d(t,”faHouseUser“,(function(){return ns})),n.d(t,”faHryvnia“,(function(){return rs})),n.d(t,”faICursor“,(function(){return is})),n.d(t,”faIceCream“,(function(){return as})),n.d(t,”faIcicles“,(function(){return os})),n.d(t,”faIcons“,(function(){return cs})),n.d(t,”faIdBadge“,(function(){return ss})),n.d(t,”faIdCard“,(function(){return us})),n.d(t,”faIdCardAlt“,(function(){return ls})),n.d(t,”faIgloo“,(function(){return fs})),n.d(t,”faImage“,(function(){return hs})),n.d(t,”faImages“,(function(){return ds})),n.d(t,”faInbox“,(function(){return ps})),n.d(t,”faIndent“,(function(){return ms})),n.d(t,”faIndustry“,(function(){return vs})),n.d(t,”faInfinity“,(function(){return gs})),n.d(t,”faInfo“,(function(){return ys})),n.d(t,”faInfoCircle“,(function(){return bs})),n.d(t,”faItalic“,(function(){return ws})),n.d(t,”faJedi“,(function(){return xs})),n.d(t,”faJoint“,(function(){return Ss})),n.d(t,”faJournalWhills“,(function(){return ks})),n.d(t,”faKaaba“,(function(){return _s})),n.d(t,”faKey“,(function(){return zs})),n.d(t,”faKeyboard“,(function(){return Cs})),n.d(t,”faKhanda“,(function(){return Ms})),n.d(t,”faKiss“,(function(){return Os})),n.d(t,”faKissBeam“,(function(){return Ts})),n.d(t,”faKissWinkHeart“,(function(){return Es})),n.d(t,”faKiwiBird“,(function(){return Ls})),n.d(t,”faLandmark“,(function(){return As})),n.d(t,”faLanguage“,(function(){return Rs})),n.d(t,”faLaptop“,(function(){return Ns})),n.d(t,”faLaptopCode“,(function(){return Hs})),n.d(t,”faLaptopHouse“,(function(){return Ps})),n.d(t,”faLaptopMedical“,(function(){return js})),n.d(t,”faLaugh“,(function(){return Vs})),n.d(t,”faLaughBeam“,(function(){return Ds})),n.d(t,”faLaughSquint“,(function(){return Is})),n.d(t,”faLaughWink“,(function(){return Fs})),n.d(t,”faLayerGroup“,(function(){return Bs})),n.d(t,”faLeaf“,(function(){return Us})),n.d(t,”faLemon“,(function(){return qs})),n.d(t,”faLessThan“,(function(){return Gs})),n.d(t,”faLessThanEqual“,(function(){return Ws})),n.d(t,”faLevelDownAlt“,(function(){return Zs})),n.d(t,”faLevelUpAlt“,(function(){return $s})),n.d(t,”faLifeRing“,(function(){return Js})),n.d(t,”faLightbulb“,(function(){return Ks})),n.d(t,”faLink“,(function(){return Qs})),n.d(t,”faLiraSign“,(function(){return Ys})),n.d(t,”faList“,(function(){return Xs})),n.d(t,”faListAlt“,(function(){return eu})),n.d(t,”faListOl“,(function(){return tu})),n.d(t,”faListUl“,(function(){return nu})),n.d(t,”faLocationArrow“,(function(){return ru})),n.d(t,”faLock“,(function(){return iu})),n.d(t,”faLockOpen“,(function(){return au})),n.d(t,”faLongArrowAltDown“,(function(){return ou})),n.d(t,”faLongArrowAltLeft“,(function(){return cu})),n.d(t,”faLongArrowAltRight“,(function(){return su})),n.d(t,”faLongArrowAltUp“,(function(){return uu})),n.d(t,”faLowVision“,(function(){return lu})),n.d(t,”faLuggageCart“,(function(){return fu})),n.d(t,”faLungs“,(function(){return hu})),n.d(t,”faLungsVirus“,(function(){return du})),n.d(t,”faMagic“,(function(){return pu})),n.d(t,”faMagnet“,(function(){return mu})),n.d(t,”faMailBulk“,(function(){return vu})),n.d(t,”faMale“,(function(){return gu})),n.d(t,”faMap“,(function(){return yu})),n.d(t,”faMapMarked“,(function(){return bu})),n.d(t,”faMapMarkedAlt“,(function(){return wu})),n.d(t,”faMapMarker“,(function(){return xu})),n.d(t,”faMapMarkerAlt“,(function(){return Su})),n.d(t,”faMapPin“,(function(){return ku})),n.d(t,”faMapSigns“,(function(){return _u})),n.d(t,”faMarker“,(function(){return zu})),n.d(t,”faMars“,(function(){return Cu})),n.d(t,”faMarsDouble“,(function(){return Mu})),n.d(t,”faMarsStroke“,(function(){return Ou})),n.d(t,”faMarsStrokeH“,(function(){return Tu})),n.d(t,”faMarsStrokeV“,(function(){return Eu})),n.d(t,”faMask“,(function(){return Lu})),n.d(t,”faMedal“,(function(){return Au})),n.d(t,”faMedkit“,(function(){return Ru})),n.d(t,”faMeh“,(function(){return Nu})),n.d(t,”faMehBlank“,(function(){return Hu})),n.d(t,”faMehRollingEyes“,(function(){return Pu})),n.d(t,”faMemory“,(function(){return ju})),n.d(t,”faMenorah“,(function(){return Vu})),n.d(t,”faMercury“,(function(){return Du})),n.d(t,”faMeteor“,(function(){return Iu})),n.d(t,”faMicrochip“,(function(){return Fu})),n.d(t,”faMicrophone“,(function(){return Bu})),n.d(t,”faMicrophoneAlt“,(function(){return Uu})),n.d(t,”faMicrophoneAltSlash“,(function(){return qu})),n.d(t,”faMicrophoneSlash“,(function(){return Gu})),n.d(t,”faMicroscope“,(function(){return Wu})),n.d(t,”faMinus“,(function(){return Zu})),n.d(t,”faMinusCircle“,(function(){return $u})),n.d(t,”faMinusSquare“,(function(){return Ju})),n.d(t,”faMitten“,(function(){return Ku})),n.d(t,”faMobile“,(function(){return Qu})),n.d(t,”faMobileAlt“,(function(){return Yu})),n.d(t,”faMoneyBill“,(function(){return Xu})),n.d(t,”faMoneyBillAlt“,(function(){return el})),n.d(t,”faMoneyBillWave“,(function(){return tl})),n.d(t,”faMoneyBillWaveAlt“,(function(){return nl})),n.d(t,”faMoneyCheck“,(function(){return rl})),n.d(t,”faMoneyCheckAlt“,(function(){return il})),n.d(t,”faMonument“,(function(){return al})),n.d(t,”faMoon“,(function(){return ol})),n.d(t,”faMortarPestle“,(function(){return cl})),n.d(t,”faMosque“,(function(){return sl})),n.d(t,”faMotorcycle“,(function(){return ul})),n.d(t,”faMountain“,(function(){return ll})),n.d(t,”faMouse“,(function(){return fl})),n.d(t,”faMousePointer“,(function(){return hl})),n.d(t,”faMugHot“,(function(){return dl})),n.d(t,”faMusic“,(function(){return pl})),n.d(t,”faNetworkWired“,(function(){return ml})),n.d(t,”faNeuter“,(function(){return vl})),n.d(t,”faNewspaper“,(function(){return gl})),n.d(t,”faNotEqual“,(function(){return yl})),n.d(t,”faNotesMedical“,(function(){return bl})),n.d(t,”faObjectGroup“,(function(){return wl})),n.d(t,”faObjectUngroup“,(function(){return xl})),n.d(t,”faOilCan“,(function(){return Sl})),n.d(t,”faOm“,(function(){return kl})),n.d(t,”faOtter“,(function(){return _l})),n.d(t,”faOutdent“,(function(){return zl})),n.d(t,”faPager“,(function(){return Cl})),n.d(t,”faPaintBrush“,(function(){return Ml})),n.d(t,”faPaintRoller“,(function(){return Ol})),n.d(t,”faPalette“,(function(){return Tl})),n.d(t,”faPallet“,(function(){return El})),n.d(t,”faPaperPlane“,(function(){return Ll})),n.d(t,”faPaperclip“,(function(){return Al})),n.d(t,”faParachuteBox“,(function(){return Rl})),n.d(t,”faParagraph“,(function(){return Nl})),n.d(t,”faParking“,(function(){return Hl})),n.d(t,”faPassport“,(function(){return Pl})),n.d(t,”faPastafarianism“,(function(){return jl})),n.d(t,”faPaste“,(function(){return Vl})),n.d(t,”faPause“,(function(){return Dl})),n.d(t,”faPauseCircle“,(function(){return Il})),n.d(t,”faPaw“,(function(){return Fl})),n.d(t,”faPeace“,(function(){return Bl})),n.d(t,”faPen“,(function(){return Ul})),n.d(t,”faPenAlt“,(function(){return ql})),n.d(t,”faPenFancy“,(function(){return Gl})),n.d(t,”faPenNib“,(function(){return Wl})),n.d(t,”faPenSquare“,(function(){return Zl})),n.d(t,”faPencilAlt“,(function(){return $l})),n.d(t,”faPencilRuler“,(function(){return Jl})),n.d(t,”faPeopleArrows“,(function(){return Kl})),n.d(t,”faPeopleCarry“,(function(){return Ql})),n.d(t,”faPepperHot“,(function(){return Yl})),n.d(t,”faPercent“,(function(){return Xl})),n.d(t,”faPercentage“,(function(){return ef})),n.d(t,”faPersonBooth“,(function(){return tf})),n.d(t,”faPhone“,(function(){return nf})),n.d(t,”faPhoneAlt“,(function(){return rf})),n.d(t,”faPhoneSlash“,(function(){return af})),n.d(t,”faPhoneSquare“,(function(){return of})),n.d(t,”faPhoneSquareAlt“,(function(){return cf})),n.d(t,”faPhoneVolume“,(function(){return sf})),n.d(t,”faPhotoVideo“,(function(){return uf})),n.d(t,”faPiggyBank“,(function(){return lf})),n.d(t,”faPills“,(function(){return ff})),n.d(t,”faPizzaSlice“,(function(){return hf})),n.d(t,”faPlaceOfWorship“,(function(){return df})),n.d(t,”faPlane“,(function(){return pf})),n.d(t,”faPlaneArrival“,(function(){return mf})),n.d(t,”faPlaneDeparture“,(function(){return vf})),n.d(t,”faPlaneSlash“,(function(){return gf})),n.d(t,”faPlay“,(function(){return yf})),n.d(t,”faPlayCircle“,(function(){return bf})),n.d(t,”faPlug“,(function(){return wf})),n.d(t,”faPlus“,(function(){return xf})),n.d(t,”faPlusCircle“,(function(){return Sf})),n.d(t,”faPlusSquare“,(function(){return kf})),n.d(t,”faPodcast“,(function(){return _f})),n.d(t,”faPoll“,(function(){return zf})),n.d(t,”faPollH“,(function(){return Cf})),n.d(t,”faPoo“,(function(){return Mf})),n.d(t,”faPooStorm“,(function(){return Of})),n.d(t,”faPoop“,(function(){return Tf})),n.d(t,”faPortrait“,(function(){return Ef})),n.d(t,”faPoundSign“,(function(){return Lf})),n.d(t,”faPowerOff“,(function(){return Af})),n.d(t,”faPray“,(function(){return Rf})),n.d(t,”faPrayingHands“,(function(){return Nf})),n.d(t,”faPrescription“,(function(){return Hf})),n.d(t,”faPrescriptionBottle“,(function(){return Pf})),n.d(t,”faPrescriptionBottleAlt“,(function(){return jf})),n.d(t,”faPrint“,(function(){return Vf})),n.d(t,”faProcedures“,(function(){return Df})),n.d(t,”faProjectDiagram“,(function(){return If})),n.d(t,”faPumpMedical“,(function(){return Ff})),n.d(t,”faPumpSoap“,(function(){return Bf})),n.d(t,”faPuzzlePiece“,(function(){return Uf})),n.d(t,”faQrcode“,(function(){return qf})),n.d(t,”faQuestion“,(function(){return Gf})),n.d(t,”faQuestionCircle“,(function(){return Wf})),n.d(t,”faQuidditch“,(function(){return Zf})),n.d(t,”faQuoteLeft“,(function(){return $f})),n.d(t,”faQuoteRight“,(function(){return Jf})),n.d(t,”faQuran“,(function(){return Kf})),n.d(t,”faRadiation“,(function(){return Qf})),n.d(t,”faRadiationAlt“,(function(){return Yf})),n.d(t,”faRainbow“,(function(){return Xf})),n.d(t,”faRandom“,(function(){return eh})),n.d(t,”faReceipt“,(function(){return th})),n.d(t,”faRecordVinyl“,(function(){return nh})),n.d(t,”faRecycle“,(function(){return rh})),n.d(t,”faRedo“,(function(){return ih})),n.d(t,”faRedoAlt“,(function(){return ah})),n.d(t,”faRegistered“,(function(){return oh})),n.d(t,”faRemoveFormat“,(function(){return ch})),n.d(t,”faReply“,(function(){return sh})),n.d(t,”faReplyAll“,(function(){return uh})),n.d(t,”faRepublican“,(function(){return lh})),n.d(t,”faRestroom“,(function(){return fh})),n.d(t,”faRetweet“,(function(){return hh})),n.d(t,”faRibbon“,(function(){return dh})),n.d(t,”faRing“,(function(){return ph})),n.d(t,”faRoad“,(function(){return mh})),n.d(t,”faRobot“,(function(){return vh})),n.d(t,”faRocket“,(function(){return gh})),n.d(t,”faRoute“,(function(){return yh})),n.d(t,”faRss“,(function(){return bh})),n.d(t,”faRssSquare“,(function(){return wh})),n.d(t,”faRubleSign“,(function(){return xh})),n.d(t,”faRuler“,(function(){return Sh})),n.d(t,”faRulerCombined“,(function(){return kh})),n.d(t,”faRulerHorizontal“,(function(){return _h})),n.d(t,”faRulerVertical“,(function(){return zh})),n.d(t,”faRunning“,(function(){return Ch})),n.d(t,”faRupeeSign“,(function(){return Mh})),n.d(t,”faSadCry“,(function(){return Oh})),n.d(t,”faSadTear“,(function(){return Th})),n.d(t,”faSatellite“,(function(){return Eh})),n.d(t,”faSatelliteDish“,(function(){return Lh})),n.d(t,”faSave“,(function(){return Ah})),n.d(t,”faSchool“,(function(){return Rh})),n.d(t,”faScrewdriver“,(function(){return Nh})),n.d(t,”faScroll“,(function(){return Hh})),n.d(t,”faSdCard“,(function(){return Ph})),n.d(t,”faSearch“,(function(){return jh})),n.d(t,”faSearchDollar“,(function(){return Vh})),n.d(t,”faSearchLocation“,(function(){return Dh})),n.d(t,”faSearchMinus“,(function(){return Ih})),n.d(t,”faSearchPlus“,(function(){return Fh})),n.d(t,”faSeedling“,(function(){return Bh})),n.d(t,”faServer“,(function(){return Uh})),n.d(t,”faShapes“,(function(){return qh})),n.d(t,”faShare“,(function(){return Gh})),n.d(t,”faShareAlt“,(function(){return Wh})),n.d(t,”faShareAltSquare“,(function(){return Zh})),n.d(t,”faShareSquare“,(function(){return $h})),n.d(t,”faShekelSign“,(function(){return Jh})),n.d(t,”faShieldAlt“,(function(){return Kh})),n.d(t,”faShieldVirus“,(function(){return Qh})),n.d(t,”faShip“,(function(){return Yh})),n.d(t,”faShippingFast“,(function(){return Xh})),n.d(t,”faShoePrints“,(function(){return ed})),n.d(t,”faShoppingBag“,(function(){return td})),n.d(t,”faShoppingBasket“,(function(){return nd})),n.d(t,”faShoppingCart“,(function(){return rd})),n.d(t,”faShower“,(function(){return id})),n.d(t,”faShuttleVan“,(function(){return ad})),n.d(t,”faSign“,(function(){return od})),n.d(t,”faSignInAlt“,(function(){return cd})),n.d(t,”faSignLanguage“,(function(){return sd})),n.d(t,”faSignOutAlt“,(function(){return ud})),n.d(t,”faSignal“,(function(){return ld})),n.d(t,”faSignature“,(function(){return fd})),n.d(t,”faSimCard“,(function(){return hd})),n.d(t,”faSink“,(function(){return dd})),n.d(t,”faSitemap“,(function(){return pd})),n.d(t,”faSkating“,(function(){return md})),n.d(t,”faSkiing“,(function(){return vd})),n.d(t,”faSkiingNordic“,(function(){return gd})),n.d(t,”faSkull“,(function(){return yd})),n.d(t,”faSkullCrossbones“,(function(){return bd})),n.d(t,”faSlash“,(function(){return wd})),n.d(t,”faSleigh“,(function(){return xd})),n.d(t,”faSlidersH“,(function(){return Sd})),n.d(t,”faSmile“,(function(){return kd})),n.d(t,”faSmileBeam“,(function(){return _d})),n.d(t,”faSmileWink“,(function(){return zd})),n.d(t,”faSmog“,(function(){return Cd})),n.d(t,”faSmoking“,(function(){return Md})),n.d(t,”faSmokingBan“,(function(){return Od})),n.d(t,”faSms“,(function(){return Td})),n.d(t,”faSnowboarding“,(function(){return Ed})),n.d(t,”faSnowflake“,(function(){return Ld})),n.d(t,”faSnowman“,(function(){return Ad})),n.d(t,”faSnowplow“,(function(){return Rd})),n.d(t,”faSoap“,(function(){return Nd})),n.d(t,”faSocks“,(function(){return Hd})),n.d(t,”faSolarPanel“,(function(){return Pd})),n.d(t,”faSort“,(function(){return jd})),n.d(t,”faSortAlphaDown“,(function(){return Vd})),n.d(t,”faSortAlphaDownAlt“,(function(){return Dd})),n.d(t,”faSortAlphaUp“,(function(){return Id})),n.d(t,”faSortAlphaUpAlt“,(function(){return Fd})),n.d(t,”faSortAmountDown“,(function(){return Bd})),n.d(t,”faSortAmountDownAlt“,(function(){return Ud})),n.d(t,”faSortAmountUp“,(function(){return qd})),n.d(t,”faSortAmountUpAlt“,(function(){return Gd})),n.d(t,”faSortDown“,(function(){return Wd})),n.d(t,”faSortNumericDown“,(function(){return Zd}));n.d(t,”faSortNumericDownAlt“,(function(){return $d})),n.d(t,”faSortNumericUp“,(function(){return Jd})),n.d(t,”faSortNumericUpAlt“,(function(){return Kd})),n.d(t,”faSortUp“,(function(){return Qd})),n.d(t,”faSpa“,(function(){return Yd})),n.d(t,”faSpaceShuttle“,(function(){return Xd})),n.d(t,”faSpellCheck“,(function(){return ep})),n.d(t,”faSpider“,(function(){return tp})),n.d(t,”faSpinner“,(function(){return np})),n.d(t,”faSplotch“,(function(){return rp})),n.d(t,”faSprayCan“,(function(){return ip})),n.d(t,”faSquare“,(function(){return ap})),n.d(t,”faSquareFull“,(function(){return op})),n.d(t,”faSquareRootAlt“,(function(){return cp})),n.d(t,”faStamp“,(function(){return sp})),n.d(t,”faStar“,(function(){return up})),n.d(t,”faStarAndCrescent“,(function(){return lp})),n.d(t,”faStarHalf“,(function(){return fp})),n.d(t,”faStarHalfAlt“,(function(){return hp})),n.d(t,”faStarOfDavid“,(function(){return dp})),n.d(t,”faStarOfLife“,(function(){return pp})),n.d(t,”faStepBackward“,(function(){return mp})),n.d(t,”faStepForward“,(function(){return vp})),n.d(t,”faStethoscope“,(function(){return gp})),n.d(t,”faStickyNote“,(function(){return yp})),n.d(t,”faStop“,(function(){return bp})),n.d(t,”faStopCircle“,(function(){return wp})),n.d(t,”faStopwatch“,(function(){return xp})),n.d(t,”faStopwatch20“,(function(){return Sp})),n.d(t,”faStore“,(function(){return kp})),n.d(t,”faStoreAlt“,(function(){return _p})),n.d(t,”faStoreAltSlash“,(function(){return zp})),n.d(t,”faStoreSlash“,(function(){return Cp})),n.d(t,”faStream“,(function(){return Mp})),n.d(t,”faStreetView“,(function(){return Op})),n.d(t,”faStrikethrough“,(function(){return Tp})),n.d(t,”faStroopwafel“,(function(){return Ep})),n.d(t,”faSubscript“,(function(){return Lp})),n.d(t,”faSubway“,(function(){return Ap})),n.d(t,”faSuitcase“,(function(){return Rp})),n.d(t,”faSuitcaseRolling“,(function(){return Np})),n.d(t,”faSun“,(function(){return Hp})),n.d(t,”faSuperscript“,(function(){return Pp})),n.d(t,”faSurprise“,(function(){return jp})),n.d(t,”faSwatchbook“,(function(){return Vp})),n.d(t,”faSwimmer“,(function(){return Dp})),n.d(t,”faSwimmingPool“,(function(){return Ip})),n.d(t,”faSynagogue“,(function(){return Fp})),n.d(t,”faSync“,(function(){return Bp})),n.d(t,”faSyncAlt“,(function(){return Up})),n.d(t,”faSyringe“,(function(){return qp})),n.d(t,”faTable“,(function(){return Gp})),n.d(t,”faTableTennis“,(function(){return Wp})),n.d(t,”faTablet“,(function(){return Zp})),n.d(t,”faTabletAlt“,(function(){return $p})),n.d(t,”faTablets“,(function(){return Jp})),n.d(t,”faTachometerAlt“,(function(){return Kp})),n.d(t,”faTag“,(function(){return Qp})),n.d(t,”faTags“,(function(){return Yp})),n.d(t,”faTape“,(function(){return Xp})),n.d(t,”faTasks“,(function(){return em})),n.d(t,”faTaxi“,(function(){return tm})),n.d(t,”faTeeth“,(function(){return nm})),n.d(t,”faTeethOpen“,(function(){return rm})),n.d(t,”faTemperatureHigh“,(function(){return im})),n.d(t,”faTemperatureLow“,(function(){return am})),n.d(t,”faTenge“,(function(){return om})),n.d(t,”faTerminal“,(function(){return cm})),n.d(t,”faTextHeight“,(function(){return sm})),n.d(t,”faTextWidth“,(function(){return um})),n.d(t,”faTh“,(function(){return lm})),n.d(t,”faThLarge“,(function(){return fm})),n.d(t,”faThList“,(function(){return hm})),n.d(t,”faTheaterMasks“,(function(){return dm})),n.d(t,”faThermometer“,(function(){return pm})),n.d(t,”faThermometerEmpty“,(function(){return mm})),n.d(t,”faThermometerFull“,(function(){return vm})),n.d(t,”faThermometerHalf“,(function(){return gm})),n.d(t,”faThermometerQuarter“,(function(){return ym})),n.d(t,”faThermometerThreeQuarters“,(function(){return bm})),n.d(t,”faThumbsDown“,(function(){return wm})),n.d(t,”faThumbsUp“,(function(){return xm})),n.d(t,”faThumbtack“,(function(){return Sm})),n.d(t,”faTicketAlt“,(function(){return km})),n.d(t,”faTimes“,(function(){return _m})),n.d(t,”faTimesCircle“,(function(){return zm})),n.d(t,”faTint“,(function(){return Cm})),n.d(t,”faTintSlash“,(function(){return Mm})),n.d(t,”faTired“,(function(){return Om})),n.d(t,”faToggleOff“,(function(){return Tm})),n.d(t,”faToggleOn“,(function(){return Em})),n.d(t,”faToilet“,(function(){return Lm})),n.d(t,”faToiletPaper“,(function(){return Am})),n.d(t,”faToiletPaperSlash“,(function(){return Rm})),n.d(t,”faToolbox“,(function(){return Nm})),n.d(t,”faTools“,(function(){return Hm})),n.d(t,”faTooth“,(function(){return Pm})),n.d(t,”faTorah“,(function(){return jm})),n.d(t,”faToriiGate“,(function(){return Vm})),n.d(t,”faTractor“,(function(){return Dm})),n.d(t,”faTrademark“,(function(){return Im})),n.d(t,”faTrafficLight“,(function(){return Fm})),n.d(t,”faTrailer“,(function(){return Bm})),n.d(t,”faTrain“,(function(){return Um})),n.d(t,”faTram“,(function(){return qm})),n.d(t,”faTransgender“,(function(){return Gm})),n.d(t,”faTransgenderAlt“,(function(){return Wm})),n.d(t,”faTrash“,(function(){return Zm})),n.d(t,”faTrashAlt“,(function(){return $m})),n.d(t,”faTrashRestore“,(function(){return Jm})),n.d(t,”faTrashRestoreAlt“,(function(){return Km})),n.d(t,”faTree“,(function(){return Qm})),n.d(t,”faTrophy“,(function(){return Ym})),n.d(t,”faTruck“,(function(){return Xm})),n.d(t,”faTruckLoading“,(function(){return ev})),n.d(t,”faTruckMonster“,(function(){return tv})),n.d(t,”faTruckMoving“,(function(){return nv})),n.d(t,”faTruckPickup“,(function(){return rv})),n.d(t,”faTshirt“,(function(){return iv})),n.d(t,”faTty“,(function(){return av})),n.d(t,”faTv“,(function(){return ov})),n.d(t,”faUmbrella“,(function(){return cv})),n.d(t,”faUmbrellaBeach“,(function(){return sv})),n.d(t,”faUnderline“,(function(){return uv})),n.d(t,”faUndo“,(function(){return lv})),n.d(t,”faUndoAlt“,(function(){return fv})),n.d(t,”faUniversalAccess“,(function(){return hv})),n.d(t,”faUniversity“,(function(){return dv})),n.d(t,”faUnlink“,(function(){return pv})),n.d(t,”faUnlock“,(function(){return mv})),n.d(t,”faUnlockAlt“,(function(){return vv})),n.d(t,”faUpload“,(function(){return gv})),n.d(t,”faUser“,(function(){return yv})),n.d(t,”faUserAlt“,(function(){return bv})),n.d(t,”faUserAltSlash“,(function(){return wv})),n.d(t,”faUserAstronaut“,(function(){return xv})),n.d(t,”faUserCheck“,(function(){return Sv})),n.d(t,”faUserCircle“,(function(){return kv})),n.d(t,”faUserClock“,(function(){return _v})),n.d(t,”faUserCog“,(function(){return zv})),n.d(t,”faUserEdit“,(function(){return Cv})),n.d(t,”faUserFriends“,(function(){return Mv})),n.d(t,”faUserGraduate“,(function(){return Ov})),n.d(t,”faUserInjured“,(function(){return Tv})),n.d(t,”faUserLock“,(function(){return Ev})),n.d(t,”faUserMd“,(function(){return Lv})),n.d(t,”faUserMinus“,(function(){return Av})),n.d(t,”faUserNinja“,(function(){return Rv})),n.d(t,”faUserNurse“,(function(){return Nv})),n.d(t,”faUserPlus“,(function(){return Hv})),n.d(t,”faUserSecret“,(function(){return Pv})),n.d(t,”faUserShield“,(function(){return jv})),n.d(t,”faUserSlash“,(function(){return Vv})),n.d(t,”faUserTag“,(function(){return Dv})),n.d(t,”faUserTie“,(function(){return Iv})),n.d(t,”faUserTimes“,(function(){return Fv})),n.d(t,”faUsers“,(function(){return Bv})),n.d(t,”faUsersCog“,(function(){return Uv})),n.d(t,”faUsersSlash“,(function(){return qv})),n.d(t,”faUtensilSpoon“,(function(){return Gv})),n.d(t,”faUtensils“,(function(){return Wv})),n.d(t,”faVectorSquare“,(function(){return Zv})),n.d(t,”faVenus“,(function(){return $v})),n.d(t,”faVenusDouble“,(function(){return Jv})),n.d(t,”faVenusMars“,(function(){return Kv})),n.d(t,”faVial“,(function(){return Qv})),n.d(t,”faVials“,(function(){return Yv})),n.d(t,”faVideo“,(function(){return Xv})),n.d(t,”faVideoSlash“,(function(){return eg})),n.d(t,”faVihara“,(function(){return tg})),n.d(t,”faVirus“,(function(){return ng})),n.d(t,”faVirusSlash“,(function(){return rg})),n.d(t,”faViruses“,(function(){return ig})),n.d(t,”faVoicemail“,(function(){return ag})),n.d(t,”faVolleyballBall“,(function(){return og})),n.d(t,”faVolumeDown“,(function(){return cg})),n.d(t,”faVolumeMute“,(function(){return sg})),n.d(t,”faVolumeOff“,(function(){return ug})),n.d(t,”faVolumeUp“,(function(){return lg})),n.d(t,”faVoteYea“,(function(){return fg})),n.d(t,”faVrCardboard“,(function(){return hg})),n.d(t,”faWalking“,(function(){return dg})),n.d(t,”faWallet“,(function(){return pg})),n.d(t,”faWarehouse“,(function(){return mg})),n.d(t,”faWater“,(function(){return vg})),n.d(t,”faWaveSquare“,(function(){return gg})),n.d(t,”faWeight“,(function(){return yg})),n.d(t,”faWeightHanging“,(function(){return bg})),n.d(t,”faWheelchair“,(function(){return wg})),n.d(t,”faWifi“,(function(){return xg})),n.d(t,”faWind“,(function(){return Sg})),n.d(t,”faWindowClose“,(function(){return kg})),n.d(t,”faWindowMaximize“,(function(){return _g})),n.d(t,”faWindowMinimize“,(function(){return zg})),n.d(t,”faWindowRestore“,(function(){return Cg})),n.d(t,”faWineBottle“,(function(){return Mg})),n.d(t,”faWineGlass“,(function(){return Og})),n.d(t,”faWineGlassAlt“,(function(){return Tg})),n.d(t,”faWonSign“,(function(){return Eg})),n.d(t,”faWrench“,(function(){return Lg})),n.d(t,”faXRay“,(function(){return Ag})),n.d(t,”faYenSign“,(function(){return Rg})),n.d(t,”faYinYang“,(function(){return Ng}));var r=”fas“,i={prefix:”fas“,iconName:”ad“,icon:[512,512,,”f641“,”M157.52 272h36.96L176 218.78 157.52 272zM352 256c-13.23 0-24 10.77-24 24s10.77 24 24 24 24-10.77 24-24-10.77-24-24-24zM464 64H48C21.5 64 0 85.5 0 112v288c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48zM250.58 352h-16.94c-6.81 0-12.88-4.32-15.12-10.75L211.15 320h-70.29l-7.38 21.25A16 16 0 0 1 118.36 352h-16.94c-11.01 0-18.73-10.85-15.12-21.25L140 176.12A23.995 23.995 0 0 1 162.67 160h26.66A23.99 23.99 0 0 1 212 176.13l53.69 154.62c3.61 10.4-4.11 21.25-15.11 21.25zM424 336c0 8.84-7.16 16-16 16h-16c-4.85 0-9.04-2.27-11.98-5.68-8.62 3.66-18.09 5.68-28.02 5.68-39.7 0-72-32.3-72-72s32.3-72 72-72c8.46 0 16.46 1.73 24 4.42V176c0-8.84 7.16-16 16-16h16c8.84 0 16 7.16 16 16v160z“]},a={prefix:”fas“,iconName:”address-book“,icon:[448,512,,”f2b9“,”M436 160c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-20V48c0-26.5-21.5-48-48-48H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h320c26.5 0 48-21.5 48-48v-48h20c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-20v-64h20c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-20v-64h20zm-228-32c35.3 0 64 28.7 64 64s-28.7 64-64 64-64-28.7-64-64 28.7-64 64-64zm112 236.8c0 10.6-10 19.2-22.4 19.2H118.4C106 384 96 375.4 96 364.8v-19.2c0-31.8 30.1-57.6 67.2-57.6h5c12.3 5.1 25.7 8 39.8 8s27.6-2.9 39.8-8h5c37.1 0 67.2 25.8 67.2 57.6v19.2z“]},o={prefix:”fas“,iconName:”address-card“,icon:[576,512,,”f2bb“,”M528 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h480c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-352 96c35.3 0 64 28.7 64 64s-28.7 64-64 64-64-28.7-64-64 28.7-64 64-64zm112 236.8c0 10.6-10 19.2-22.4 19.2H86.4C74 384 64 375.4 64 364.8v-19.2c0-31.8 30.1-57.6 67.2-57.6h5c12.3 5.1 25.7 8 39.8 8s27.6-2.9 39.8-8h5c37.1 0 67.2 25.8 67.2 57.6v19.2zM512 312c0 4.4-3.6 8-8 8H360c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16zm0-64c0 4.4-3.6 8-8 8H360c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16zm0-64c0 4.4-3.6 8-8 8H360c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16z“]},c={prefix:”fas“,iconName:”adjust“,icon:[512,512,,”f042“,”M8 256c0 136.966 111.033 248 248 248s248-111.034 248-248S392.966 8 256 8 8 119.033 8 256zm248 184V72c101.705 0 184 82.311 184 184 0 101.705-82.311 184-184 184z“]},s={prefix:”fas“,iconName:”air-freshener“,icon:[384,512,,”f5d0“,”M378.94 321.41L284.7 224h49.22c15.3 0 23.66-16.6 13.86-27.53L234.45 69.96c3.43-6.61 5.55-14 5.55-21.96 0-26.51-21.49-48-48-48s-48 21.49-48 48c0 7.96 2.12 15.35 5.55 21.96L36.22 196.47C26.42 207.4 34.78 224 50.08 224H99.3L5.06 321.41C-6.69 333.56 3.34 352 21.7 352H160v32H48c-8.84 0-16 7.16-16 16v96c0 8.84 7.16 16 16 16h288c8.84 0 16-7.16 16-16v-96c0-8.84-7.16-16-16-16H224v-32h138.3c18.36 0 28.39-18.44 16.64-30.59zM192 31.98c8.85 0 16.02 7.17 16.02 16.02 0 8.84-7.17 16.02-16.02 16.02S175.98 56.84 175.98 48c0-8.85 7.17-16.02 16.02-16.02zM304 432v32H80v-32h224z“]},u={prefix:”fas“,iconName:”align-center“,icon:[448,512,,”f037“,”M432 160H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0 256H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM108.1 96h231.81A12.09 12.09 0 0 0 352 83.9V44.09A12.09 12.09 0 0 0 339.91 32H108.1A12.09 12.09 0 0 0 96 44.09V83.9A12.1 12.1 0 0 0 108.1 96zm231.81 256A12.09 12.09 0 0 0 352 339.9v-39.81A12.09 12.09 0 0 0 339.91 288H108.1A12.09 12.09 0 0 0 96 300.09v39.81a12.1 12.1 0 0 0 12.1 12.1z“]},l={prefix:”fas“,iconName:”align-justify“,icon:[448,512,,”f039“,”M432 416H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-128H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-128H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-128H16A16 16 0 0 0 0 48v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16z“]},f={prefix:”fas“,iconName:”align-left“,icon:[448,512,,”f036“,”M12.83 352h262.34A12.82 12.82 0 0 0 288 339.17v-38.34A12.82 12.82 0 0 0 275.17 288H12.83A12.82 12.82 0 0 0 0 300.83v38.34A12.82 12.82 0 0 0 12.83 352zm0-256h262.34A12.82 12.82 0 0 0 288 83.17V44.83A12.82 12.82 0 0 0 275.17 32H12.83A12.82 12.82 0 0 0 0 44.83v38.34A12.82 12.82 0 0 0 12.83 96zM432 160H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0 256H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16z“]},h={prefix:”fas“,iconName:”align-right“,icon:[448,512,,”f038“,”M16 224h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16zm416 192H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm3.17-384H172.83A12.82 12.82 0 0 0 160 44.83v38.34A12.82 12.82 0 0 0 172.83 96h262.34A12.82 12.82 0 0 0 448 83.17V44.83A12.82 12.82 0 0 0 435.17 32zm0 256H172.83A12.82 12.82 0 0 0 160 300.83v38.34A12.82 12.82 0 0 0 172.83 352h262.34A12.82 12.82 0 0 0 448 339.17v-38.34A12.82 12.82 0 0 0 435.17 288z“]},d={prefix:”fas“,iconName:”allergies“,icon:[448,512,,”f461“,”M416 112c-17.6 0-32 14.4-32 32v72c0 4.4-3.6 8-8 8h-16c-4.4 0-8-3.6-8-8V64c0-17.6-14.4-32-32-32s-32 14.4-32 32v152c0 4.4-3.6 8-8 8h-16c-4.4 0-8-3.6-8-8V32c0-17.6-14.4-32-32-32s-32 14.4-32 32v184c0 4.4-3.6 8-8 8h-16c-4.4 0-8-3.6-8-8V64c0-17.6-14.4-32-32-32S96 46.4 96 64v241l-23.6-32.5c-13-17.9-38-21.8-55.9-8.8s-21.8 38-8.8 55.9l125.6 172.7c9 12.4 23.5 19.8 38.8 19.8h197.6c22.3 0 41.6-15.3 46.7-37l26.5-112.7c3.2-13.7 4.9-28.3 5.1-42.3V144c0-17.6-14.4-32-32-32zM176 416c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm0-96c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm64 128c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm0-96c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm64 32c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm32 64c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm32-128c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16z“]},p={prefix:”fas“,iconName:”ambulance“,icon:[640,512,,”f0f9“,”M624 352h-16V243.9c0-12.7-5.1-24.9-14.1-33.9L494 110.1c-9-9-21.2-14.1-33.9-14.1H416V48c0-26.5-21.5-48-48-48H48C21.5 0 0 21.5 0 48v320c0 26.5 21.5 48 48 48h16c0 53 43 96 96 96s96-43 96-96h128c0 53 43 96 96 96s96-43 96-96h48c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zM160 464c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm144-248c0 4.4-3.6 8-8 8h-56v56c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8v-56h-56c-4.4 0-8-3.6-8-8v-48c0-4.4 3.6-8 8-8h56v-56c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v56h56c4.4 0 8 3.6 8 8v48zm176 248c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm80-208H416V144h44.1l99.9 99.9V256z“]},m={prefix:”fas“,iconName:”american-sign-language-interpreting“,icon:[640,512,,”f2a3“,”M290.547 189.039c-20.295-10.149-44.147-11.199-64.739-3.89 42.606 0 71.208 20.475 85.578 50.576 8.576 17.899-5.148 38.071-23.617 38.071 18.429 0 32.211 20.136 23.617 38.071-14.725 30.846-46.123 50.854-80.298 50.854-.557 0-94.471-8.615-94.471-8.615l-66.406 33.347c-9.384 4.693-19.815.379-23.895-7.781L1.86 290.747c-4.167-8.615-1.111-18.897 6.946-23.621l58.072-33.069L108 159.861c6.39-57.245 34.731-109.767 79.743-146.726 11.391-9.448 28.341-7.781 37.51 3.613 9.446 11.394 7.78 28.067-3.612 37.516-12.503 10.559-23.618 22.509-32.509 35.57 21.672-14.729 46.679-24.732 74.186-28.067 14.725-1.945 28.063 8.336 29.73 23.065 1.945 14.728-8.336 28.067-23.062 29.734-16.116 1.945-31.12 7.503-44.178 15.284 26.114-5.713 58.712-3.138 88.079 11.115 13.336 6.669 18.893 22.509 12.224 35.848-6.389 13.06-22.504 18.617-35.564 12.226zm-27.229 69.472c-6.112-12.505-18.338-20.286-32.231-20.286a35.46 35.46 0 0 0-35.565 35.57c0 21.428 17.808 35.57 35.565 35.57 13.893 0 26.119-7.781 32.231-20.286 4.446-9.449 13.614-15.006 23.339-15.284-9.725-.277-18.893-5.835-23.339-15.284zm374.821-37.237c4.168 8.615 1.111 18.897-6.946 23.621l-58.071 33.069L532 352.16c-6.39 57.245-34.731 109.767-79.743 146.726-10.932 9.112-27.799 8.144-37.51-3.613-9.446-11.394-7.78-28.067 3.613-37.516 12.503-10.559 23.617-22.509 32.508-35.57-21.672 14.729-46.679 24.732-74.186 28.067-10.021 2.506-27.552-5.643-29.73-23.065-1.945-14.728 8.336-28.067 23.062-29.734 16.116-1.946 31.12-7.503 44.178-15.284-26.114 5.713-58.712 3.138-88.079-11.115-13.336-6.669-18.893-22.509-12.224-35.848 6.389-13.061 22.505-18.619 35.565-12.227 20.295 10.149 44.147 11.199 64.739 3.89-42.606 0-71.208-20.475-85.578-50.576-8.576-17.899 5.148-38.071 23.617-38.071-18.429 0-32.211-20.136-23.617-38.071 14.033-29.396 44.039-50.887 81.966-50.854l92.803 8.615 66.406-33.347c9.408-4.704 19.828-.354 23.894 7.781l44.455 88.926zm-229.227-18.618c-13.893 0-26.119 7.781-32.231 20.286-4.446 9.449-13.614 15.006-23.339 15.284 9.725.278 18.893 5.836 23.339 15.284 6.112 12.505 18.338 20.286 32.231 20.286a35.46 35.46 0 0 0 35.565-35.57c0-21.429-17.808-35.57-35.565-35.57z“]},v={prefix:”fas“,iconName:”anchor“,icon:[576,512,,”f13d“,”M12.971 352h32.394C67.172 454.735 181.944 512 288 512c106.229 0 220.853-57.38 242.635-160h32.394c10.691 0 16.045-12.926 8.485-20.485l-67.029-67.029c-4.686-4.686-12.284-4.686-16.971 0l-67.029 67.029c-7.56 7.56-2.206 20.485 8.485 20.485h35.146c-20.29 54.317-84.963 86.588-144.117 94.015V256h52c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-52v-5.47c37.281-13.178 63.995-48.725 64-90.518C384.005 43.772 341.605.738 289.37.01 235.723-.739 192 42.525 192 96c0 41.798 26.716 77.35 64 90.53V192h-52c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h52v190.015c-58.936-7.399-123.82-39.679-144.117-94.015h35.146c10.691 0 16.045-12.926 8.485-20.485l-67.029-67.029c-4.686-4.686-12.284-4.686-16.971 0L4.485 331.515C-3.074 339.074 2.28 352 12.971 352zM288 64c17.645 0 32 14.355 32 32s-14.355 32-32 32-32-14.355-32-32 14.355-32 32-32z“]},g={prefix:”fas“,iconName:”angle-double-down“,icon:[320,512,,”f103“,”M143 256.3L7 120.3c-9.4-9.4-9.4-24.6 0-33.9l22.6-22.6c9.4-9.4 24.6-9.4 33.9 0l96.4 96.4 96.4-96.4c9.4-9.4 24.6-9.4 33.9 0L313 86.3c9.4 9.4 9.4 24.6 0 33.9l-136 136c-9.4 9.5-24.6 9.5-34 .1zm34 192l136-136c9.4-9.4 9.4-24.6 0-33.9l-22.6-22.6c-9.4-9.4-24.6-9.4-33.9 0L160 352.1l-96.4-96.4c-9.4-9.4-24.6-9.4-33.9 0L7 278.3c-9.4 9.4-9.4 24.6 0 33.9l136 136c9.4 9.5 24.6 9.5 34 .1z“]},y={prefix:”fas“,iconName:”angle-double-left“,icon:[448,512,,”f100“,”M223.7 239l136-136c9.4-9.4 24.6-9.4 33.9 0l22.6 22.6c9.4 9.4 9.4 24.6 0 33.9L319.9 256l96.4 96.4c9.4 9.4 9.4 24.6 0 33.9L393.7 409c-9.4 9.4-24.6 9.4-33.9 0l-136-136c-9.5-9.4-9.5-24.6-.1-34zm-192 34l136 136c9.4 9.4 24.6 9.4 33.9 0l22.6-22.6c9.4-9.4 9.4-24.6 0-33.9L127.9 256l96.4-96.4c9.4-9.4 9.4-24.6 0-33.9L201.7 103c-9.4-9.4-24.6-9.4-33.9 0l-136 136c-9.5 9.4-9.5 24.6-.1 34z“]},b={prefix:”fas“,iconName:”angle-double-right“,icon:[448,512,,”f101“,”M224.3 273l-136 136c-9.4 9.4-24.6 9.4-33.9 0l-22.6-22.6c-9.4-9.4-9.4-24.6 0-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6 0-33.9L54.3 103c9.4-9.4 24.6-9.4 33.9 0l136 136c9.5 9.4 9.5 24.6.1 34zm192-34l-136-136c-9.4-9.4-24.6-9.4-33.9 0l-22.6 22.6c-9.4 9.4-9.4 24.6 0 33.9l96.4 96.4-96.4 96.4c-9.4 9.4-9.4 24.6 0 33.9l22.6 22.6c9.4 9.4 24.6 9.4 33.9 0l136-136c9.4-9.2 9.4-24.4 0-33.8z“]},w={prefix:”fas“,iconName:”angle-double-up“,icon:[320,512,,”f102“,”M177 255.7l136 136c9.4 9.4 9.4 24.6 0 33.9l-22.6 22.6c-9.4 9.4-24.6 9.4-33.9 0L160 351.9l-96.4 96.4c-9.4 9.4-24.6 9.4-33.9 0L7 425.7c-9.4-9.4-9.4-24.6 0-33.9l136-136c9.4-9.5 24.6-9.5 34-.1zm-34-192L7 199.7c-9.4 9.4-9.4 24.6 0 33.9l22.6 22.6c9.4 9.4 24.6 9.4 33.9 0l96.4-96.4 96.4 96.4c9.4 9.4 24.6 9.4 33.9 0l22.6-22.6c9.4-9.4 9.4-24.6 0-33.9l-136-136c-9.2-9.4-24.4-9.4-33.8 0z“]},x={prefix:”fas“,iconName:”angle-down“,icon:[320,512,,”f107“,”M143 352.3L7 216.3c-9.4-9.4-9.4-24.6 0-33.9l22.6-22.6c9.4-9.4 24.6-9.4 33.9 0l96.4 96.4 96.4-96.4c9.4-9.4 24.6-9.4 33.9 0l22.6 22.6c9.4 9.4 9.4 24.6 0 33.9l-136 136c-9.2 9.4-24.4 9.4-33.8 0z“]},S={prefix:”fas“,iconName:”angle-left“,icon:[256,512,,”f104“,”M31.7 239l136-136c9.4-9.4 24.6-9.4 33.9 0l22.6 22.6c9.4 9.4 9.4 24.6 0 33.9L127.9 256l96.4 96.4c9.4 9.4 9.4 24.6 0 33.9L201.7 409c-9.4 9.4-24.6 9.4-33.9 0l-136-136c-9.5-9.4-9.5-24.6-.1-34z“]},k={prefix:”fas“,iconName:”angle-right“,icon:[256,512,,”f105“,”M224.3 273l-136 136c-9.4 9.4-24.6 9.4-33.9 0l-22.6-22.6c-9.4-9.4-9.4-24.6 0-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6 0-33.9L54.3 103c9.4-9.4 24.6-9.4 33.9 0l136 136c9.5 9.4 9.5 24.6.1 34z“]},_={prefix:”fas“,iconName:”angle-up“,icon:[320,512,,”f106“,”M177 159.7l136 136c9.4 9.4 9.4 24.6 0 33.9l-22.6 22.6c-9.4 9.4-24.6 9.4-33.9 0L160 255.9l-96.4 96.4c-9.4 9.4-24.6 9.4-33.9 0L7 329.7c-9.4-9.4-9.4-24.6 0-33.9l136-136c9.4-9.5 24.6-9.5 34-.1z“]},z={prefix:”fas“,iconName:”angry“,icon:[496,512,,”f556“,”M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM136 240c0-9.3 4.1-17.5 10.5-23.4l-31-9.3c-8.5-2.5-13.3-11.5-10.7-19.9 2.5-8.5 11.4-13.2 19.9-10.7l80 24c8.5 2.5 13.3 11.5 10.7 19.9-2.1 6.9-8.4 11.4-15.3 11.4-.5 0-1.1-.2-1.7-.2.7 2.7 1.7 5.3 1.7 8.2 0 17.7-14.3 32-32 32S136 257.7 136 240zm168 154.2c-27.8-33.4-84.2-33.4-112.1 0-13.5 16.3-38.2-4.2-24.6-20.5 20-24 49.4-37.8 80.6-37.8s60.6 13.8 80.6 37.8c13.8 16.5-11.1 36.6-24.5 20.5zm76.6-186.9l-31 9.3c6.3 5.8 10.5 14.1 10.5 23.4 0 17.7-14.3 32-32 32s-32-14.3-32-32c0-2.9.9-5.6 1.7-8.2-.6.1-1.1.2-1.7.2-6.9 0-13.2-4.5-15.3-11.4-2.5-8.5 2.3-17.4 10.7-19.9l80-24c8.4-2.5 17.4 2.3 19.9 10.7 2.5 8.5-2.3 17.4-10.8 19.9z“]},C={prefix:”fas“,iconName:”ankh“,icon:[320,512,,”f644“,”M296 256h-44.62C272.46 222.01 288 181.65 288 144 288 55.63 230.69 0 160 0S32 55.63 32 144c0 37.65 15.54 78.01 36.62 112H24c-13.25 0-24 10.74-24 24v32c0 13.25 10.75 24 24 24h96v152c0 13.25 10.75 24 24 24h32c13.25 0 24-10.75 24-24V336h96c13.25 0 24-10.75 24-24v-32c0-13.26-10.75-24-24-24zM160 80c29.61 0 48 24.52 48 64 0 34.66-27.14 78.14-48 100.87-20.86-22.72-48-66.21-48-100.87 0-39.48 18.39-64 48-64z“]},M={prefix:”fas“,iconName:”apple-alt“,icon:[448,512,,”f5d1“,”M350.85 129c25.97 4.67 47.27 18.67 63.92 42 14.65 20.67 24.64 46.67 29.96 78 4.67 28.67 4.32 57.33-1 86-7.99 47.33-23.97 87-47.94 119-28.64 38.67-64.59 58-107.87 58-10.66 0-22.3-3.33-34.96-10-8.66-5.33-18.31-8-28.97-8s-20.3 2.67-28.97 8c-12.66 6.67-24.3 10-34.96 10-43.28 0-79.23-19.33-107.87-58-23.97-32-39.95-71.67-47.94-119-5.32-28.67-5.67-57.33-1-86 5.32-31.33 15.31-57.33 29.96-78 16.65-23.33 37.95-37.33 63.92-42 15.98-2.67 37.95-.33 65.92 7 23.97 6.67 44.28 14.67 60.93 24 16.65-9.33 36.96-17.33 60.93-24 27.98-7.33 49.96-9.67 65.94-7zm-54.94-41c-9.32 8.67-21.65 15-36.96 19-10.66 3.33-22.3 5-34.96 5l-14.98-1c-1.33-9.33-1.33-20 0-32 2.67-24 10.32-42.33 22.97-55 9.32-8.67 21.65-15 36.96-19 10.66-3.33 22.3-5 34.96-5l14.98 1 1 15c0 12.67-1.67 24.33-4.99 35-3.99 15.33-10.31 27.67-18.98 37z“]},O={prefix:”fas“,iconName:”archive“,icon:[512,512,,”f187“,”M32 448c0 17.7 14.3 32 32 32h384c17.7 0 32-14.3 32-32V160H32v288zm160-212c0-6.6 5.4-12 12-12h104c6.6 0 12 5.4 12 12v8c0 6.6-5.4 12-12 12H204c-6.6 0-12-5.4-12-12v-8zM480 32H32C14.3 32 0 46.3 0 64v48c0 8.8 7.2 16 16 16h480c8.8 0 16-7.2 16-16V64c0-17.7-14.3-32-32-32z“]},T={prefix:”fas“,iconName:”archway“,icon:[576,512,,”f557“,”M560 448h-16V96H32v352H16.02c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16H176c8.84 0 16-7.16 16-16V320c0-53.02 42.98-96 96-96s96 42.98 96 96l.02 160v16c0 8.84 7.16 16 16 16H560c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zm0-448H16C7.16 0 0 7.16 0 16v32c0 8.84 7.16 16 16 16h544c8.84 0 16-7.16 16-16V16c0-8.84-7.16-16-16-16z“]},E={prefix:”fas“,iconName:”arrow-alt-circle-down“,icon:[512,512,,”f358“,”M504 256c0 137-111 248-248 248S8 393 8 256 119 8 256 8s248 111 248 248zM212 140v116h-70.9c-10.7 0-16.1 13-8.5 20.5l114.9 114.3c4.7 4.7 12.2 4.7 16.9 0l114.9-114.3c7.6-7.6 2.2-20.5-8.5-20.5H300V140c0-6.6-5.4-12-12-12h-64c-6.6 0-12 5.4-12 12z“]},L={prefix:”fas“,iconName:”arrow-alt-circle-left“,icon:[512,512,,”f359“,”M256 504C119 504 8 393 8 256S119 8 256 8s248 111 248 248-111 248-248 248zm116-292H256v-70.9c0-10.7-13-16.1-20.5-8.5L121.2 247.5c-4.7 4.7-4.7 12.2 0 16.9l114.3 114.9c7.6 7.6 20.5 2.2 20.5-8.5V300h116c6.6 0 12-5.4 12-12v-64c0-6.6-5.4-12-12-12z“]},A={prefix:”fas“,iconName:”arrow-alt-circle-right“,icon:[512,512,,”f35a“,”M256 8c137 0 248 111 248 248S393 504 256 504 8 393 8 256 119 8 256 8zM140 300h116v70.9c0 10.7 13 16.1 20.5 8.5l114.3-114.9c4.7-4.7 4.7-12.2 0-16.9l-114.3-115c-7.6-7.6-20.5-2.2-20.5 8.5V212H140c-6.6 0-12 5.4-12 12v64c0 6.6 5.4 12 12 12z“]},R={prefix:”fas“,iconName:”arrow-alt-circle-up“,icon:[512,512,,”f35b“,”M8 256C8 119 119 8 256 8s248 111 248 248-111 248-248 248S8 393 8 256zm292 116V256h70.9c10.7 0 16.1-13 8.5-20.5L264.5 121.2c-4.7-4.7-12.2-4.7-16.9 0l-115 114.3c-7.6 7.6-2.2 20.5 8.5 20.5H212v116c0 6.6 5.4 12 12 12h64c6.6 0 12-5.4 12-12z“]},N={prefix:”fas“,iconName:”arrow-circle-down“,icon:[512,512,,”f0ab“,”M504 256c0 137-111 248-248 248S8 393 8 256 119 8 256 8s248 111 248 248zm-143.6-28.9L288 302.6V120c0-13.3-10.7-24-24-24h-16c-13.3 0-24 10.7-24 24v182.6l-72.4-75.5c-9.3-9.7-24.8-9.9-34.3-.4l-10.9 11c-9.4 9.4-9.4 24.6 0 33.9L239 404.3c9.4 9.4 24.6 9.4 33.9 0l132.7-132.7c9.4-9.4 9.4-24.6 0-33.9l-10.9-11c-9.5-9.5-25-9.3-34.3.4z“]},H={prefix:”fas“,iconName:”arrow-circle-left“,icon:[512,512,,”f0a8“,”M256 504C119 504 8 393 8 256S119 8 256 8s248 111 248 248-111 248-248 248zm28.9-143.6L209.4 288H392c13.3 0 24-10.7 24-24v-16c0-13.3-10.7-24-24-24H209.4l75.5-72.4c9.7-9.3 9.9-24.8.4-34.3l-11-10.9c-9.4-9.4-24.6-9.4-33.9 0L107.7 239c-9.4 9.4-9.4 24.6 0 33.9l132.7 132.7c9.4 9.4 24.6 9.4 33.9 0l11-10.9c9.5-9.5 9.3-25-.4-34.3z“]},P={prefix:”fas“,iconName:”arrow-circle-right“,icon:[512,512,,”f0a9“,”M256 8c137 0 248 111 248 248S393 504 256 504 8 393 8 256 119 8 256 8zm-28.9 143.6l75.5 72.4H120c-13.3 0-24 10.7-24 24v16c0 13.3 10.7 24 24 24h182.6l-75.5 72.4c-9.7 9.3-9.9 24.8-.4 34.3l11 10.9c9.4 9.4 24.6 9.4 33.9 0L404.3 273c9.4-9.4 9.4-24.6 0-33.9L271.6 106.3c-9.4-9.4-24.6-9.4-33.9 0l-11 10.9c-9.5 9.6-9.3 25.1.4 34.4z“]},j={prefix:”fas“,iconName:”arrow-circle-up“,icon:[512,512,,”f0aa“,”M8 256C8 119 119 8 256 8s248 111 248 248-111 248-248 248S8 393 8 256zm143.6 28.9l72.4-75.5V392c0 13.3 10.7 24 24 24h16c13.3 0 24-10.7 24-24V209.4l72.4 75.5c9.3 9.7 24.8 9.9 34.3.4l10.9-11c9.4-9.4 9.4-24.6 0-33.9L273 107.7c-9.4-9.4-24.6-9.4-33.9 0L106.3 240.4c-9.4 9.4-9.4 24.6 0 33.9l10.9 11c9.6 9.5 25.1 9.3 34.4-.4z“]},V={prefix:”fas“,iconName:”arrow-down“,icon:[448,512,,”f063“,”M413.1 222.5l22.2 22.2c9.4 9.4 9.4 24.6 0 33.9L241 473c-9.4 9.4-24.6 9.4-33.9 0L12.7 278.6c-9.4-9.4-9.4-24.6 0-33.9l22.2-22.2c9.5-9.5 25-9.3 34.3.4L184 343.4V56c0-13.3 10.7-24 24-24h32c13.3 0 24 10.7 24 24v287.4l114.8-120.5c9.3-9.8 24.8-10 34.3-.4z“]},D={prefix:”fas“,iconName:”arrow-left“,icon:[448,512,,”f060“,”M257.5 445.1l-22.2 22.2c-9.4 9.4-24.6 9.4-33.9 0L7 273c-9.4-9.4-9.4-24.6 0-33.9L201.4 44.7c9.4-9.4 24.6-9.4 33.9 0l22.2 22.2c9.5 9.5 9.3 25-.4 34.3L136.6 216H424c13.3 0 24 10.7 24 24v32c0 13.3-10.7 24-24 24H136.6l120.5 114.8c9.8 9.3 10 24.8.4 34.3z“]},I={prefix:”fas“,iconName:”arrow-right“,icon:[448,512,,”f061“,”M190.5 66.9l22.2-22.2c9.4-9.4 24.6-9.4 33.9 0L441 239c9.4 9.4 9.4 24.6 0 33.9L246.6 467.3c-9.4 9.4-24.6 9.4-33.9 0l-22.2-22.2c-9.5-9.5-9.3-25 .4-34.3L311.4 296H24c-13.3 0-24-10.7-24-24v-32c0-13.3 10.7-24 24-24h287.4L190.9 101.2c-9.8-9.3-10-24.8-.4-34.3z“]},F={prefix:”fas“,iconName:”arrow-up“,icon:[448,512,,”f062“,”M34.9 289.5l-22.2-22.2c-9.4-9.4-9.4-24.6 0-33.9L207 39c9.4-9.4 24.6-9.4 33.9 0l194.3 194.3c9.4 9.4 9.4 24.6 0 33.9L413 289.4c-9.5 9.5-25 9.3-34.3-.4L264 168.6V456c0 13.3-10.7 24-24 24h-32c-13.3 0-24-10.7-24-24V168.6L69.2 289.1c-9.3 9.8-24.8 10-34.3.4z“]},B={prefix:”fas“,iconName:”arrows-alt“,icon:[512,512,,”f0b2“,”M352.201 425.775l-79.196 79.196c-9.373 9.373-24.568 9.373-33.941 0l-79.196-79.196c-15.119-15.119-4.411-40.971 16.971-40.97h51.162L228 284H127.196v51.162c0 21.382-25.851 32.09-40.971 16.971L7.029 272.937c-9.373-9.373-9.373-24.569 0-33.941L86.225 159.8c15.119-15.119 40.971-4.411 40.971 16.971V228H228V127.196h-51.23c-21.382 0-32.09-25.851-16.971-40.971l79.196-79.196c9.373-9.373 24.568-9.373 33.941 0l79.196 79.196c15.119 15.119 4.411 40.971-16.971 40.971h-51.162V228h100.804v-51.162c0-21.382 25.851-32.09 40.97-16.971l79.196 79.196c9.373 9.373 9.373 24.569 0 33.941L425.773 352.2c-15.119 15.119-40.971 4.411-40.97-16.971V284H284v100.804h51.23c21.382 0 32.09 25.851 16.971 40.971z“]},U={prefix:”fas“,iconName:”arrows-alt-h“,icon:[512,512,,”f337“,”M377.941 169.941V216H134.059v-46.059c0-21.382-25.851-32.09-40.971-16.971L7.029 239.029c-9.373 9.373-9.373 24.568 0 33.941l86.059 86.059c15.119 15.119 40.971 4.411 40.971-16.971V296h243.882v46.059c0 21.382 25.851 32.09 40.971 16.971l86.059-86.059c9.373-9.373 9.373-24.568 0-33.941l-86.059-86.059c-15.119-15.12-40.971-4.412-40.971 16.97z“]},q={prefix:”fas“,iconName:”arrows-alt-v“,icon:[256,512,,”f338“,”M214.059 377.941H168V134.059h46.059c21.382 0 32.09-25.851 16.971-40.971L144.971 7.029c-9.373-9.373-24.568-9.373-33.941 0L24.971 93.088c-15.119 15.119-4.411 40.971 16.971 40.971H88v243.882H41.941c-21.382 0-32.09 25.851-16.971 40.971l86.059 86.059c9.373 9.373 24.568 9.373 33.941 0l86.059-86.059c15.12-15.119 4.412-40.971-16.97-40.971z“]},G={prefix:”fas“,iconName:”assistive-listening-systems“,icon:[512,512,,”f2a2“,”M216 260c0 15.464-12.536 28-28 28s-28-12.536-28-28c0-44.112 35.888-80 80-80s80 35.888 80 80c0 15.464-12.536 28-28 28s-28-12.536-28-28c0-13.234-10.767-24-24-24s-24 10.766-24 24zm24-176c-97.047 0-176 78.953-176 176 0 15.464 12.536 28 28 28s28-12.536 28-28c0-66.168 53.832-120 120-120s120 53.832 120 120c0 75.164-71.009 70.311-71.997 143.622L288 404c0 28.673-23.327 52-52 52-15.464 0-28 12.536-28 28s12.536 28 28 28c59.475 0 107.876-48.328 108-107.774.595-34.428 72-48.24 72-144.226 0-97.047-78.953-176-176-176zm-80 236c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zM32 448c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm480-187.993c0-1.518-.012-3.025-.045-4.531C510.076 140.525 436.157 38.47 327.994 1.511c-14.633-4.998-30.549 2.809-35.55 17.442-5 14.633 2.81 30.549 17.442 35.55 85.906 29.354 144.61 110.513 146.077 201.953l.003.188c.026 1.118.033 2.236.033 3.363 0 15.464 12.536 28 28 28s28.001-12.536 28.001-28zM152.971 439.029l-80-80L39.03 392.97l80 80 33.941-33.941z“]},W={prefix:”fas“,iconName:”asterisk“,icon:[512,512,,”f069“,”M478.21 334.093L336 256l142.21-78.093c11.795-6.477 15.961-21.384 9.232-33.037l-19.48-33.741c-6.728-11.653-21.72-15.499-33.227-8.523L296 186.718l3.475-162.204C299.763 11.061 288.937 0 275.48 0h-38.96c-13.456 0-24.283 11.061-23.994 24.514L216 186.718 77.265 102.607c-11.506-6.976-26.499-3.13-33.227 8.523l-19.48 33.741c-6.728 11.653-2.562 26.56 9.233 33.037L176 256 33.79 334.093c-11.795 6.477-15.961 21.384-9.232 33.037l19.48 33.741c6.728 11.653 21.721 15.499 33.227 8.523L216 325.282l-3.475 162.204C212.237 500.939 223.064 512 236.52 512h38.961c13.456 0 24.283-11.061 23.995-24.514L296 325.282l138.735 84.111c11.506 6.976 26.499 3.13 33.227-8.523l19.48-33.741c6.728-11.653 2.563-26.559-9.232-33.036z“]},Z={prefix:”fas“,iconName:”at“,icon:[512,512,,”f1fa“,”M256 8C118.941 8 8 118.919 8 256c0 137.059 110.919 248 248 248 48.154 0 95.342-14.14 135.408-40.223 12.005-7.815 14.625-24.288 5.552-35.372l-10.177-12.433c-7.671-9.371-21.179-11.667-31.373-5.129C325.92 429.757 291.314 440 256 440c-101.458 0-184-82.542-184-184S154.542 72 256 72c100.139 0 184 57.619 184 160 0 38.786-21.093 79.742-58.17 83.693-17.349-.454-16.91-12.857-13.476-30.024l23.433-121.11C394.653 149.75 383.308 136 368.225 136h-44.981a13.518 13.518 0 0 0-13.432 11.993l-.01.092c-14.697-17.901-40.448-21.775-59.971-21.775-74.58 0-137.831 62.234-137.831 151.46 0 65.303 36.785 105.87 96 105.87 26.984 0 57.369-15.637 74.991-38.333 9.522 34.104 40.613 34.103 70.71 34.103C462.609 379.41 504 307.798 504 232 504 95.653 394.023 8 256 8zm-21.68 304.43c-22.249 0-36.07-15.623-36.07-40.771 0-44.993 30.779-72.729 58.63-72.729 22.292 0 35.601 15.241 35.601 40.77 0 45.061-33.875 72.73-58.161 72.73z“]},$={prefix:”fas“,iconName:”atlas“,icon:[448,512,,”f558“,”M318.38 208h-39.09c-1.49 27.03-6.54 51.35-14.21 70.41 27.71-13.24 48.02-39.19 53.3-70.41zm0-32c-5.29-31.22-25.59-57.17-53.3-70.41 7.68 19.06 12.72 43.38 14.21 70.41h39.09zM224 97.31c-7.69 7.45-20.77 34.42-23.43 78.69h46.87c-2.67-44.26-15.75-71.24-23.44-78.69zm-41.08 8.28c-27.71 13.24-48.02 39.19-53.3 70.41h39.09c1.49-27.03 6.53-51.35 14.21-70.41zm0 172.82c-7.68-19.06-12.72-43.38-14.21-70.41h-39.09c5.28 31.22 25.59 57.17 53.3 70.41zM247.43 208h-46.87c2.66 44.26 15.74 71.24 23.43 78.69 7.7-7.45 20.78-34.43 23.44-78.69zM448 358.4V25.6c0-16-9.6-25.6-25.6-25.6H96C41.6 0 0 41.6 0 96v320c0 54.4 41.6 96 96 96h326.4c12.8 0 25.6-9.6 25.6-25.6v-16c0-6.4-3.2-12.8-9.6-19.2-3.2-16-3.2-60.8 0-73.6 6.4-3.2 9.6-9.6 9.6-19.2zM224 64c70.69 0 128 57.31 128 128s-57.31 128-128 128S96 262.69 96 192 153.31 64 224 64zm160 384H96c-19.2 0-32-12.8-32-32s16-32 32-32h288v64z“]},J={prefix:”fas“,iconName:”atom“,icon:[448,512,,”f5d2“,”M223.99908,224a32,32,0,1,0,32.00782,32A32.06431,32.06431,0,0,0,223.99908,224Zm214.172-96c-10.877-19.5-40.50979-50.75-116.27544-41.875C300.39168,34.875,267.63386,0,223.99908,0s-76.39066,34.875-97.89653,86.125C50.3369,77.375,20.706,108.5,9.82907,128-6.54984,157.375-5.17484,201.125,34.958,256-5.17484,310.875-6.54984,354.625,9.82907,384c29.13087,52.375,101.64652,43.625,116.27348,41.875C147.60842,477.125,180.36429,512,223.99908,512s76.3926-34.875,97.89652-86.125c14.62891,1.75,87.14456,10.5,116.27544-41.875C454.55,354.625,453.175,310.875,413.04017,256,453.175,201.125,454.55,157.375,438.171,128ZM63.33886,352c-4-7.25-.125-24.75,15.00391-48.25,6.87695,6.5,14.12891,12.875,21.88087,19.125,1.625,13.75,4,27.125,6.75,40.125C82.34472,363.875,67.09081,358.625,63.33886,352Zm36.88478-162.875c-7.752,6.25-15.00392,12.625-21.88087,19.125-15.12891-23.5-19.00392-41-15.00391-48.25,3.377-6.125,16.37891-11.5,37.88478-11.5,1.75,0,3.875.375,5.75.375C104.09864,162.25,101.84864,175.625,100.22364,189.125ZM223.99908,64c9.50195,0,22.25586,13.5,33.88282,37.25-11.252,3.75-22.50391,8-33.88282,12.875-11.377-4.875-22.62892-9.125-33.88283-12.875C201.74516,77.5,214.49712,64,223.99908,64Zm0,384c-9.502,0-22.25392-13.5-33.88283-37.25,11.25391-3.75,22.50587-8,33.88283-12.875C235.378,402.75,246.62994,407,257.8819,410.75,246.25494,434.5,233.501,448,223.99908,448Zm0-112a80,80,0,1,1,80-80A80.00023,80.00023,0,0,1,223.99908,336ZM384.6593,352c-3.625,6.625-19.00392,11.875-43.63479,11,2.752-13,5.127-26.375,6.752-40.125,7.75195-6.25,15.00391-12.625,21.87891-19.125C384.7843,327.25,388.6593,344.75,384.6593,352ZM369.65538,208.25c-6.875-6.5-14.127-12.875-21.87891-19.125-1.625-13.5-3.875-26.875-6.752-40.25,1.875,0,4.002-.375,5.752-.375,21.50391,0,34.50782,5.375,37.88283,11.5C388.6593,167.25,384.7843,184.75,369.65538,208.25Z“]},K={prefix:”fas“,iconName:”audio-description“,icon:[512,512,,”f29e“,”M162.925 238.709l8.822 30.655h-25.606l9.041-30.652c1.277-4.421 2.651-9.994 3.872-15.245 1.22 5.251 2.594 10.823 3.871 15.242zm166.474-32.099h-14.523v98.781h14.523c29.776 0 46.175-17.678 46.175-49.776 0-32.239-17.49-49.005-46.175-49.005zM512 112v288c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V112c0-26.51 21.49-48 48-48h416c26.51 0 48 21.49 48 48zM245.459 336.139l-57.097-168A12.001 12.001 0 0 0 177 160h-35.894a12.001 12.001 0 0 0-11.362 8.139l-57.097 168C70.003 343.922 75.789 352 84.009 352h29.133a12 12 0 0 0 11.535-8.693l8.574-29.906h51.367l8.793 29.977A12 12 0 0 0 204.926 352h29.172c8.22 0 14.006-8.078 11.361-15.861zm184.701-80.525c0-58.977-37.919-95.614-98.96-95.614h-57.366c-6.627 0-12 5.373-12 12v168c0 6.627 5.373 12 12 12H331.2c61.041 0 98.96-36.933 98.96-96.386z“]},Q={prefix:”fas“,iconName:”award“,icon:[384,512,,”f559“,”M97.12 362.63c-8.69-8.69-4.16-6.24-25.12-11.85-9.51-2.55-17.87-7.45-25.43-13.32L1.2 448.7c-4.39 10.77 3.81 22.47 15.43 22.03l52.69-2.01L105.56 507c8 8.44 22.04 5.81 26.43-4.96l52.05-127.62c-10.84 6.04-22.87 9.58-35.31 9.58-19.5 0-37.82-7.59-51.61-21.37zM382.8 448.7l-45.37-111.24c-7.56 5.88-15.92 10.77-25.43 13.32-21.07 5.64-16.45 3.18-25.12 11.85-13.79 13.78-32.12 21.37-51.62 21.37-12.44 0-24.47-3.55-35.31-9.58L252 502.04c4.39 10.77 18.44 13.4 26.43 4.96l36.25-38.28 52.69 2.01c11.62.44 19.82-11.27 15.43-22.03zM263 340c15.28-15.55 17.03-14.21 38.79-20.14 13.89-3.79 24.75-14.84 28.47-28.98 7.48-28.4 5.54-24.97 25.95-45.75 10.17-10.35 14.14-25.44 10.42-39.58-7.47-28.38-7.48-24.42 0-52.83 3.72-14.14-.25-29.23-10.42-39.58-20.41-20.78-18.47-17.36-25.95-45.75-3.72-14.14-14.58-25.19-28.47-28.98-27.88-7.61-24.52-5.62-44.95-26.41-10.17-10.35-25-14.4-38.89-10.61-27.87 7.6-23.98 7.61-51.9 0-13.89-3.79-28.72.25-38.89 10.61-20.41 20.78-17.05 18.8-44.94 26.41-13.89 3.79-24.75 14.84-28.47 28.98-7.47 28.39-5.54 24.97-25.95 45.75-10.17 10.35-14.15 25.44-10.42 39.58 7.47 28.36 7.48 24.4 0 52.82-3.72 14.14.25 29.23 10.42 39.59 20.41 20.78 18.47 17.35 25.95 45.75 3.72 14.14 14.58 25.19 28.47 28.98C104.6 325.96 106.27 325 121 340c13.23 13.47 33.84 15.88 49.74 5.82a39.676 39.676 0 0 1 42.53 0c15.89 10.06 36.5 7.65 49.73-5.82zM97.66 175.96c0-53.03 42.24-96.02 94.34-96.02s94.34 42.99 94.34 96.02-42.24 96.02-94.34 96.02-94.34-42.99-94.34-96.02z“]},Y={prefix:”fas“,iconName:”baby“,icon:[384,512,,”f77c“,”M192 160c44.2 0 80-35.8 80-80S236.2 0 192 0s-80 35.8-80 80 35.8 80 80 80zm-53.4 248.8l25.6-32-61.5-51.2L56.8 383c-11.4 14.2-11.7 34.4-.8 49l48 64c7.9 10.5 19.9 16 32 16 8.3 0 16.8-2.6 24-8 17.7-13.2 21.2-38.3 8-56l-29.4-39.2zm142.7-83.2l-61.5 51.2 25.6 32L216 448c-13.2 17.7-9.7 42.8 8 56 7.2 5.4 15.6 8 24 8 12.2 0 24.2-5.5 32-16l48-64c10.9-14.6 10.6-34.8-.8-49l-45.9-57.4zM376.7 145c-12.7-18.1-37.6-22.4-55.7-9.8l-40.6 28.5c-52.7 37-124.2 37-176.8 0L63 135.3C44.9 122.6 20 127 7.3 145-5.4 163.1-1 188 17 200.7l40.6 28.5c17 11.9 35.4 20.9 54.4 27.9V288h160v-30.8c19-7 37.4-16 54.4-27.9l40.6-28.5c18.1-12.8 22.4-37.7 9.7-55.8z“]},X={prefix:”fas“,iconName:”baby-carriage“,icon:[512,512,,”f77d“,”M144.8 17c-11.3-17.8-37.2-22.8-54-9.4C35.3 51.9 0 118 0 192h256L144.8 17zM496 96h-48c-35.3 0-64 28.7-64 64v64H0c0 50.6 23 96.4 60.3 130.7C25.7 363.6 0 394.7 0 432c0 44.2 35.8 80 80 80s80-35.8 80-80c0-8.9-1.8-17.2-4.4-25.2 21.6 5.9 44.6 9.2 68.4 9.2s46.9-3.3 68.4-9.2c-2.7 8-4.4 16.3-4.4 25.2 0 44.2 35.8 80 80 80s80-35.8 80-80c0-37.3-25.7-68.4-60.3-77.3C425 320.4 448 274.6 448 224v-64h48c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zM80 464c-17.6 0-32-14.4-32-32s14.4-32 32-32 32 14.4 32 32-14.4 32-32 32zm320-32c0 17.6-14.4 32-32 32s-32-14.4-32-32 14.4-32 32-32 32 14.4 32 32z“]},ee={prefix:”fas“,iconName:”backspace“,icon:[640,512,,”f55a“,”M576 64H205.26A63.97 63.97 0 0 0 160 82.75L9.37 233.37c-12.5 12.5-12.5 32.76 0 45.25L160 429.25c12 12 28.28 18.75 45.25 18.75H576c35.35 0 64-28.65 64-64V128c0-35.35-28.65-64-64-64zm-84.69 254.06c6.25 6.25 6.25 16.38 0 22.63l-22.62 22.62c-6.25 6.25-16.38 6.25-22.63 0L384 301.25l-62.06 62.06c-6.25 6.25-16.38 6.25-22.63 0l-22.62-22.62c-6.25-6.25-6.25-16.38 0-22.63L338.75 256l-62.06-62.06c-6.25-6.25-6.25-16.38 0-22.63l22.62-22.62c6.25-6.25 16.38-6.25 22.63 0L384 210.75l62.06-62.06c6.25-6.25 16.38-6.25 22.63 0l22.62 22.62c6.25 6.25 6.25 16.38 0 22.63L429.25 256l62.06 62.06z“]},te={prefix:”fas“,iconName:”backward“,icon:[512,512,,”f04a“,”M11.5 280.6l192 160c20.6 17.2 52.5 2.8 52.5-24.6V96c0-27.4-31.9-41.8-52.5-24.6l-192 160c-15.3 12.8-15.3 36.4 0 49.2zm256 0l192 160c20.6 17.2 52.5 2.8 52.5-24.6V96c0-27.4-31.9-41.8-52.5-24.6l-192 160c-15.3 12.8-15.3 36.4 0 49.2z“]},ne={prefix:”fas“,iconName:”bacon“,icon:[576,512,,”f7e5“,”M218.92 336.39c34.89-34.89 44.2-59.7 54.05-86 10.61-28.29 21.59-57.54 61.37-97.34s69.05-50.77 97.35-61.38c23.88-9 46.64-17.68 76.79-45.37L470.81 8.91a31 31 0 0 0-40.18-2.83c-13.64 10.1-25.15 14.39-41 20.3C247 79.52 209.26 191.29 200.65 214.1c-29.75 78.83-89.55 94.68-98.72 98.09-24.86 9.26-54.73 20.38-91.07 50.36C-3 374-3.63 395 9.07 407.61l35.76 35.51C80 410.52 107 400.15 133 390.39c26.27-9.84 51.06-19.12 85.92-54zm348-232l-35.75-35.51c-35.19 32.63-62.18 43-88.25 52.79-26.26 9.85-51.06 19.16-85.95 54s-44.19 59.69-54 86C292.33 290 281.34 319.22 241.55 359s-69 50.73-97.3 61.32c-23.86 9-46.61 17.66-76.72 45.33l37.68 37.43a31 31 0 0 0 40.18 2.82c13.6-10.06 25.09-14.34 40.94-20.24 142.2-53 180-164.1 188.94-187.69C405 219.18 464.8 203.3 474 199.86c24.87-9.27 54.74-20.4 91.11-50.41 13.89-11.4 14.52-32.45 1.82-45.05z“]},re={prefix:”fas“,iconName:”bacteria“,icon:[640,512,,”e059“,”M272.35,226.4A17.71,17.71,0,0,0,281.46,203l-4-9.08a121.29,121.29,0,0,1,12.36-3.08A83.34,83.34,0,0,0,323.57,177l10,9a17.76,17.76,0,1,0,23.92-26.27l-9.72-8.76a83.12,83.12,0,0,0,11.65-48.18l11.85-3.51a17.73,17.73,0,1,0-10.15-34l-11.34,3.36a84,84,0,0,0-36.38-35.57l2.84-10.85a17.8,17.8,0,0,0-34.47-8.93l-2.82,10.78a83.25,83.25,0,0,0-16.74,1.1C250.83,27,240,30.22,229.1,33.39l-3.38-9.46a17.8,17.8,0,0,0-33.56,11.89l3.49,9.8a286.74,286.74,0,0,0-43.94,23.57l-6.32-8.43a17.9,17.9,0,0,0-24.94-3.6A17.69,17.69,0,0,0,116.84,82l6.45,8.61a286.59,286.59,0,0,0-34.95,35.33l-8.82-6.42a17.84,17.84,0,0,0-24.89,3.86,17.66,17.66,0,0,0,3.88,24.77l8.88,6.47a286.6,286.6,0,0,0-23,43.91l-10.48-3.59a17.73,17.73,0,1,0-11.59,33.52L32.67,232c-2.79,10-5.79,19.84-7.52,30.22a83.16,83.16,0,0,0-.82,19l-11.58,3.43a17.73,17.73,0,1,0,10.13,34l11.27-3.33a83.51,83.51,0,0,0,36.39,35.43l-2.88,11.06a17.81,17.81,0,0,0,34.48,8.92l2.87-11c1,0,2.07.26,3.1.26a83.39,83.39,0,0,0,45.65-13.88l8.59,8.8a17.77,17.77,0,0,0,25.56-24.7l-9.14-9.37a83.41,83.41,0,0,0,12.08-31.05,119.08,119.08,0,0,1,3.87-15.53l9,4.22a17.74,17.74,0,1,0,15.15-32.09l-8.8-4.11c.67-1,1.2-2.08,1.9-3.05a119.89,119.89,0,0,1,7.87-9.41,121.73,121.73,0,0,1,11.65-11.4,119.49,119.49,0,0,1,9.94-7.82c1.12-.77,2.32-1.42,3.47-2.15l3.92,8.85a17.86,17.86,0,0,0,16.32,10.58A18.14,18.14,0,0,0,272.35,226.4ZM128,256a32,32,0,1,1,32-32A32,32,0,0,1,128,256Zm80-96a16,16,0,1,1,16-16A16,16,0,0,1,208,160Zm431.26,45.3a17.79,17.79,0,0,0-17.06-12.69,17.55,17.55,0,0,0-5.08.74l-11.27,3.33a83.61,83.61,0,0,0-36.39-35.43l2.88-11.06a17.81,17.81,0,0,0-34.48-8.91l-2.87,11c-1,0-2.07-.26-3.1-.26a83.32,83.32,0,0,0-45.65,13.89l-8.59-8.81a17.77,17.77,0,0,0-25.56,24.7l9.14,9.37a83.28,83.28,0,0,0-12.08,31.06,119.34,119.34,0,0,1-3.87,15.52l-9-4.22a17.74,17.74,0,1,0-15.15,32.09l8.8,4.11c-.67,1-1.2,2.08-1.89,3.05a117.71,117.71,0,0,1-7.94,9.47,119,119,0,0,1-11.57,11.33,121.59,121.59,0,0,1-10,7.83c-1.12.77-2.32,1.42-3.47,2.15l-3.92-8.85a17.86,17.86,0,0,0-16.32-10.58,18.14,18.14,0,0,0-7.18,1.5A17.71,17.71,0,0,0,358.54,309l4,9.08a118.71,118.71,0,0,1-12.36,3.08,83.34,83.34,0,0,0-33.77,13.9l-10-9a17.77,17.77,0,1,0-23.92,26.28l9.72,8.75a83.12,83.12,0,0,0-11.65,48.18l-11.86,3.51a17.73,17.73,0,1,0,10.16,34l11.34-3.36A84,84,0,0,0,326.61,479l-2.84,10.85a17.8,17.8,0,0,0,34.47,8.93L361.06,488a83.3,83.3,0,0,0,16.74-1.1c11.37-1.89,22.24-5.07,33.1-8.24l3.38,9.46a17.8,17.8,0,0,0,33.56-11.89l-3.49-9.79a287.66,287.66,0,0,0,43.94-23.58l6.32,8.43a17.88,17.88,0,0,0,24.93,3.6A17.67,17.67,0,0,0,523.16,430l-6.45-8.61a287.37,287.37,0,0,0,34.95-35.34l8.82,6.42a17.76,17.76,0,1,0,21-28.63l-8.88-6.46a287.17,287.17,0,0,0,23-43.92l10.48,3.59a17.73,17.73,0,1,0,11.59-33.52L607.33,280c2.79-10,5.79-19.84,7.52-30.21a83.27,83.27,0,0,0,.82-19.05l11.58-3.43A17.7,17.7,0,0,0,639.26,205.3ZM416,416a32,32,0,1,1,32-32A32,32,0,0,1,416,416Z“]},ie={prefix:”fas“,iconName:”bacterium“,icon:[512,512,,”e05a“,”M511,102.93A23.76,23.76,0,0,0,481.47,87l-15.12,4.48a111.85,111.85,0,0,0-48.5-47.42l3.79-14.47a23.74,23.74,0,0,0-46-11.91l-3.76,14.37a111.94,111.94,0,0,0-22.33,1.47,386.74,386.74,0,0,0-44.33,10.41l-4.3-12a23.74,23.74,0,0,0-44.75,15.85l4.3,12.05a383.4,383.4,0,0,0-58.69,31.83l-8-10.63a23.85,23.85,0,0,0-33.24-4.8,23.57,23.57,0,0,0-4.83,33.09l8,10.63a386.14,386.14,0,0,0-46.7,47.44l-11-8a23.68,23.68,0,1,0-28,38.17l11.09,8.06a383.45,383.45,0,0,0-30.92,58.75l-12.93-4.43a23.65,23.65,0,1,0-15.47,44.69l13,4.48a385.81,385.81,0,0,0-9.3,40.53A111.58,111.58,0,0,0,32.44,375L17,379.56a23.64,23.64,0,0,0,13.51,45.31l15-4.44a111.49,111.49,0,0,0,48.53,47.24l-3.85,14.75a23.66,23.66,0,0,0,17,28.83,24.7,24.7,0,0,0,6,.75,23.73,23.73,0,0,0,23-17.7L140,479.67c1.37.05,2.77.35,4.13.35A111.22,111.22,0,0,0,205,461.5l11.45,11.74a23.7,23.7,0,0,0,34.08-32.93l-12.19-12.5a111,111,0,0,0,16.11-41.4,158.69,158.69,0,0,1,5.16-20.71l12,5.64a23.66,23.66,0,1,0,20.19-42.79l-11.72-5.49c.89-1.32,1.59-2.77,2.52-4.06a157.86,157.86,0,0,1,10.46-12.49,159.5,159.5,0,0,1,15.59-15.28,162.18,162.18,0,0,1,13.23-10.4c1.5-1,3.1-1.89,4.63-2.87l5.23,11.8a23.74,23.74,0,0,0,43.48-19.08l-5.36-12.11a158.87,158.87,0,0,1,16.49-4.1,111,111,0,0,0,45-18.54l13.33,12a23.69,23.69,0,1,0,31.88-35l-12.94-11.67A110.83,110.83,0,0,0,479.21,137L495,132.32A23.61,23.61,0,0,0,511,102.93ZM160,368a48,48,0,1,1,48-48A48,48,0,0,1,160,368Zm80-136a24,24,0,1,1,24-24A24,24,0,0,1,240,232Z“]},ae={prefix:”fas“,iconName:”bahai“,icon:[512,512,,”f666“,”M496.25 202.52l-110-15.44 41.82-104.34c6.67-16.64-11.6-32.18-26.59-22.63L307.44 120 273.35 12.82C270.64 4.27 263.32 0 256 0c-7.32 0-14.64 4.27-17.35 12.82l-34.09 107.19-94.04-59.89c-14.99-9.55-33.25 5.99-26.59 22.63l41.82 104.34-110 15.43c-17.54 2.46-21.68 26.27-6.03 34.67l98.16 52.66-74.48 83.54c-10.92 12.25-1.72 30.93 13.29 30.93 1.31 0 2.67-.14 4.07-.45l108.57-23.65-4.11 112.55c-.43 11.65 8.87 19.22 18.41 19.22 5.15 0 10.39-2.21 14.2-7.18l68.18-88.9 68.18 88.9c3.81 4.97 9.04 7.18 14.2 7.18 9.54 0 18.84-7.57 18.41-19.22l-4.11-112.55 108.57 23.65c17.36 3.76 29.21-17.2 17.35-30.49l-74.48-83.54 98.16-52.66c15.64-8.39 11.5-32.2-6.04-34.66zM338.51 311.68l-51.89-11.3 1.97 53.79L256 311.68l-32.59 42.49 1.96-53.79-51.89 11.3 35.6-39.93-46.92-25.17 52.57-7.38-19.99-49.87 44.95 28.62L256 166.72l16.29 51.23 44.95-28.62-19.99 49.87 52.57 7.38-46.92 25.17 35.61 39.93z“]},oe={prefix:”fas“,iconName:”balance-scale“,icon:[640,512,,”f24e“,”M256 336h-.02c0-16.18 1.34-8.73-85.05-181.51-17.65-35.29-68.19-35.36-85.87 0C-2.06 328.75.02 320.33.02 336H0c0 44.18 57.31 80 128 80s128-35.82 128-80zM128 176l72 144H56l72-144zm511.98 160c0-16.18 1.34-8.73-85.05-181.51-17.65-35.29-68.19-35.36-85.87 0-87.12 174.26-85.04 165.84-85.04 181.51H384c0 44.18 57.31 80 128 80s128-35.82 128-80h-.02zM440 320l72-144 72 144H440zm88 128H352V153.25c23.51-10.29 41.16-31.48 46.39-57.25H528c8.84 0 16-7.16 16-16V48c0-8.84-7.16-16-16-16H383.64C369.04 12.68 346.09 0 320 0s-49.04 12.68-63.64 32H112c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h129.61c5.23 25.76 22.87 46.96 46.39 57.25V448H112c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h416c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16z“]},ce={prefix:”fas“,iconName:”balance-scale-left“,icon:[640,512,,”f515“,”M528 448H352V153.25c20.42-8.94 36.1-26.22 43.38-47.47l132-44.26c8.38-2.81 12.89-11.88 10.08-20.26l-10.17-30.34C524.48 2.54 515.41-1.97 507.03.84L389.11 40.37C375.3 16.36 349.69 0 320 0c-44.18 0-80 35.82-80 80 0 3.43.59 6.71 1.01 10.03l-128.39 43.05c-8.38 2.81-12.89 11.88-10.08 20.26l10.17 30.34c2.81 8.38 11.88 12.89 20.26 10.08l142.05-47.63c4.07 2.77 8.43 5.12 12.99 7.12V496c0 8.84 7.16 16 16 16h224c8.84 0 16-7.16 16-16v-32c-.01-8.84-7.17-16-16.01-16zm111.98-144c0-16.18 1.34-8.73-85.05-181.51-17.65-35.29-68.19-35.36-85.87 0-87.12 174.26-85.04 165.84-85.04 181.51H384c0 44.18 57.31 80 128 80s128-35.82 128-80h-.02zM440 288l72-144 72 144H440zm-269.07-37.51c-17.65-35.29-68.19-35.36-85.87 0C-2.06 424.75.02 416.33.02 432H0c0 44.18 57.31 80 128 80s128-35.82 128-80h-.02c0-16.18 1.34-8.73-85.05-181.51zM56 416l72-144 72 144H56z“]},se={prefix:”fas“,iconName:”balance-scale-right“,icon:[640,512,,”f516“,”M96 464v32c0 8.84 7.16 16 16 16h224c8.84 0 16-7.16 16-16V153.25c4.56-2 8.92-4.35 12.99-7.12l142.05 47.63c8.38 2.81 17.45-1.71 20.26-10.08l10.17-30.34c2.81-8.38-1.71-17.45-10.08-20.26l-128.4-43.05c.42-3.32 1.01-6.6 1.01-10.03 0-44.18-35.82-80-80-80-29.69 0-55.3 16.36-69.11 40.37L132.96.83c-8.38-2.81-17.45 1.71-20.26 10.08l-10.17 30.34c-2.81 8.38 1.71 17.45 10.08 20.26l132 44.26c7.28 21.25 22.96 38.54 43.38 47.47V448H112c-8.84 0-16 7.16-16 16zM0 304c0 44.18 57.31 80 128 80s128-35.82 128-80h-.02c0-15.67 2.08-7.25-85.05-181.51-17.68-35.36-68.22-35.29-85.87 0C-1.32 295.27.02 287.82.02 304H0zm56-16l72-144 72 144H56zm328.02 144H384c0 44.18 57.31 80 128 80s128-35.82 128-80h-.02c0-15.67 2.08-7.25-85.05-181.51-17.68-35.36-68.22-35.29-85.87 0-86.38 172.78-85.04 165.33-85.04 181.51zM440 416l72-144 72 144H440z“]},ue={prefix:”fas“,iconName:”ban“,icon:[512,512,,”f05e“,”M256 8C119.034 8 8 119.033 8 256s111.034 248 248 248 248-111.034 248-248S392.967 8 256 8zm130.108 117.892c65.448 65.448 70 165.481 20.677 235.637L150.47 105.216c70.204-49.356 170.226-44.735 235.638 20.676zM125.892 386.108c-65.448-65.448-70-165.481-20.677-235.637L361.53 406.784c-70.203 49.356-170.226 44.736-235.638-20.676z“]},le={prefix:”fas“,iconName:”band-aid“,icon:[640,512,,”f462“,”M0 160v192c0 35.3 28.7 64 64 64h96V96H64c-35.3 0-64 28.7-64 64zm576-64h-96v320h96c35.3 0 64-28.7 64-64V160c0-35.3-28.7-64-64-64zM192 416h256V96H192v320zm176-232c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24zm0 96c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24zm-96-96c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24zm0 96c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24z“]},fe={prefix:”fas“,iconName:”barcode“,icon:[512,512,,”f02a“,”M0 448V64h18v384H0zm26.857-.273V64H36v383.727h-9.143zm27.143 0V64h8.857v383.727H54zm44.857 0V64h8.857v383.727h-8.857zm36 0V64h17.714v383.727h-17.714zm44.857 0V64h8.857v383.727h-8.857zm18 0V64h8.857v383.727h-8.857zm18 0V64h8.857v383.727h-8.857zm35.715 0V64h18v383.727h-18zm44.857 0V64h18v383.727h-18zm35.999 0V64h18.001v383.727h-18.001zm36.001 0V64h18.001v383.727h-18.001zm26.857 0V64h18v383.727h-18zm45.143 0V64h26.857v383.727h-26.857zm35.714 0V64h9.143v383.727H476zm18 .273V64h18v384h-18z“]},he={prefix:”fas“,iconName:”bars“,icon:[448,512,,”f0c9“,”M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z“]},de={prefix:”fas“,iconName:”baseball-ball“,icon:[496,512,,”f433“,”M368.5 363.9l28.8-13.9c11.1 22.9 26 43.2 44.1 60.9 34-42.5 54.5-96.3 54.5-154.9 0-58.5-20.4-112.2-54.2-154.6-17.8 17.3-32.6 37.1-43.6 59.5l-28.7-14.1c12.8-26 30-49 50.8-69C375.6 34.7 315 8 248 8 181.1 8 120.5 34.6 75.9 77.7c20.7 19.9 37.9 42.9 50.7 68.8l-28.7 14.1c-11-22.3-25.7-42.1-43.5-59.4C20.4 143.7 0 197.4 0 256c0 58.6 20.4 112.3 54.4 154.7 18.2-17.7 33.2-38 44.3-61l28.8 13.9c-12.9 26.7-30.3 50.3-51.5 70.7 44.5 43.1 105.1 69.7 172 69.7 66.8 0 127.3-26.5 171.9-69.5-21.1-20.4-38.5-43.9-51.4-70.6zm-228.3-32l-30.5-9.8c14.9-46.4 12.7-93.8-.6-134l30.4-10c15 45.6 18 99.9.7 153.8zm216.3-153.4l30.4 10c-13.2 40.1-15.5 87.5-.6 134l-30.5 9.8c-17.3-54-14.3-108.3.7-153.8z“]},pe={prefix:”fas“,iconName:”basketball-ball“,icon:[496,512,,”f434“,”M212.3 10.3c-43.8 6.3-86.2 24.1-122.2 53.8l77.4 77.4c27.8-35.8 43.3-81.2 44.8-131.2zM248 222L405.9 64.1c-42.4-35-93.6-53.5-145.5-56.1-1.2 63.9-21.5 122.3-58.7 167.7L248 222zM56.1 98.1c-29.7 36-47.5 78.4-53.8 122.2 50-1.5 95.5-17 131.2-44.8L56.1 98.1zm272.2 204.2c45.3-37.1 103.7-57.4 167.7-58.7-2.6-51.9-21.1-103.1-56.1-145.5L282 256l46.3 46.3zM248 290L90.1 447.9c42.4 34.9 93.6 53.5 145.5 56.1 1.3-64 21.6-122.4 58.7-167.7L248 290zm191.9 123.9c29.7-36 47.5-78.4 53.8-122.2-50.1 1.6-95.5 17.1-131.2 44.8l77.4 77.4zM167.7 209.7C122.3 246.9 63.9 267.3 0 268.4c2.6 51.9 21.1 103.1 56.1 145.5L214 256l-46.3-46.3zm116 292c43.8-6.3 86.2-24.1 122.2-53.8l-77.4-77.4c-27.7 35.7-43.2 81.2-44.8 131.2z“]},me={prefix:”fas“,iconName:”bath“,icon:[512,512,,”f2cd“,”M32,384a95.4,95.4,0,0,0,32,71.09V496a16,16,0,0,0,16,16h32a16,16,0,0,0,16-16V480H384v16a16,16,0,0,0,16,16h32a16,16,0,0,0,16-16V455.09A95.4,95.4,0,0,0,480,384V336H32ZM496,256H80V69.25a21.26,21.26,0,0,1,36.28-15l19.27,19.26c-13.13,29.88-7.61,59.11,8.62,79.73l-.17.17A16,16,0,0,0,144,176l11.31,11.31a16,16,0,0,0,22.63,0L283.31,81.94a16,16,0,0,0,0-22.63L272,48a16,16,0,0,0-22.62,0l-.17.17c-20.62-16.23-49.83-21.75-79.73-8.62L150.22,20.28A69.25,69.25,0,0,0,32,69.25V256H16A16,16,0,0,0,0,272v16a16,16,0,0,0,16,16H496a16,16,0,0,0,16-16V272A16,16,0,0,0,496,256Z“]},ve={prefix:”fas“,iconName:”battery-empty“,icon:[640,512,,”f244“,”M544 160v64h32v64h-32v64H64V160h480m16-64H48c-26.51 0-48 21.49-48 48v224c0 26.51 21.49 48 48 48h512c26.51 0 48-21.49 48-48v-16h8c13.255 0 24-10.745 24-24V184c0-13.255-10.745-24-24-24h-8v-16c0-26.51-21.49-48-48-48z“]},ge={prefix:”fas“,iconName:”battery-full“,icon:[640,512,,”f240“,”M544 160v64h32v64h-32v64H64V160h480m16-64H48c-26.51 0-48 21.49-48 48v224c0 26.51 21.49 48 48 48h512c26.51 0 48-21.49 48-48v-16h8c13.255 0 24-10.745 24-24V184c0-13.255-10.745-24-24-24h-8v-16c0-26.51-21.49-48-48-48zm-48 96H96v128h416V192z“]},ye={prefix:”fas“,iconName:”battery-half“,icon:[640,512,,”f242“,”M544 160v64h32v64h-32v64H64V160h480m16-64H48c-26.51 0-48 21.49-48 48v224c0 26.51 21.49 48 48 48h512c26.51 0 48-21.49 48-48v-16h8c13.255 0 24-10.745 24-24V184c0-13.255-10.745-24-24-24h-8v-16c0-26.51-21.49-48-48-48zm-240 96H96v128h224V192z“]},be={prefix:”fas“,iconName:”battery-quarter“,icon:[640,512,,”f243“,”M544 160v64h32v64h-32v64H64V160h480m16-64H48c-26.51 0-48 21.49-48 48v224c0 26.51 21.49 48 48 48h512c26.51 0 48-21.49 48-48v-16h8c13.255 0 24-10.745 24-24V184c0-13.255-10.745-24-24-24h-8v-16c0-26.51-21.49-48-48-48zm-336 96H96v128h128V192z“]},we={prefix:”fas“,iconName:”battery-three-quarters“,icon:[640,512,,”f241“,”M544 160v64h32v64h-32v64H64V160h480m16-64H48c-26.51 0-48 21.49-48 48v224c0 26.51 21.49 48 48 48h512c26.51 0 48-21.49 48-48v-16h8c13.255 0 24-10.745 24-24V184c0-13.255-10.745-24-24-24h-8v-16c0-26.51-21.49-48-48-48zm-144 96H96v128h320V192z“]},xe={prefix:”fas“,iconName:”bed“,icon:[640,512,,”f236“,”M176 256c44.11 0 80-35.89 80-80s-35.89-80-80-80-80 35.89-80 80 35.89 80 80 80zm352-128H304c-8.84 0-16 7.16-16 16v144H64V80c0-8.84-7.16-16-16-16H16C7.16 64 0 71.16 0 80v352c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-48h512v48c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16V240c0-61.86-50.14-112-112-112z“]},Se={prefix:”fas“,iconName:”beer“,icon:[448,512,,”f0fc“,”M368 96h-48V56c0-13.255-10.745-24-24-24H24C10.745 32 0 42.745 0 56v400c0 13.255 10.745 24 24 24h272c13.255 0 24-10.745 24-24v-42.11l80.606-35.977C429.396 365.063 448 336.388 448 304.86V176c0-44.112-35.888-80-80-80zm16 208.86a16.018 16.018 0 0 1-9.479 14.611L320 343.805V160h48c8.822 0 16 7.178 16 16v128.86zM208 384c-8.836 0-16-7.164-16-16V144c0-8.836 7.164-16 16-16s16 7.164 16 16v224c0 8.836-7.164 16-16 16zm-96 0c-8.836 0-16-7.164-16-16V144c0-8.836 7.164-16 16-16s16 7.164 16 16v224c0 8.836-7.164 16-16 16z“]},ke={prefix:”fas“,iconName:”bell“,icon:[448,512,,”f0f3“,”M224 512c35.32 0 63.97-28.65 63.97-64H160.03c0 35.35 28.65 64 63.97 64zm215.39-149.71c-19.32-20.76-55.47-51.99-55.47-154.29 0-77.7-54.48-139.9-127.94-155.16V32c0-17.67-14.32-32-31.98-32s-31.98 14.33-31.98 32v20.84C118.56 68.1 64.08 130.3 64.08 208c0 102.3-36.15 133.53-55.47 154.29-6 6.45-8.66 14.16-8.61 21.71.11 16.4 12.98 32 32.1 32h383.8c19.12 0 32-15.6 32.1-32 .05-7.55-2.61-15.27-8.61-21.71z“]},_e={prefix:”fas“,iconName:”bell-slash“,icon:[640,512,,”f1f6“,”M633.82 458.1l-90.62-70.05c.19-1.38.8-2.66.8-4.06.05-7.55-2.61-15.27-8.61-21.71-19.32-20.76-55.47-51.99-55.47-154.29 0-77.7-54.48-139.9-127.94-155.16V32c0-17.67-14.32-32-31.98-32s-31.98 14.33-31.98 32v20.84c-40.33 8.38-74.66 31.07-97.59 62.57L45.47 3.37C38.49-2.05 28.43-.8 23.01 6.18L3.37 31.45C-2.05 38.42-.8 48.47 6.18 53.9l588.35 454.73c6.98 5.43 17.03 4.17 22.46-2.81l19.64-25.27c5.42-6.97 4.17-17.02-2.81-22.45zM157.23 251.54c-8.61 67.96-36.41 93.33-52.62 110.75-6 6.45-8.66 14.16-8.61 21.71.11 16.4 12.98 32 32.1 32h241.92L157.23 251.54zM320 512c35.32 0 63.97-28.65 63.97-64H256.03c0 35.35 28.65 64 63.97 64z“]},ze={prefix:”fas“,iconName:”bezier-curve“,icon:[640,512,,”f55b“,”M368 32h-96c-17.67 0-32 14.33-32 32v96c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32V64c0-17.67-14.33-32-32-32zM208 88h-84.75C113.75 64.56 90.84 48 64 48 28.66 48 0 76.65 0 112s28.66 64 64 64c26.84 0 49.75-16.56 59.25-40h79.73c-55.37 32.52-95.86 87.32-109.54 152h49.4c11.3-41.61 36.77-77.21 71.04-101.56-3.7-8.08-5.88-16.99-5.88-26.44V88zm-48 232H64c-17.67 0-32 14.33-32 32v96c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32v-96c0-17.67-14.33-32-32-32zM576 48c-26.84 0-49.75 16.56-59.25 40H432v72c0 9.45-2.19 18.36-5.88 26.44 34.27 24.35 59.74 59.95 71.04 101.56h49.4c-13.68-64.68-54.17-119.48-109.54-152h79.73c9.5 23.44 32.41 40 59.25 40 35.34 0 64-28.65 64-64s-28.66-64-64-64zm0 272h-96c-17.67 0-32 14.33-32 32v96c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32v-96c0-17.67-14.33-32-32-32z“]},Ce={prefix:”fas“,iconName:”bible“,icon:[448,512,,”f647“,”M448 358.4V25.6c0-16-9.6-25.6-25.6-25.6H96C41.6 0 0 41.6 0 96v320c0 54.4 41.6 96 96 96h326.4c12.8 0 25.6-9.6 25.6-25.6v-16c0-6.4-3.2-12.8-9.6-19.2-3.2-16-3.2-60.8 0-73.6 6.4-3.2 9.6-9.6 9.6-19.2zM144 144c0-8.84 7.16-16 16-16h48V80c0-8.84 7.16-16 16-16h32c8.84 0 16 7.16 16 16v48h48c8.84 0 16 7.16 16 16v32c0 8.84-7.16 16-16 16h-48v112c0 8.84-7.16 16-16 16h-32c-8.84 0-16-7.16-16-16V192h-48c-8.84 0-16-7.16-16-16v-32zm236.8 304H96c-19.2 0-32-12.8-32-32s16-32 32-32h284.8v64z“]},Me={prefix:”fas“,iconName:”bicycle“,icon:[640,512,,”f206“,”M512.509 192.001c-16.373-.064-32.03 2.955-46.436 8.495l-77.68-125.153A24 24 0 0 0 368.001 64h-64c-8.837 0-16 7.163-16 16v16c0 8.837 7.163 16 16 16h50.649l14.896 24H256.002v-16c0-8.837-7.163-16-16-16h-87.459c-13.441 0-24.777 10.999-24.536 24.437.232 13.044 10.876 23.563 23.995 23.563h48.726l-29.417 47.52c-13.433-4.83-27.904-7.483-42.992-7.52C58.094 191.83.412 249.012.002 319.236-.413 390.279 57.055 448 128.002 448c59.642 0 109.758-40.793 123.967-96h52.033a24 24 0 0 0 20.406-11.367L410.37 201.77l14.938 24.067c-25.455 23.448-41.385 57.081-41.307 94.437.145 68.833 57.899 127.051 126.729 127.719 70.606.685 128.181-55.803 129.255-125.996 1.086-70.941-56.526-129.72-127.476-129.996zM186.75 265.772c9.727 10.529 16.673 23.661 19.642 38.228h-43.306l23.664-38.228zM128.002 400c-44.112 0-80-35.888-80-80s35.888-80 80-80c5.869 0 11.586.653 17.099 1.859l-45.505 73.509C89.715 331.327 101.213 352 120.002 352h81.3c-12.37 28.225-40.562 48-73.3 48zm162.63-96h-35.624c-3.96-31.756-19.556-59.894-42.383-80.026L237.371 184h127.547l-74.286 120zm217.057 95.886c-41.036-2.165-74.049-35.692-75.627-76.755-.812-21.121 6.633-40.518 19.335-55.263l44.433 71.586c4.66 7.508 14.524 9.816 22.032 5.156l13.594-8.437c7.508-4.66 9.817-14.524 5.156-22.032l-44.468-71.643a79.901 79.901 0 0 1 19.858-2.497c44.112 0 80 35.888 80 80-.001 45.54-38.252 82.316-84.313 79.885z“]},Oe={prefix:”fas“,iconName:”biking“,icon:[640,512,,”f84a“,”M400 96a48 48 0 1 0-48-48 48 48 0 0 0 48 48zm-4 121a31.9 31.9 0 0 0 20 7h64a32 32 0 0 0 0-64h-52.78L356 103a31.94 31.94 0 0 0-40.81.68l-112 96a32 32 0 0 0 3.08 50.92L288 305.12V416a32 32 0 0 0 64 0V288a32 32 0 0 0-14.25-26.62l-41.36-27.57 58.25-49.92zm116 39a128 128 0 1 0 128 128 128 128 0 0 0-128-128zm0 192a64 64 0 1 1 64-64 64 64 0 0 1-64 64zM128 256a128 128 0 1 0 128 128 128 128 0 0 0-128-128zm0 192a64 64 0 1 1 64-64 64 64 0 0 1-64 64z“]},Te={prefix:”fas“,iconName:”binoculars“,icon:[512,512,,”f1e5“,”M416 48c0-8.84-7.16-16-16-16h-64c-8.84 0-16 7.16-16 16v48h96V48zM63.91 159.99C61.4 253.84 3.46 274.22 0 404v44c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32V288h32V128H95.84c-17.63 0-31.45 14.37-31.93 31.99zm384.18 0c-.48-17.62-14.3-31.99-31.93-31.99H320v160h32v160c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32v-44c-3.46-129.78-61.4-150.16-63.91-244.01zM176 32h-64c-8.84 0-16 7.16-16 16v48h96V48c0-8.84-7.16-16-16-16zm48 256h64V128h-64v160z“]},Ee={prefix:”fas“,iconName:”biohazard“,icon:[576,512,,”f780“,”M287.9 112c18.6 0 36.2 3.8 52.8 9.6 13.3-10.3 23.6-24.3 29.5-40.7-25.2-10.9-53-17-82.2-17-29.1 0-56.9 6-82.1 16.9 5.9 16.4 16.2 30.4 29.5 40.7 16.5-5.7 34-9.5 52.5-9.5zM163.6 438.7c12-11.8 20.4-26.4 24.5-42.4-32.9-26.4-54.8-65.3-58.9-109.6-8.5-2.8-17.2-4.6-26.4-4.6-7.6 0-15.2 1-22.5 3.1 4.1 62.8 35.8 118 83.3 153.5zm224.2-42.6c4.1 16 12.5 30.7 24.5 42.5 47.4-35.5 79.1-90.7 83-153.5-7.2-2-14.7-3-22.2-3-9.2 0-18 1.9-26.6 4.7-4.1 44.2-26 82.9-58.7 109.3zm113.5-205c-17.6-10.4-36.3-16.6-55.3-19.9 6-17.7 10-36.4 10-56.2 0-41-14.5-80.8-41-112.2-2.5-3-6.6-3.7-10-1.8-3.3 1.9-4.8 6-3.6 9.7 4.5 13.8 6.6 26.3 6.6 38.5 0 67.8-53.8 122.9-120 122.9S168 117 168 49.2c0-12.1 2.2-24.7 6.6-38.5 1.2-3.7-.3-7.8-3.6-9.7-3.4-1.9-7.5-1.2-10 1.8C134.6 34.2 120 74 120 115c0 19.8 3.9 38.5 10 56.2-18.9 3.3-37.7 9.5-55.3 19.9-34.6 20.5-61 53.3-74.3 92.4-1.3 3.7.2 7.7 3.5 9.8 3.3 2 7.5 1.3 10-1.6 9.4-10.8 19-19.1 29.2-25.1 57.3-33.9 130.8-13.7 163.9 45 33.1 58.7 13.4 134-43.9 167.9-10.2 6.1-22 10.4-35.8 13.4-3.7.8-6.4 4.2-6.4 8.1.1 4 2.7 7.3 6.5 8 39.7 7.8 80.6.8 115.2-19.7 18-10.6 32.9-24.5 45.3-40.1 12.4 15.6 27.3 29.5 45.3 40.1 34.6 20.5 75.5 27.5 115.2 19.7 3.8-.7 6.4-4 6.5-8 0-3.9-2.6-7.3-6.4-8.1-13.9-2.9-25.6-7.3-35.8-13.4-57.3-33.9-77-109.2-43.9-167.9s106.6-78.9 163.9-45c10.2 6.1 19.8 14.3 29.2 25.1 2.5 2.9 6.7 3.6 10 1.6s4.8-6.1 3.5-9.8c-13.1-39.1-39.5-72-74.1-92.4zm-213.4 129c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48z“]},Le={prefix:”fas“,iconName:”birthday-cake“,icon:[448,512,,”f1fd“,”M448 384c-28.02 0-31.26-32-74.5-32-43.43 0-46.825 32-74.75 32-27.695 0-31.454-32-74.75-32-42.842 0-47.218 32-74.5 32-28.148 0-31.202-32-74.75-32-43.547 0-46.653 32-74.75 32v-80c0-26.5 21.5-48 48-48h16V112h64v144h64V112h64v144h64V112h64v144h16c26.5 0 48 21.5 48 48v80zm0 128H0v-96c43.356 0 46.767-32 74.75-32 27.951 0 31.253 32 74.75 32 42.843 0 47.217-32 74.5-32 28.148 0 31.201 32 74.75 32 43.357 0 46.767-32 74.75-32 27.488 0 31.252 32 74.5 32v96zM96 96c-17.75 0-32-14.25-32-32 0-31 32-23 32-64 12 0 32 29.5 32 56s-14.25 40-32 40zm128 0c-17.75 0-32-14.25-32-32 0-31 32-23 32-64 12 0 32 29.5 32 56s-14.25 40-32 40zm128 0c-17.75 0-32-14.25-32-32 0-31 32-23 32-64 12 0 32 29.5 32 56s-14.25 40-32 40z“]},Ae={prefix:”fas“,iconName:”blender“,icon:[512,512,,”f517“,”M416 384H160c-35.35 0-64 28.65-64 64v32c0 17.67 14.33 32 32 32h320c17.67 0 32-14.33 32-32v-32c0-35.35-28.65-64-64-64zm-128 96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm40-416h166.54L512 0H48C21.49 0 0 21.49 0 48v160c0 26.51 21.49 48 48 48h103.27l8.73 96h256l17.46-64H328c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h114.18l17.46-64H328c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h140.36l17.46-64H328c-4.42 0-8-3.58-8-8V72c0-4.42 3.58-8 8-8zM64 192V64h69.82l11.64 128H64z“]},Re={prefix:”fas“,iconName:”blender-phone“,icon:[576,512,,”f6b6“,”M392 64h166.54L576 0H192v352h288l17.46-64H392c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h114.18l17.46-64H392c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h140.36l17.46-64H392c-4.42 0-8-3.58-8-8V72c0-4.42 3.58-8 8-8zM158.8 335.01l-25.78-63.26c-2.78-6.81-9.8-10.99-17.24-10.26l-45.03 4.42c-17.28-46.94-17.65-99.78 0-147.72l45.03 4.42c7.43.73 14.46-3.46 17.24-10.26l25.78-63.26c3.02-7.39.2-15.85-6.68-20.07l-39.28-24.1C98.51-3.87 80.09-.5 68.95 11.97c-92.57 103.6-92 259.55 2.1 362.49 9.87 10.8 29.12 12.48 41.65 4.8l39.41-24.18c6.89-4.22 9.7-12.67 6.69-20.07zM480 384H192c-35.35 0-64 28.65-64 64v32c0 17.67 14.33 32 32 32h352c17.67 0 32-14.33 32-32v-32c0-35.35-28.65-64-64-64zm-144 96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z“]},Ne={prefix:”fas“,iconName:”blind“,icon:[384,512,,”f29d“,”M380.15 510.837a8 8 0 0 1-10.989-2.687l-125.33-206.427a31.923 31.923 0 0 0 12.958-9.485l126.048 207.608a8 8 0 0 1-2.687 10.991zM142.803 314.338l-32.54 89.485 36.12 88.285c6.693 16.36 25.377 24.192 41.733 17.501 16.357-6.692 24.193-25.376 17.501-41.734l-62.814-153.537zM96 88c24.301 0 44-19.699 44-44S120.301 0 96 0 52 19.699 52 44s19.699 44 44 44zm154.837 169.128l-120-152c-4.733-5.995-11.75-9.108-18.837-9.112V96H80v.026c-7.146.003-14.217 3.161-18.944 9.24L0 183.766v95.694c0 13.455 11.011 24.791 24.464 24.536C37.505 303.748 48 293.1 48 280v-79.766l16-20.571v140.698L9.927 469.055c-6.04 16.609 2.528 34.969 19.138 41.009 16.602 6.039 34.968-2.524 41.009-19.138L136 309.638V202.441l-31.406-39.816a4 4 0 1 1 6.269-4.971l102.3 129.217c9.145 11.584 24.368 11.339 33.708 3.965 10.41-8.216 12.159-23.334 3.966-33.708z“]},He={prefix:”fas“,iconName:”blog“,icon:[512,512,,”f781“,”M172.2 226.8c-14.6-2.9-28.2 8.9-28.2 23.8V301c0 10.2 7.1 18.4 16.7 22 18.2 6.8 31.3 24.4 31.3 45 0 26.5-21.5 48-48 48s-48-21.5-48-48V120c0-13.3-10.7-24-24-24H24c-13.3 0-24 10.7-24 24v248c0 89.5 82.1 160.2 175 140.7 54.4-11.4 98.3-55.4 109.7-109.7 17.4-82.9-37-157.2-112.5-172.2zM209 0c-9.2-.5-17 6.8-17 16v31.6c0 8.5 6.6 15.5 15 15.9 129.4 7 233.4 112 240.9 241.5.5 8.4 7.5 15 15.9 15h32.1c9.2 0 16.5-7.8 16-17C503.4 139.8 372.2 8.6 209 0zm.3 96c-9.3-.7-17.3 6.7-17.3 16.1v32.1c0 8.4 6.5 15.3 14.8 15.9 76.8 6.3 138 68.2 144.9 145.2.8 8.3 7.6 14.7 15.9 14.7h32.2c9.3 0 16.8-8 16.1-17.3-8.4-110.1-96.5-198.2-206.6-206.7z“]},Pe={prefix:”fas“,iconName:”bold“,icon:[384,512,,”f032“,”M333.49 238a122 122 0 0 0 27-65.21C367.87 96.49 308 32 233.42 32H34a16 16 0 0 0-16 16v48a16 16 0 0 0 16 16h31.87v288H34a16 16 0 0 0-16 16v48a16 16 0 0 0 16 16h209.32c70.8 0 134.14-51.75 141-122.4 4.74-48.45-16.39-92.06-50.83-119.6zM145.66 112h87.76a48 48 0 0 1 0 96h-87.76zm87.76 288h-87.76V288h87.76a56 56 0 0 1 0 112z“]},je={prefix:”fas“,iconName:”bolt“,icon:[320,512,,”f0e7“,”M296 160H180.6l42.6-129.8C227.2 15 215.7 0 200 0H56C44 0 33.8 8.9 32.2 20.8l-32 240C-1.7 275.2 9.5 288 24 288h118.7L96.6 482.5c-3.6 15.2 8 29.5 23.3 29.5 8.4 0 16.4-4.4 20.8-12l176-304c9.3-15.9-2.2-36-20.7-36z“]},Ve={prefix:”fas“,iconName:”bomb“,icon:[512,512,,”f1e2“,”M440.5 88.5l-52 52L415 167c9.4 9.4 9.4 24.6 0 33.9l-17.4 17.4c11.8 26.1 18.4 55.1 18.4 85.6 0 114.9-93.1 208-208 208S0 418.9 0 304 93.1 96 208 96c30.5 0 59.5 6.6 85.6 18.4L311 97c9.4-9.4 24.6-9.4 33.9 0l26.5 26.5 52-52 17.1 17zM500 60h-24c-6.6 0-12 5.4-12 12s5.4 12 12 12h24c6.6 0 12-5.4 12-12s-5.4-12-12-12zM440 0c-6.6 0-12 5.4-12 12v24c0 6.6 5.4 12 12 12s12-5.4 12-12V12c0-6.6-5.4-12-12-12zm33.9 55l17-17c4.7-4.7 4.7-12.3 0-17-4.7-4.7-12.3-4.7-17 0l-17 17c-4.7 4.7-4.7 12.3 0 17 4.8 4.7 12.4 4.7 17 0zm-67.8 0c4.7 4.7 12.3 4.7 17 0 4.7-4.7 4.7-12.3 0-17l-17-17c-4.7-4.7-12.3-4.7-17 0-4.7 4.7-4.7 12.3 0 17l17 17zm67.8 34c-4.7-4.7-12.3-4.7-17 0-4.7 4.7-4.7 12.3 0 17l17 17c4.7 4.7 12.3 4.7 17 0 4.7-4.7 4.7-12.3 0-17l-17-17zM112 272c0-35.3 28.7-64 64-64 8.8 0 16-7.2 16-16s-7.2-16-16-16c-52.9 0-96 43.1-96 96 0 8.8 7.2 16 16 16s16-7.2 16-16z“]},De={prefix:”fas“,iconName:”bone“,icon:[640,512,,”f5d7“,”M598.88 244.56c25.2-12.6 41.12-38.36 41.12-66.53v-7.64C640 129.3 606.7 96 565.61 96c-32.02 0-60.44 20.49-70.57 50.86-7.68 23.03-11.6 45.14-38.11 45.14H183.06c-27.38 0-31.58-25.54-38.11-45.14C134.83 116.49 106.4 96 74.39 96 33.3 96 0 129.3 0 170.39v7.64c0 28.17 15.92 53.93 41.12 66.53 9.43 4.71 9.43 18.17 0 22.88C15.92 280.04 0 305.8 0 333.97v7.64C0 382.7 33.3 416 74.38 416c32.02 0 60.44-20.49 70.57-50.86 7.68-23.03 11.6-45.14 38.11-45.14h273.87c27.38 0 31.58 25.54 38.11 45.14C505.17 395.51 533.6 416 565.61 416c41.08 0 74.38-33.3 74.38-74.39v-7.64c0-28.18-15.92-53.93-41.12-66.53-9.42-4.71-9.42-18.17.01-22.88z“]},Ie={prefix:”fas“,iconName:”bong“,icon:[448,512,,”f55c“,”M302.5 512c23.18 0 44.43-12.58 56-32.66C374.69 451.26 384 418.75 384 384c0-36.12-10.08-69.81-27.44-98.62L400 241.94l9.38 9.38c6.25 6.25 16.38 6.25 22.63 0l11.3-11.32c6.25-6.25 6.25-16.38 0-22.63l-52.69-52.69c-6.25-6.25-16.38-6.25-22.63 0l-11.31 11.31c-6.25 6.25-6.25 16.38 0 22.63l9.38 9.38-39.41 39.41c-11.56-11.37-24.53-21.33-38.65-29.51V63.74l15.97-.02c8.82-.01 15.97-7.16 15.98-15.98l.04-31.72C320 7.17 312.82-.01 303.97 0L80.03.26c-8.82.01-15.97 7.16-15.98 15.98l-.04 31.73c-.01 8.85 7.17 16.02 16.02 16.01L96 63.96v153.93C38.67 251.1 0 312.97 0 384c0 34.75 9.31 67.27 25.5 95.34C37.08 499.42 58.33 512 81.5 512h221zM120.06 259.43L144 245.56V63.91l96-.11v181.76l23.94 13.87c24.81 14.37 44.12 35.73 56.56 60.57h-257c12.45-24.84 31.75-46.2 56.56-60.57z“]},Fe={prefix:”fas“,iconName:”book“,icon:[448,512,,”f02d“,”M448 360V24c0-13.3-10.7-24-24-24H96C43 0 0 43 0 96v320c0 53 43 96 96 96h328c13.3 0 24-10.7 24-24v-16c0-7.5-3.5-14.3-8.9-18.7-4.2-15.4-4.2-59.3 0-74.7 5.4-4.3 8.9-11.1 8.9-18.6zM128 134c0-3.3 2.7-6 6-6h212c3.3 0 6 2.7 6 6v20c0 3.3-2.7 6-6 6H134c-3.3 0-6-2.7-6-6v-20zm0 64c0-3.3 2.7-6 6-6h212c3.3 0 6 2.7 6 6v20c0 3.3-2.7 6-6 6H134c-3.3 0-6-2.7-6-6v-20zm253.4 250H96c-17.7 0-32-14.3-32-32 0-17.6 14.4-32 32-32h285.4c-1.9 17.1-1.9 46.9 0 64z“]},Be={prefix:”fas“,iconName:”book-dead“,icon:[448,512,,”f6b7“,”M272 136c8.8 0 16-7.2 16-16s-7.2-16-16-16-16 7.2-16 16 7.2 16 16 16zm176 222.4V25.6c0-16-9.6-25.6-25.6-25.6H96C41.6 0 0 41.6 0 96v320c0 54.4 41.6 96 96 96h326.4c12.8 0 25.6-9.6 25.6-25.6v-16c0-6.4-3.2-12.8-9.6-19.2-3.2-16-3.2-60.8 0-73.6 6.4-3.2 9.6-9.6 9.6-19.2zM240 56c44.2 0 80 28.7 80 64 0 20.9-12.7 39.2-32 50.9V184c0 8.8-7.2 16-16 16h-64c-8.8 0-16-7.2-16-16v-13.1c-19.3-11.7-32-30-32-50.9 0-35.3 35.8-64 80-64zM124.8 223.3l6.3-14.7c1.7-4.1 6.4-5.9 10.5-4.2l98.3 42.1 98.4-42.1c4.1-1.7 8.8.1 10.5 4.2l6.3 14.7c1.7 4.1-.1 8.8-4.2 10.5L280.6 264l70.3 30.1c4.1 1.7 5.9 6.4 4.2 10.5l-6.3 14.7c-1.7 4.1-6.4 5.9-10.5 4.2L240 281.4l-98.3 42.2c-4.1 1.7-8.8-.1-10.5-4.2l-6.3-14.7c-1.7-4.1.1-8.8 4.2-10.5l70.4-30.1-70.5-30.3c-4.1-1.7-5.9-6.4-4.2-10.5zm256 224.7H96c-19.2 0-32-12.8-32-32s16-32 32-32h284.8zM208 136c8.8 0 16-7.2 16-16s-7.2-16-16-16-16 7.2-16 16 7.2 16 16 16z“]},Ue={prefix:”fas“,iconName:”book-medical“,icon:[448,512,,”f7e6“,”M448 358.4V25.6c0-16-9.6-25.6-25.6-25.6H96C41.6 0 0 41.6 0 96v320c0 54.4 41.6 96 96 96h326.4c12.8 0 25.6-9.6 25.6-25.6v-16q0-9.6-9.6-19.2c-3.2-16-3.2-60.8 0-73.6q9.6-4.8 9.6-19.2zM144 168a8 8 0 0 1 8-8h56v-56a8 8 0 0 1 8-8h48a8 8 0 0 1 8 8v56h56a8 8 0 0 1 8 8v48a8 8 0 0 1-8 8h-56v56a8 8 0 0 1-8 8h-48a8 8 0 0 1-8-8v-56h-56a8 8 0 0 1-8-8zm236.8 280H96c-19.2 0-32-12.8-32-32s16-32 32-32h284.8z“]},qe={prefix:”fas“,iconName:”book-open“,icon:[576,512,,”f518“,”M542.22 32.05c-54.8 3.11-163.72 14.43-230.96 55.59-4.64 2.84-7.27 7.89-7.27 13.17v363.87c0 11.55 12.63 18.85 23.28 13.49 69.18-34.82 169.23-44.32 218.7-46.92 16.89-.89 30.02-14.43 30.02-30.66V62.75c.01-17.71-15.35-31.74-33.77-30.7zM264.73 87.64C197.5 46.48 88.58 35.17 33.78 32.05 15.36 31.01 0 45.04 0 62.75V400.6c0 16.24 13.13 29.78 30.02 30.66 49.49 2.6 149.59 12.11 218.77 46.95 10.62 5.35 23.21-1.94 23.21-13.46V100.63c0-5.29-2.62-10.14-7.27-12.99z“]},Ge={prefix:”fas“,iconName:”book-reader“,icon:[512,512,,”f5da“,”M352 96c0-53.02-42.98-96-96-96s-96 42.98-96 96 42.98 96 96 96 96-42.98 96-96zM233.59 241.1c-59.33-36.32-155.43-46.3-203.79-49.05C13.55 191.13 0 203.51 0 219.14v222.8c0 14.33 11.59 26.28 26.49 27.05 43.66 2.29 131.99 10.68 193.04 41.43 9.37 4.72 20.48-1.71 20.48-11.87V252.56c-.01-4.67-2.32-8.95-6.42-11.46zm248.61-49.05c-48.35 2.74-144.46 12.73-203.78 49.05-4.1 2.51-6.41 6.96-6.41 11.63v245.79c0 10.19 11.14 16.63 20.54 11.9 61.04-30.72 149.32-39.11 192.97-41.4 14.9-.78 26.49-12.73 26.49-27.06V219.14c-.01-15.63-13.56-28.01-29.81-27.09z“]},We={prefix:”fas“,iconName:”bookmark“,icon:[384,512,,”f02e“,”M0 512V48C0 21.49 21.49 0 48 0h288c26.51 0 48 21.49 48 48v464L192 400 0 512z“]},Ze={prefix:”fas“,iconName:”border-all“,icon:[448,512,,”f84c“,”M416 32H32A32 32 0 0 0 0 64v384a32 32 0 0 0 32 32h384a32 32 0 0 0 32-32V64a32 32 0 0 0-32-32zm-32 64v128H256V96zm-192 0v128H64V96zM64 416V288h128v128zm192 0V288h128v128z“]},$e={prefix:”fas“,iconName:”border-none“,icon:[448,512,,”f850“,”M240 224h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm96 0h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm96 0h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm-288 0h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm96 192h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm96 0h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm96 0h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-96h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-192h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM240 320h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-192h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm-96 288h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm96-384h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16zm96 0h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16zm96 0h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16zM48 224H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0 192H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-96H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-192H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-96H16A16 16 0 0 0 0 48v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16zm96 0h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16z“]},Je={prefix:”fas“,iconName:”border-style“,icon:[448,512,,”f853“,”M240 416h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm-96 0h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm192 0h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm96-192h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0 96h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0 96h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-288h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-96H32A32 32 0 0 0 0 64v400a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V96h368a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16z“]},Ke={prefix:”fas“,iconName:”bowling-ball“,icon:[496,512,,”f436“,”M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM120 192c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm64-96c0-17.7 14.3-32 32-32s32 14.3 32 32-14.3 32-32 32-32-14.3-32-32zm48 144c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z“]},Qe={prefix:”fas“,iconName:”box“,icon:[512,512,,”f466“,”M509.5 184.6L458.9 32.8C452.4 13.2 434.1 0 413.4 0H272v192h238.7c-.4-2.5-.4-5-1.2-7.4zM240 0H98.6c-20.7 0-39 13.2-45.5 32.8L2.5 184.6c-.8 2.4-.8 4.9-1.2 7.4H240V0zM0 224v240c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V224H0z“]},Ye={prefix:”fas“,iconName:”box-open“,icon:[640,512,,”f49e“,”M425.7 256c-16.9 0-32.8-9-41.4-23.4L320 126l-64.2 106.6c-8.7 14.5-24.6 23.5-41.5 23.5-4.5 0-9-.6-13.3-1.9L64 215v178c0 14.7 10 27.5 24.2 31l216.2 54.1c10.2 2.5 20.9 2.5 31 0L551.8 424c14.2-3.6 24.2-16.4 24.2-31V215l-137 39.1c-4.3 1.3-8.8 1.9-13.3 1.9zm212.6-112.2L586.8 41c-3.1-6.2-9.8-9.8-16.7-8.9L320 64l91.7 152.1c3.8 6.3 11.4 9.3 18.5 7.3l197.9-56.5c9.9-2.9 14.7-13.9 10.2-23.1zM53.2 41L1.7 143.8c-4.6 9.2.3 20.2 10.1 23l197.9 56.5c7.1 2 14.7-1 18.5-7.3L320 64 69.8 32.1c-6.9-.8-13.5 2.7-16.6 8.9z“]},Xe={prefix:”fas“,iconName:”box-tissue“,icon:[512,512,,”e05b“,”M383.88,287.82l64-192H338.47a70.2,70.2,0,0,1-66.59-48,70.21,70.21,0,0,0-66.6-48H63.88l64,288Zm-384,192a32,32,0,0,0,32,32h448a32,32,0,0,0,32-32v-64H-.12Zm480-256H438.94l-21.33,64h14.27a16,16,0,0,1,0,32h-352a16,16,0,1,1,0-32H95.09l-14.22-64h-49a32,32,0,0,0-32,32v128h512v-128A32,32,0,0,0,479.88,223.82Z“]},et={prefix:”fas“,iconName:”boxes“,icon:[576,512,,”f468“,”M560 288h-80v96l-32-21.3-32 21.3v-96h-80c-8.8 0-16 7.2-16 16v192c0 8.8 7.2 16 16 16h224c8.8 0 16-7.2 16-16V304c0-8.8-7.2-16-16-16zm-384-64h224c8.8 0 16-7.2 16-16V16c0-8.8-7.2-16-16-16h-80v96l-32-21.3L256 96V0h-80c-8.8 0-16 7.2-16 16v192c0 8.8 7.2 16 16 16zm64 64h-80v96l-32-21.3L96 384v-96H16c-8.8 0-16 7.2-16 16v192c0 8.8 7.2 16 16 16h224c8.8 0 16-7.2 16-16V304c0-8.8-7.2-16-16-16z“]},tt={prefix:”fas“,iconName:”braille“,icon:[640,512,,”f2a1“,”M128 256c0 35.346-28.654 64-64 64S0 291.346 0 256s28.654-64 64-64 64 28.654 64 64zM64 384c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm0-352C28.654 32 0 60.654 0 96s28.654 64 64 64 64-28.654 64-64-28.654-64-64-64zm160 192c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm0 160c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm0-352c-35.346 0-64 28.654-64 64s28.654 64 64 64 64-28.654 64-64-28.654-64-64-64zm224 192c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm0 160c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm0-352c-35.346 0-64 28.654-64 64s28.654 64 64 64 64-28.654 64-64-28.654-64-64-64zm160 192c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm0 160c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm0-320c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32z“]},nt={prefix:”fas“,iconName:”brain“,icon:[576,512,,”f5dc“,”M208 0c-29.9 0-54.7 20.5-61.8 48.2-.8 0-1.4-.2-2.2-.2-35.3 0-64 28.7-64 64 0 4.8.6 9.5 1.7 14C52.5 138 32 166.6 32 200c0 12.6 3.2 24.3 8.3 34.9C16.3 248.7 0 274.3 0 304c0 33.3 20.4 61.9 49.4 73.9-.9 4.6-1.4 9.3-1.4 14.1 0 39.8 32.2 72 72 72 4.1 0 8.1-.5 12-1.2 9.6 28.5 36.2 49.2 68 49.2 39.8 0 72-32.2 72-72V64c0-35.3-28.7-64-64-64zm368 304c0-29.7-16.3-55.3-40.3-69.1 5.2-10.6 8.3-22.3 8.3-34.9 0-33.4-20.5-62-49.7-74 1-4.5 1.7-9.2 1.7-14 0-35.3-28.7-64-64-64-.8 0-1.5.2-2.2.2C422.7 20.5 397.9 0 368 0c-35.3 0-64 28.6-64 64v376c0 39.8 32.2 72 72 72 31.8 0 58.4-20.7 68-49.2 3.9.7 7.9 1.2 12 1.2 39.8 0 72-32.2 72-72 0-4.8-.5-9.5-1.4-14.1 29-12 49.4-40.6 49.4-73.9z“]},rt={prefix:”fas“,iconName:”bread-slice“,icon:[576,512,,”f7ec“,”M288 0C108 0 0 93.4 0 169.14 0 199.44 24.24 224 64 224v256c0 17.67 16.12 32 36 32h376c19.88 0 36-14.33 36-32V224c39.76 0 64-24.56 64-54.86C576 93.4 468 0 288 0z“]},it={prefix:”fas“,iconName:”briefcase“,icon:[512,512,,”f0b1“,”M320 336c0 8.84-7.16 16-16 16h-96c-8.84 0-16-7.16-16-16v-48H0v144c0 25.6 22.4 48 48 48h416c25.6 0 48-22.4 48-48V288H320v48zm144-208h-80V80c0-25.6-22.4-48-48-48H176c-25.6 0-48 22.4-48 48v48H48c-25.6 0-48 22.4-48 48v80h512v-80c0-25.6-22.4-48-48-48zm-144 0H192V96h128v32z“]},at={prefix:”fas“,iconName:”briefcase-medical“,icon:[512,512,,”f469“,”M464 128h-80V80c0-26.5-21.5-48-48-48H176c-26.5 0-48 21.5-48 48v48H48c-26.5 0-48 21.5-48 48v288c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V176c0-26.5-21.5-48-48-48zM192 96h128v32H192V96zm160 248c0 4.4-3.6 8-8 8h-56v56c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8v-56h-56c-4.4 0-8-3.6-8-8v-48c0-4.4 3.6-8 8-8h56v-56c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v56h56c4.4 0 8 3.6 8 8v48z“]},ot={prefix:”fas“,iconName:”broadcast-tower“,icon:[640,512,,”f519“,”M150.94 192h33.73c11.01 0 18.61-10.83 14.86-21.18-4.93-13.58-7.55-27.98-7.55-42.82s2.62-29.24 7.55-42.82C203.29 74.83 195.68 64 184.67 64h-33.73c-7.01 0-13.46 4.49-15.41 11.23C130.64 92.21 128 109.88 128 128c0 18.12 2.64 35.79 7.54 52.76 1.94 6.74 8.39 11.24 15.4 11.24zM89.92 23.34C95.56 12.72 87.97 0 75.96 0H40.63c-6.27 0-12.14 3.59-14.74 9.31C9.4 45.54 0 85.65 0 128c0 24.75 3.12 68.33 26.69 118.86 2.62 5.63 8.42 9.14 14.61 9.14h34.84c12.02 0 19.61-12.74 13.95-23.37-49.78-93.32-16.71-178.15-.17-209.29zM614.06 9.29C611.46 3.58 605.6 0 599.33 0h-35.42c-11.98 0-19.66 12.66-14.02 23.25 18.27 34.29 48.42 119.42.28 209.23-5.72 10.68 1.8 23.52 13.91 23.52h35.23c6.27 0 12.13-3.58 14.73-9.29C630.57 210.48 640 170.36 640 128s-9.42-82.48-25.94-118.71zM489.06 64h-33.73c-11.01 0-18.61 10.83-14.86 21.18 4.93 13.58 7.55 27.98 7.55 42.82s-2.62 29.24-7.55 42.82c-3.76 10.35 3.85 21.18 14.86 21.18h33.73c7.02 0 13.46-4.49 15.41-11.24 4.9-16.97 7.53-34.64 7.53-52.76 0-18.12-2.64-35.79-7.54-52.76-1.94-6.75-8.39-11.24-15.4-11.24zm-116.3 100.12c7.05-10.29 11.2-22.71 11.2-36.12 0-35.35-28.63-64-63.96-64-35.32 0-63.96 28.65-63.96 64 0 13.41 4.15 25.83 11.2 36.12l-130.5 313.41c-3.4 8.15.46 17.52 8.61 20.92l29.51 12.31c8.15 3.4 17.52-.46 20.91-8.61L244.96 384h150.07l49.2 118.15c3.4 8.16 12.76 12.01 20.91 8.61l29.51-12.31c8.15-3.4 12-12.77 8.61-20.92l-130.5-313.41zM271.62 320L320 203.81 368.38 320h-96.76z“]},ct={prefix:”fas“,iconName:”broom“,icon:[640,512,,”f51a“,”M256.47 216.77l86.73 109.18s-16.6 102.36-76.57 150.12C206.66 523.85 0 510.19 0 510.19s3.8-23.14 11-55.43l94.62-112.17c3.97-4.7-.87-11.62-6.65-9.5l-60.4 22.09c14.44-41.66 32.72-80.04 54.6-97.47 59.97-47.76 163.3-40.94 163.3-40.94zM636.53 31.03l-19.86-25c-5.49-6.9-15.52-8.05-22.41-2.56l-232.48 177.8-34.14-42.97c-5.09-6.41-15.14-5.21-18.59 2.21l-25.33 54.55 86.73 109.18 58.8-12.45c8-1.69 11.42-11.2 6.34-17.6l-34.09-42.92 232.48-177.8c6.89-5.48 8.04-15.53 2.55-22.44z“]},st={prefix:”fas“,iconName:”brush“,icon:[384,512,,”f55d“,”M352 0H32C14.33 0 0 14.33 0 32v224h384V32c0-17.67-14.33-32-32-32zM0 320c0 35.35 28.66 64 64 64h64v64c0 35.35 28.66 64 64 64s64-28.65 64-64v-64h64c35.34 0 64-28.65 64-64v-32H0v32zm192 104c13.25 0 24 10.74 24 24 0 13.25-10.75 24-24 24s-24-10.75-24-24c0-13.26 10.75-24 24-24z“]},ut={prefix:”fas“,iconName:”bug“,icon:[512,512,,”f188“,”M511.988 288.9c-.478 17.43-15.217 31.1-32.653 31.1H424v16c0 21.864-4.882 42.584-13.6 61.145l60.228 60.228c12.496 12.497 12.496 32.758 0 45.255-12.498 12.497-32.759 12.496-45.256 0l-54.736-54.736C345.886 467.965 314.351 480 280 480V236c0-6.627-5.373-12-12-12h-24c-6.627 0-12 5.373-12 12v244c-34.351 0-65.886-12.035-90.636-32.108l-54.736 54.736c-12.498 12.497-32.759 12.496-45.256 0-12.496-12.497-12.496-32.758 0-45.255l60.228-60.228C92.882 378.584 88 357.864 88 336v-16H32.666C15.23 320 .491 306.33.013 288.9-.484 270.816 14.028 256 32 256h56v-58.745l-46.628-46.628c-12.496-12.497-12.496-32.758 0-45.255 12.498-12.497 32.758-12.497 45.256 0L141.255 160h229.489l54.627-54.627c12.498-12.497 32.758-12.497 45.256 0 12.496 12.497 12.496 32.758 0 45.255L424 197.255V256h56c17.972 0 32.484 14.816 31.988 32.9zM257 0c-61.856 0-112 50.144-112 112h224C369 50.144 318.856 0 257 0z“]},lt={prefix:”fas“,iconName:”building“,icon:[448,512,,”f1ad“,”M436 480h-20V24c0-13.255-10.745-24-24-24H56C42.745 0 32 10.745 32 24v456H12c-6.627 0-12 5.373-12 12v20h448v-20c0-6.627-5.373-12-12-12zM128 76c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v40c0 6.627-5.373 12-12 12h-40c-6.627 0-12-5.373-12-12V76zm0 96c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v40c0 6.627-5.373 12-12 12h-40c-6.627 0-12-5.373-12-12v-40zm52 148h-40c-6.627 0-12-5.373-12-12v-40c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v40c0 6.627-5.373 12-12 12zm76 160h-64v-84c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v84zm64-172c0 6.627-5.373 12-12 12h-40c-6.627 0-12-5.373-12-12v-40c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v40zm0-96c0 6.627-5.373 12-12 12h-40c-6.627 0-12-5.373-12-12v-40c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v40zm0-96c0 6.627-5.373 12-12 12h-40c-6.627 0-12-5.373-12-12V76c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v40z“]},ft={prefix:”fas“,iconName:”bullhorn“,icon:[576,512,,”f0a1“,”M576 240c0-23.63-12.95-44.04-32-55.12V32.01C544 23.26 537.02 0 512 0c-7.12 0-14.19 2.38-19.98 7.02l-85.03 68.03C364.28 109.19 310.66 128 256 128H64c-35.35 0-64 28.65-64 64v96c0 35.35 28.65 64 64 64h33.7c-1.39 10.48-2.18 21.14-2.18 32 0 39.77 9.26 77.35 25.56 110.94 5.19 10.69 16.52 17.06 28.4 17.06h74.28c26.05 0 41.69-29.84 25.9-50.56-16.4-21.52-26.15-48.36-26.15-77.44 0-11.11 1.62-21.79 4.41-32H256c54.66 0 108.28 18.81 150.98 52.95l85.03 68.03a32.023 32.023 0 0 0 19.98 7.02c24.92 0 32-22.78 32-32V295.13C563.05 284.04 576 263.63 576 240zm-96 141.42l-33.05-26.44C392.95 311.78 325.12 288 256 288v-96c69.12 0 136.95-23.78 190.95-66.98L480 98.58v282.84z“]},ht={prefix:”fas“,iconName:”bullseye“,icon:[496,512,,”f140“,”M248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm0 432c-101.69 0-184-82.29-184-184 0-101.69 82.29-184 184-184 101.69 0 184 82.29 184 184 0 101.69-82.29 184-184 184zm0-312c-70.69 0-128 57.31-128 128s57.31 128 128 128 128-57.31 128-128-57.31-128-128-128zm0 192c-35.29 0-64-28.71-64-64s28.71-64 64-64 64 28.71 64 64-28.71 64-64 64z“]},dt={prefix:”fas“,iconName:”burn“,icon:[384,512,,”f46a“,”M192 0C79.7 101.3 0 220.9 0 300.5 0 425 79 512 192 512s192-87 192-211.5c0-79.9-80.2-199.6-192-300.5zm0 448c-56.5 0-96-39-96-94.8 0-13.5 4.6-61.5 96-161.2 91.4 99.7 96 147.7 96 161.2 0 55.8-39.5 94.8-96 94.8z“]},pt={prefix:”fas“,iconName:”bus“,icon:[512,512,,”f207“,”M488 128h-8V80c0-44.8-99.2-80-224-80S32 35.2 32 80v48h-8c-13.25 0-24 10.74-24 24v80c0 13.25 10.75 24 24 24h8v160c0 17.67 14.33 32 32 32v32c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-32h192v32c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-32h6.4c16 0 25.6-12.8 25.6-25.6V256h8c13.25 0 24-10.75 24-24v-80c0-13.26-10.75-24-24-24zM112 400c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm16-112c-17.67 0-32-14.33-32-32V128c0-17.67 14.33-32 32-32h256c17.67 0 32 14.33 32 32v128c0 17.67-14.33 32-32 32H128zm272 112c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z“]},mt={prefix:”fas“,iconName:”bus-alt“,icon:[512,512,,”f55e“,”M488 128h-8V80c0-44.8-99.2-80-224-80S32 35.2 32 80v48h-8c-13.25 0-24 10.74-24 24v80c0 13.25 10.75 24 24 24h8v160c0 17.67 14.33 32 32 32v32c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-32h192v32c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-32h6.4c16 0 25.6-12.8 25.6-25.6V256h8c13.25 0 24-10.75 24-24v-80c0-13.26-10.75-24-24-24zM160 72c0-4.42 3.58-8 8-8h176c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H168c-4.42 0-8-3.58-8-8V72zm-48 328c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm128-112H128c-17.67 0-32-14.33-32-32v-96c0-17.67 14.33-32 32-32h112v160zm32 0V128h112c17.67 0 32 14.33 32 32v96c0 17.67-14.33 32-32 32H272zm128 112c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z“]},vt={prefix:”fas“,iconName:”business-time“,icon:[640,512,,”f64a“,”M496 224c-79.59 0-144 64.41-144 144s64.41 144 144 144 144-64.41 144-144-64.41-144-144-144zm64 150.29c0 5.34-4.37 9.71-9.71 9.71h-60.57c-5.34 0-9.71-4.37-9.71-9.71v-76.57c0-5.34 4.37-9.71 9.71-9.71h12.57c5.34 0 9.71 4.37 9.71 9.71V352h38.29c5.34 0 9.71 4.37 9.71 9.71v12.58zM496 192c5.4 0 10.72.33 16 .81V144c0-25.6-22.4-48-48-48h-80V48c0-25.6-22.4-48-48-48H176c-25.6 0-48 22.4-48 48v48H48c-25.6 0-48 22.4-48 48v80h395.12c28.6-20.09 63.35-32 100.88-32zM320 96H192V64h128v32zm6.82 224H208c-8.84 0-16-7.16-16-16v-48H0v144c0 25.6 22.4 48 48 48h291.43C327.1 423.96 320 396.82 320 368c0-16.66 2.48-32.72 6.82-48z“]},gt={prefix:”fas“,iconName:”calculator“,icon:[448,512,,”f1ec“,”M400 0H48C22.4 0 0 22.4 0 48v416c0 25.6 22.4 48 48 48h352c25.6 0 48-22.4 48-48V48c0-25.6-22.4-48-48-48zM128 435.2c0 6.4-6.4 12.8-12.8 12.8H76.8c-6.4 0-12.8-6.4-12.8-12.8v-38.4c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v38.4zm0-128c0 6.4-6.4 12.8-12.8 12.8H76.8c-6.4 0-12.8-6.4-12.8-12.8v-38.4c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v38.4zm128 128c0 6.4-6.4 12.8-12.8 12.8h-38.4c-6.4 0-12.8-6.4-12.8-12.8v-38.4c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v38.4zm0-128c0 6.4-6.4 12.8-12.8 12.8h-38.4c-6.4 0-12.8-6.4-12.8-12.8v-38.4c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v38.4zm128 128c0 6.4-6.4 12.8-12.8 12.8h-38.4c-6.4 0-12.8-6.4-12.8-12.8V268.8c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v166.4zm0-256c0 6.4-6.4 12.8-12.8 12.8H76.8c-6.4 0-12.8-6.4-12.8-12.8V76.8C64 70.4 70.4 64 76.8 64h294.4c6.4 0 12.8 6.4 12.8 12.8v102.4z“]},yt={prefix:”fas“,iconName:”calendar“,icon:[448,512,,”f133“,”M12 192h424c6.6 0 12 5.4 12 12v260c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V204c0-6.6 5.4-12 12-12zm436-44v-36c0-26.5-21.5-48-48-48h-48V12c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v52H160V12c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v52H48C21.5 64 0 85.5 0 112v36c0 6.6 5.4 12 12 12h424c6.6 0 12-5.4 12-12z“]},bt={prefix:”fas“,iconName:”calendar-alt“,icon:[448,512,,”f073“,”M0 464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V192H0v272zm320-196c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40zm0 128c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40zM192 268c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40zm0 128c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40zM64 268c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12H76c-6.6 0-12-5.4-12-12v-40zm0 128c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12H76c-6.6 0-12-5.4-12-12v-40zM400 64h-48V16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v48H160V16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v48H48C21.5 64 0 85.5 0 112v48h448v-48c0-26.5-21.5-48-48-48z“]},wt={prefix:”fas“,iconName:”calendar-check“,icon:[448,512,,”f274“,”M436 160H12c-6.627 0-12-5.373-12-12v-36c0-26.51 21.49-48 48-48h48V12c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v52h128V12c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v52h48c26.51 0 48 21.49 48 48v36c0 6.627-5.373 12-12 12zM12 192h424c6.627 0 12 5.373 12 12v260c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V204c0-6.627 5.373-12 12-12zm333.296 95.947l-28.169-28.398c-4.667-4.705-12.265-4.736-16.97-.068L194.12 364.665l-45.98-46.352c-4.667-4.705-12.266-4.736-16.971-.068l-28.397 28.17c-4.705 4.667-4.736 12.265-.068 16.97l82.601 83.269c4.667 4.705 12.265 4.736 16.97.068l142.953-141.805c4.705-4.667 4.736-12.265.068-16.97z“]},xt={prefix:”fas“,iconName:”calendar-day“,icon:[448,512,,”f783“,”M0 464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V192H0v272zm64-192c0-8.8 7.2-16 16-16h96c8.8 0 16 7.2 16 16v96c0 8.8-7.2 16-16 16H80c-8.8 0-16-7.2-16-16v-96zM400 64h-48V16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v48H160V16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v48H48C21.5 64 0 85.5 0 112v48h448v-48c0-26.5-21.5-48-48-48z“]},St={prefix:”fas“,iconName:”calendar-minus“,icon:[448,512,,”f272“,”M436 160H12c-6.6 0-12-5.4-12-12v-36c0-26.5 21.5-48 48-48h48V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h128V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h48c26.5 0 48 21.5 48 48v36c0 6.6-5.4 12-12 12zM12 192h424c6.6 0 12 5.4 12 12v260c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V204c0-6.6 5.4-12 12-12zm304 192c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12H132c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h184z“]},kt={prefix:”fas“,iconName:”calendar-plus“,icon:[448,512,,”f271“,”M436 160H12c-6.6 0-12-5.4-12-12v-36c0-26.5 21.5-48 48-48h48V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h128V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h48c26.5 0 48 21.5 48 48v36c0 6.6-5.4 12-12 12zM12 192h424c6.6 0 12 5.4 12 12v260c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V204c0-6.6 5.4-12 12-12zm316 140c0-6.6-5.4-12-12-12h-60v-60c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v60h-60c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h60v60c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-60h60c6.6 0 12-5.4 12-12v-40z“]},_t={prefix:”fas“,iconName:”calendar-times“,icon:[448,512,,”f273“,”M436 160H12c-6.6 0-12-5.4-12-12v-36c0-26.5 21.5-48 48-48h48V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h128V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h48c26.5 0 48 21.5 48 48v36c0 6.6-5.4 12-12 12zM12 192h424c6.6 0 12 5.4 12 12v260c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V204c0-6.6 5.4-12 12-12zm257.3 160l48.1-48.1c4.7-4.7 4.7-12.3 0-17l-28.3-28.3c-4.7-4.7-12.3-4.7-17 0L224 306.7l-48.1-48.1c-4.7-4.7-12.3-4.7-17 0l-28.3 28.3c-4.7 4.7-4.7 12.3 0 17l48.1 48.1-48.1 48.1c-4.7 4.7-4.7 12.3 0 17l28.3 28.3c4.7 4.7 12.3 4.7 17 0l48.1-48.1 48.1 48.1c4.7 4.7 12.3 4.7 17 0l28.3-28.3c4.7-4.7 4.7-12.3 0-17L269.3 352z“]},zt={prefix:”fas“,iconName:”calendar-week“,icon:[448,512,,”f784“,”M0 464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V192H0v272zm64-192c0-8.8 7.2-16 16-16h288c8.8 0 16 7.2 16 16v64c0 8.8-7.2 16-16 16H80c-8.8 0-16-7.2-16-16v-64zM400 64h-48V16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v48H160V16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v48H48C21.5 64 0 85.5 0 112v48h448v-48c0-26.5-21.5-48-48-48z“]},Ct={prefix:”fas“,iconName:”camera“,icon:[512,512,,”f030“,”M512 144v288c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V144c0-26.5 21.5-48 48-48h88l12.3-32.9c7-18.7 24.9-31.1 44.9-31.1h125.5c20 0 37.9 12.4 44.9 31.1L376 96h88c26.5 0 48 21.5 48 48zM376 288c0-66.2-53.8-120-120-120s-120 53.8-120 120 53.8 120 120 120 120-53.8 120-120zm-32 0c0 48.5-39.5 88-88 88s-88-39.5-88-88 39.5-88 88-88 88 39.5 88 88z“]},Mt={prefix:”fas“,iconName:”camera-retro“,icon:[512,512,,”f083“,”M48 32C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48H48zm0 32h106c3.3 0 6 2.7 6 6v20c0 3.3-2.7 6-6 6H38c-3.3 0-6-2.7-6-6V80c0-8.8 7.2-16 16-16zm426 96H38c-3.3 0-6-2.7-6-6v-36c0-3.3 2.7-6 6-6h138l30.2-45.3c1.1-1.7 3-2.7 5-2.7H464c8.8 0 16 7.2 16 16v74c0 3.3-2.7 6-6 6zM256 424c-66.2 0-120-53.8-120-120s53.8-120 120-120 120 53.8 120 120-53.8 120-120 120zm0-208c-48.5 0-88 39.5-88 88s39.5 88 88 88 88-39.5 88-88-39.5-88-88-88zm-48 104c-8.8 0-16-7.2-16-16 0-35.3 28.7-64 64-64 8.8 0 16 7.2 16 16s-7.2 16-16 16c-17.6 0-32 14.4-32 32 0 8.8-7.2 16-16 16z“]},Ot={prefix:”fas“,iconName:”campground“,icon:[640,512,,”f6bb“,”M624 448h-24.68L359.54 117.75l53.41-73.55c5.19-7.15 3.61-17.16-3.54-22.35l-25.9-18.79c-7.15-5.19-17.15-3.61-22.35 3.55L320 63.3 278.83 6.6c-5.19-7.15-15.2-8.74-22.35-3.55l-25.88 18.8c-7.15 5.19-8.74 15.2-3.54 22.35l53.41 73.55L40.68 448H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h608c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zM320 288l116.36 160H203.64L320 288z“]},Tt={prefix:”fas“,iconName:”candy-cane“,icon:[512,512,,”f786“,”M497.5 92C469.6 33.1 411.8 0 352.4 0c-27.9 0-56.2 7.3-81.8 22.6L243.1 39c-15.2 9.1-20.1 28.7-11 43.9l32.8 54.9c6 10 16.6 15.6 27.5 15.6 5.6 0 11.2-1.5 16.4-4.5l27.5-16.4c5.1-3.1 10.8-4.5 16.4-4.5 10.9 0 21.5 5.6 27.5 15.6 9.1 15.1 4.1 34.8-11 43.9L15.6 397.6c-15.2 9.1-20.1 28.7-11 43.9l32.8 54.9c6 10 16.6 15.6 27.5 15.6 5.6 0 11.2-1.5 16.4-4.5L428.6 301c71.7-42.9 104.6-133.5 68.9-209zm-177.7 13l-2.5 1.5L296.8 45c9.7-4.7 19.8-8.1 30.3-10.2l20.6 61.8c-9.8.8-19.4 3.3-27.9 8.4zM145.9 431.8l-60.5-38.5 30.8-18.3 60.5 38.5-30.8 18.3zm107.5-63.9l-60.5-38.5 30.8-18.3 60.5 38.5-30.8 18.3zM364.3 302l-60.5-38.5 30.8-18.3 60.5 38.5-30.8 18.3zm20.4-197.3l46-46c8.4 6.5 16 14.1 22.6 22.6L407.6 127c-5.7-9.3-13.7-16.9-22.9-22.3zm82.1 107.8l-59.5-19.8c3.2-5.3 5.8-10.9 7.4-17.1 1.1-4.5 1.7-9.1 1.8-13.6l60.4 20.1c-2.1 10.4-5.5 20.6-10.1 30.4z“]},Et={prefix:”fas“,iconName:”cannabis“,icon:[512,512,,”f55f“,”M503.47 360.25c-1.56-.82-32.39-16.89-76.78-25.81 64.25-75.12 84.05-161.67 84.93-165.64 1.18-5.33-.44-10.9-4.3-14.77-3.03-3.04-7.12-4.7-11.32-4.7-1.14 0-2.29.12-3.44.38-3.88.85-86.54 19.59-160.58 79.76.01-1.46.01-2.93.01-4.4 0-118.79-59.98-213.72-62.53-217.7A15.973 15.973 0 0 0 256 0c-5.45 0-10.53 2.78-13.47 7.37-2.55 3.98-62.53 98.91-62.53 217.7 0 1.47.01 2.94.01 4.4-74.03-60.16-156.69-78.9-160.58-79.76-1.14-.25-2.29-.38-3.44-.38-4.2 0-8.29 1.66-11.32 4.7A15.986 15.986 0 0 0 .38 168.8c.88 3.97 20.68 90.52 84.93 165.64-44.39 8.92-75.21 24.99-76.78 25.81a16.003 16.003 0 0 0-.02 28.29c2.45 1.29 60.76 31.72 133.49 31.72 6.14 0 11.96-.1 17.5-.31-11.37 22.23-16.52 38.31-16.81 39.22-1.8 5.68-.29 11.89 3.91 16.11a16.019 16.019 0 0 0 16.1 3.99c1.83-.57 37.72-11.99 77.3-39.29V504c0 4.42 3.58 8 8 8h16c4.42 0 8-3.58 8-8v-64.01c39.58 27.3 75.47 38.71 77.3 39.29a16.019 16.019 0 0 0 16.1-3.99c4.2-4.22 5.71-10.43 3.91-16.11-.29-.91-5.45-16.99-16.81-39.22 5.54.21 11.37.31 17.5.31 72.72 0 131.04-30.43 133.49-31.72 5.24-2.78 8.52-8.22 8.51-14.15-.01-5.94-3.29-11.39-8.53-14.15z“]},Lt={prefix:”fas“,iconName:”capsules“,icon:[576,512,,”f46b“,”M555.3 300.1L424.2 112.8C401.9 81 366.4 64 330.4 64c-22.6 0-45.5 6.7-65.5 20.7-19.7 13.8-33.7 32.8-41.5 53.8C220.5 79.2 172 32 112 32 50.1 32 0 82.1 0 144v224c0 61.9 50.1 112 112 112s112-50.1 112-112V218.9c3.3 8.6 7.3 17.1 12.8 25L368 431.2c22.2 31.8 57.7 48.8 93.8 48.8 22.7 0 45.5-6.7 65.5-20.7 51.7-36.2 64.2-107.5 28-159.2zM160 256H64V144c0-26.5 21.5-48 48-48s48 21.5 48 48v112zm194.8 44.9l-65.6-93.7c-7.7-11-10.7-24.4-8.3-37.6 2.3-13.2 9.7-24.8 20.7-32.5 8.5-6 18.5-9.1 28.8-9.1 16.5 0 31.9 8 41.3 21.5l65.6 93.7-82.5 57.7z“]},At={prefix:”fas“,iconName:”car“,icon:[512,512,,”f1b9“,”M499.99 176h-59.87l-16.64-41.6C406.38 91.63 365.57 64 319.5 64h-127c-46.06 0-86.88 27.63-103.99 70.4L71.87 176H12.01C4.2 176-1.53 183.34.37 190.91l6 24C7.7 220.25 12.5 224 18.01 224h20.07C24.65 235.73 16 252.78 16 272v48c0 16.12 6.16 30.67 16 41.93V416c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-32h256v32c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-54.07c9.84-11.25 16-25.8 16-41.93v-48c0-19.22-8.65-36.27-22.07-48H494c5.51 0 10.31-3.75 11.64-9.09l6-24c1.89-7.57-3.84-14.91-11.65-14.91zm-352.06-17.83c7.29-18.22 24.94-30.17 44.57-30.17h127c19.63 0 37.28 11.95 44.57 30.17L384 208H128l19.93-49.83zM96 319.8c-19.2 0-32-12.76-32-31.9S76.8 256 96 256s48 28.71 48 47.85-28.8 15.95-48 15.95zm320 0c-19.2 0-48 3.19-48-15.95S396.8 256 416 256s32 12.76 32 31.9-12.8 31.9-32 31.9z“]},Rt={prefix:”fas“,iconName:”car-alt“,icon:[480,512,,”f5de“,”M438.66 212.33l-11.24-28.1-19.93-49.83C390.38 91.63 349.57 64 303.5 64h-127c-46.06 0-86.88 27.63-103.99 70.4l-19.93 49.83-11.24 28.1C17.22 221.5 0 244.66 0 272v48c0 16.12 6.16 30.67 16 41.93V416c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-32h256v32c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-54.07c9.84-11.25 16-25.8 16-41.93v-48c0-27.34-17.22-50.5-41.34-59.67zm-306.73-54.16c7.29-18.22 24.94-30.17 44.57-30.17h127c19.63 0 37.28 11.95 44.57 30.17L368 208H112l19.93-49.83zM80 319.8c-19.2 0-32-12.76-32-31.9S60.8 256 80 256s48 28.71 48 47.85-28.8 15.95-48 15.95zm320 0c-19.2 0-48 3.19-48-15.95S380.8 256 400 256s32 12.76 32 31.9-12.8 31.9-32 31.9z“]},Nt={prefix:”fas“,iconName:”car-battery“,icon:[512,512,,”f5df“,”M480 128h-32V80c0-8.84-7.16-16-16-16h-96c-8.84 0-16 7.16-16 16v48H192V80c0-8.84-7.16-16-16-16H80c-8.84 0-16 7.16-16 16v48H32c-17.67 0-32 14.33-32 32v256c0 17.67 14.33 32 32 32h448c17.67 0 32-14.33 32-32V160c0-17.67-14.33-32-32-32zM192 264c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h112c4.42 0 8 3.58 8 8v16zm256 0c0 4.42-3.58 8-8 8h-40v40c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-40h-40c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h40v-40c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v40h40c4.42 0 8 3.58 8 8v16z“]},Ht={prefix:”fas“,iconName:”car-crash“,icon:[640,512,,”f5e1“,”M143.25 220.81l-12.42 46.37c-3.01 11.25-3.63 22.89-2.41 34.39l-35.2 28.98c-6.57 5.41-16.31-.43-14.62-8.77l15.44-76.68c1.06-5.26-2.66-10.28-8-10.79l-77.86-7.55c-8.47-.82-11.23-11.83-4.14-16.54l65.15-43.3c4.46-2.97 5.38-9.15 1.98-13.29L21.46 93.22c-5.41-6.57.43-16.3 8.78-14.62l76.68 15.44c5.26 1.06 10.28-2.66 10.8-8l7.55-77.86c.82-8.48 11.83-11.23 16.55-4.14l43.3 65.14c2.97 4.46 9.15 5.38 13.29 1.98l60.4-49.71c6.57-5.41 16.3.43 14.62 8.77L262.1 86.38c-2.71 3.05-5.43 6.09-7.91 9.4l-32.15 42.97-10.71 14.32c-32.73 8.76-59.18 34.53-68.08 67.74zm494.57 132.51l-12.42 46.36c-3.13 11.68-9.38 21.61-17.55 29.36a66.876 66.876 0 0 1-8.76 7l-13.99 52.23c-1.14 4.27-3.1 8.1-5.65 11.38-7.67 9.84-20.74 14.68-33.54 11.25L515 502.62c-17.07-4.57-27.2-22.12-22.63-39.19l8.28-30.91-247.28-66.26-8.28 30.91c-4.57 17.07-22.12 27.2-39.19 22.63l-30.91-8.28c-12.8-3.43-21.7-14.16-23.42-26.51-.57-4.12-.35-8.42.79-12.68l13.99-52.23a66.62 66.62 0 0 1-4.09-10.45c-3.2-10.79-3.65-22.52-.52-34.2l12.42-46.37c5.31-19.8 19.36-34.83 36.89-42.21a64.336 64.336 0 0 1 18.49-4.72l18.13-24.23 32.15-42.97c3.45-4.61 7.19-8.9 11.2-12.84 8-7.89 17.03-14.44 26.74-19.51 4.86-2.54 9.89-4.71 15.05-6.49 10.33-3.58 21.19-5.63 32.24-6.04 11.05-.41 22.31.82 33.43 3.8l122.68 32.87c11.12 2.98 21.48 7.54 30.85 13.43a111.11 111.11 0 0 1 34.69 34.5c8.82 13.88 14.64 29.84 16.68 46.99l6.36 53.29 3.59 30.05a64.49 64.49 0 0 1 22.74 29.93c4.39 11.88 5.29 25.19 1.75 38.39zM255.58 234.34c-18.55-4.97-34.21 4.04-39.17 22.53-4.96 18.49 4.11 34.12 22.65 39.09 18.55 4.97 45.54 15.51 50.49-2.98 4.96-18.49-15.43-53.67-33.97-58.64zm290.61 28.17l-6.36-53.29c-.58-4.87-1.89-9.53-3.82-13.86-5.8-12.99-17.2-23.01-31.42-26.82l-122.68-32.87a48.008 48.008 0 0 0-50.86 17.61l-32.15 42.97 172 46.08 75.29 20.18zm18.49 54.65c-18.55-4.97-53.8 15.31-58.75 33.79-4.95 18.49 23.69 22.86 42.24 27.83 18.55 4.97 34.21-4.04 39.17-22.53 4.95-18.48-4.11-34.12-22.66-39.09z“]},Pt={prefix:”fas“,iconName:”car-side“,icon:[640,512,,”f5e4“,”M544 192h-16L419.22 56.02A64.025 64.025 0 0 0 369.24 32H155.33c-26.17 0-49.7 15.93-59.42 40.23L48 194.26C20.44 201.4 0 226.21 0 256v112c0 8.84 7.16 16 16 16h48c0 53.02 42.98 96 96 96s96-42.98 96-96h128c0 53.02 42.98 96 96 96s96-42.98 96-96h48c8.84 0 16-7.16 16-16v-80c0-53.02-42.98-96-96-96zM160 432c-26.47 0-48-21.53-48-48s21.53-48 48-48 48 21.53 48 48-21.53 48-48 48zm72-240H116.93l38.4-96H232v96zm48 0V96h89.24l76.8 96H280zm200 240c-26.47 0-48-21.53-48-48s21.53-48 48-48 48 21.53 48 48-21.53 48-48 48z“]},jt={prefix:”fas“,iconName:”caravan“,icon:[640,512,,”f8ff“,”M416,208a16,16,0,1,0,16,16A16,16,0,0,0,416,208ZM624,320H576V160A160,160,0,0,0,416,0H64A64,64,0,0,0,0,64V320a64,64,0,0,0,64,64H96a96,96,0,0,0,192,0H624a16,16,0,0,0,16-16V336A16,16,0,0,0,624,320ZM192,432a48,48,0,1,1,48-48A48.05,48.05,0,0,1,192,432Zm64-240a32,32,0,0,1-32,32H96a32,32,0,0,1-32-32V128A32,32,0,0,1,96,96H224a32,32,0,0,1,32,32ZM448,320H320V128a32,32,0,0,1,32-32h64a32,32,0,0,1,32,32Z“]},Vt={prefix:”fas“,iconName:”caret-down“,icon:[320,512,,”f0d7“,”M31.3 192h257.3c17.8 0 26.7 21.5 14.1 34.1L174.1 354.8c-7.8 7.8-20.5 7.8-28.3 0L17.2 226.1C4.6 213.5 13.5 192 31.3 192z“]},Dt={prefix:”fas“,iconName:”caret-left“,icon:[192,512,,”f0d9“,”M192 127.338v257.324c0 17.818-21.543 26.741-34.142 14.142L29.196 270.142c-7.81-7.81-7.81-20.474 0-28.284l128.662-128.662c12.599-12.6 34.142-3.676 34.142 14.142z“]},It={prefix:”fas“,iconName:”caret-right“,icon:[192,512,,”f0da“,”M0 384.662V127.338c0-17.818 21.543-26.741 34.142-14.142l128.662 128.662c7.81 7.81 7.81 20.474 0 28.284L34.142 398.804C21.543 411.404 0 402.48 0 384.662z“]},Ft={prefix:”fas“,iconName:”caret-square-down“,icon:[448,512,,”f150“,”M448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zM92.5 220.5l123 123c4.7 4.7 12.3 4.7 17 0l123-123c7.6-7.6 2.2-20.5-8.5-20.5H101c-10.7 0-16.1 12.9-8.5 20.5z“]},Bt={prefix:”fas“,iconName:”caret-square-left“,icon:[448,512,,”f191“,”M400 480H48c-26.51 0-48-21.49-48-48V80c0-26.51 21.49-48 48-48h352c26.51 0 48 21.49 48 48v352c0 26.51-21.49 48-48 48zM259.515 124.485l-123.03 123.03c-4.686 4.686-4.686 12.284 0 16.971l123.029 123.029c7.56 7.56 20.485 2.206 20.485-8.485V132.971c.001-10.691-12.925-16.045-20.484-8.486z“]},Ut={prefix:”fas“,iconName:”caret-square-right“,icon:[448,512,,”f152“,”M48 32h352c26.51 0 48 21.49 48 48v352c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V80c0-26.51 21.49-48 48-48zm140.485 355.515l123.029-123.029c4.686-4.686 4.686-12.284 0-16.971l-123.029-123.03c-7.56-7.56-20.485-2.206-20.485 8.485v246.059c0 10.691 12.926 16.045 20.485 8.486z“]},qt={prefix:”fas“,iconName:”caret-square-up“,icon:[448,512,,”f151“,”M0 432V80c0-26.51 21.49-48 48-48h352c26.51 0 48 21.49 48 48v352c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48zm355.515-140.485l-123.03-123.03c-4.686-4.686-12.284-4.686-16.971 0L92.485 291.515c-7.56 7.56-2.206 20.485 8.485 20.485h246.059c10.691 0 16.045-12.926 8.486-20.485z“]},Gt={prefix:”fas“,iconName:”caret-up“,icon:[320,512,,”f0d8“,”M288.662 352H31.338c-17.818 0-26.741-21.543-14.142-34.142l128.662-128.662c7.81-7.81 20.474-7.81 28.284 0l128.662 128.662c12.6 12.599 3.676 34.142-14.142 34.142z“]},Wt={prefix:”fas“,iconName:”carrot“,icon:[512,512,,”f787“,”M298.2 156.6c-52.7-25.7-114.5-10.5-150.2 32.8l55.2 55.2c6.3 6.3 6.3 16.4 0 22.6-3.1 3.1-7.2 4.7-11.3 4.7s-8.2-1.6-11.3-4.7L130.4 217 2.3 479.7c-2.9 6-3.1 13.3 0 19.7 5.4 11.1 18.9 15.7 30 10.3l133.6-65.2-49.2-49.2c-6.3-6.2-6.3-16.4 0-22.6 6.3-6.2 16.4-6.2 22.6 0l57 57 102-49.8c24-11.7 44.5-31.3 57.1-57.1 30.1-61.7 4.5-136.1-57.2-166.2zm92.1-34.9C409.8 81 399.7 32.9 360 0c-50.3 41.7-52.5 107.5-7.9 151.9l8 8c44.4 44.6 110.3 42.4 151.9-7.9-32.9-39.7-81-49.8-121.7-30.3z“]},Zt={prefix:”fas“,iconName:”cart-arrow-down“,icon:[576,512,,”f218“,”M504.717 320H211.572l6.545 32h268.418c15.401 0 26.816 14.301 23.403 29.319l-5.517 24.276C523.112 414.668 536 433.828 536 456c0 31.202-25.519 56.444-56.824 55.994-29.823-.429-54.35-24.631-55.155-54.447-.44-16.287 6.085-31.049 16.803-41.548H231.176C241.553 426.165 248 440.326 248 456c0 31.813-26.528 57.431-58.67 55.938-28.54-1.325-51.751-24.385-53.251-52.917-1.158-22.034 10.436-41.455 28.051-51.586L93.883 64H24C10.745 64 0 53.255 0 40V24C0 10.745 10.745 0 24 0h102.529c11.401 0 21.228 8.021 23.513 19.19L159.208 64H551.99c15.401 0 26.816 14.301 23.403 29.319l-47.273 208C525.637 312.246 515.923 320 504.717 320zM403.029 192H360v-60c0-6.627-5.373-12-12-12h-24c-6.627 0-12 5.373-12 12v60h-43.029c-10.691 0-16.045 12.926-8.485 20.485l67.029 67.029c4.686 4.686 12.284 4.686 16.971 0l67.029-67.029c7.559-7.559 2.205-20.485-8.486-20.485z“]},$t={prefix:”fas“,iconName:”cart-plus“,icon:[576,512,,”f217“,”M504.717 320H211.572l6.545 32h268.418c15.401 0 26.816 14.301 23.403 29.319l-5.517 24.276C523.112 414.668 536 433.828 536 456c0 31.202-25.519 56.444-56.824 55.994-29.823-.429-54.35-24.631-55.155-54.447-.44-16.287 6.085-31.049 16.803-41.548H231.176C241.553 426.165 248 440.326 248 456c0 31.813-26.528 57.431-58.67 55.938-28.54-1.325-51.751-24.385-53.251-52.917-1.158-22.034 10.436-41.455 28.051-51.586L93.883 64H24C10.745 64 0 53.255 0 40V24C0 10.745 10.745 0 24 0h102.529c11.401 0 21.228 8.021 23.513 19.19L159.208 64H551.99c15.401 0 26.816 14.301 23.403 29.319l-47.273 208C525.637 312.246 515.923 320 504.717 320zM408 168h-48v-40c0-8.837-7.163-16-16-16h-16c-8.837 0-16 7.163-16 16v40h-48c-8.837 0-16 7.163-16 16v16c0 8.837 7.163 16 16 16h48v40c0 8.837 7.163 16 16 16h16c8.837 0 16-7.163 16-16v-40h48c8.837 0 16-7.163 16-16v-16c0-8.837-7.163-16-16-16z“]},Jt={prefix:”fas“,iconName:”cash-register“,icon:[512,512,,”f788“,”M511.1 378.8l-26.7-160c-2.6-15.4-15.9-26.7-31.6-26.7H208v-64h96c8.8 0 16-7.2 16-16V16c0-8.8-7.2-16-16-16H48c-8.8 0-16 7.2-16 16v96c0 8.8 7.2 16 16 16h96v64H59.1c-15.6 0-29 11.3-31.6 26.7L.8 378.7c-.6 3.5-.9 7-.9 10.5V480c0 17.7 14.3 32 32 32h448c17.7 0 32-14.3 32-32v-90.7c.1-3.5-.2-7-.8-10.5zM280 248c0-8.8 7.2-16 16-16h16c8.8 0 16 7.2 16 16v16c0 8.8-7.2 16-16 16h-16c-8.8 0-16-7.2-16-16v-16zm-32 64h16c8.8 0 16 7.2 16 16v16c0 8.8-7.2 16-16 16h-16c-8.8 0-16-7.2-16-16v-16c0-8.8 7.2-16 16-16zm-32-80c8.8 0 16 7.2 16 16v16c0 8.8-7.2 16-16 16h-16c-8.8 0-16-7.2-16-16v-16c0-8.8 7.2-16 16-16h16zM80 80V48h192v32H80zm40 200h-16c-8.8 0-16-7.2-16-16v-16c0-8.8 7.2-16 16-16h16c8.8 0 16 7.2 16 16v16c0 8.8-7.2 16-16 16zm16 64v-16c0-8.8 7.2-16 16-16h16c8.8 0 16 7.2 16 16v16c0 8.8-7.2 16-16 16h-16c-8.8 0-16-7.2-16-16zm216 112c0 4.4-3.6 8-8 8H168c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h176c4.4 0 8 3.6 8 8v16zm24-112c0 8.8-7.2 16-16 16h-16c-8.8 0-16-7.2-16-16v-16c0-8.8 7.2-16 16-16h16c8.8 0 16 7.2 16 16v16zm48-80c0 8.8-7.2 16-16 16h-16c-8.8 0-16-7.2-16-16v-16c0-8.8 7.2-16 16-16h16c8.8 0 16 7.2 16 16v16z“]},Kt={prefix:”fas“,iconName:”cat“,icon:[512,512,,”f6be“,”M290.59 192c-20.18 0-106.82 1.98-162.59 85.95V192c0-52.94-43.06-96-96-96-17.67 0-32 14.33-32 32s14.33 32 32 32c17.64 0 32 14.36 32 32v256c0 35.3 28.7 64 64 64h176c8.84 0 16-7.16 16-16v-16c0-17.67-14.33-32-32-32h-32l128-96v144c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16V289.86c-10.29 2.67-20.89 4.54-32 4.54-61.81 0-113.52-44.05-125.41-102.4zM448 96h-64l-64-64v134.4c0 53.02 42.98 96 96 96s96-42.98 96-96V32l-64 64zm-72 80c-8.84 0-16-7.16-16-16s7.16-16 16-16 16 7.16 16 16-7.16 16-16 16zm80 0c-8.84 0-16-7.16-16-16s7.16-16 16-16 16 7.16 16 16-7.16 16-16 16z“]},Qt={prefix:”fas“,iconName:”certificate“,icon:[512,512,,”f0a3“,”M458.622 255.92l45.985-45.005c13.708-12.977 7.316-36.039-10.664-40.339l-62.65-15.99 17.661-62.015c4.991-17.838-11.829-34.663-29.661-29.671l-61.994 17.667-15.984-62.671C337.085.197 313.765-6.276 300.99 7.228L256 53.57 211.011 7.229c-12.63-13.351-36.047-7.234-40.325 10.668l-15.984 62.671-61.995-17.667C74.87 57.907 58.056 74.738 63.046 92.572l17.661 62.015-62.65 15.99C.069 174.878-6.31 197.944 7.392 210.915l45.985 45.005-45.985 45.004c-13.708 12.977-7.316 36.039 10.664 40.339l62.65 15.99-17.661 62.015c-4.991 17.838 11.829 34.663 29.661 29.671l61.994-17.667 15.984 62.671c4.439 18.575 27.696 24.018 40.325 10.668L256 458.61l44.989 46.001c12.5 13.488 35.987 7.486 40.325-10.668l15.984-62.671 61.994 17.667c17.836 4.994 34.651-11.837 29.661-29.671l-17.661-62.015 62.65-15.99c17.987-4.302 24.366-27.367 10.664-40.339l-45.984-45.004z“]},Yt={prefix:”fas“,iconName:”chair“,icon:[448,512,,”f6c0“,”M112 128c0-29.5 16.2-55 40-68.9V256h48V48h48v208h48V59.1c23.8 13.9 40 39.4 40 68.9v128h48V128C384 57.3 326.7 0 256 0h-64C121.3 0 64 57.3 64 128v128h48zm334.3 213.9l-10.7-32c-4.4-13.1-16.6-21.9-30.4-21.9H42.7c-13.8 0-26 8.8-30.4 21.9l-10.7 32C-5.2 362.6 10.2 384 32 384v112c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V384h256v112c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V384c21.8 0 37.2-21.4 30.3-42.1z“]},Xt={prefix:”fas“,iconName:”chalkboard“,icon:[640,512,,”f51b“,”M96 64h448v352h64V40c0-22.06-17.94-40-40-40H72C49.94 0 32 17.94 32 40v376h64V64zm528 384H480v-64H288v64H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h608c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16z“]},en={prefix:”fas“,iconName:”chalkboard-teacher“,icon:[640,512,,”f51c“,”M208 352c-2.39 0-4.78.35-7.06 1.09C187.98 357.3 174.35 360 160 360c-14.35 0-27.98-2.7-40.95-6.91-2.28-.74-4.66-1.09-7.05-1.09C49.94 352-.33 402.48 0 464.62.14 490.88 21.73 512 48 512h224c26.27 0 47.86-21.12 48-47.38.33-62.14-49.94-112.62-112-112.62zm-48-32c53.02 0 96-42.98 96-96s-42.98-96-96-96-96 42.98-96 96 42.98 96 96 96zM592 0H208c-26.47 0-48 22.25-48 49.59V96c23.42 0 45.1 6.78 64 17.8V64h352v288h-64v-64H384v64h-76.24c19.1 16.69 33.12 38.73 39.69 64H592c26.47 0 48-22.25 48-49.59V49.59C640 22.25 618.47 0 592 0z“]},tn={prefix:”fas“,iconName:”charging-station“,icon:[576,512,,”f5e7“,”M336 448H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h320c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zm208-320V80c0-8.84-7.16-16-16-16s-16 7.16-16 16v48h-32V80c0-8.84-7.16-16-16-16s-16 7.16-16 16v48h-16c-8.84 0-16 7.16-16 16v32c0 35.76 23.62 65.69 56 75.93v118.49c0 13.95-9.5 26.92-23.26 29.19C431.22 402.5 416 388.99 416 372v-28c0-48.6-39.4-88-88-88h-8V64c0-35.35-28.65-64-64-64H96C60.65 0 32 28.65 32 64v352h288V304h8c22.09 0 40 17.91 40 40v24.61c0 39.67 28.92 75.16 68.41 79.01C481.71 452.05 520 416.41 520 372V251.93c32.38-10.24 56-40.17 56-75.93v-32c0-8.84-7.16-16-16-16h-16zm-283.91 47.76l-93.7 139c-2.2 3.33-6.21 5.24-10.39 5.24-7.67 0-13.47-6.28-11.67-12.92L167.35 224H108c-7.25 0-12.85-5.59-11.89-11.89l16-107C112.9 99.9 117.98 96 124 96h68c7.88 0 13.62 6.54 11.6 13.21L192 160h57.7c9.24 0 15.01 8.78 10.39 15.76z“]},nn={prefix:”fas“,iconName:”chart-area“,icon:[512,512,,”f1fe“,”M500 384c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12H12c-6.6 0-12-5.4-12-12V76c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v308h436zM372.7 159.5L288 216l-85.3-113.7c-5.1-6.8-15.5-6.3-19.9 1L96 248v104h384l-89.9-187.8c-3.2-6.5-11.4-8.7-17.4-4.7z“]},rn={prefix:”fas“,iconName:”chart-bar“,icon:[512,512,,”f080“,”M332.8 320h38.4c6.4 0 12.8-6.4 12.8-12.8V172.8c0-6.4-6.4-12.8-12.8-12.8h-38.4c-6.4 0-12.8 6.4-12.8 12.8v134.4c0 6.4 6.4 12.8 12.8 12.8zm96 0h38.4c6.4 0 12.8-6.4 12.8-12.8V76.8c0-6.4-6.4-12.8-12.8-12.8h-38.4c-6.4 0-12.8 6.4-12.8 12.8v230.4c0 6.4 6.4 12.8 12.8 12.8zm-288 0h38.4c6.4 0 12.8-6.4 12.8-12.8v-70.4c0-6.4-6.4-12.8-12.8-12.8h-38.4c-6.4 0-12.8 6.4-12.8 12.8v70.4c0 6.4 6.4 12.8 12.8 12.8zm96 0h38.4c6.4 0 12.8-6.4 12.8-12.8V108.8c0-6.4-6.4-12.8-12.8-12.8h-38.4c-6.4 0-12.8 6.4-12.8 12.8v198.4c0 6.4 6.4 12.8 12.8 12.8zM496 384H64V80c0-8.84-7.16-16-16-16H16C7.16 64 0 71.16 0 80v336c0 17.67 14.33 32 32 32h464c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16z“]},an={prefix:”fas“,iconName:”chart-line“,icon:[512,512,,”f201“,”M496 384H64V80c0-8.84-7.16-16-16-16H16C7.16 64 0 71.16 0 80v336c0 17.67 14.33 32 32 32h464c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zM464 96H345.94c-21.38 0-32.09 25.85-16.97 40.97l32.4 32.4L288 242.75l-73.37-73.37c-12.5-12.5-32.76-12.5-45.25 0l-68.69 68.69c-6.25 6.25-6.25 16.38 0 22.63l22.62 22.62c6.25 6.25 16.38 6.25 22.63 0L192 237.25l73.37 73.37c12.5 12.5 32.76 12.5 45.25 0l96-96 32.4 32.4c15.12 15.12 40.97 4.41 40.97-16.97V112c.01-8.84-7.15-16-15.99-16z“]},on={prefix:”fas“,iconName:”chart-pie“,icon:[544,512,,”f200“,”M527.79 288H290.5l158.03 158.03c6.04 6.04 15.98 6.53 22.19.68 38.7-36.46 65.32-85.61 73.13-140.86 1.34-9.46-6.51-17.85-16.06-17.85zm-15.83-64.8C503.72 103.74 408.26 8.28 288.8.04 279.68-.59 272 7.1 272 16.24V240h223.77c9.14 0 16.82-7.68 16.19-16.8zM224 288V50.71c0-9.55-8.39-17.4-17.84-16.06C86.99 51.49-4.1 155.6.14 280.37 4.5 408.51 114.83 513.59 243.03 511.98c50.4-.63 96.97-16.87 135.26-44.03 7.9-5.6 8.42-17.23 1.57-24.08L224 288z“]},cn={prefix:”fas“,iconName:”check“,icon:[512,512,,”f00c“,”M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z“]},sn={prefix:”fas“,iconName:”check-circle“,icon:[512,512,,”f058“,”M504 256c0 136.967-111.033 248-248 248S8 392.967 8 256 119.033 8 256 8s248 111.033 248 248zM227.314 387.314l184-184c6.248-6.248 6.248-16.379 0-22.627l-22.627-22.627c-6.248-6.249-16.379-6.249-22.628 0L216 308.118l-70.059-70.059c-6.248-6.248-16.379-6.248-22.628 0l-22.627 22.627c-6.248 6.248-6.248 16.379 0 22.627l104 104c6.249 6.249 16.379 6.249 22.628.001z“]},un={prefix:”fas“,iconName:”check-double“,icon:[512,512,,”f560“,”M505 174.8l-39.6-39.6c-9.4-9.4-24.6-9.4-33.9 0L192 374.7 80.6 263.2c-9.4-9.4-24.6-9.4-33.9 0L7 302.9c-9.4 9.4-9.4 24.6 0 34L175 505c9.4 9.4 24.6 9.4 33.9 0l296-296.2c9.4-9.5 9.4-24.7.1-34zm-324.3 106c6.2 6.3 16.4 6.3 22.6 0l208-208.2c6.2-6.3 6.2-16.4 0-22.6L366.1 4.7c-6.2-6.3-16.4-6.3-22.6 0L192 156.2l-55.4-55.5c-6.2-6.3-16.4-6.3-22.6 0L68.7 146c-6.2 6.3-6.2 16.4 0 22.6l112 112.2z“]},ln={prefix:”fas“,iconName:”check-square“,icon:[448,512,,”f14a“,”M400 480H48c-26.51 0-48-21.49-48-48V80c0-26.51 21.49-48 48-48h352c26.51 0 48 21.49 48 48v352c0 26.51-21.49 48-48 48zm-204.686-98.059l184-184c6.248-6.248 6.248-16.379 0-22.627l-22.627-22.627c-6.248-6.248-16.379-6.249-22.628 0L184 302.745l-70.059-70.059c-6.248-6.248-16.379-6.248-22.628 0l-22.627 22.627c-6.248 6.248-6.248 16.379 0 22.627l104 104c6.249 6.25 16.379 6.25 22.628.001z“]},fn={prefix:”fas“,iconName:”cheese“,icon:[512,512,,”f7ef“,”M0 288v160a32 32 0 0 0 32 32h448a32 32 0 0 0 32-32V288zM299.83 32a32 32 0 0 0-21.13 7L0 256h512c0-119.89-94-217.8-212.17-224z“]},hn={prefix:”fas“,iconName:”chess“,icon:[512,512,,”f439“,”M74 208H64a16 16 0 0 0-16 16v16a16 16 0 0 0 16 16h15.94A535.78 535.78 0 0 1 64 384h128a535.78 535.78 0 0 1-15.94-128H192a16 16 0 0 0 16-16v-16a16 16 0 0 0-16-16h-10l33.89-90.38a16 16 0 0 0-15-21.62H144V64h24a8 8 0 0 0 8-8V40a8 8 0 0 0-8-8h-24V8a8 8 0 0 0-8-8h-16a8 8 0 0 0-8 8v24H88a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h24v32H55.09a16 16 0 0 0-15 21.62zm173.16 251.58L224 448v-16a16 16 0 0 0-16-16H48a16 16 0 0 0-16 16v16L8.85 459.58A16 16 0 0 0 0 473.89V496a16 16 0 0 0 16 16h224a16 16 0 0 0 16-16v-22.11a16 16 0 0 0-8.84-14.31zm92.77-157.78l-3.29 82.2h126.72l-3.29-82.21 24.6-20.79A32 32 0 0 0 496 256.54V198a6 6 0 0 0-6-6h-26.38a6 6 0 0 0-6 6v26h-24.71v-26a6 6 0 0 0-6-6H373.1a6 6 0 0 0-6 6v26h-24.71v-26a6 6 0 0 0-6-6H310a6 6 0 0 0-6 6v58.6a32 32 0 0 0 11.36 24.4zM384 304a16 16 0 0 1 32 0v32h-32zm119.16 155.58L480 448v-16a16 16 0 0 0-16-16H336a16 16 0 0 0-16 16v16l-23.15 11.58a16 16 0 0 0-8.85 14.31V496a16 16 0 0 0 16 16h192a16 16 0 0 0 16-16v-22.11a16 16 0 0 0-8.84-14.31z“]},dn={prefix:”fas“,iconName:”chess-bishop“,icon:[320,512,,”f43a“,”M8 287.88c0 51.64 22.14 73.83 56 84.6V416h192v-43.52c33.86-10.77 56-33 56-84.6 0-30.61-10.73-67.1-26.69-102.56L185 285.65a8 8 0 0 1-11.31 0l-11.31-11.31a8 8 0 0 1 0-11.31L270.27 155.1c-20.8-37.91-46.47-72.1-70.87-92.59C213.4 59.09 224 47.05 224 32a32 32 0 0 0-32-32h-64a32 32 0 0 0-32 32c0 15 10.6 27.09 24.6 30.51C67.81 106.8 8 214.5 8 287.88zM304 448H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h288a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16z“]},pn={prefix:”fas“,iconName:”chess-board“,icon:[512,512,,”f43c“,”M255.9.2h-64v64h64zM0 64.17v64h64v-64zM128 .2H64v64h64zm64 255.9v64h64v-64zM0 192.12v64h64v-64zM383.85.2h-64v64h64zm128 0h-64v64h64zM128 256.1H64v64h64zM511.8 448v-64h-64v64zm0-128v-64h-64v64zM383.85 512h64v-64h-64zm128-319.88v-64h-64v64zM128 512h64v-64h-64zM0 512h64v-64H0zm255.9 0h64v-64h-64zM0 320.07v64h64v-64zm319.88-191.92v-64h-64v64zm-64 128h64v-64h-64zm-64 128v64h64v-64zm128-64h64v-64h-64zm0-127.95h64v-64h-64zm0 191.93v64h64v-64zM64 384.05v64h64v-64zm128-255.9v-64h-64v64zm191.92 255.9h64v-64h-64zm-128-191.93v-64h-64v64zm128-127.95v64h64v-64zm-128 255.9v64h64v-64zm-64-127.95H128v64h64zm191.92 64h64v-64h-64zM128 128.15H64v64h64zm0 191.92v64h64v-64z“]},mn={prefix:”fas“,iconName:”chess-king“,icon:[448,512,,”f43f“,”M400 448H48a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h352a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm16-288H256v-48h40a8 8 0 0 0 8-8V56a8 8 0 0 0-8-8h-40V8a8 8 0 0 0-8-8h-48a8 8 0 0 0-8 8v40h-40a8 8 0 0 0-8 8v48a8 8 0 0 0 8 8h40v48H32a32 32 0 0 0-30.52 41.54L74.56 416h298.88l73.08-214.46A32 32 0 0 0 416 160z“]},vn={prefix:”fas“,iconName:”chess-knight“,icon:[384,512,,”f441“,”M19 272.47l40.63 18.06a32 32 0 0 0 24.88.47l12.78-5.12a32 32 0 0 0 18.76-20.5l9.22-30.65a24 24 0 0 1 12.55-15.65L159.94 208v50.33a48 48 0 0 1-26.53 42.94l-57.22 28.65A80 80 0 0 0 32 401.48V416h319.86V224c0-106-85.92-192-191.92-192H12A12 12 0 0 0 0 44a16.9 16.9 0 0 0 1.79 7.58L16 80l-9 9a24 24 0 0 0-7 17v137.21a32 32 0 0 0 19 29.26zM52 128a20 20 0 1 1-20 20 20 20 0 0 1 20-20zm316 320H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h352a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16z“]},gn={prefix:”fas“,iconName:”chess-pawn“,icon:[320,512,,”f443“,”M105.1 224H80a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h16v5.49c0 44-4.14 86.6-24 122.51h176c-19.89-35.91-24-78.51-24-122.51V288h16a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16h-25.1c29.39-18.38 49.1-50.78 49.1-88a104 104 0 0 0-208 0c0 37.22 19.71 69.62 49.1 88zM304 448H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h288a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16z“]},yn={prefix:”fas“,iconName:”chess-queen“,icon:[512,512,,”f445“,”M256 112a56 56 0 1 0-56-56 56 56 0 0 0 56 56zm176 336H80a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h352a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm72.87-263.84l-28.51-15.92c-7.44-5-16.91-2.46-22.29 4.68a47.59 47.59 0 0 1-47.23 18.23C383.7 186.86 368 164.93 368 141.4a13.4 13.4 0 0 0-13.4-13.4h-38.77c-6 0-11.61 4-12.86 9.91a48 48 0 0 1-93.94 0c-1.25-5.92-6.82-9.91-12.86-9.91H157.4a13.4 13.4 0 0 0-13.4 13.4c0 25.69-19 48.75-44.67 50.49a47.5 47.5 0 0 1-41.54-19.15c-5.28-7.09-14.73-9.45-22.09-4.54l-28.57 16a16 16 0 0 0-5.44 20.47L104.24 416h303.52l102.55-211.37a16 16 0 0 0-5.44-20.47z“]},bn={prefix:”fas“,iconName:”chess-rook“,icon:[384,512,,”f447“,”M368 32h-56a16 16 0 0 0-16 16v48h-48V48a16 16 0 0 0-16-16h-80a16 16 0 0 0-16 16v48H88.1V48a16 16 0 0 0-16-16H16A16 16 0 0 0 0 48v176l64 32c0 48.33-1.54 95-13.21 160h282.42C321.54 351 320 303.72 320 256l64-32V48a16 16 0 0 0-16-16zM224 320h-64v-64a32 32 0 0 1 64 0zm144 128H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h352a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16z“]},wn={prefix:”fas“,iconName:”chevron-circle-down“,icon:[512,512,,”f13a“,”M504 256c0 137-111 248-248 248S8 393 8 256 119 8 256 8s248 111 248 248zM273 369.9l135.5-135.5c9.4-9.4 9.4-24.6 0-33.9l-17-17c-9.4-9.4-24.6-9.4-33.9 0L256 285.1 154.4 183.5c-9.4-9.4-24.6-9.4-33.9 0l-17 17c-9.4 9.4-9.4 24.6 0 33.9L239 369.9c9.4 9.4 24.6 9.4 34 0z“]},xn={prefix:”fas“,iconName:”chevron-circle-left“,icon:[512,512,,”f137“,”M256 504C119 504 8 393 8 256S119 8 256 8s248 111 248 248-111 248-248 248zM142.1 273l135.5 135.5c9.4 9.4 24.6 9.4 33.9 0l17-17c9.4-9.4 9.4-24.6 0-33.9L226.9 256l101.6-101.6c9.4-9.4 9.4-24.6 0-33.9l-17-17c-9.4-9.4-24.6-9.4-33.9 0L142.1 239c-9.4 9.4-9.4 24.6 0 34z“]},Sn={prefix:”fas“,iconName:”chevron-circle-right“,icon:[512,512,,”f138“,”M256 8c137 0 248 111 248 248S393 504 256 504 8 393 8 256 119 8 256 8zm113.9 231L234.4 103.5c-9.4-9.4-24.6-9.4-33.9 0l-17 17c-9.4 9.4-9.4 24.6 0 33.9L285.1 256 183.5 357.6c-9.4 9.4-9.4 24.6 0 33.9l17 17c9.4 9.4 24.6 9.4 33.9 0L369.9 273c9.4-9.4 9.4-24.6 0-34z“]},kn={prefix:”fas“,iconName:”chevron-circle-up“,icon:[512,512,,”f139“,”M8 256C8 119 119 8 256 8s248 111 248 248-111 248-248 248S8 393 8 256zm231-113.9L103.5 277.6c-9.4 9.4-9.4 24.6 0 33.9l17 17c9.4 9.4 24.6 9.4 33.9 0L256 226.9l101.6 101.6c9.4 9.4 24.6 9.4 33.9 0l17-17c9.4-9.4 9.4-24.6 0-33.9L273 142.1c-9.4-9.4-24.6-9.4-34 0z“]},_n={prefix:”fas“,iconName:”chevron-down“,icon:[448,512,,”f078“,”M207.029 381.476L12.686 187.132c-9.373-9.373-9.373-24.569 0-33.941l22.667-22.667c9.357-9.357 24.522-9.375 33.901-.04L224 284.505l154.745-154.021c9.379-9.335 24.544-9.317 33.901.04l22.667 22.667c9.373 9.373 9.373 24.569 0 33.941L240.971 381.476c-9.373 9.372-24.569 9.372-33.942 0z“]},zn={prefix:”fas“,iconName:”chevron-left“,icon:[320,512,,”f053“,”M34.52 239.03L228.87 44.69c9.37-9.37 24.57-9.37 33.94 0l22.67 22.67c9.36 9.36 9.37 24.52.04 33.9L131.49 256l154.02 154.75c9.34 9.38 9.32 24.54-.04 33.9l-22.67 22.67c-9.37 9.37-24.57 9.37-33.94 0L34.52 272.97c-9.37-9.37-9.37-24.57 0-33.94z“]},Cn={prefix:”fas“,iconName:”chevron-right“,icon:[320,512,,”f054“,”M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z“]},Mn={prefix:”fas“,iconName:”chevron-up“,icon:[448,512,,”f077“,”M240.971 130.524l194.343 194.343c9.373 9.373 9.373 24.569 0 33.941l-22.667 22.667c-9.357 9.357-24.522 9.375-33.901.04L224 227.495 69.255 381.516c-9.379 9.335-24.544 9.317-33.901-.04l-22.667-22.667c-9.373-9.373-9.373-24.569 0-33.941L207.03 130.525c9.372-9.373 24.568-9.373 33.941-.001z“]},On={prefix:”fas“,iconName:”child“,icon:[384,512,,”f1ae“,”M120 72c0-39.765 32.235-72 72-72s72 32.235 72 72c0 39.764-32.235 72-72 72s-72-32.236-72-72zm254.627 1.373c-12.496-12.497-32.758-12.497-45.254 0L242.745 160H141.254L54.627 73.373c-12.496-12.497-32.758-12.497-45.254 0-12.497 12.497-12.497 32.758 0 45.255L104 213.254V480c0 17.673 14.327 32 32 32h16c17.673 0 32-14.327 32-32V368h16v112c0 17.673 14.327 32 32 32h16c17.673 0 32-14.327 32-32V213.254l94.627-94.627c12.497-12.497 12.497-32.757 0-45.254z“]},Tn={prefix:”fas“,iconName:”church“,icon:[640,512,,”f51d“,”M464.46 246.68L352 179.2V128h48c8.84 0 16-7.16 16-16V80c0-8.84-7.16-16-16-16h-48V16c0-8.84-7.16-16-16-16h-32c-8.84 0-16 7.16-16 16v48h-48c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h48v51.2l-112.46 67.48A31.997 31.997 0 0 0 160 274.12V512h96v-96c0-35.35 28.65-64 64-64s64 28.65 64 64v96h96V274.12c0-11.24-5.9-21.66-15.54-27.44zM0 395.96V496c0 8.84 7.16 16 16 16h112V320L19.39 366.54A32.024 32.024 0 0 0 0 395.96zm620.61-29.42L512 320v192h112c8.84 0 16-7.16 16-16V395.96c0-12.8-7.63-24.37-19.39-29.42z“]},En={prefix:”fas“,iconName:”circle“,icon:[512,512,,”f111“,”M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8z“]},Ln={prefix:”fas“,iconName:”circle-notch“,icon:[512,512,,”f1ce“,”M288 39.056v16.659c0 10.804 7.281 20.159 17.686 23.066C383.204 100.434 440 171.518 440 256c0 101.689-82.295 184-184 184-101.689 0-184-82.295-184-184 0-84.47 56.786-155.564 134.312-177.219C216.719 75.874 224 66.517 224 55.712V39.064c0-15.709-14.834-27.153-30.046-23.234C86.603 43.482 7.394 141.206 8.003 257.332c.72 137.052 111.477 246.956 248.531 246.667C393.255 503.711 504 392.788 504 256c0-115.633-79.14-212.779-186.211-240.236C302.678 11.889 288 23.456 288 39.056z“]},An={prefix:”fas“,iconName:”city“,icon:[640,512,,”f64f“,”M616 192H480V24c0-13.26-10.74-24-24-24H312c-13.26 0-24 10.74-24 24v72h-64V16c0-8.84-7.16-16-16-16h-16c-8.84 0-16 7.16-16 16v80h-64V16c0-8.84-7.16-16-16-16H80c-8.84 0-16 7.16-16 16v80H24c-13.26 0-24 10.74-24 24v360c0 17.67 14.33 32 32 32h576c17.67 0 32-14.33 32-32V216c0-13.26-10.75-24-24-24zM128 404c0 6.63-5.37 12-12 12H76c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm0-96c0 6.63-5.37 12-12 12H76c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm0-96c0 6.63-5.37 12-12 12H76c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm128 192c0 6.63-5.37 12-12 12h-40c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm0-96c0 6.63-5.37 12-12 12h-40c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm0-96c0 6.63-5.37 12-12 12h-40c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm160 96c0 6.63-5.37 12-12 12h-40c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm0-96c0 6.63-5.37 12-12 12h-40c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm0-96c0 6.63-5.37 12-12 12h-40c-6.63 0-12-5.37-12-12V76c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm160 288c0 6.63-5.37 12-12 12h-40c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm0-96c0 6.63-5.37 12-12 12h-40c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40z“]},Rn={prefix:”fas“,iconName:”clinic-medical“,icon:[576,512,,”f7f2“,”M288 115L69.47 307.71c-1.62 1.46-3.69 2.14-5.47 3.35V496a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16V311.1c-1.7-1.16-3.72-1.82-5.26-3.2zm96 261a8 8 0 0 1-8 8h-56v56a8 8 0 0 1-8 8h-48a8 8 0 0 1-8-8v-56h-56a8 8 0 0 1-8-8v-48a8 8 0 0 1 8-8h56v-56a8 8 0 0 1 8-8h48a8 8 0 0 1 8 8v56h56a8 8 0 0 1 8 8zm186.69-139.72l-255.94-226a39.85 39.85 0 0 0-53.45 0l-256 226a16 16 0 0 0-1.21 22.6L25.5 282.7a16 16 0 0 0 22.6 1.21L277.42 81.63a16 16 0 0 1 21.17 0L527.91 283.9a16 16 0 0 0 22.6-1.21l21.4-23.82a16 16 0 0 0-1.22-22.59z“]},Nn={prefix:”fas“,iconName:”clipboard“,icon:[384,512,,”f328“,”M384 112v352c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V112c0-26.51 21.49-48 48-48h80c0-35.29 28.71-64 64-64s64 28.71 64 64h80c26.51 0 48 21.49 48 48zM192 40c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24m96 114v-20a6 6 0 0 0-6-6H102a6 6 0 0 0-6 6v20a6 6 0 0 0 6 6h180a6 6 0 0 0 6-6z“]},Hn={prefix:”fas“,iconName:”clipboard-check“,icon:[384,512,,”f46c“,”M336 64h-80c0-35.3-28.7-64-64-64s-64 28.7-64 64H48C21.5 64 0 85.5 0 112v352c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48zM192 40c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24zm121.2 231.8l-143 141.8c-4.7 4.7-12.3 4.6-17-.1l-82.6-83.3c-4.7-4.7-4.6-12.3.1-17L99.1 285c4.7-4.7 12.3-4.6 17 .1l46 46.4 106-105.2c4.7-4.7 12.3-4.6 17 .1l28.2 28.4c4.7 4.8 4.6 12.3-.1 17z“]},Pn={prefix:”fas“,iconName:”clipboard-list“,icon:[384,512,,”f46d“,”M336 64h-80c0-35.3-28.7-64-64-64s-64 28.7-64 64H48C21.5 64 0 85.5 0 112v352c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48zM96 424c-13.3 0-24-10.7-24-24s10.7-24 24-24 24 10.7 24 24-10.7 24-24 24zm0-96c-13.3 0-24-10.7-24-24s10.7-24 24-24 24 10.7 24 24-10.7 24-24 24zm0-96c-13.3 0-24-10.7-24-24s10.7-24 24-24 24 10.7 24 24-10.7 24-24 24zm96-192c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24zm128 368c0 4.4-3.6 8-8 8H168c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16zm0-96c0 4.4-3.6 8-8 8H168c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16zm0-96c0 4.4-3.6 8-8 8H168c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16z“]},jn={prefix:”fas“,iconName:”clock“,icon:[512,512,,”f017“,”M256,8C119,8,8,119,8,256S119,504,256,504,504,393,504,256,393,8,256,8Zm92.49,313h0l-20,25a16,16,0,0,1-22.49,2.5h0l-67-49.72a40,40,0,0,1-15-31.23V112a16,16,0,0,1,16-16h32a16,16,0,0,1,16,16V256l58,42.5A16,16,0,0,1,348.49,321Z“]},Vn={prefix:”fas“,iconName:”clone“,icon:[512,512,,”f24d“,”M464 0c26.51 0 48 21.49 48 48v288c0 26.51-21.49 48-48 48H176c-26.51 0-48-21.49-48-48V48c0-26.51 21.49-48 48-48h288M176 416c-44.112 0-80-35.888-80-80V128H48c-26.51 0-48 21.49-48 48v288c0 26.51 21.49 48 48 48h288c26.51 0 48-21.49 48-48v-48H176z“]},Dn={prefix:”fas“,iconName:”closed-captioning“,icon:[512,512,,”f20a“,”M464 64H48C21.5 64 0 85.5 0 112v288c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48zM218.1 287.7c2.8-2.5 7.1-2.1 9.2.9l19.5 27.7c1.7 2.4 1.5 5.6-.5 7.7-53.6 56.8-172.8 32.1-172.8-67.9 0-97.3 121.7-119.5 172.5-70.1 2.1 2 2.5 3.2 1 5.7l-17.5 30.5c-1.9 3.1-6.2 4-9.1 1.7-40.8-32-94.6-14.9-94.6 31.2.1 48 51.1 70.5 92.3 32.6zm190.4 0c2.8-2.5 7.1-2.1 9.2.9l19.5 27.7c1.7 2.4 1.5 5.6-.5 7.7-53.5 56.9-172.7 32.1-172.7-67.9 0-97.3 121.7-119.5 172.5-70.1 2.1 2 2.5 3.2 1 5.7L420 222.2c-1.9 3.1-6.2 4-9.1 1.7-40.8-32-94.6-14.9-94.6 31.2 0 48 51 70.5 92.2 32.6z“]},In={prefix:”fas“,iconName:”cloud“,icon:[640,512,,”f0c2“,”M537.6 226.6c4.1-10.7 6.4-22.4 6.4-34.6 0-53-43-96-96-96-19.7 0-38.1 6-53.3 16.2C367 64.2 315.3 32 256 32c-88.4 0-160 71.6-160 160 0 2.7.1 5.4.2 8.1C40.2 219.8 0 273.2 0 336c0 79.5 64.5 144 144 144h368c70.7 0 128-57.3 128-128 0-61.9-44-113.6-102.4-125.4z“]},Fn={prefix:”fas“,iconName:”cloud-download-alt“,icon:[640,512,,”f381“,”M537.6 226.6c4.1-10.7 6.4-22.4 6.4-34.6 0-53-43-96-96-96-19.7 0-38.1 6-53.3 16.2C367 64.2 315.3 32 256 32c-88.4 0-160 71.6-160 160 0 2.7.1 5.4.2 8.1C40.2 219.8 0 273.2 0 336c0 79.5 64.5 144 144 144h368c70.7 0 128-57.3 128-128 0-61.9-44-113.6-102.4-125.4zm-132.9 88.7L299.3 420.7c-6.2 6.2-16.4 6.2-22.6 0L171.3 315.3c-10.1-10.1-2.9-27.3 11.3-27.3H248V176c0-8.8 7.2-16 16-16h48c8.8 0 16 7.2 16 16v112h65.4c14.2 0 21.4 17.2 11.3 27.3z“]},Bn={prefix:”fas“,iconName:”cloud-meatball“,icon:[512,512,,”f73b“,”M48 352c-26.5 0-48 21.5-48 48s21.5 48 48 48 48-21.5 48-48-21.5-48-48-48zm416 0c-26.5 0-48 21.5-48 48s21.5 48 48 48 48-21.5 48-48-21.5-48-48-48zm-119 11.1c4.6-14.5 1.6-30.8-9.8-42.3-11.5-11.5-27.8-14.4-42.3-9.9-7-13.5-20.7-23-36.9-23s-29.9 9.5-36.9 23c-14.5-4.6-30.8-1.6-42.3 9.9-11.5 11.5-14.4 27.8-9.9 42.3-13.5 7-23 20.7-23 36.9s9.5 29.9 23 36.9c-4.6 14.5-1.6 30.8 9.9 42.3 8.2 8.2 18.9 12.3 29.7 12.3 4.3 0 8.5-1.1 12.6-2.5 7 13.5 20.7 23 36.9 23s29.9-9.5 36.9-23c4.1 1.3 8.3 2.5 12.6 2.5 10.8 0 21.5-4.1 29.7-12.3 11.5-11.5 14.4-27.8 9.8-42.3 13.5-7 23-20.7 23-36.9s-9.5-29.9-23-36.9zM512 224c0-53-43-96-96-96-.6 0-1.1.2-1.6.2 1.1-5.2 1.6-10.6 1.6-16.2 0-44.2-35.8-80-80-80-24.6 0-46.3 11.3-61 28.8C256.4 24.8 219.3 0 176 0 114.1 0 64 50.1 64 112c0 7.3.8 14.3 2.1 21.2C27.8 145.8 0 181.5 0 224c0 53 43 96 96 96h43.4c3.6-8 8.4-15.4 14.8-21.8 13.5-13.5 31.5-21.1 50.8-21.3 13.5-13.2 31.7-20.9 51-20.9s37.5 7.7 51 20.9c19.3.2 37.3 7.8 50.8 21.3 6.4 6.4 11.3 13.8 14.8 21.8H416c53 0 96-43 96-96z“]},Un={prefix:”fas“,iconName:”cloud-moon“,icon:[576,512,,”f6c3“,”M342.8 352.7c5.7-9.6 9.2-20.7 9.2-32.7 0-35.3-28.7-64-64-64-17.2 0-32.8 6.9-44.3 17.9-16.3-29.6-47.5-49.9-83.7-49.9-53 0-96 43-96 96 0 2 .5 3.8.6 5.7C27.1 338.8 0 374.1 0 416c0 53 43 96 96 96h240c44.2 0 80-35.8 80-80 0-41.9-32.3-75.8-73.2-79.3zm222.5-54.3c-93.1 17.7-178.5-53.7-178.5-147.7 0-54.2 29-104 76.1-130.8 7.3-4.1 5.4-15.1-2.8-16.7C448.4 1.1 436.7 0 425 0 319.1 0 233.1 85.9 233.1 192c0 8.5.7 16.8 1.8 25 5.9 4.3 11.6 8.9 16.7 14.2 11.4-4.7 23.7-7.2 36.4-7.2 52.9 0 96 43.1 96 96 0 3.6-.2 7.2-.6 10.7 23.6 10.8 42.4 29.5 53.5 52.6 54.4-3.4 103.7-29.3 137.1-70.4 5.3-6.5-.5-16.1-8.7-14.5z“]},qn={prefix:”fas“,iconName:”cloud-moon-rain“,icon:[576,512,,”f73c“,”M350.5 225.5c-6.9-37.2-39.3-65.5-78.5-65.5-12.3 0-23.9 3-34.3 8-17.4-24.1-45.6-40-77.7-40-53 0-96 43-96 96 0 .5.2 1.1.2 1.6C27.6 232.9 0 265.2 0 304c0 44.2 35.8 80 80 80h256c44.2 0 80-35.8 80-80 0-39.2-28.2-71.7-65.5-78.5zm217.4-1.7c-70.4 13.3-135-40.3-135-110.8 0-40.6 21.9-78 57.5-98.1 5.5-3.1 4.1-11.4-2.1-12.5C479.6.8 470.7 0 461.8 0c-77.9 0-141.1 61.2-144.4 137.9 26.7 11.9 48.2 33.8 58.9 61.7 37.1 14.3 64 47.4 70.2 86.8 5.1.5 10 1.5 15.2 1.5 44.7 0 85.6-20.2 112.6-53.3 4.2-4.8-.2-12-6.4-10.8zM364.5 418.1c-7.6-4.3-17.4-1.8-21.8 6l-36.6 64c-4.4 7.7-1.7 17.4 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l36.6-64c4.3-7.7 1.7-17.4-6-21.8zm-96 0c-7.6-4.3-17.4-1.8-21.8 6l-36.6 64c-4.4 7.7-1.7 17.4 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l36.6-64c4.3-7.7 1.7-17.4-6-21.8zm-96 0c-7.6-4.3-17.4-1.8-21.8 6l-36.6 64c-4.4 7.7-1.7 17.4 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l36.6-64c4.3-7.7 1.7-17.4-6-21.8zm-96 0c-7.6-4.3-17.4-1.8-21.8 6l-36.6 64c-4.4 7.7-1.7 17.4 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l36.6-64c4.3-7.7 1.7-17.4-6-21.8z“]},Gn={prefix:”fas“,iconName:”cloud-rain“,icon:[512,512,,”f73d“,”M416 128c-.6 0-1.1.2-1.6.2 1.1-5.2 1.6-10.6 1.6-16.2 0-44.2-35.8-80-80-80-24.6 0-46.3 11.3-61 28.8C256.4 24.8 219.3 0 176 0 114.1 0 64 50.1 64 112c0 7.3.8 14.3 2.1 21.2C27.8 145.8 0 181.5 0 224c0 53 43 96 96 96h320c53 0 96-43 96-96s-43-96-96-96zM88 374.2c-12.8 44.4-40 56.4-40 87.7 0 27.7 21.5 50.1 48 50.1s48-22.4 48-50.1c0-31.4-27.2-43.1-40-87.7-2.2-8.1-13.5-8.5-16 0zm160 0c-12.8 44.4-40 56.4-40 87.7 0 27.7 21.5 50.1 48 50.1s48-22.4 48-50.1c0-31.4-27.2-43.1-40-87.7-2.2-8.1-13.5-8.5-16 0zm160 0c-12.8 44.4-40 56.4-40 87.7 0 27.7 21.5 50.1 48 50.1s48-22.4 48-50.1c0-31.4-27.2-43.1-40-87.7-2.2-8.1-13.5-8.5-16 0z“]},Wn={prefix:”fas“,iconName:”cloud-showers-heavy“,icon:[512,512,,”f740“,”M183.9 370.1c-7.6-4.4-17.4-1.8-21.8 6l-64 112c-4.4 7.7-1.7 17.5 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l64-112c4.4-7.6 1.7-17.4-6-21.8zm96 0c-7.6-4.4-17.4-1.8-21.8 6l-64 112c-4.4 7.7-1.7 17.5 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l64-112c4.4-7.6 1.7-17.4-6-21.8zm-192 0c-7.6-4.4-17.4-1.8-21.8 6l-64 112c-4.4 7.7-1.7 17.5 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l64-112c4.4-7.6 1.7-17.4-6-21.8zm384 0c-7.6-4.4-17.4-1.8-21.8 6l-64 112c-4.4 7.7-1.7 17.5 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l64-112c4.4-7.6 1.7-17.4-6-21.8zm-96 0c-7.6-4.4-17.4-1.8-21.8 6l-64 112c-4.4 7.7-1.7 17.5 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l64-112c4.4-7.6 1.7-17.4-6-21.8zM416 128c-.6 0-1.1.2-1.6.2 1.1-5.2 1.6-10.6 1.6-16.2 0-44.2-35.8-80-80-80-24.6 0-46.3 11.3-61 28.8C256.4 24.8 219.3 0 176 0 114.2 0 64 50.1 64 112c0 7.3.8 14.3 2.1 21.2C27.8 145.8 0 181.5 0 224c0 53 43 96 96 96h320c53 0 96-43 96-96s-43-96-96-96z“]},Zn={prefix:”fas“,iconName:”cloud-sun“,icon:[640,512,,”f6c4“,”M575.2 325.7c.2-1.9.8-3.7.8-5.6 0-35.3-28.7-64-64-64-12.6 0-24.2 3.8-34.1 10-17.6-38.8-56.5-66-101.9-66-61.8 0-112 50.1-112 112 0 3 .7 5.8.9 8.7-49.6 3.7-88.9 44.7-88.9 95.3 0 53 43 96 96 96h272c53 0 96-43 96-96 0-42.1-27.2-77.4-64.8-90.4zm-430.4-22.6c-43.7-43.7-43.7-114.7 0-158.3 43.7-43.7 114.7-43.7 158.4 0 9.7 9.7 16.9 20.9 22.3 32.7 9.8-3.7 20.1-6 30.7-7.5L386 81.1c4-11.9-7.3-23.1-19.2-19.2L279 91.2 237.5 8.4C232-2.8 216-2.8 210.4 8.4L169 91.2 81.1 61.9C69.3 58 58 69.3 61.9 81.1l29.3 87.8-82.8 41.5c-11.2 5.6-11.2 21.5 0 27.1l82.8 41.4-29.3 87.8c-4 11.9 7.3 23.1 19.2 19.2l76.1-25.3c6.1-12.4 14-23.7 23.6-33.5-13.1-5.4-25.4-13.4-36-24zm-4.8-79.2c0 40.8 29.3 74.8 67.9 82.3 8-4.7 16.3-8.8 25.2-11.7 5.4-44.3 31-82.5 67.4-105C287.3 160.4 258 140 224 140c-46.3 0-84 37.6-84 83.9z“]},$n={prefix:”fas“,iconName:”cloud-sun-rain“,icon:[576,512,,”f743“,”M510.5 225.5c-6.9-37.2-39.3-65.5-78.5-65.5-12.3 0-23.9 3-34.3 8-17.4-24.1-45.6-40-77.7-40-53 0-96 43-96 96 0 .5.2 1.1.2 1.6C187.6 233 160 265.2 160 304c0 44.2 35.8 80 80 80h256c44.2 0 80-35.8 80-80 0-39.2-28.2-71.7-65.5-78.5zm-386.4 34.4c-37.4-37.4-37.4-98.3 0-135.8 34.6-34.6 89.1-36.8 126.7-7.4 20-12.9 43.6-20.7 69.2-20.7.7 0 1.3.2 2 .2l8.9-26.7c3.4-10.2-6.3-19.8-16.5-16.4l-75.3 25.1-35.5-71c-4.8-9.6-18.5-9.6-23.3 0l-35.5 71-75.3-25.1c-10.2-3.4-19.8 6.3-16.4 16.5l25.1 75.3-71 35.5c-9.6 4.8-9.6 18.5 0 23.3l71 35.5-25.1 75.3c-3.4 10.2 6.3 19.8 16.5 16.5l59.2-19.7c-.2-2.4-.7-4.7-.7-7.2 0-12.5 2.3-24.5 6.2-35.9-3.6-2.7-7.1-5.2-10.2-8.3zm69.8-58c4.3-24.5 15.8-46.4 31.9-64-9.8-6.2-21.4-9.9-33.8-9.9-35.3 0-64 28.7-64 64 0 18.7 8.2 35.4 21.1 47.1 11.3-15.9 26.6-28.9 44.8-37.2zm330.6 216.2c-7.6-4.3-17.4-1.8-21.8 6l-36.6 64c-4.4 7.7-1.7 17.4 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l36.6-64c4.3-7.7 1.7-17.4-6-21.8zm-96 0c-7.6-4.3-17.4-1.8-21.8 6l-36.6 64c-4.4 7.7-1.7 17.4 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l36.6-64c4.3-7.7 1.7-17.4-6-21.8zm-96 0c-7.6-4.3-17.4-1.8-21.8 6l-36.6 64c-4.4 7.7-1.7 17.4 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l36.6-64c4.3-7.7 1.7-17.4-6-21.8zm-96 0c-7.6-4.3-17.4-1.8-21.8 6l-36.6 64c-4.4 7.7-1.7 17.4 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l36.6-64c4.3-7.7 1.7-17.4-6-21.8z“]},Jn={prefix:”fas“,iconName:”cloud-upload-alt“,icon:[640,512,,”f382“,”M537.6 226.6c4.1-10.7 6.4-22.4 6.4-34.6 0-53-43-96-96-96-19.7 0-38.1 6-53.3 16.2C367 64.2 315.3 32 256 32c-88.4 0-160 71.6-160 160 0 2.7.1 5.4.2 8.1C40.2 219.8 0 273.2 0 336c0 79.5 64.5 144 144 144h368c70.7 0 128-57.3 128-128 0-61.9-44-113.6-102.4-125.4zM393.4 288H328v112c0 8.8-7.2 16-16 16h-48c-8.8 0-16-7.2-16-16V288h-65.4c-14.3 0-21.4-17.2-11.3-27.3l105.4-105.4c6.2-6.2 16.4-6.2 22.6 0l105.4 105.4c10.1 10.1 2.9 27.3-11.3 27.3z“]},Kn={prefix:”fas“,iconName:”cocktail“,icon:[576,512,,”f561“,”M296 464h-56V338.78l168.74-168.73c15.52-15.52 4.53-42.05-17.42-42.05H24.68c-21.95 0-32.94 26.53-17.42 42.05L176 338.78V464h-56c-22.09 0-40 17.91-40 40 0 4.42 3.58 8 8 8h240c4.42 0 8-3.58 8-8 0-22.09-17.91-40-40-40zM432 0c-62.61 0-115.35 40.2-135.18 96h52.54c16.65-28.55 47.27-48 82.64-48 52.93 0 96 43.06 96 96s-43.07 96-96 96c-14.04 0-27.29-3.2-39.32-8.64l-35.26 35.26C379.23 279.92 404.59 288 432 288c79.53 0 144-64.47 144-144S511.53 0 432 0z“]},Qn={prefix:”fas“,iconName:”code“,icon:[640,512,,”f121“,”M278.9 511.5l-61-17.7c-6.4-1.8-10-8.5-8.2-14.9L346.2 8.7c1.8-6.4 8.5-10 14.9-8.2l61 17.7c6.4 1.8 10 8.5 8.2 14.9L293.8 503.3c-1.9 6.4-8.5 10.1-14.9 8.2zm-114-112.2l43.5-46.4c4.6-4.9 4.3-12.7-.8-17.2L117 256l90.6-79.7c5.1-4.5 5.5-12.3.8-17.2l-43.5-46.4c-4.5-4.8-12.1-5.1-17-.5L3.8 247.2c-5.1 4.7-5.1 12.8 0 17.5l144.1 135.1c4.9 4.6 12.5 4.4 17-.5zm327.2.6l144.1-135.1c5.1-4.7 5.1-12.8 0-17.5L492.1 112.1c-4.8-4.5-12.4-4.3-17 .5L431.6 159c-4.6 4.9-4.3 12.7.8 17.2L523 256l-90.6 79.7c-5.1 4.5-5.5 12.3-.8 17.2l43.5 46.4c4.5 4.9 12.1 5.1 17 .6z“]},Yn={prefix:”fas“,iconName:”code-branch“,icon:[384,512,,”f126“,”M384 144c0-44.2-35.8-80-80-80s-80 35.8-80 80c0 36.4 24.3 67.1 57.5 76.8-.6 16.1-4.2 28.5-11 36.9-15.4 19.2-49.3 22.4-85.2 25.7-28.2 2.6-57.4 5.4-81.3 16.9v-144c32.5-10.2 56-40.5 56-76.3 0-44.2-35.8-80-80-80S0 35.8 0 80c0 35.8 23.5 66.1 56 76.3v199.3C23.5 365.9 0 396.2 0 432c0 44.2 35.8 80 80 80s80-35.8 80-80c0-34-21.2-63.1-51.2-74.6 3.1-5.2 7.8-9.8 14.9-13.4 16.2-8.2 40.4-10.4 66.1-12.8 42.2-3.9 90-8.4 118.2-43.4 14-17.4 21.1-39.8 21.6-67.9 31.6-10.8 54.4-40.7 54.4-75.9zM80 64c8.8 0 16 7.2 16 16s-7.2 16-16 16-16-7.2-16-16 7.2-16 16-16zm0 384c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm224-320c8.8 0 16 7.2 16 16s-7.2 16-16 16-16-7.2-16-16 7.2-16 16-16z“]},Xn={prefix:”fas“,iconName:”coffee“,icon:[640,512,,”f0f4“,”M192 384h192c53 0 96-43 96-96h32c70.6 0 128-57.4 128-128S582.6 32 512 32H120c-13.3 0-24 10.7-24 24v232c0 53 43 96 96 96zM512 96c35.3 0 64 28.7 64 64s-28.7 64-64 64h-32V96h32zm47.7 384H48.3c-47.6 0-61-64-36-64h583.3c25 0 11.8 64-35.9 64z“]},er={prefix:”fas“,iconName:”cog“,icon:[512,512,,”f013“,”M487.4 315.7l-42.6-24.6c4.3-23.2 4.3-47 0-70.2l42.6-24.6c4.9-2.8 7.1-8.6 5.5-14-11.1-35.6-30-67.8-54.7-94.6-3.8-4.1-10-5.1-14.8-2.3L380.8 110c-17.9-15.4-38.5-27.3-60.8-35.1V25.8c0-5.6-3.9-10.5-9.4-11.7-36.7-8.2-74.3-7.8-109.2 0-5.5 1.2-9.4 6.1-9.4 11.7V75c-22.2 7.9-42.8 19.8-60.8 35.1L88.7 85.5c-4.9-2.8-11-1.9-14.8 2.3-24.7 26.7-43.6 58.9-54.7 94.6-1.7 5.4.6 11.2 5.5 14L67.3 221c-4.3 23.2-4.3 47 0 70.2l-42.6 24.6c-4.9 2.8-7.1 8.6-5.5 14 11.1 35.6 30 67.8 54.7 94.6 3.8 4.1 10 5.1 14.8 2.3l42.6-24.6c17.9 15.4 38.5 27.3 60.8 35.1v49.2c0 5.6 3.9 10.5 9.4 11.7 36.7 8.2 74.3 7.8 109.2 0 5.5-1.2 9.4-6.1 9.4-11.7v-49.2c22.2-7.9 42.8-19.8 60.8-35.1l42.6 24.6c4.9 2.8 11 1.9 14.8-2.3 24.7-26.7 43.6-58.9 54.7-94.6 1.5-5.5-.7-11.3-5.6-14.1zM256 336c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80z“]},tr={prefix:”fas“,iconName:”cogs“,icon:[640,512,,”f085“,”M512.1 191l-8.2 14.3c-3 5.3-9.4 7.5-15.1 5.4-11.8-4.4-22.6-10.7-32.1-18.6-4.6-3.8-5.8-10.5-2.8-15.7l8.2-14.3c-6.9-8-12.3-17.3-15.9-27.4h-16.5c-6 0-11.2-4.3-12.2-10.3-2-12-2.1-24.6 0-37.1 1-6 6.2-10.4 12.2-10.4h16.5c3.6-10.1 9-19.4 15.9-27.4l-8.2-14.3c-3-5.2-1.9-11.9 2.8-15.7 9.5-7.9 20.4-14.2 32.1-18.6 5.7-2.1 12.1.1 15.1 5.4l8.2 14.3c10.5-1.9 21.2-1.9 31.7 0L552 6.3c3-5.3 9.4-7.5 15.1-5.4 11.8 4.4 22.6 10.7 32.1 18.6 4.6 3.8 5.8 10.5 2.8 15.7l-8.2 14.3c6.9 8 12.3 17.3 15.9 27.4h16.5c6 0 11.2 4.3 12.2 10.3 2 12 2.1 24.6 0 37.1-1 6-6.2 10.4-12.2 10.4h-16.5c-3.6 10.1-9 19.4-15.9 27.4l8.2 14.3c3 5.2 1.9 11.9-2.8 15.7-9.5 7.9-20.4 14.2-32.1 18.6-5.7 2.1-12.1-.1-15.1-5.4l-8.2-14.3c-10.4 1.9-21.2 1.9-31.7 0zm-10.5-58.8c38.5 29.6 82.4-14.3 52.8-52.8-38.5-29.7-82.4 14.3-52.8 52.8zM386.3 286.1l33.7 16.8c10.1 5.8 14.5 18.1 10.5 29.1-8.9 24.2-26.4 46.4-42.6 65.8-7.4 8.9-20.2 11.1-30.3 5.3l-29.1-16.8c-16 13.7-34.6 24.6-54.9 31.7v33.6c0 11.6-8.3 21.6-19.7 23.6-24.6 4.2-50.4 4.4-75.9 0-11.5-2-20-11.9-20-23.6V418c-20.3-7.2-38.9-18-54.9-31.7L74 403c-10 5.8-22.9 3.6-30.3-5.3-16.2-19.4-33.3-41.6-42.2-65.7-4-10.9.4-23.2 10.5-29.1l33.3-16.8c-3.9-20.9-3.9-42.4 0-63.4L12 205.8c-10.1-5.8-14.6-18.1-10.5-29 8.9-24.2 26-46.4 42.2-65.8 7.4-8.9 20.2-11.1 30.3-5.3l29.1 16.8c16-13.7 34.6-24.6 54.9-31.7V57.1c0-11.5 8.2-21.5 19.6-23.5 24.6-4.2 50.5-4.4 76-.1 11.5 2 20 11.9 20 23.6v33.6c20.3 7.2 38.9 18 54.9 31.7l29.1-16.8c10-5.8 22.9-3.6 30.3 5.3 16.2 19.4 33.2 41.6 42.1 65.8 4 10.9.1 23.2-10 29.1l-33.7 16.8c3.9 21 3.9 42.5 0 63.5zm-117.6 21.1c59.2-77-28.7-164.9-105.7-105.7-59.2 77 28.7 164.9 105.7 105.7zm243.4 182.7l-8.2 14.3c-3 5.3-9.4 7.5-15.1 5.4-11.8-4.4-22.6-10.7-32.1-18.6-4.6-3.8-5.8-10.5-2.8-15.7l8.2-14.3c-6.9-8-12.3-17.3-15.9-27.4h-16.5c-6 0-11.2-4.3-12.2-10.3-2-12-2.1-24.6 0-37.1 1-6 6.2-10.4 12.2-10.4h16.5c3.6-10.1 9-19.4 15.9-27.4l-8.2-14.3c-3-5.2-1.9-11.9 2.8-15.7 9.5-7.9 20.4-14.2 32.1-18.6 5.7-2.1 12.1.1 15.1 5.4l8.2 14.3c10.5-1.9 21.2-1.9 31.7 0l8.2-14.3c3-5.3 9.4-7.5 15.1-5.4 11.8 4.4 22.6 10.7 32.1 18.6 4.6 3.8 5.8 10.5 2.8 15.7l-8.2 14.3c6.9 8 12.3 17.3 15.9 27.4h16.5c6 0 11.2 4.3 12.2 10.3 2 12 2.1 24.6 0 37.1-1 6-6.2 10.4-12.2 10.4h-16.5c-3.6 10.1-9 19.4-15.9 27.4l8.2 14.3c3 5.2 1.9 11.9-2.8 15.7-9.5 7.9-20.4 14.2-32.1 18.6-5.7 2.1-12.1-.1-15.1-5.4l-8.2-14.3c-10.4 1.9-21.2 1.9-31.7 0zM501.6 431c38.5 29.6 82.4-14.3 52.8-52.8-38.5-29.6-82.4 14.3-52.8 52.8z“]},nr={prefix:”fas“,iconName:”coins“,icon:[512,512,,”f51e“,”M0 405.3V448c0 35.3 86 64 192 64s192-28.7 192-64v-42.7C342.7 434.4 267.2 448 192 448S41.3 434.4 0 405.3zM320 128c106 0 192-28.7 192-64S426 0 320 0 128 28.7 128 64s86 64 192 64zM0 300.4V352c0 35.3 86 64 192 64s192-28.7 192-64v-51.6c-41.3 34-116.9 51.6-192 51.6S41.3 334.4 0 300.4zm416 11c57.3-11.1 96-31.7 96-55.4v-42.7c-23.2 16.4-57.3 27.6-96 34.5v63.6zM192 160C86 160 0 195.8 0 240s86 80 192 80 192-35.8 192-80-86-80-192-80zm219.3 56.3c60-10.8 100.7-32 100.7-56.3v-42.7c-35.5 25.1-96.5 38.6-160.7 41.8 29.5 14.3 51.2 33.5 60 57.2z“]},rr={prefix:”fas“,iconName:”columns“,icon:[512,512,,”f0db“,”M464 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V80c0-26.51-21.49-48-48-48zM224 416H64V160h160v256zm224 0H288V160h160v256z“]},ir={prefix:”fas“,iconName:”comment“,icon:[512,512,,”f075“,”M256 32C114.6 32 0 125.1 0 240c0 49.6 21.4 95 57 130.7C44.5 421.1 2.7 466 2.2 466.5c-2.2 2.3-2.8 5.7-1.5 8.7S4.8 480 8 480c66.3 0 116-31.8 140.6-51.4 32.7 12.3 69 19.4 107.4 19.4 141.4 0 256-93.1 256-208S397.4 32 256 32z“]},ar={prefix:”fas“,iconName:”comment-alt“,icon:[512,512,,”f27a“,”M448 0H64C28.7 0 0 28.7 0 64v288c0 35.3 28.7 64 64 64h96v84c0 9.8 11.2 15.5 19.1 9.7L304 416h144c35.3 0 64-28.7 64-64V64c0-35.3-28.7-64-64-64z“]},or={prefix:”fas“,iconName:”comment-dollar“,icon:[512,512,,”f651“,”M256 32C114.62 32 0 125.12 0 240c0 49.56 21.41 95.01 57.02 130.74C44.46 421.05 2.7 465.97 2.2 466.5A7.995 7.995 0 0 0 8 480c66.26 0 115.99-31.75 140.6-51.38C181.29 440.93 217.59 448 256 448c141.38 0 256-93.12 256-208S397.38 32 256 32zm24 302.44V352c0 8.84-7.16 16-16 16h-16c-8.84 0-16-7.16-16-16v-17.73c-11.42-1.35-22.28-5.19-31.78-11.46-6.22-4.11-6.82-13.11-1.55-18.38l17.52-17.52c3.74-3.74 9.31-4.24 14.11-2.03 3.18 1.46 6.66 2.22 10.26 2.22h32.78c4.66 0 8.44-3.78 8.44-8.42 0-3.75-2.52-7.08-6.12-8.11l-50.07-14.3c-22.25-6.35-40.01-24.71-42.91-47.67-4.05-32.07 19.03-59.43 49.32-63.05V128c0-8.84 7.16-16 16-16h16c8.84 0 16 7.16 16 16v17.73c11.42 1.35 22.28 5.19 31.78 11.46 6.22 4.11 6.82 13.11 1.55 18.38l-17.52 17.52c-3.74 3.74-9.31 4.24-14.11 2.03a24.516 24.516 0 0 0-10.26-2.22h-32.78c-4.66 0-8.44 3.78-8.44 8.42 0 3.75 2.52 7.08 6.12 8.11l50.07 14.3c22.25 6.36 40.01 24.71 42.91 47.67 4.05 32.06-19.03 59.42-49.32 63.04z“]},cr={prefix:”fas“,iconName:”comment-dots“,icon:[512,512,,”f4ad“,”M256 32C114.6 32 0 125.1 0 240c0 49.6 21.4 95 57 130.7C44.5 421.1 2.7 466 2.2 466.5c-2.2 2.3-2.8 5.7-1.5 8.7S4.8 480 8 480c66.3 0 116-31.8 140.6-51.4 32.7 12.3 69 19.4 107.4 19.4 141.4 0 256-93.1 256-208S397.4 32 256 32zM128 272c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm128 0c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm128 0c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z“]},sr={prefix:”fas“,iconName:”comment-medical“,icon:[512,512,,”f7f5“,”M256 32C114.62 32 0 125.12 0 240c0 49.56 21.41 95 57 130.74C44.46 421.05 2.7 466 2.2 466.5A8 8 0 0 0 8 480c66.26 0 116-31.75 140.6-51.38A304.66 304.66 0 0 0 256 448c141.39 0 256-93.12 256-208S397.39 32 256 32zm96 232a8 8 0 0 1-8 8h-56v56a8 8 0 0 1-8 8h-48a8 8 0 0 1-8-8v-56h-56a8 8 0 0 1-8-8v-48a8 8 0 0 1 8-8h56v-56a8 8 0 0 1 8-8h48a8 8 0 0 1 8 8v56h56a8 8 0 0 1 8 8z“]},ur={prefix:”fas“,iconName:”comment-slash“,icon:[640,512,,”f4b3“,”M64 240c0 49.6 21.4 95 57 130.7-12.6 50.3-54.3 95.2-54.8 95.8-2.2 2.3-2.8 5.7-1.5 8.7 1.3 2.9 4.1 4.8 7.3 4.8 66.3 0 116-31.8 140.6-51.4 32.7 12.3 69 19.4 107.4 19.4 27.4 0 53.7-3.6 78.4-10L72.9 186.4c-5.6 17.1-8.9 35-8.9 53.6zm569.8 218.1l-114.4-88.4C554.6 334.1 576 289.2 576 240c0-114.9-114.6-208-256-208-65.1 0-124.2 20.1-169.4 52.7L45.5 3.4C38.5-2 28.5-.8 23 6.2L3.4 31.4c-5.4 7-4.2 17 2.8 22.4l588.4 454.7c7 5.4 17 4.2 22.5-2.8l19.6-25.3c5.4-6.8 4.1-16.9-2.9-22.3z“]},lr={prefix:”fas“,iconName:”comments“,icon:[576,512,,”f086“,”M416 192c0-88.4-93.1-160-208-160S0 103.6 0 192c0 34.3 14.1 65.9 38 92-13.4 30.2-35.5 54.2-35.8 54.5-2.2 2.3-2.8 5.7-1.5 8.7S4.8 352 8 352c36.6 0 66.9-12.3 88.7-25 32.2 15.7 70.3 25 111.3 25 114.9 0 208-71.6 208-160zm122 220c23.9-26 38-57.7 38-92 0-66.9-53.5-124.2-129.3-148.1.9 6.6 1.3 13.3 1.3 20.1 0 105.9-107.7 192-240 192-10.8 0-21.3-.8-31.7-1.9C207.8 439.6 281.8 480 368 480c41 0 79.1-9.2 111.3-25 21.8 12.7 52.1 25 88.7 25 3.2 0 6.1-1.9 7.3-4.8 1.3-2.9.7-6.3-1.5-8.7-.3-.3-22.4-24.2-35.8-54.5z“]},fr={prefix:”fas“,iconName:”comments-dollar“,icon:[576,512,,”f653“,”M416 192c0-88.37-93.12-160-208-160S0 103.63 0 192c0 34.27 14.13 65.95 37.97 91.98C24.61 314.22 2.52 338.16 2.2 338.5A7.995 7.995 0 0 0 8 352c36.58 0 66.93-12.25 88.73-24.98C128.93 342.76 167.02 352 208 352c114.88 0 208-71.63 208-160zm-224 96v-16.29c-11.29-.58-22.27-4.52-31.37-11.35-3.9-2.93-4.1-8.77-.57-12.14l11.75-11.21c2.77-2.64 6.89-2.76 10.13-.73 3.87 2.42 8.26 3.72 12.82 3.72h28.11c6.5 0 11.8-5.92 11.8-13.19 0-5.95-3.61-11.19-8.77-12.73l-45-13.5c-18.59-5.58-31.58-23.42-31.58-43.39 0-24.52 19.05-44.44 42.67-45.07V96c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v16.29c11.29.58 22.27 4.51 31.37 11.35 3.9 2.93 4.1 8.77.57 12.14l-11.75 11.21c-2.77 2.64-6.89 2.76-10.13.73-3.87-2.43-8.26-3.72-12.82-3.72h-28.11c-6.5 0-11.8 5.92-11.8 13.19 0 5.95 3.61 11.19 8.77 12.73l45 13.5c18.59 5.58 31.58 23.42 31.58 43.39 0 24.53-19.05 44.44-42.67 45.07V288c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8zm346.01 123.99C561.87 385.96 576 354.27 576 320c0-66.94-53.49-124.2-129.33-148.07.86 6.6 1.33 13.29 1.33 20.07 0 105.87-107.66 192-240 192-10.78 0-21.32-.77-31.73-1.88C207.8 439.63 281.77 480 368 480c40.98 0 79.07-9.24 111.27-24.98C501.07 467.75 531.42 480 568 480c3.2 0 6.09-1.91 7.34-4.84 1.27-2.94.66-6.34-1.55-8.67-.31-.33-22.42-24.24-35.78-54.5z“]},hr={prefix:”fas“,iconName:”compact-disc“,icon:[496,512,,”f51f“,”M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM88 256H56c0-105.9 86.1-192 192-192v32c-88.2 0-160 71.8-160 160zm160 96c-53 0-96-43-96-96s43-96 96-96 96 43 96 96-43 96-96 96zm0-128c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32z“]},dr={prefix:”fas“,iconName:”compass“,icon:[496,512,,”f14e“,”M225.38 233.37c-12.5 12.5-12.5 32.76 0 45.25 12.49 12.5 32.76 12.5 45.25 0 12.5-12.5 12.5-32.76 0-45.25-12.5-12.49-32.76-12.49-45.25 0zM248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm126.14 148.05L308.17 300.4a31.938 31.938 0 0 1-15.77 15.77l-144.34 65.97c-16.65 7.61-33.81-9.55-26.2-26.2l65.98-144.35a31.938 31.938 0 0 1 15.77-15.77l144.34-65.97c16.65-7.6 33.8 9.55 26.19 26.2z“]},pr={prefix:”fas“,iconName:”compress“,icon:[448,512,,”f066“,”M436 192H312c-13.3 0-24-10.7-24-24V44c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v84h84c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12zm-276-24V44c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v84H12c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h124c13.3 0 24-10.7 24-24zm0 300V344c0-13.3-10.7-24-24-24H12c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h84v84c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12zm192 0v-84h84c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12H312c-13.3 0-24 10.7-24 24v124c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12z“]},mr={prefix:”fas“,iconName:”compress-alt“,icon:[448,512,,”f422“,”M4.686 427.314L104 328l-32.922-31.029C55.958 281.851 66.666 256 88.048 256h112C213.303 256 224 266.745 224 280v112c0 21.382-25.803 32.09-40.922 16.971L152 376l-99.314 99.314c-6.248 6.248-16.379 6.248-22.627 0L4.686 449.941c-6.248-6.248-6.248-16.379 0-22.627zM443.314 84.686L344 184l32.922 31.029c15.12 15.12 4.412 40.971-16.97 40.971h-112C234.697 256 224 245.255 224 232V120c0-21.382 25.803-32.09 40.922-16.971L296 136l99.314-99.314c6.248-6.248 16.379-6.248 22.627 0l25.373 25.373c6.248 6.248 6.248 16.379 0 22.627z“]},vr={prefix:”fas“,iconName:”compress-arrows-alt“,icon:[512,512,,”f78c“,”M200 288H88c-21.4 0-32.1 25.8-17 41l32.9 31-99.2 99.3c-6.2 6.2-6.2 16.4 0 22.6l25.4 25.4c6.2 6.2 16.4 6.2 22.6 0L152 408l31.1 33c15.1 15.1 40.9 4.4 40.9-17V312c0-13.3-10.7-24-24-24zm112-64h112c21.4 0 32.1-25.9 17-41l-33-31 99.3-99.3c6.2-6.2 6.2-16.4 0-22.6L481.9 4.7c-6.2-6.2-16.4-6.2-22.6 0L360 104l-31.1-33C313.8 55.9 288 66.6 288 88v112c0 13.3 10.7 24 24 24zm96 136l33-31.1c15.1-15.1 4.4-40.9-17-40.9H312c-13.3 0-24 10.7-24 24v112c0 21.4 25.9 32.1 41 17l31-32.9 99.3 99.3c6.2 6.2 16.4 6.2 22.6 0l25.4-25.4c6.2-6.2 6.2-16.4 0-22.6L408 360zM183 71.1L152 104 52.7 4.7c-6.2-6.2-16.4-6.2-22.6 0L4.7 30.1c-6.2 6.2-6.2 16.4 0 22.6L104 152l-33 31.1C55.9 198.2 66.6 224 88 224h112c13.3 0 24-10.7 24-24V88c0-21.3-25.9-32-41-16.9z“]},gr={prefix:”fas“,iconName:”concierge-bell“,icon:[512,512,,”f562“,”M288 130.54V112h16c8.84 0 16-7.16 16-16V80c0-8.84-7.16-16-16-16h-96c-8.84 0-16 7.16-16 16v16c0 8.84 7.16 16 16 16h16v18.54C115.49 146.11 32 239.18 32 352h448c0-112.82-83.49-205.89-192-221.46zM496 384H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h480c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16z“]},yr={prefix:”fas“,iconName:”cookie“,icon:[512,512,,”f563“,”M510.37 254.79l-12.08-76.26a132.493 132.493 0 0 0-37.16-72.95l-54.76-54.75c-19.73-19.72-45.18-32.7-72.71-37.05l-76.7-12.15c-27.51-4.36-55.69.11-80.52 12.76L107.32 49.6a132.25 132.25 0 0 0-57.79 57.8l-35.1 68.88a132.602 132.602 0 0 0-12.82 80.94l12.08 76.27a132.493 132.493 0 0 0 37.16 72.95l54.76 54.75a132.087 132.087 0 0 0 72.71 37.05l76.7 12.14c27.51 4.36 55.69-.11 80.52-12.75l69.12-35.21a132.302 132.302 0 0 0 57.79-57.8l35.1-68.87c12.71-24.96 17.2-53.3 12.82-80.96zM176 368c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm32-160c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm160 128c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z“]},br={prefix:”fas“,iconName:”cookie-bite“,icon:[512,512,,”f564“,”M510.52 255.82c-69.97-.85-126.47-57.69-126.47-127.86-70.17 0-127-56.49-127.86-126.45-27.26-4.14-55.13.3-79.72 12.82l-69.13 35.22a132.221 132.221 0 0 0-57.79 57.81l-35.1 68.88a132.645 132.645 0 0 0-12.82 80.95l12.08 76.27a132.521 132.521 0 0 0 37.16 72.96l54.77 54.76a132.036 132.036 0 0 0 72.71 37.06l76.71 12.15c27.51 4.36 55.7-.11 80.53-12.76l69.13-35.21a132.273 132.273 0 0 0 57.79-57.81l35.1-68.88c12.56-24.64 17.01-52.58 12.91-79.91zM176 368c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm32-160c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm160 128c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z“]},wr={prefix:”fas“,iconName:”copy“,icon:[448,512,,”f0c5“,”M320 448v40c0 13.255-10.745 24-24 24H24c-13.255 0-24-10.745-24-24V120c0-13.255 10.745-24 24-24h72v296c0 30.879 25.121 56 56 56h168zm0-344V0H152c-13.255 0-24 10.745-24 24v368c0 13.255 10.745 24 24 24h272c13.255 0 24-10.745 24-24V128H344c-13.2 0-24-10.8-24-24zm120.971-31.029L375.029 7.029A24 24 0 0 0 358.059 0H352v96h96v-6.059a24 24 0 0 0-7.029-16.97z“]},xr={prefix:”fas“,iconName:”copyright“,icon:[512,512,,”f1f9“,”M256 8C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 8zm117.134 346.753c-1.592 1.867-39.776 45.731-109.851 45.731-84.692 0-144.484-63.26-144.484-145.567 0-81.303 62.004-143.401 143.762-143.401 66.957 0 101.965 37.315 103.422 38.904a12 12 0 0 1 1.238 14.623l-22.38 34.655c-4.049 6.267-12.774 7.351-18.234 2.295-.233-.214-26.529-23.88-61.88-23.88-46.116 0-73.916 33.575-73.916 76.082 0 39.602 25.514 79.692 74.277 79.692 38.697 0 65.28-28.338 65.544-28.625 5.132-5.565 14.059-5.033 18.508 1.053l24.547 33.572a12.001 12.001 0 0 1-.553 14.866z“]},Sr={prefix:”fas“,iconName:”couch“,icon:[640,512,,”f4b8“,”M160 224v64h320v-64c0-35.3 28.7-64 64-64h32c0-53-43-96-96-96H160c-53 0-96 43-96 96h32c35.3 0 64 28.7 64 64zm416-32h-32c-17.7 0-32 14.3-32 32v96H128v-96c0-17.7-14.3-32-32-32H64c-35.3 0-64 28.7-64 64 0 23.6 13 44 32 55.1V432c0 8.8 7.2 16 16 16h64c8.8 0 16-7.2 16-16v-16h384v16c0 8.8 7.2 16 16 16h64c8.8 0 16-7.2 16-16V311.1c19-11.1 32-31.5 32-55.1 0-35.3-28.7-64-64-64z“]},kr={prefix:”fas“,iconName:”credit-card“,icon:[576,512,,”f09d“,”M0 432c0 26.5 21.5 48 48 48h480c26.5 0 48-21.5 48-48V256H0v176zm192-68c0-6.6 5.4-12 12-12h136c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12H204c-6.6 0-12-5.4-12-12v-40zm-128 0c0-6.6 5.4-12 12-12h72c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12H76c-6.6 0-12-5.4-12-12v-40zM576 80v48H0V80c0-26.5 21.5-48 48-48h480c26.5 0 48 21.5 48 48z“]},_r={prefix:”fas“,iconName:”crop“,icon:[512,512,,”f125“,”M488 352h-40V109.25l59.31-59.31c6.25-6.25 6.25-16.38 0-22.63L484.69 4.69c-6.25-6.25-16.38-6.25-22.63 0L402.75 64H192v96h114.75L160 306.75V24c0-13.26-10.75-24-24-24H88C74.75 0 64 10.74 64 24v40H24C10.75 64 0 74.74 0 88v48c0 13.25 10.75 24 24 24h40v264c0 13.25 10.75 24 24 24h232v-96H205.25L352 205.25V488c0 13.25 10.75 24 24 24h48c13.25 0 24-10.75 24-24v-40h40c13.25 0 24-10.75 24-24v-48c0-13.26-10.75-24-24-24z“]},zr={prefix:”fas“,iconName:”crop-alt“,icon:[512,512,,”f565“,”M488 352h-40V96c0-17.67-14.33-32-32-32H192v96h160v328c0 13.25 10.75 24 24 24h48c13.25 0 24-10.75 24-24v-40h40c13.25 0 24-10.75 24-24v-48c0-13.26-10.75-24-24-24zM160 24c0-13.26-10.75-24-24-24H88C74.75 0 64 10.74 64 24v40H24C10.75 64 0 74.74 0 88v48c0 13.25 10.75 24 24 24h40v256c0 17.67 14.33 32 32 32h224v-96H160V24z“]},Cr={prefix:”fas“,iconName:”cross“,icon:[384,512,,”f654“,”M352 128h-96V32c0-17.67-14.33-32-32-32h-64c-17.67 0-32 14.33-32 32v96H32c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h96v224c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32V256h96c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32z“]},Mr={prefix:”fas“,iconName:”crosshairs“,icon:[512,512,,”f05b“,”M500 224h-30.364C455.724 130.325 381.675 56.276 288 42.364V12c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v30.364C130.325 56.276 56.276 130.325 42.364 224H12c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h30.364C56.276 381.675 130.325 455.724 224 469.636V500c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12v-30.364C381.675 455.724 455.724 381.675 469.636 288H500c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12zM288 404.634V364c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40.634C165.826 392.232 119.783 346.243 107.366 288H148c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-40.634C119.768 165.826 165.757 119.783 224 107.366V148c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12v-40.634C346.174 119.768 392.217 165.757 404.634 224H364c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40.634C392.232 346.174 346.243 392.217 288 404.634zM288 256c0 17.673-14.327 32-32 32s-32-14.327-32-32c0-17.673 14.327-32 32-32s32 14.327 32 32z“]},Or={prefix:”fas“,iconName:”crow“,icon:[640,512,,”f520“,”M544 32h-16.36C513.04 12.68 490.09 0 464 0c-44.18 0-80 35.82-80 80v20.98L12.09 393.57A30.216 30.216 0 0 0 0 417.74c0 22.46 23.64 37.07 43.73 27.03L165.27 384h96.49l44.41 120.1c2.27 6.23 9.15 9.44 15.38 7.17l22.55-8.21c6.23-2.27 9.44-9.15 7.17-15.38L312.94 384H352c1.91 0 3.76-.23 5.66-.29l44.51 120.38c2.27 6.23 9.15 9.44 15.38 7.17l22.55-8.21c6.23-2.27 9.44-9.15 7.17-15.38l-41.24-111.53C485.74 352.8 544 279.26 544 192v-80l96-16c0-35.35-42.98-64-96-64zm-80 72c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24z“]},Tr={prefix:”fas“,iconName:”crown“,icon:[640,512,,”f521“,”M528 448H112c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h416c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zm64-320c-26.5 0-48 21.5-48 48 0 7.1 1.6 13.7 4.4 19.8L476 239.2c-15.4 9.2-35.3 4-44.2-11.6L350.3 85C361 76.2 368 63 368 48c0-26.5-21.5-48-48-48s-48 21.5-48 48c0 15 7 28.2 17.7 37l-81.5 142.6c-8.9 15.6-28.9 20.8-44.2 11.6l-72.3-43.4c2.7-6 4.4-12.7 4.4-19.8 0-26.5-21.5-48-48-48S0 149.5 0 176s21.5 48 48 48c2.6 0 5.2-.4 7.7-.8L128 416h384l72.3-192.8c2.5.4 5.1.8 7.7.8 26.5 0 48-21.5 48-48s-21.5-48-48-48z“]},Er={prefix:”fas“,iconName:”crutch“,icon:[512,512,,”f7f7“,”M507.31 185.71l-181-181a16 16 0 0 0-22.62 0L281 27.31a16 16 0 0 0 0 22.63l181 181a16 16 0 0 0 22.63 0l22.62-22.63a16 16 0 0 0 .06-22.6zm-179.54 66.41l-67.89-67.89 55.1-55.1-45.25-45.25-109.67 109.67a96.08 96.08 0 0 0-25.67 46.29L106.65 360.1l-102 102a16 16 0 0 0 0 22.63l22.62 22.62a16 16 0 0 0 22.63 0l102-102 120.25-27.75a95.88 95.88 0 0 0 46.29-25.65l109.68-109.68L382.87 197zm-54.57 54.57a32 32 0 0 1-15.45 8.54l-79.3 18.32 18.3-79.3a32.22 32.22 0 0 1 8.56-15.45l9.31-9.31 67.89 67.89z“]},Lr={prefix:”fas“,iconName:”cube“,icon:[512,512,,”f1b2“,”M239.1 6.3l-208 78c-18.7 7-31.1 25-31.1 45v225.1c0 18.2 10.3 34.8 26.5 42.9l208 104c13.5 6.8 29.4 6.8 42.9 0l208-104c16.3-8.1 26.5-24.8 26.5-42.9V129.3c0-20-12.4-37.9-31.1-44.9l-208-78C262 2.2 250 2.2 239.1 6.3zM256 68.4l192 72v1.1l-192 78-192-78v-1.1l192-72zm32 356V275.5l160-65v133.9l-160 80z“]},Ar={prefix:”fas“,iconName:”cubes“,icon:[512,512,,”f1b3“,”M488.6 250.2L392 214V105.5c0-15-9.3-28.4-23.4-33.7l-100-37.5c-8.1-3.1-17.1-3.1-25.3 0l-100 37.5c-14.1 5.3-23.4 18.7-23.4 33.7V214l-96.6 36.2C9.3 255.5 0 268.9 0 283.9V394c0 13.6 7.7 26.1 19.9 32.2l100 50c10.1 5.1 22.1 5.1 32.2 0l103.9-52 103.9 52c10.1 5.1 22.1 5.1 32.2 0l100-50c12.2-6.1 19.9-18.6 19.9-32.2V283.9c0-15-9.3-28.4-23.4-33.7zM358 214.8l-85 31.9v-68.2l85-37v73.3zM154 104.1l102-38.2 102 38.2v.6l-102 41.4-102-41.4v-.6zm84 291.1l-85 42.5v-79.1l85-38.8v75.4zm0-112l-102 41.4-102-41.4v-.6l102-38.2 102 38.2v.6zm240 112l-85 42.5v-79.1l85-38.8v75.4zm0-112l-102 41.4-102-41.4v-.6l102-38.2 102 38.2v.6z“]},Rr={prefix:”fas“,iconName:”cut“,icon:[448,512,,”f0c4“,”M278.06 256L444.48 89.57c4.69-4.69 4.69-12.29 0-16.97-32.8-32.8-85.99-32.8-118.79 0L210.18 188.12l-24.86-24.86c4.31-10.92 6.68-22.81 6.68-35.26 0-53.02-42.98-96-96-96S0 74.98 0 128s42.98 96 96 96c4.54 0 8.99-.32 13.36-.93L142.29 256l-32.93 32.93c-4.37-.61-8.83-.93-13.36-.93-53.02 0-96 42.98-96 96s42.98 96 96 96 96-42.98 96-96c0-12.45-2.37-24.34-6.68-35.26l24.86-24.86L325.69 439.4c32.8 32.8 85.99 32.8 118.79 0 4.69-4.68 4.69-12.28 0-16.97L278.06 256zM96 160c-17.64 0-32-14.36-32-32s14.36-32 32-32 32 14.36 32 32-14.36 32-32 32zm0 256c-17.64 0-32-14.36-32-32s14.36-32 32-32 32 14.36 32 32-14.36 32-32 32z“]},Nr={prefix:”fas“,iconName:”database“,icon:[448,512,,”f1c0“,”M448 73.143v45.714C448 159.143 347.667 192 224 192S0 159.143 0 118.857V73.143C0 32.857 100.333 0 224 0s224 32.857 224 73.143zM448 176v102.857C448 319.143 347.667 352 224 352S0 319.143 0 278.857V176c48.125 33.143 136.208 48.572 224 48.572S399.874 209.143 448 176zm0 160v102.857C448 479.143 347.667 512 224 512S0 479.143 0 438.857V336c48.125 33.143 136.208 48.572 224 48.572S399.874 369.143 448 336z“]},Hr={prefix:”fas“,iconName:”deaf“,icon:[512,512,,”f2a4“,”M216 260c0 15.464-12.536 28-28 28s-28-12.536-28-28c0-44.112 35.888-80 80-80s80 35.888 80 80c0 15.464-12.536 28-28 28s-28-12.536-28-28c0-13.234-10.767-24-24-24s-24 10.766-24 24zm24-176c-97.047 0-176 78.953-176 176 0 15.464 12.536 28 28 28s28-12.536 28-28c0-66.168 53.832-120 120-120s120 53.832 120 120c0 75.164-71.009 70.311-71.997 143.622L288 404c0 28.673-23.327 52-52 52-15.464 0-28 12.536-28 28s12.536 28 28 28c59.475 0 107.876-48.328 108-107.774.595-34.428 72-48.24 72-144.226 0-97.047-78.953-176-176-176zm268.485-52.201L480.2 3.515c-4.687-4.686-12.284-4.686-16.971 0L376.2 90.544c-4.686 4.686-4.686 12.284 0 16.971l28.285 28.285c4.686 4.686 12.284 4.686 16.97 0l87.03-87.029c4.687-4.688 4.687-12.286 0-16.972zM168.97 314.745c-4.686-4.686-12.284-4.686-16.97 0L3.515 463.23c-4.686 4.686-4.686 12.284 0 16.971L31.8 508.485c4.687 4.686 12.284 4.686 16.971 0L197.256 360c4.686-4.686 4.686-12.284 0-16.971l-28.286-28.284z“]},Pr={prefix:”fas“,iconName:”democrat“,icon:[640,512,,”f747“,”M637.3 256.9l-19.6-29.4c-28.2-42.3-75.3-67.5-126.1-67.5H256l-81.2-81.2c20.1-20.1 22.6-51.1 7.5-73.9-3.4-5.2-10.8-5.9-15.2-1.5l-41.8 41.8L82.4 2.4c-3.6-3.6-9.6-3-12.4 1.2-12.3 18.6-10.3 44 6.1 60.4 3.3 3.3 7.3 5.3 11.3 7.5-2.2 1.7-4.7 3.1-6.4 5.4L6.4 176.2c-7.3 9.7-8.4 22.7-3 33.5l14.3 28.6c5.4 10.8 16.5 17.7 28.6 17.7h31c8.5 0 16.6-3.4 22.6-9.4L138 212l54 108h352v-77.8c16.2 12.2 18.3 17.6 40.1 50.3 4.9 7.4 14.8 9.3 22.2 4.4l26.6-17.7c7.3-5 9.3-14.9 4.4-22.3zm-341.1-13.6l-16.5 16.1 3.9 22.7c.7 4.1-3.6 7.2-7.2 5.3L256 276.7l-20.4 10.7c-3.6 1.9-7.9-1.2-7.2-5.3l3.9-22.7-16.5-16.1c-3-2.9-1.3-7.9 2.8-8.5l22.8-3.3 10.2-20.7c1.8-3.7 7.1-3.7 9 0l10.2 20.7 22.8 3.3c4 .6 5.6 5.6 2.6 8.5zm112 0l-16.5 16.1 3.9 22.7c.7 4.1-3.6 7.2-7.2 5.3L368 276.7l-20.4 10.7c-3.6 1.9-7.9-1.2-7.2-5.3l3.9-22.7-16.5-16.1c-3-2.9-1.3-7.9 2.8-8.5l22.8-3.3 10.2-20.7c1.8-3.7 7.1-3.7 9 0l10.2 20.7 22.8 3.3c4 .6 5.6 5.6 2.6 8.5zm112 0l-16.5 16.1 3.9 22.7c.7 4.1-3.6 7.2-7.2 5.3L480 276.7l-20.4 10.7c-3.6 1.9-7.9-1.2-7.2-5.3l3.9-22.7-16.5-16.1c-3-2.9-1.3-7.9 2.8-8.5l22.8-3.3 10.2-20.7c1.8-3.7 7.1-3.7 9 0l10.2 20.7 22.8 3.3c4 .6 5.6 5.6 2.6 8.5zM192 496c0 8.8 7.2 16 16 16h64c8.8 0 16-7.2 16-16v-80h160v80c0 8.8 7.2 16 16 16h64c8.8 0 16-7.2 16-16V352H192v144z“]},jr={prefix:”fas“,iconName:”desktop“,icon:[576,512,,”f108“,”M528 0H48C21.5 0 0 21.5 0 48v320c0 26.5 21.5 48 48 48h192l-16 48h-72c-13.3 0-24 10.7-24 24s10.7 24 24 24h272c13.3 0 24-10.7 24-24s-10.7-24-24-24h-72l-16-48h192c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zm-16 352H64V64h448v288z“]},Vr={prefix:”fas“,iconName:”dharmachakra“,icon:[512,512,,”f655“,”M495 225.06l-17.22 1.08c-5.27-39.49-20.79-75.64-43.86-105.84l12.95-11.43c6.92-6.11 7.25-16.79.73-23.31L426.44 64.4c-6.53-6.53-17.21-6.19-23.31.73L391.7 78.07c-30.2-23.06-66.35-38.58-105.83-43.86L286.94 17c.58-9.21-6.74-17-15.97-17h-29.94c-9.23 0-16.54 7.79-15.97 17l1.08 17.22c-39.49 5.27-75.64 20.79-105.83 43.86l-11.43-12.95c-6.11-6.92-16.79-7.25-23.31-.73L64.4 85.56c-6.53 6.53-6.19 17.21.73 23.31l12.95 11.43c-23.06 30.2-38.58 66.35-43.86 105.84L17 225.06c-9.21-.58-17 6.74-17 15.97v29.94c0 9.23 7.79 16.54 17 15.97l17.22-1.08c5.27 39.49 20.79 75.64 43.86 105.83l-12.95 11.43c-6.92 6.11-7.25 16.79-.73 23.31l21.17 21.17c6.53 6.53 17.21 6.19 23.31-.73l11.43-12.95c30.2 23.06 66.35 38.58 105.84 43.86L225.06 495c-.58 9.21 6.74 17 15.97 17h29.94c9.23 0 16.54-7.79 15.97-17l-1.08-17.22c39.49-5.27 75.64-20.79 105.84-43.86l11.43 12.95c6.11 6.92 16.79 7.25 23.31.73l21.17-21.17c6.53-6.53 6.19-17.21-.73-23.31l-12.95-11.43c23.06-30.2 38.58-66.35 43.86-105.83l17.22 1.08c9.21.58 17-6.74 17-15.97v-29.94c-.01-9.23-7.8-16.54-17.01-15.97zM281.84 98.61c24.81 4.07 47.63 13.66 67.23 27.78l-42.62 48.29c-8.73-5.44-18.32-9.54-28.62-11.95l4.01-64.12zm-51.68 0l4.01 64.12c-10.29 2.41-19.89 6.52-28.62 11.95l-42.62-48.29c19.6-14.12 42.42-23.71 67.23-27.78zm-103.77 64.33l48.3 42.61c-5.44 8.73-9.54 18.33-11.96 28.62l-64.12-4.01c4.07-24.81 13.66-47.62 27.78-67.22zm-27.78 118.9l64.12-4.01c2.41 10.29 6.52 19.89 11.95 28.62l-48.29 42.62c-14.12-19.6-23.71-42.42-27.78-67.23zm131.55 131.55c-24.81-4.07-47.63-13.66-67.23-27.78l42.61-48.3c8.73 5.44 18.33 9.54 28.62 11.96l-4 64.12zM256 288c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm25.84 125.39l-4.01-64.12c10.29-2.41 19.89-6.52 28.62-11.96l42.61 48.3c-19.6 14.12-42.41 23.71-67.22 27.78zm103.77-64.33l-48.29-42.62c5.44-8.73 9.54-18.32 11.95-28.62l64.12 4.01c-4.07 24.82-13.66 47.64-27.78 67.23zm-36.34-114.89c-2.41-10.29-6.52-19.89-11.96-28.62l48.3-42.61c14.12 19.6 23.71 42.42 27.78 67.23l-64.12 4z“]},Dr={prefix:”fas“,iconName:”diagnoses“,icon:[640,512,,”f470“,”M496 256c8.8 0 16-7.2 16-16s-7.2-16-16-16-16 7.2-16 16 7.2 16 16 16zm-176-80c48.5 0 88-39.5 88-88S368.5 0 320 0s-88 39.5-88 88 39.5 88 88 88zM59.8 364c10.2 15.3 29.3 17.8 42.9 9.8 16.2-9.6 56.2-31.7 105.3-48.6V416h224v-90.7c49.1 16.8 89.1 39 105.3 48.6 13.6 8 32.7 5.3 42.9-9.8l17.8-26.7c8.8-13.2 7.6-34.6-10-45.1-11.9-7.1-29.7-17-51.1-27.4-28.1 46.1-99.4 17.8-87.7-35.1C409.3 217.2 365.1 208 320 208c-57 0-112.9 14.5-160 32.2-.2 40.2-47.6 63.3-79.2 36-11.2 6-21.3 11.6-28.7 16-17.6 10.5-18.8 31.8-10 45.1L59.8 364zM368 344c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24zm-96-96c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24zm-160 8c8.8 0 16-7.2 16-16s-7.2-16-16-16-16 7.2-16 16 7.2 16 16 16zm512 192H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h608c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16z“]},Ir={prefix:”fas“,iconName:”dice“,icon:[640,512,,”f522“,”M592 192H473.26c12.69 29.59 7.12 65.2-17 89.32L320 417.58V464c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48V240c0-26.51-21.49-48-48-48zM480 376c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24zm-46.37-186.7L258.7 14.37c-19.16-19.16-50.23-19.16-69.39 0L14.37 189.3c-19.16 19.16-19.16 50.23 0 69.39L189.3 433.63c19.16 19.16 50.23 19.16 69.39 0L433.63 258.7c19.16-19.17 19.16-50.24 0-69.4zM96 248c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24zm128 128c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24zm0-128c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24zm0-128c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24zm128 128c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24z“]},Fr={prefix:”fas“,iconName:”dice-d20“,icon:[480,512,,”f6cf“,”M106.75 215.06L1.2 370.95c-3.08 5 .1 11.5 5.93 12.14l208.26 22.07-108.64-190.1zM7.41 315.43L82.7 193.08 6.06 147.1c-2.67-1.6-6.06.32-6.06 3.43v162.81c0 4.03 5.29 5.53 7.41 2.09zM18.25 423.6l194.4 87.66c5.3 2.45 11.35-1.43 11.35-7.26v-65.67l-203.55-22.3c-4.45-.5-6.23 5.59-2.2 7.57zm81.22-257.78L179.4 22.88c4.34-7.06-3.59-15.25-10.78-11.14L17.81 110.35c-2.47 1.62-2.39 5.26.13 6.78l81.53 48.69zM240 176h109.21L253.63 7.62C250.5 2.54 245.25 0 240 0s-10.5 2.54-13.63 7.62L130.79 176H240zm233.94-28.9l-76.64 45.99 75.29 122.35c2.11 3.44 7.41 1.94 7.41-2.1V150.53c0-3.11-3.39-5.03-6.06-3.43zm-93.41 18.72l81.53-48.7c2.53-1.52 2.6-5.16.13-6.78l-150.81-98.6c-7.19-4.11-15.12 4.08-10.78 11.14l79.93 142.94zm79.02 250.21L256 438.32v65.67c0 5.84 6.05 9.71 11.35 7.26l194.4-87.66c4.03-1.97 2.25-8.06-2.2-7.56zm-86.3-200.97l-108.63 190.1 208.26-22.07c5.83-.65 9.01-7.14 5.93-12.14L373.25 215.06zM240 208H139.57L240 383.75 340.43 208H240z“]},Br={prefix:”fas“,iconName:”dice-d6“,icon:[448,512,,”f6d1“,”M422.19 109.95L256.21 9.07c-19.91-12.1-44.52-12.1-64.43 0L25.81 109.95c-5.32 3.23-5.29 11.27.06 14.46L224 242.55l198.14-118.14c5.35-3.19 5.38-11.22.05-14.46zm13.84 44.63L240 271.46v223.82c0 12.88 13.39 20.91 24.05 14.43l152.16-92.48c19.68-11.96 31.79-33.94 31.79-57.7v-197.7c0-6.41-6.64-10.43-11.97-7.25zM0 161.83v197.7c0 23.77 12.11 45.74 31.79 57.7l152.16 92.47c10.67 6.48 24.05-1.54 24.05-14.43V271.46L11.97 154.58C6.64 151.4 0 155.42 0 161.83z“]},Ur={prefix:”fas“,iconName:”dice-five“,icon:[448,512,,”f523“,”M384 32H64C28.65 32 0 60.65 0 96v320c0 35.35 28.65 64 64 64h320c35.35 0 64-28.65 64-64V96c0-35.35-28.65-64-64-64zM128 384c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm0-192c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm96 96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm96 96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm0-192c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z“]},qr={prefix:”fas“,iconName:”dice-four“,icon:[448,512,,”f524“,”M384 32H64C28.65 32 0 60.65 0 96v320c0 35.35 28.65 64 64 64h320c35.35 0 64-28.65 64-64V96c0-35.35-28.65-64-64-64zM128 384c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm0-192c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm192 192c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm0-192c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z“]},Gr={prefix:”fas“,iconName:”dice-one“,icon:[448,512,,”f525“,”M384 32H64C28.65 32 0 60.65 0 96v320c0 35.35 28.65 64 64 64h320c35.35 0 64-28.65 64-64V96c0-35.35-28.65-64-64-64zM224 288c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z“]},Wr={prefix:”fas“,iconName:”dice-six“,icon:[448,512,,”f526“,”M384 32H64C28.65 32 0 60.65 0 96v320c0 35.35 28.65 64 64 64h320c35.35 0 64-28.65 64-64V96c0-35.35-28.65-64-64-64zM128 384c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm0-96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm0-96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm192 192c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm0-96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm0-96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z“]},Zr={prefix:”fas“,iconName:”dice-three“,icon:[448,512,,”f527“,”M384 32H64C28.65 32 0 60.65 0 96v320c0 35.35 28.65 64 64 64h320c35.35 0 64-28.65 64-64V96c0-35.35-28.65-64-64-64zM128 192c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm96 96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm96 96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z“]},$r={prefix:”fas“,iconName:”dice-two“,icon:[448,512,,”f528“,”M384 32H64C28.65 32 0 60.65 0 96v320c0 35.35 28.65 64 64 64h320c35.35 0 64-28.65 64-64V96c0-35.35-28.65-64-64-64zM128 192c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm192 192c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z“]},Jr={prefix:”fas“,iconName:”digital-tachograph“,icon:[640,512,,”f566“,”M608 96H32c-17.67 0-32 14.33-32 32v256c0 17.67 14.33 32 32 32h576c17.67 0 32-14.33 32-32V128c0-17.67-14.33-32-32-32zM304 352c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8v-8c0-4.42 3.58-8 8-8h224c4.42 0 8 3.58 8 8v8zM72 288v-16c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H80c-4.42 0-8-3.58-8-8zm64 0v-16c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8zm64 0v-16c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8zm64 0v-16c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8zm40-64c0 8.84-7.16 16-16 16H80c-8.84 0-16-7.16-16-16v-48c0-8.84 7.16-16 16-16h208c8.84 0 16 7.16 16 16v48zm272 128c0 4.42-3.58 8-8 8H344c-4.42 0-8-3.58-8-8v-8c0-4.42 3.58-8 8-8h224c4.42 0 8 3.58 8 8v8z“]},Kr={prefix:”fas“,iconName:”directions“,icon:[512,512,,”f5eb“,”M502.61 233.32L278.68 9.39c-12.52-12.52-32.83-12.52-45.36 0L9.39 233.32c-12.52 12.53-12.52 32.83 0 45.36l223.93 223.93c12.52 12.53 32.83 12.53 45.36 0l223.93-223.93c12.52-12.53 12.52-32.83 0-45.36zm-100.98 12.56l-84.21 77.73c-5.12 4.73-13.43 1.1-13.43-5.88V264h-96v64c0 4.42-3.58 8-8 8h-32c-4.42 0-8-3.58-8-8v-80c0-17.67 14.33-32 32-32h112v-53.73c0-6.97 8.3-10.61 13.43-5.88l84.21 77.73c3.43 3.17 3.43 8.59 0 11.76z“]},Qr={prefix:”fas“,iconName:”disease“,icon:[512,512,,”f7fa“,”M472.29 195.9l-67.06-23c-19.28-6.6-33.54-20.92-38.14-38.31l-16-60.45c-11.58-43.77-76.57-57.13-110-22.62L195 99.24c-13.26 13.71-33.54 20.93-54.2 19.31l-71.9-5.62c-52-4.07-86.93 44.89-59 82.84l38.54 52.42c11.08 15.07 12.82 33.86 4.64 50.24l-28.43 57C4 396.67 47.46 440.29 98.11 429.23l70-15.28c20.11-4.39 41.45 0 57.07 11.73l54.32 40.83c39.32 29.56 101 7.57 104.45-37.22l4.7-61.86c1.35-17.8 12.8-33.87 30.63-43l62-31.74c44.84-22.96 39.55-80.17-8.99-96.79zM160 256a32 32 0 1 1 32-32 32 32 0 0 1-32 32zm128 96a32 32 0 1 1 32-32 32 32 0 0 1-32 32zm16-128a16 16 0 1 1 16-16 16 16 0 0 1-16 16z“]},Yr={prefix:”fas“,iconName:”divide“,icon:[448,512,,”f529“,”M224 352c-35.35 0-64 28.65-64 64s28.65 64 64 64 64-28.65 64-64-28.65-64-64-64zm0-192c35.35 0 64-28.65 64-64s-28.65-64-64-64-64 28.65-64 64 28.65 64 64 64zm192 48H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h384c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32z“]},Xr={prefix:”fas“,iconName:”dizzy“,icon:[496,512,,”f567“,”M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm-96 206.6l-28.7 28.7c-14.8 14.8-37.8-7.5-22.6-22.6l28.7-28.7-28.7-28.7c-15-15 7.7-37.6 22.6-22.6l28.7 28.7 28.7-28.7c15-15 37.6 7.7 22.6 22.6L174.6 192l28.7 28.7c15.2 15.2-7.9 37.4-22.6 22.6L152 214.6zM248 416c-35.3 0-64-28.7-64-64s28.7-64 64-64 64 28.7 64 64-28.7 64-64 64zm147.3-195.3c15.2 15.2-7.9 37.4-22.6 22.6L344 214.6l-28.7 28.7c-14.8 14.8-37.8-7.5-22.6-22.6l28.7-28.7-28.7-28.7c-15-15 7.7-37.6 22.6-22.6l28.7 28.7 28.7-28.7c15-15 37.6 7.7 22.6 22.6L366.6 192l28.7 28.7z“]},ei={prefix:”fas“,iconName:”dna“,icon:[448,512,,”f471“,”M.1 494.1c-1.1 9.5 6.3 17.8 15.9 17.8l32.3.1c8.1 0 14.9-5.9 16-13.9.7-4.9 1.8-11.1 3.4-18.1H380c1.6 6.9 2.9 13.2 3.5 18.1 1.1 8 7.9 14 16 13.9l32.3-.1c9.6 0 17.1-8.3 15.9-17.8-4.6-37.9-25.6-129-118.9-207.7-17.6 12.4-37.1 24.2-58.5 35.4 6.2 4.6 11.4 9.4 17 14.2H159.7c21.3-18.1 47-35.6 78.7-51.4C410.5 199.1 442.1 65.8 447.9 17.9 449 8.4 441.6.1 432 .1L399.6 0c-8.1 0-14.9 5.9-16 13.9-.7 4.9-1.8 11.1-3.4 18.1H67.8c-1.6-7-2.7-13.1-3.4-18.1-1.1-8-7.9-14-16-13.9L16.1.1C6.5.1-1 8.4.1 17.9 5.3 60.8 31.4 171.8 160 256 31.5 340.2 5.3 451.2.1 494.1zM224 219.6c-25.1-13.7-46.4-28.4-64.3-43.6h128.5c-17.8 15.2-39.1 30-64.2 43.6zM355.1 96c-5.8 10.4-12.8 21.1-21 32H114c-8.3-10.9-15.3-21.6-21-32h262.1zM92.9 416c5.8-10.4 12.8-21.1 21-32h219.4c8.3 10.9 15.4 21.6 21.2 32H92.9z“]},ti={prefix:”fas“,iconName:”dog“,icon:[576,512,,”f6d3“,”M298.06,224,448,277.55V496a16,16,0,0,1-16,16H368a16,16,0,0,1-16-16V384H192V496a16,16,0,0,1-16,16H112a16,16,0,0,1-16-16V282.09C58.84,268.84,32,233.66,32,192a32,32,0,0,1,64,0,32.06,32.06,0,0,0,32,32ZM544,112v32a64,64,0,0,1-64,64H448v35.58L320,197.87V48c0-14.25,17.22-21.39,27.31-11.31L374.59,64h53.63c10.91,0,23.75,7.92,28.62,17.69L464,96h64A16,16,0,0,1,544,112Zm-112,0a16,16,0,1,0-16,16A16,16,0,0,0,432,112Z“]},ni={prefix:”fas“,iconName:”dollar-sign“,icon:[288,512,,”f155“,”M209.2 233.4l-108-31.6C88.7 198.2 80 186.5 80 173.5c0-16.3 13.2-29.5 29.5-29.5h66.3c12.2 0 24.2 3.7 34.2 10.5 6.1 4.1 14.3 3.1 19.5-2l34.8-34c7.1-6.9 6.1-18.4-1.8-24.5C238 74.8 207.4 64.1 176 64V16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v48h-2.5C45.8 64-5.4 118.7.5 183.6c4.2 46.1 39.4 83.6 83.8 96.6l102.5 30c12.5 3.7 21.2 15.3 21.2 28.3 0 16.3-13.2 29.5-29.5 29.5h-66.3C100 368 88 364.3 78 357.5c-6.1-4.1-14.3-3.1-19.5 2l-34.8 34c-7.1 6.9-6.1 18.4 1.8 24.5 24.5 19.2 55.1 29.9 86.5 30v48c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-48.2c46.6-.9 90.3-28.6 105.7-72.7 21.5-61.6-14.6-124.8-72.5-141.7z“]},ri={prefix:”fas“,iconName:”dolly“,icon:[576,512,,”f472“,”M294.2 277.7c18 5 34.7 13.4 49.5 24.7l161.5-53.8c8.4-2.8 12.9-11.9 10.1-20.2L454.9 47.2c-2.8-8.4-11.9-12.9-20.2-10.1l-61.1 20.4 33.1 99.4L346 177l-33.1-99.4-61.6 20.5c-8.4 2.8-12.9 11.9-10.1 20.2l53 159.4zm281 48.7L565 296c-2.8-8.4-11.9-12.9-20.2-10.1l-213.5 71.2c-17.2-22-43.6-36.4-73.5-37L158.4 21.9C154 8.8 141.8 0 128 0H16C7.2 0 0 7.2 0 16v32c0 8.8 7.2 16 16 16h88.9l92.2 276.7c-26.1 20.4-41.7 53.6-36 90.5 6.1 39.4 37.9 72.3 77.3 79.2 60.2 10.7 112.3-34.8 113.4-92.6l213.3-71.2c8.3-2.8 12.9-11.8 10.1-20.2zM256 464c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48z“]},ii={prefix:”fas“,iconName:”dolly-flatbed“,icon:[640,512,,”f474“,”M208 320h384c8.8 0 16-7.2 16-16V48c0-8.8-7.2-16-16-16H448v128l-48-32-48 32V32H208c-8.8 0-16 7.2-16 16v256c0 8.8 7.2 16 16 16zm416 64H128V16c0-8.8-7.2-16-16-16H16C7.2 0 0 7.2 0 16v32c0 8.8 7.2 16 16 16h48v368c0 8.8 7.2 16 16 16h82.9c-1.8 5-2.9 10.4-2.9 16 0 26.5 21.5 48 48 48s48-21.5 48-48c0-5.6-1.2-11-2.9-16H451c-1.8 5-2.9 10.4-2.9 16 0 26.5 21.5 48 48 48s48-21.5 48-48c0-5.6-1.2-11-2.9-16H624c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16z“]},ai={prefix:”fas“,iconName:”donate“,icon:[512,512,,”f4b9“,”M256 416c114.9 0 208-93.1 208-208S370.9 0 256 0 48 93.1 48 208s93.1 208 208 208zM233.8 97.4V80.6c0-9.2 7.4-16.6 16.6-16.6h11.1c9.2 0 16.6 7.4 16.6 16.6v17c15.5.8 30.5 6.1 43 15.4 5.6 4.1 6.2 12.3 1.2 17.1L306 145.6c-3.8 3.7-9.5 3.8-14 1-5.4-3.4-11.4-5.1-17.8-5.1h-38.9c-9 0-16.3 8.2-16.3 18.3 0 8.2 5 15.5 12.1 17.6l62.3 18.7c25.7 7.7 43.7 32.4 43.7 60.1 0 34-26.4 61.5-59.1 62.4v16.8c0 9.2-7.4 16.6-16.6 16.6h-11.1c-9.2 0-16.6-7.4-16.6-16.6v-17c-15.5-.8-30.5-6.1-43-15.4-5.6-4.1-6.2-12.3-1.2-17.1l16.3-15.5c3.8-3.7 9.5-3.8 14-1 5.4 3.4 11.4 5.1 17.8 5.1h38.9c9 0 16.3-8.2 16.3-18.3 0-8.2-5-15.5-12.1-17.6l-62.3-18.7c-25.7-7.7-43.7-32.4-43.7-60.1.1-34 26.4-61.5 59.1-62.4zM480 352h-32.5c-19.6 26-44.6 47.7-73 64h63.8c5.3 0 9.6 3.6 9.6 8v16c0 4.4-4.3 8-9.6 8H73.6c-5.3 0-9.6-3.6-9.6-8v-16c0-4.4 4.3-8 9.6-8h63.8c-28.4-16.3-53.3-38-73-64H32c-17.7 0-32 14.3-32 32v96c0 17.7 14.3 32 32 32h448c17.7 0 32-14.3 32-32v-96c0-17.7-14.3-32-32-32z“]},oi={prefix:”fas“,iconName:”door-closed“,icon:[640,512,,”f52a“,”M624 448H512V50.8C512 22.78 490.47 0 464 0H175.99c-26.47 0-48 22.78-48 50.8V448H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h608c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zM415.99 288c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32c.01 17.67-14.32 32-32 32z“]},ci={prefix:”fas“,iconName:”door-open“,icon:[640,512,,”f52b“,”M624 448h-80V113.45C544 86.19 522.47 64 496 64H384v64h96v384h144c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zM312.24 1.01l-192 49.74C105.99 54.44 96 67.7 96 82.92V448H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h336V33.18c0-21.58-19.56-37.41-39.76-32.17zM264 288c-13.25 0-24-14.33-24-32s10.75-32 24-32 24 14.33 24 32-10.75 32-24 32z“]},si={prefix:”fas“,iconName:”dot-circle“,icon:[512,512,,”f192“,”M256 8C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 8zm80 248c0 44.112-35.888 80-80 80s-80-35.888-80-80 35.888-80 80-80 80 35.888 80 80z“]},ui={prefix:”fas“,iconName:”dove“,icon:[512,512,,”f4ba“,”M288 167.2v-28.1c-28.2-36.3-47.1-79.3-54.1-125.2-2.1-13.5-19-18.8-27.8-8.3-21.1 24.9-37.7 54.1-48.9 86.5 34.2 38.3 80 64.6 130.8 75.1zM400 64c-44.2 0-80 35.9-80 80.1v59.4C215.6 197.3 127 133 87 41.8c-5.5-12.5-23.2-13.2-29-.9C41.4 76 32 115.2 32 156.6c0 70.8 34.1 136.9 85.1 185.9 13.2 12.7 26.1 23.2 38.9 32.8l-143.9 36C1.4 414-3.4 426.4 2.6 435.7 20 462.6 63 508.2 155.8 512c8 .3 16-2.6 22.1-7.9l65.2-56.1H320c88.4 0 160-71.5 160-159.9V128l32-64H400zm0 96.1c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16z“]},li={prefix:”fas“,iconName:”download“,icon:[512,512,,”f019“,”M216 0h80c13.3 0 24 10.7 24 24v168h87.7c17.8 0 26.7 21.5 14.1 34.1L269.7 378.3c-7.5 7.5-19.8 7.5-27.3 0L90.1 226.1c-12.6-12.6-3.7-34.1 14.1-34.1H192V24c0-13.3 10.7-24 24-24zm296 376v112c0 13.3-10.7 24-24 24H24c-13.3 0-24-10.7-24-24V376c0-13.3 10.7-24 24-24h146.7l49 49c20.1 20.1 52.5 20.1 72.6 0l49-49H488c13.3 0 24 10.7 24 24zm-124 88c0-11-9-20-20-20s-20 9-20 20 9 20 20 20 20-9 20-20zm64 0c0-11-9-20-20-20s-20 9-20 20 9 20 20 20 20-9 20-20z“]},fi={prefix:”fas“,iconName:”drafting-compass“,icon:[512,512,,”f568“,”M457.01 344.42c-25.05 20.33-52.63 37.18-82.54 49.05l54.38 94.19 53.95 23.04c9.81 4.19 20.89-2.21 22.17-12.8l7.02-58.25-54.98-95.23zm42.49-94.56c4.86-7.67 1.89-17.99-6.05-22.39l-28.07-15.57c-7.48-4.15-16.61-1.46-21.26 5.72C403.01 281.15 332.25 320 256 320c-23.93 0-47.23-4.25-69.41-11.53l67.36-116.68c.7.02 1.34.21 2.04.21s1.35-.19 2.04-.21l51.09 88.5c31.23-8.96 59.56-25.75 82.61-48.92l-51.79-89.71C347.39 128.03 352 112.63 352 96c0-53.02-42.98-96-96-96s-96 42.98-96 96c0 16.63 4.61 32.03 12.05 45.66l-68.3 118.31c-12.55-11.61-23.96-24.59-33.68-39-4.79-7.1-13.97-9.62-21.38-5.33l-27.75 16.07c-7.85 4.54-10.63 14.9-5.64 22.47 15.57 23.64 34.69 44.21 55.98 62.02L0 439.66l7.02 58.25c1.28 10.59 12.36 16.99 22.17 12.8l53.95-23.04 70.8-122.63C186.13 377.28 220.62 384 256 384c99.05 0 190.88-51.01 243.5-134.14zM256 64c17.67 0 32 14.33 32 32s-14.33 32-32 32-32-14.33-32-32 14.33-32 32-32z“]},hi={prefix:”fas“,iconName:”dragon“,icon:[640,512,,”f6d5“,”M18.32 255.78L192 223.96l-91.28 68.69c-10.08 10.08-2.94 27.31 11.31 27.31h222.7c-9.44-26.4-14.73-54.47-14.73-83.38v-42.27l-119.73-87.6c-23.82-15.88-55.29-14.01-77.06 4.59L5.81 227.64c-12.38 10.33-3.45 30.42 12.51 28.14zm556.87 34.1l-100.66-50.31A47.992 47.992 0 0 1 448 196.65v-36.69h64l28.09 22.63c6 6 14.14 9.37 22.63 9.37h30.97a32 32 0 0 0 28.62-17.69l14.31-28.62a32.005 32.005 0 0 0-3.02-33.51l-74.53-99.38C553.02 4.7 543.54 0 533.47 0H296.02c-7.13 0-10.7 8.57-5.66 13.61L352 63.96 292.42 88.8c-5.9 2.95-5.9 11.36 0 14.31L352 127.96v108.62c0 72.08 36.03 139.39 96 179.38-195.59 6.81-344.56 41.01-434.1 60.91C5.78 478.67 0 485.88 0 494.2 0 504 7.95 512 17.76 512h499.08c63.29.01 119.61-47.56 122.99-110.76 2.52-47.28-22.73-90.4-64.64-111.36zM489.18 66.25l45.65 11.41c-2.75 10.91-12.47 18.89-24.13 18.26-12.96-.71-25.85-12.53-21.52-29.67z“]},di={prefix:”fas“,iconName:”draw-polygon“,icon:[448,512,,”f5ee“,”M384 352c-.35 0-.67.1-1.02.1l-39.2-65.32c5.07-9.17 8.22-19.56 8.22-30.78s-3.14-21.61-8.22-30.78l39.2-65.32c.35.01.67.1 1.02.1 35.35 0 64-28.65 64-64s-28.65-64-64-64c-23.63 0-44.04 12.95-55.12 32H119.12C108.04 44.95 87.63 32 64 32 28.65 32 0 60.65 0 96c0 23.63 12.95 44.04 32 55.12v209.75C12.95 371.96 0 392.37 0 416c0 35.35 28.65 64 64 64 23.63 0 44.04-12.95 55.12-32h209.75c11.09 19.05 31.49 32 55.12 32 35.35 0 64-28.65 64-64 .01-35.35-28.64-64-63.99-64zm-288 8.88V151.12A63.825 63.825 0 0 0 119.12 128h208.36l-38.46 64.1c-.35-.01-.67-.1-1.02-.1-35.35 0-64 28.65-64 64s28.65 64 64 64c.35 0 .67-.1 1.02-.1l38.46 64.1H119.12A63.748 63.748 0 0 0 96 360.88zM272 256c0-8.82 7.18-16 16-16s16 7.18 16 16-7.18 16-16 16-16-7.18-16-16zM400 96c0 8.82-7.18 16-16 16s-16-7.18-16-16 7.18-16 16-16 16 7.18 16 16zM64 80c8.82 0 16 7.18 16 16s-7.18 16-16 16-16-7.18-16-16 7.18-16 16-16zM48 416c0-8.82 7.18-16 16-16s16 7.18 16 16-7.18 16-16 16-16-7.18-16-16zm336 16c-8.82 0-16-7.18-16-16s7.18-16 16-16 16 7.18 16 16-7.18 16-16 16z“]},pi={prefix:”fas“,iconName:”drum“,icon:[512,512,,”f569“,”M431.34 122.05l73.53-47.42a16 16 0 0 0 4.44-22.19l-8.87-13.31a16 16 0 0 0-22.19-4.44l-110.06 71C318.43 96.91 271.22 96 256 96 219.55 96 0 100.55 0 208.15v160.23c0 30.27 27.5 57.68 72 77.86v-101.9a24 24 0 1 1 48 0v118.93c33.05 9.11 71.07 15.06 112 16.73V376.39a24 24 0 1 1 48 0V480c40.93-1.67 78.95-7.62 112-16.73V344.34a24 24 0 1 1 48 0v101.9c44.5-20.18 72-47.59 72-77.86V208.15c0-43.32-35.76-69.76-80.66-86.1zM256 272.24c-114.88 0-208-28.69-208-64.09s93.12-64.08 208-64.08c17.15 0 33.73.71 49.68 1.91l-72.81 47a16 16 0 0 0-4.43 22.19l8.87 13.31a16 16 0 0 0 22.19 4.44l118.64-76.52C430.09 168 464 186.84 464 208.15c0 35.4-93.13 64.09-208 64.09z“]},mi={prefix:”fas“,iconName:”drum-steelpan“,icon:[576,512,,”f56a“,”M288 32C128.94 32 0 89.31 0 160v192c0 70.69 128.94 128 288 128s288-57.31 288-128V160c0-70.69-128.94-128-288-128zm-82.99 158.36c-4.45 16.61-14.54 30.57-28.31 40.48C100.23 217.46 48 190.78 48 160c0-30.16 50.11-56.39 124.04-70.03l25.6 44.34c9.86 17.09 12.48 36.99 7.37 56.05zM288 240c-21.08 0-41.41-1-60.89-2.7 8.06-26.13 32.15-45.3 60.89-45.3s52.83 19.17 60.89 45.3C329.41 239 309.08 240 288 240zm64-144c0 35.29-28.71 64-64 64s-64-28.71-64-64V82.96c20.4-1.88 41.8-2.96 64-2.96s43.6 1.08 64 2.96V96zm46.93 134.9c-13.81-9.91-23.94-23.9-28.4-40.54-5.11-19.06-2.49-38.96 7.38-56.04l25.65-44.42C477.72 103.5 528 129.79 528 160c0 30.83-52.4 57.54-129.07 70.9z“]},vi={prefix:”fas“,iconName:”drumstick-bite“,icon:[512,512,,”f6d7“,”M462.8 49.57a169.44 169.44 0 0 0-239.5 0C187.82 85 160.13 128 160.13 192v85.83l-40.62 40.59c-9.7 9.69-24 11.07-36.78 6a60.33 60.33 0 0 0-65 98.72C33 438.39 54.24 442.7 73.85 438.21c-4.5 19.6-.18 40.83 15.1 56.1a60.35 60.35 0 0 0 98.8-65c-5.09-12.73-3.72-27 6-36.75L234.36 352h85.89a187.87 187.87 0 0 0 61.89-10c-39.64-43.89-39.83-110.23 1.05-151.07 34.38-34.36 86.76-39.46 128.74-16.8 1.3-44.96-14.81-90.28-49.13-124.56z“]},gi={prefix:”fas“,iconName:”dumbbell“,icon:[640,512,,”f44b“,”M104 96H56c-13.3 0-24 10.7-24 24v104H8c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8h24v104c0 13.3 10.7 24 24 24h48c13.3 0 24-10.7 24-24V120c0-13.3-10.7-24-24-24zm528 128h-24V120c0-13.3-10.7-24-24-24h-48c-13.3 0-24 10.7-24 24v272c0 13.3 10.7 24 24 24h48c13.3 0 24-10.7 24-24V288h24c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8zM456 32h-48c-13.3 0-24 10.7-24 24v168H256V56c0-13.3-10.7-24-24-24h-48c-13.3 0-24 10.7-24 24v400c0 13.3 10.7 24 24 24h48c13.3 0 24-10.7 24-24V288h128v168c0 13.3 10.7 24 24 24h48c13.3 0 24-10.7 24-24V56c0-13.3-10.7-24-24-24z“]},yi={prefix:”fas“,iconName:”dumpster“,icon:[576,512,,”f793“,”M560 160c10.4 0 18-9.8 15.5-19.9l-24-96C549.7 37 543.3 32 536 32h-98.9l25.6 128H560zM272 32H171.5l-25.6 128H272V32zm132.5 0H304v128h126.1L404.5 32zM16 160h97.3l25.6-128H40c-7.3 0-13.7 5-15.5 12.1l-24 96C-2 150.2 5.6 160 16 160zm544 64h-20l4-32H32l4 32H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h28l20 160v16c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-16h320v16c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-16l20-160h28c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16z“]},bi={prefix:”fas“,iconName:”dumpster-fire“,icon:[640,512,,”f794“,”M418.7 104.1l.2-.2-14.4-72H304v128h60.8c16.2-19.3 34.2-38.2 53.9-55.8zM272 32H171.5l-25.6 128H272V32zm189.3 72.1c18.2 16.3 35.5 33.7 51.1 51.5 5.7-5.6 11.4-11.1 17.3-16.3l21.3-19 21.3 19c1.1.9 2.1 2.1 3.1 3.1-.1-.8.2-1.5 0-2.3l-24-96C549.7 37 543.3 32 536 32h-98.9l12.3 61.5 11.9 10.6zM16 160h97.3l25.6-128H40c-7.3 0-13.7 5-15.5 12.1l-24 96C-2 150.2 5.6 160 16 160zm324.6 32H32l4 32H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h28l20 160v16c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-16h208.8c-30.2-33.7-48.8-77.9-48.8-126.4 0-35.9 19.9-82.9 52.6-129.6zm210.5-28.8c-14.9 13.3-28.3 27.2-40.2 41.2-19.5-25.8-43.6-52-71-76.4-70.2 62.7-120 144.3-120 193.6 0 87.5 71.6 158.4 160 158.4s160-70.9 160-158.4c.1-36.6-37-112.2-88.8-158.4zm-18.6 229.4c-14.7 10.7-32.9 17-52.5 17-49 0-88.9-33.5-88.9-88 0-27.1 16.5-51 49.4-91.9 4.7 5.6 67.1 88.1 67.1 88.1l39.8-47c2.8 4.8 5.4 9.5 7.7 14 18.6 36.7 10.8 83.6-22.6 107.8z“]},wi={prefix:”fas“,iconName:”dungeon“,icon:[512,512,,”f6d9“,”M128.73 195.32l-82.81-51.76c-8.04-5.02-18.99-2.17-22.93 6.45A254.19 254.19 0 0 0 .54 239.28C-.05 248.37 7.59 256 16.69 256h97.13c7.96 0 14.08-6.25 15.01-14.16 1.09-9.33 3.24-18.33 6.24-26.94 2.56-7.34.25-15.46-6.34-19.58zM319.03 8C298.86 2.82 277.77 0 256 0s-42.86 2.82-63.03 8c-9.17 2.35-13.91 12.6-10.39 21.39l37.47 104.03A16.003 16.003 0 0 0 235.1 144h41.8c6.75 0 12.77-4.23 15.05-10.58l37.47-104.03c3.52-8.79-1.22-19.03-10.39-21.39zM112 288H16c-8.84 0-16 7.16-16 16v64c0 8.84 7.16 16 16 16h96c8.84 0 16-7.16 16-16v-64c0-8.84-7.16-16-16-16zm0 128H16c-8.84 0-16 7.16-16 16v64c0 8.84 7.16 16 16 16h96c8.84 0 16-7.16 16-16v-64c0-8.84-7.16-16-16-16zm77.31-283.67l-36.32-90.8c-3.53-8.83-14.13-12.99-22.42-8.31a257.308 257.308 0 0 0-71.61 59.89c-6.06 7.32-3.85 18.48 4.22 23.52l82.93 51.83c6.51 4.07 14.66 2.62 20.11-2.79 5.18-5.15 10.79-9.85 16.79-14.05 6.28-4.41 9.15-12.17 6.3-19.29zM398.18 256h97.13c9.1 0 16.74-7.63 16.15-16.72a254.135 254.135 0 0 0-22.45-89.27c-3.94-8.62-14.89-11.47-22.93-6.45l-82.81 51.76c-6.59 4.12-8.9 12.24-6.34 19.58 3.01 8.61 5.15 17.62 6.24 26.94.93 7.91 7.05 14.16 15.01 14.16zm54.85-162.89a257.308 257.308 0 0 0-71.61-59.89c-8.28-4.68-18.88-.52-22.42 8.31l-36.32 90.8c-2.85 7.12.02 14.88 6.3 19.28 6 4.2 11.61 8.9 16.79 14.05 5.44 5.41 13.6 6.86 20.11 2.79l82.93-51.83c8.07-5.03 10.29-16.19 4.22-23.51zM496 288h-96c-8.84 0-16 7.16-16 16v64c0 8.84 7.16 16 16 16h96c8.84 0 16-7.16 16-16v-64c0-8.84-7.16-16-16-16zm0 128h-96c-8.84 0-16 7.16-16 16v64c0 8.84 7.16 16 16 16h96c8.84 0 16-7.16 16-16v-64c0-8.84-7.16-16-16-16zM240 177.62V472c0 4.42 3.58 8 8 8h16c4.42 0 8-3.58 8-8V177.62c-5.23-.89-10.52-1.62-16-1.62s-10.77.73-16 1.62zm-64 41.51V472c0 4.42 3.58 8 8 8h16c4.42 0 8-3.58 8-8V189.36c-12.78 7.45-23.84 17.47-32 29.77zm128-29.77V472c0 4.42 3.58 8 8 8h16c4.42 0 8-3.58 8-8V219.13c-8.16-12.3-19.22-22.32-32-29.77z“]},xi={prefix:”fas“,iconName:”edit“,icon:[576,512,,”f044“,”M402.6 83.2l90.2 90.2c3.8 3.8 3.8 10 0 13.8L274.4 405.6l-92.8 10.3c-12.4 1.4-22.9-9.1-21.5-21.5l10.3-92.8L388.8 83.2c3.8-3.8 10-3.8 13.8 0zm162-22.9l-48.8-48.8c-15.2-15.2-39.9-15.2-55.2 0l-35.4 35.4c-3.8 3.8-3.8 10 0 13.8l90.2 90.2c3.8 3.8 10 3.8 13.8 0l35.4-35.4c15.2-15.3 15.2-40 0-55.2zM384 346.2V448H64V128h229.8c3.2 0 6.2-1.3 8.5-3.5l40-40c7.6-7.6 2.2-20.5-8.5-20.5H48C21.5 64 0 85.5 0 112v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V306.2c0-10.7-12.9-16-20.5-8.5l-40 40c-2.2 2.3-3.5 5.3-3.5 8.5z“]},Si={prefix:”fas“,iconName:”egg“,icon:[384,512,,”f7fb“,”M192 0C86 0 0 214 0 320s86 192 192 192 192-86 192-192S298 0 192 0z“]},ki={prefix:”fas“,iconName:”eject“,icon:[448,512,,”f052“,”M448 384v64c0 17.673-14.327 32-32 32H32c-17.673 0-32-14.327-32-32v-64c0-17.673 14.327-32 32-32h384c17.673 0 32 14.327 32 32zM48.053 320h351.886c41.651 0 63.581-49.674 35.383-80.435L259.383 47.558c-19.014-20.743-51.751-20.744-70.767 0L12.67 239.565C-15.475 270.268 6.324 320 48.053 320z“]},_i={prefix:”fas“,iconName:”ellipsis-h“,icon:[512,512,,”f141“,”M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z“]},zi={prefix:”fas“,iconName:”ellipsis-v“,icon:[192,512,,”f142“,”M96 184c39.8 0 72 32.2 72 72s-32.2 72-72 72-72-32.2-72-72 32.2-72 72-72zM24 80c0 39.8 32.2 72 72 72s72-32.2 72-72S135.8 8 96 8 24 40.2 24 80zm0 352c0 39.8 32.2 72 72 72s72-32.2 72-72-32.2-72-72-72-72 32.2-72 72z“]},Ci={prefix:”fas“,iconName:”envelope“,icon:[512,512,,”f0e0“,”M502.3 190.8c3.9-3.1 9.7-.2 9.7 4.7V400c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V195.6c0-5 5.7-7.8 9.7-4.7 22.4 17.4 52.1 39.5 154.1 113.6 21.1 15.4 56.7 47.8 92.2 47.6 35.7.3 72-32.8 92.3-47.6 102-74.1 131.6-96.3 154-113.7zM256 320c23.2.4 56.6-29.2 73.4-41.4 132.7-96.3 142.8-104.7 173.4-128.7 5.8-4.5 9.2-11.5 9.2-18.9v-19c0-26.5-21.5-48-48-48H48C21.5 64 0 85.5 0 112v19c0 7.4 3.4 14.3 9.2 18.9 30.6 23.9 40.7 32.4 173.4 128.7 16.8 12.2 50.2 41.8 73.4 41.4z“]},Mi={prefix:”fas“,iconName:”envelope-open“,icon:[512,512,,”f2b6“,”M512 464c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V200.724a48 48 0 0 1 18.387-37.776c24.913-19.529 45.501-35.365 164.2-121.511C199.412 29.17 232.797-.347 256 .003c23.198-.354 56.596 29.172 73.413 41.433 118.687 86.137 139.303 101.995 164.2 121.512A48 48 0 0 1 512 200.724V464zm-65.666-196.605c-2.563-3.728-7.7-4.595-11.339-1.907-22.845 16.873-55.462 40.705-105.582 77.079-16.825 12.266-50.21 41.781-73.413 41.43-23.211.344-56.559-29.143-73.413-41.43-50.114-36.37-82.734-60.204-105.582-77.079-3.639-2.688-8.776-1.821-11.339 1.907l-9.072 13.196a7.998 7.998 0 0 0 1.839 10.967c22.887 16.899 55.454 40.69 105.303 76.868 20.274 14.781 56.524 47.813 92.264 47.573 35.724.242 71.961-32.771 92.263-47.573 49.85-36.179 82.418-59.97 105.303-76.868a7.998 7.998 0 0 0 1.839-10.967l-9.071-13.196z“]},Oi={prefix:”fas“,iconName:”envelope-open-text“,icon:[512,512,,”f658“,”M176 216h160c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16H176c-8.84 0-16 7.16-16 16v16c0 8.84 7.16 16 16 16zm-16 80c0 8.84 7.16 16 16 16h160c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16H176c-8.84 0-16 7.16-16 16v16zm96 121.13c-16.42 0-32.84-5.06-46.86-15.19L0 250.86V464c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V250.86L302.86 401.94c-14.02 10.12-30.44 15.19-46.86 15.19zm237.61-254.18c-8.85-6.94-17.24-13.47-29.61-22.81V96c0-26.51-21.49-48-48-48h-77.55c-3.04-2.2-5.87-4.26-9.04-6.56C312.6 29.17 279.2-.35 256 0c-23.2-.35-56.59 29.17-73.41 41.44-3.17 2.3-6 4.36-9.04 6.56H96c-26.51 0-48 21.49-48 48v44.14c-12.37 9.33-20.76 15.87-29.61 22.81A47.995 47.995 0 0 0 0 200.72v10.65l96 69.35V96h320v184.72l96-69.35v-10.65c0-14.74-6.78-28.67-18.39-37.77z“]},Ti={prefix:”fas“,iconName:”envelope-square“,icon:[448,512,,”f199“,”M400 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48V80c0-26.51-21.49-48-48-48zM178.117 262.104C87.429 196.287 88.353 196.121 64 177.167V152c0-13.255 10.745-24 24-24h272c13.255 0 24 10.745 24 24v25.167c-24.371 18.969-23.434 19.124-114.117 84.938-10.5 7.655-31.392 26.12-45.883 25.894-14.503.218-35.367-18.227-45.883-25.895zM384 217.775V360c0 13.255-10.745 24-24 24H88c-13.255 0-24-10.745-24-24V217.775c13.958 10.794 33.329 25.236 95.303 70.214 14.162 10.341 37.975 32.145 64.694 32.01 26.887.134 51.037-22.041 64.72-32.025 61.958-44.965 81.325-59.406 95.283-70.199z“]},Ei={prefix:”fas“,iconName:”equals“,icon:[448,512,,”f52c“,”M416 304H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h384c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32zm0-192H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h384c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32z“]},Li={prefix:”fas“,iconName:”eraser“,icon:[512,512,,”f12d“,”M497.941 273.941c18.745-18.745 18.745-49.137 0-67.882l-160-160c-18.745-18.745-49.136-18.746-67.883 0l-256 256c-18.745 18.745-18.745 49.137 0 67.882l96 96A48.004 48.004 0 0 0 144 480h356c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12H355.883l142.058-142.059zm-302.627-62.627l137.373 137.373L265.373 416H150.628l-80-80 124.686-124.686z“]},Ai={prefix:”fas“,iconName:”ethernet“,icon:[512,512,,”f796“,”M496 192h-48v-48c0-8.8-7.2-16-16-16h-48V80c0-8.8-7.2-16-16-16H144c-8.8 0-16 7.2-16 16v48H80c-8.8 0-16 7.2-16 16v48H16c-8.8 0-16 7.2-16 16v224c0 8.8 7.2 16 16 16h80V320h32v128h64V320h32v128h64V320h32v128h64V320h32v128h80c8.8 0 16-7.2 16-16V208c0-8.8-7.2-16-16-16z“]},Ri={prefix:”fas“,iconName:”euro-sign“,icon:[320,512,,”f153“,”M310.706 413.765c-1.314-6.63-7.835-10.872-14.424-9.369-10.692 2.439-27.422 5.413-45.426 5.413-56.763 0-101.929-34.79-121.461-85.449h113.689a12 12 0 0 0 11.708-9.369l6.373-28.36c1.686-7.502-4.019-14.631-11.708-14.631H115.22c-1.21-14.328-1.414-28.287.137-42.245H261.95a12 12 0 0 0 11.723-9.434l6.512-29.755c1.638-7.484-4.061-14.566-11.723-14.566H130.184c20.633-44.991 62.69-75.03 117.619-75.03 14.486 0 28.564 2.25 37.851 4.145 6.216 1.268 12.347-2.498 14.002-8.623l11.991-44.368c1.822-6.741-2.465-13.616-9.326-14.917C290.217 34.912 270.71 32 249.635 32 152.451 32 74.03 92.252 45.075 176H12c-6.627 0-12 5.373-12 12v29.755c0 6.627 5.373 12 12 12h21.569c-1.009 13.607-1.181 29.287-.181 42.245H12c-6.627 0-12 5.373-12 12v28.36c0 6.627 5.373 12 12 12h30.114C67.139 414.692 145.264 480 249.635 480c26.301 0 48.562-4.544 61.101-7.788 6.167-1.595 10.027-7.708 8.788-13.957l-8.818-44.49z“]},Ni={prefix:”fas“,iconName:”exchange-alt“,icon:[512,512,,”f362“,”M0 168v-16c0-13.255 10.745-24 24-24h360V80c0-21.367 25.899-32.042 40.971-16.971l80 80c9.372 9.373 9.372 24.569 0 33.941l-80 80C409.956 271.982 384 261.456 384 240v-48H24c-13.255 0-24-10.745-24-24zm488 152H128v-48c0-21.314-25.862-32.08-40.971-16.971l-80 80c-9.372 9.373-9.372 24.569 0 33.941l80 80C102.057 463.997 128 453.437 128 432v-48h360c13.255 0 24-10.745 24-24v-16c0-13.255-10.745-24-24-24z“]},Hi={prefix:”fas“,iconName:”exclamation“,icon:[192,512,,”f12a“,”M176 432c0 44.112-35.888 80-80 80s-80-35.888-80-80 35.888-80 80-80 80 35.888 80 80zM25.26 25.199l13.6 272C39.499 309.972 50.041 320 62.83 320h66.34c12.789 0 23.331-10.028 23.97-22.801l13.6-272C167.425 11.49 156.496 0 142.77 0H49.23C35.504 0 24.575 11.49 25.26 25.199z“]},Pi={prefix:”fas“,iconName:”exclamation-circle“,icon:[512,512,,”f06a“,”M504 256c0 136.997-111.043 248-248 248S8 392.997 8 256C8 119.083 119.043 8 256 8s248 111.083 248 248zm-248 50c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z“]},ji={prefix:”fas“,iconName:”exclamation-triangle“,icon:[576,512,,”f071“,”M569.517 440.013C587.975 472.007 564.806 512 527.94 512H48.054c-36.937 0-59.999-40.055-41.577-71.987L246.423 23.985c18.467-32.009 64.72-31.951 83.154 0l239.94 416.028zM288 354c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z“]},Vi={prefix:”fas“,iconName:”expand“,icon:[448,512,,”f065“,”M0 180V56c0-13.3 10.7-24 24-24h124c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12H64v84c0 6.6-5.4 12-12 12H12c-6.6 0-12-5.4-12-12zM288 44v40c0 6.6 5.4 12 12 12h84v84c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12V56c0-13.3-10.7-24-24-24H300c-6.6 0-12 5.4-12 12zm148 276h-40c-6.6 0-12 5.4-12 12v84h-84c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h124c13.3 0 24-10.7 24-24V332c0-6.6-5.4-12-12-12zM160 468v-40c0-6.6-5.4-12-12-12H64v-84c0-6.6-5.4-12-12-12H12c-6.6 0-12 5.4-12 12v124c0 13.3 10.7 24 24 24h124c6.6 0 12-5.4 12-12z“]},Di={prefix:”fas“,iconName:”expand-alt“,icon:[448,512,,”f424“,”M212.686 315.314L120 408l32.922 31.029c15.12 15.12 4.412 40.971-16.97 40.971h-112C10.697 480 0 469.255 0 456V344c0-21.382 25.803-32.09 40.922-16.971L72 360l92.686-92.686c6.248-6.248 16.379-6.248 22.627 0l25.373 25.373c6.249 6.248 6.249 16.378 0 22.627zm22.628-118.628L328 104l-32.922-31.029C279.958 57.851 290.666 32 312.048 32h112C437.303 32 448 42.745 448 56v112c0 21.382-25.803 32.09-40.922 16.971L376 152l-92.686 92.686c-6.248 6.248-16.379 6.248-22.627 0l-25.373-25.373c-6.249-6.248-6.249-16.378 0-22.627z“]},Ii={prefix:”fas“,iconName:”expand-arrows-alt“,icon:[448,512,,”f31e“,”M448 344v112a23.94 23.94 0 0 1-24 24H312c-21.39 0-32.09-25.9-17-41l36.2-36.2L224 295.6 116.77 402.9 153 439c15.09 15.1 4.39 41-17 41H24a23.94 23.94 0 0 1-24-24V344c0-21.4 25.89-32.1 41-17l36.19 36.2L184.46 256 77.18 148.7 41 185c-15.1 15.1-41 4.4-41-17V56a23.94 23.94 0 0 1 24-24h112c21.39 0 32.09 25.9 17 41l-36.2 36.2L224 216.4l107.23-107.3L295 73c-15.09-15.1-4.39-41 17-41h112a23.94 23.94 0 0 1 24 24v112c0 21.4-25.89 32.1-41 17l-36.19-36.2L263.54 256l107.28 107.3L407 327.1c15.1-15.2 41-4.5 41 16.9z“]},Fi={prefix:”fas“,iconName:”external-link-alt“,icon:[512,512,,”f35d“,”M432,320H400a16,16,0,0,0-16,16V448H64V128H208a16,16,0,0,0,16-16V80a16,16,0,0,0-16-16H48A48,48,0,0,0,0,112V464a48,48,0,0,0,48,48H400a48,48,0,0,0,48-48V336A16,16,0,0,0,432,320ZM488,0h-128c-21.37,0-32.05,25.91-17,41l35.73,35.73L135,320.37a24,24,0,0,0,0,34L157.67,377a24,24,0,0,0,34,0L435.28,133.32,471,169c15,15,41,4.5,41-17V24A24,24,0,0,0,488,0Z“]},Bi={prefix:”fas“,iconName:”external-link-square-alt“,icon:[448,512,,”f360“,”M448 80v352c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V80c0-26.51 21.49-48 48-48h352c26.51 0 48 21.49 48 48zm-88 16H248.029c-21.313 0-32.08 25.861-16.971 40.971l31.984 31.987L67.515 364.485c-4.686 4.686-4.686 12.284 0 16.971l31.029 31.029c4.687 4.686 12.285 4.686 16.971 0l195.526-195.526 31.988 31.991C358.058 263.977 384 253.425 384 231.979V120c0-13.255-10.745-24-24-24z“]},Ui={prefix:”fas“,iconName:”eye“,icon:[576,512,,”f06e“,”M572.52 241.4C518.29 135.59 410.93 64 288 64S57.68 135.64 3.48 241.41a32.35 32.35 0 0 0 0 29.19C57.71 376.41 165.07 448 288 448s230.32-71.64 284.52-177.41a32.35 32.35 0 0 0 0-29.19zM288 400a144 144 0 1 1 144-144 143.93 143.93 0 0 1-144 144zm0-240a95.31 95.31 0 0 0-25.31 3.79 47.85 47.85 0 0 1-66.9 66.9A95.78 95.78 0 1 0 288 160z“]},qi={prefix:”fas“,iconName:”eye-dropper“,icon:[512,512,,”f1fb“,”M50.75 333.25c-12 12-18.75 28.28-18.75 45.26V424L0 480l32 32 56-32h45.49c16.97 0 33.25-6.74 45.25-18.74l126.64-126.62-128-128L50.75 333.25zM483.88 28.12c-37.47-37.5-98.28-37.5-135.75 0l-77.09 77.09-13.1-13.1c-9.44-9.44-24.65-9.31-33.94 0l-40.97 40.97c-9.37 9.37-9.37 24.57 0 33.94l161.94 161.94c9.44 9.44 24.65 9.31 33.94 0L419.88 288c9.37-9.37 9.37-24.57 0-33.94l-13.1-13.1 77.09-77.09c37.51-37.48 37.51-98.26.01-135.75z“]},Gi={prefix:”fas“,iconName:”eye-slash“,icon:[640,512,,”f070“,”M320 400c-75.85 0-137.25-58.71-142.9-133.11L72.2 185.82c-13.79 17.3-26.48 35.59-36.72 55.59a32.35 32.35 0 0 0 0 29.19C89.71 376.41 197.07 448 320 448c26.91 0 52.87-4 77.89-10.46L346 397.39a144.13 144.13 0 0 1-26 2.61zm313.82 58.1l-110.55-85.44a331.25 331.25 0 0 0 81.25-102.07 32.35 32.35 0 0 0 0-29.19C550.29 135.59 442.93 64 320 64a308.15 308.15 0 0 0-147.32 37.7L45.46 3.37A16 16 0 0 0 23 6.18L3.37 31.45A16 16 0 0 0 6.18 53.9l588.36 454.73a16 16 0 0 0 22.46-2.81l19.64-25.27a16 16 0 0 0-2.82-22.45zm-183.72-142l-39.3-30.38A94.75 94.75 0 0 0 416 256a94.76 94.76 0 0 0-121.31-92.21A47.65 47.65 0 0 1 304 192a46.64 46.64 0 0 1-1.54 10l-73.61-56.89A142.31 142.31 0 0 1 320 112a143.92 143.92 0 0 1 144 144c0 21.63-5.29 41.79-13.9 60.11z“]},Wi={prefix:”fas“,iconName:”fan“,icon:[512,512,,”f863“,”M352.57 128c-28.09 0-54.09 4.52-77.06 12.86l12.41-123.11C289 7.31 279.81-1.18 269.33.13 189.63 10.13 128 77.64 128 159.43c0 28.09 4.52 54.09 12.86 77.06L17.75 224.08C7.31 223-1.18 232.19.13 242.67c10 79.7 77.51 141.33 159.3 141.33 28.09 0 54.09-4.52 77.06-12.86l-12.41 123.11c-1.05 10.43 8.11 18.93 18.59 17.62 79.7-10 141.33-77.51 141.33-159.3 0-28.09-4.52-54.09-12.86-77.06l123.11 12.41c10.44 1.05 18.93-8.11 17.62-18.59-10-79.7-77.51-141.33-159.3-141.33zM256 288a32 32 0 1 1 32-32 32 32 0 0 1-32 32z“]},Zi={prefix:”fas“,iconName:”fast-backward“,icon:[512,512,,”f049“,”M0 436V76c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v151.9L235.5 71.4C256.1 54.3 288 68.6 288 96v131.9L459.5 71.4C480.1 54.3 512 68.6 512 96v320c0 27.4-31.9 41.7-52.5 24.6L288 285.3V416c0 27.4-31.9 41.7-52.5 24.6L64 285.3V436c0 6.6-5.4 12-12 12H12c-6.6 0-12-5.4-12-12z“]},$i={prefix:”fas“,iconName:”fast-forward“,icon:[512,512,,”f050“,”M512 76v360c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12V284.1L276.5 440.6c-20.6 17.2-52.5 2.8-52.5-24.6V284.1L52.5 440.6C31.9 457.8 0 443.4 0 416V96c0-27.4 31.9-41.7 52.5-24.6L224 226.8V96c0-27.4 31.9-41.7 52.5-24.6L448 226.8V76c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12z“]},Ji={prefix:”fas“,iconName:”faucet“,icon:[512,512,,”e005“,”M352,256H313.39c-15.71-13.44-35.46-23.07-57.39-28V180.44l-32-3.38-32,3.38V228c-21.93,5-41.68,14.6-57.39,28H16A16,16,0,0,0,0,272v96a16,16,0,0,0,16,16h92.79C129.38,421.73,173,448,224,448s94.62-26.27,115.21-64H352a32,32,0,0,1,32,32,32,32,0,0,0,32,32h64a32,32,0,0,0,32-32A160,160,0,0,0,352,256ZM81.59,159.91l142.41-15,142.41,15c9.42,1,17.59-6.81,17.59-16.8V112.89c0-10-8.17-17.8-17.59-16.81L256,107.74V80a16,16,0,0,0-16-16H208a16,16,0,0,0-16,16v27.74L81.59,96.08C72.17,95.09,64,102.9,64,112.89v30.22C64,153.1,72.17,160.91,81.59,159.91Z“]},Ki={prefix:”fas“,iconName:”fax“,icon:[512,512,,”f1ac“,”M480 160V77.25a32 32 0 0 0-9.38-22.63L425.37 9.37A32 32 0 0 0 402.75 0H160a32 32 0 0 0-32 32v448a32 32 0 0 0 32 32h320a32 32 0 0 0 32-32V192a32 32 0 0 0-32-32zM288 432a16 16 0 0 1-16 16h-32a16 16 0 0 1-16-16v-32a16 16 0 0 1 16-16h32a16 16 0 0 1 16 16zm0-128a16 16 0 0 1-16 16h-32a16 16 0 0 1-16-16v-32a16 16 0 0 1 16-16h32a16 16 0 0 1 16 16zm128 128a16 16 0 0 1-16 16h-32a16 16 0 0 1-16-16v-32a16 16 0 0 1 16-16h32a16 16 0 0 1 16 16zm0-128a16 16 0 0 1-16 16h-32a16 16 0 0 1-16-16v-32a16 16 0 0 1 16-16h32a16 16 0 0 1 16 16zm0-112H192V64h160v48a16 16 0 0 0 16 16h48zM64 128H32a32 32 0 0 0-32 32v320a32 32 0 0 0 32 32h32a32 32 0 0 0 32-32V160a32 32 0 0 0-32-32z“]},Qi={prefix:”fas“,iconName:”feather“,icon:[512,512,,”f52d“,”M467.14 44.84c-62.55-62.48-161.67-64.78-252.28 25.73-78.61 78.52-60.98 60.92-85.75 85.66-60.46 60.39-70.39 150.83-63.64 211.17l178.44-178.25c6.26-6.25 16.4-6.25 22.65 0s6.25 16.38 0 22.63L7.04 471.03c-9.38 9.37-9.38 24.57 0 33.94 9.38 9.37 24.6 9.37 33.98 0l66.1-66.03C159.42 454.65 279 457.11 353.95 384h-98.19l147.57-49.14c49.99-49.93 36.38-36.18 46.31-46.86h-97.78l131.54-43.8c45.44-74.46 34.31-148.84-16.26-199.36z“]},Yi={prefix:”fas“,iconName:”feather-alt“,icon:[512,512,,”f56b“,”M512 0C460.22 3.56 96.44 38.2 71.01 287.61c-3.09 26.66-4.84 53.44-5.99 80.24l178.87-178.69c6.25-6.25 16.4-6.25 22.65 0s6.25 16.38 0 22.63L7.04 471.03c-9.38 9.37-9.38 24.57 0 33.94 9.38 9.37 24.59 9.37 33.98 0l57.13-57.07c42.09-.14 84.15-2.53 125.96-7.36 53.48-5.44 97.02-26.47 132.58-56.54H255.74l146.79-48.88c11.25-14.89 21.37-30.71 30.45-47.12h-81.14l106.54-53.21C500.29 132.86 510.19 26.26 512 0z“]},Xi={prefix:”fas“,iconName:”female“,icon:[256,512,,”f182“,”M128 0c35.346 0 64 28.654 64 64s-28.654 64-64 64c-35.346 0-64-28.654-64-64S92.654 0 128 0m119.283 354.179l-48-192A24 24 0 0 0 176 144h-11.36c-22.711 10.443-49.59 10.894-73.28 0H80a24 24 0 0 0-23.283 18.179l-48 192C4.935 369.305 16.383 384 32 384h56v104c0 13.255 10.745 24 24 24h32c13.255 0 24-10.745 24-24V384h56c15.591 0 27.071-14.671 23.283-29.821z“]},ea={prefix:”fas“,iconName:”fighter-jet“,icon:[640,512,,”f0fb“,”M544 224l-128-16-48-16h-24L227.158 44h39.509C278.333 44 288 41.375 288 38s-9.667-6-21.333-6H152v12h16v164h-48l-66.667-80H18.667L8 138.667V208h8v16h48v2.666l-64 8v42.667l64 8V288H16v16H8v69.333L18.667 384h34.667L120 304h48v164h-16v12h114.667c11.667 0 21.333-2.625 21.333-6s-9.667-6-21.333-6h-39.509L344 320h24l48-16 128-16c96-21.333 96-26.583 96-32 0-5.417 0-10.667-96-32z“]},ta={prefix:”fas“,iconName:”file“,icon:[384,512,,”f15b“,”M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm160-14.1v6.1H256V0h6.1c6.4 0 12.5 2.5 17 7l97.9 98c4.5 4.5 7 10.6 7 16.9z“]},na={prefix:”fas“,iconName:”file-alt“,icon:[384,512,,”f15c“,”M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm64 236c0 6.6-5.4 12-12 12H108c-6.6 0-12-5.4-12-12v-8c0-6.6 5.4-12 12-12h168c6.6 0 12 5.4 12 12v8zm0-64c0 6.6-5.4 12-12 12H108c-6.6 0-12-5.4-12-12v-8c0-6.6 5.4-12 12-12h168c6.6 0 12 5.4 12 12v8zm0-72v8c0 6.6-5.4 12-12 12H108c-6.6 0-12-5.4-12-12v-8c0-6.6 5.4-12 12-12h168c6.6 0 12 5.4 12 12zm96-114.1v6.1H256V0h6.1c6.4 0 12.5 2.5 17 7l97.9 98c4.5 4.5 7 10.6 7 16.9z“]},ra={prefix:”fas“,iconName:”file-archive“,icon:[384,512,,”f1c6“,”M377 105L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128v-6.1c0-6.3-2.5-12.4-7-16.9zM128.4 336c-17.9 0-32.4 12.1-32.4 27 0 15 14.6 27 32.5 27s32.4-12.1 32.4-27-14.6-27-32.5-27zM224 136V0h-63.6v32h-32V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zM95.9 32h32v32h-32zm32.3 384c-33.2 0-58-30.4-51.4-62.9L96.4 256v-32h32v-32h-32v-32h32v-32h-32V96h32V64h32v32h-32v32h32v32h-32v32h32v32h-32v32h22.1c5.7 0 10.7 4.1 11.8 9.7l17.3 87.7c6.4 32.4-18.4 62.6-51.4 62.6z“]},ia={prefix:”fas“,iconName:”file-audio“,icon:[384,512,,”f1c7“,”M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm-64 268c0 10.7-12.9 16-20.5 8.5L104 376H76c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h28l35.5-36.5c7.6-7.6 20.5-2.2 20.5 8.5v136zm33.2-47.6c9.1-9.3 9.1-24.1 0-33.4-22.1-22.8 12.2-56.2 34.4-33.5 27.2 27.9 27.2 72.4 0 100.4-21.8 22.3-56.9-10.4-34.4-33.5zm86-117.1c54.4 55.9 54.4 144.8 0 200.8-21.8 22.4-57-10.3-34.4-33.5 36.2-37.2 36.3-96.5 0-133.8-22.1-22.8 12.3-56.3 34.4-33.5zM384 121.9v6.1H256V0h6.1c6.4 0 12.5 2.5 17 7l97.9 98c4.5 4.5 7 10.6 7 16.9z“]},aa={prefix:”fas“,iconName:”file-code“,icon:[384,512,,”f1c9“,”M384 121.941V128H256V0h6.059c6.365 0 12.47 2.529 16.971 7.029l97.941 97.941A24.005 24.005 0 0 1 384 121.941zM248 160c-13.2 0-24-10.8-24-24V0H24C10.745 0 0 10.745 0 24v464c0 13.255 10.745 24 24 24h336c13.255 0 24-10.745 24-24V160H248zM123.206 400.505a5.4 5.4 0 0 1-7.633.246l-64.866-60.812a5.4 5.4 0 0 1 0-7.879l64.866-60.812a5.4 5.4 0 0 1 7.633.246l19.579 20.885a5.4 5.4 0 0 1-.372 7.747L101.65 336l40.763 35.874a5.4 5.4 0 0 1 .372 7.747l-19.579 20.884zm51.295 50.479l-27.453-7.97a5.402 5.402 0 0 1-3.681-6.692l61.44-211.626a5.402 5.402 0 0 1 6.692-3.681l27.452 7.97a5.4 5.4 0 0 1 3.68 6.692l-61.44 211.626a5.397 5.397 0 0 1-6.69 3.681zm160.792-111.045l-64.866 60.812a5.4 5.4 0 0 1-7.633-.246l-19.58-20.885a5.4 5.4 0 0 1 .372-7.747L284.35 336l-40.763-35.874a5.4 5.4 0 0 1-.372-7.747l19.58-20.885a5.4 5.4 0 0 1 7.633-.246l64.866 60.812a5.4 5.4 0 0 1-.001 7.879z“]},oa={prefix:”fas“,iconName:”file-contract“,icon:[384,512,,”f56c“,”M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zM64 72c0-4.42 3.58-8 8-8h80c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8V72zm0 64c0-4.42 3.58-8 8-8h80c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8v-16zm192.81 248H304c8.84 0 16 7.16 16 16s-7.16 16-16 16h-47.19c-16.45 0-31.27-9.14-38.64-23.86-2.95-5.92-8.09-6.52-10.17-6.52s-7.22.59-10.02 6.19l-7.67 15.34a15.986 15.986 0 0 1-14.31 8.84c-.38 0-.75-.02-1.14-.05-6.45-.45-12-4.75-14.03-10.89L144 354.59l-10.61 31.88c-5.89 17.66-22.38 29.53-41 29.53H80c-8.84 0-16-7.16-16-16s7.16-16 16-16h12.39c4.83 0 9.11-3.08 10.64-7.66l18.19-54.64c3.3-9.81 12.44-16.41 22.78-16.41s19.48 6.59 22.77 16.41l13.88 41.64c19.77-16.19 54.05-9.7 66 14.16 2.02 4.06 5.96 6.5 10.16 6.5zM377 105L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128v-6.1c0-6.3-2.5-12.4-7-16.9z“]},ca={prefix:”fas“,iconName:”file-csv“,icon:[384,512,,”f6dd“,”M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm-96 144c0 4.42-3.58 8-8 8h-8c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h8c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8h-8c-26.51 0-48-21.49-48-48v-32c0-26.51 21.49-48 48-48h8c4.42 0 8 3.58 8 8v16zm44.27 104H160c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h12.27c5.95 0 10.41-3.5 10.41-6.62 0-1.3-.75-2.66-2.12-3.84l-21.89-18.77c-8.47-7.22-13.33-17.48-13.33-28.14 0-21.3 19.02-38.62 42.41-38.62H200c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8h-12.27c-5.95 0-10.41 3.5-10.41 6.62 0 1.3.75 2.66 2.12 3.84l21.89 18.77c8.47 7.22 13.33 17.48 13.33 28.14.01 21.29-19 38.62-42.39 38.62zM256 264v20.8c0 20.27 5.7 40.17 16 56.88 10.3-16.7 16-36.61 16-56.88V264c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v20.8c0 35.48-12.88 68.89-36.28 94.09-3.02 3.25-7.27 5.11-11.72 5.11s-8.7-1.86-11.72-5.11c-23.4-25.2-36.28-58.61-36.28-94.09V264c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8zm121-159L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128v-6.1c0-6.3-2.5-12.4-7-16.9z“]},sa={prefix:”fas“,iconName:”file-download“,icon:[384,512,,”f56d“,”M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm76.45 211.36l-96.42 95.7c-6.65 6.61-17.39 6.61-24.04 0l-96.42-95.7C73.42 337.29 80.54 320 94.82 320H160v-80c0-8.84 7.16-16 16-16h32c8.84 0 16 7.16 16 16v80h65.18c14.28 0 21.4 17.29 11.27 27.36zM377 105L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128v-6.1c0-6.3-2.5-12.4-7-16.9z“]},ua={prefix:”fas“,iconName:”file-excel“,icon:[384,512,,”f1c3“,”M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm60.1 106.5L224 336l60.1 93.5c5.1 8-.6 18.5-10.1 18.5h-34.9c-4.4 0-8.5-2.4-10.6-6.3C208.9 405.5 192 373 192 373c-6.4 14.8-10 20-36.6 68.8-2.1 3.9-6.1 6.3-10.5 6.3H110c-9.5 0-15.2-10.5-10.1-18.5l60.3-93.5-60.3-93.5c-5.2-8 .6-18.5 10.1-18.5h34.8c4.4 0 8.5 2.4 10.6 6.3 26.1 48.8 20 33.6 36.6 68.5 0 0 6.1-11.7 36.6-68.5 2.1-3.9 6.2-6.3 10.6-6.3H274c9.5-.1 15.2 10.4 10.1 18.4zM384 121.9v6.1H256V0h6.1c6.4 0 12.5 2.5 17 7l97.9 98c4.5 4.5 7 10.6 7 16.9z“]},la={prefix:”fas“,iconName:”file-export“,icon:[576,512,,”f56e“,”M384 121.9c0-6.3-2.5-12.4-7-16.9L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128zM571 308l-95.7-96.4c-10.1-10.1-27.4-3-27.4 11.3V288h-64v64h64v65.2c0 14.3 17.3 21.4 27.4 11.3L571 332c6.6-6.6 6.6-17.4 0-24zm-379 28v-32c0-8.8 7.2-16 16-16h176V160H248c-13.2 0-24-10.8-24-24V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V352H208c-8.8 0-16-7.2-16-16z“]},fa={prefix:”fas“,iconName:”file-image“,icon:[384,512,,”f1c5“,”M384 121.941V128H256V0h6.059a24 24 0 0 1 16.97 7.029l97.941 97.941a24.002 24.002 0 0 1 7.03 16.971zM248 160c-13.2 0-24-10.8-24-24V0H24C10.745 0 0 10.745 0 24v464c0 13.255 10.745 24 24 24h336c13.255 0 24-10.745 24-24V160H248zm-135.455 16c26.51 0 48 21.49 48 48s-21.49 48-48 48-48-21.49-48-48 21.491-48 48-48zm208 240h-256l.485-48.485L104.545 328c4.686-4.686 11.799-4.201 16.485.485L160.545 368 264.06 264.485c4.686-4.686 12.284-4.686 16.971 0L320.545 304v112z“]},ha={prefix:”fas“,iconName:”file-import“,icon:[512,512,,”f56f“,”M16 288c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h112v-64zm489-183L407.1 7c-4.5-4.5-10.6-7-17-7H384v128h128v-6.1c0-6.3-2.5-12.4-7-16.9zm-153 31V0H152c-13.3 0-24 10.7-24 24v264h128v-65.2c0-14.3 17.3-21.4 27.4-11.3L379 308c6.6 6.7 6.6 17.4 0 24l-95.7 96.4c-10.1 10.1-27.4 3-27.4-11.3V352H128v136c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H376c-13.2 0-24-10.8-24-24z“]},da={prefix:”fas“,iconName:”file-invoice“,icon:[384,512,,”f570“,”M288 256H96v64h192v-64zm89-151L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128v-6.1c0-6.3-2.5-12.4-7-16.9zm-153 31V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zM64 72c0-4.42 3.58-8 8-8h80c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8V72zm0 64c0-4.42 3.58-8 8-8h80c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8v-16zm256 304c0 4.42-3.58 8-8 8h-80c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h80c4.42 0 8 3.58 8 8v16zm0-200v96c0 8.84-7.16 16-16 16H80c-8.84 0-16-7.16-16-16v-96c0-8.84 7.16-16 16-16h224c8.84 0 16 7.16 16 16z“]},pa={prefix:”fas“,iconName:”file-invoice-dollar“,icon:[384,512,,”f571“,”M377 105L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128v-6.1c0-6.3-2.5-12.4-7-16.9zm-153 31V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zM64 72c0-4.42 3.58-8 8-8h80c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8V72zm0 80v-16c0-4.42 3.58-8 8-8h80c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8zm144 263.88V440c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-24.29c-11.29-.58-22.27-4.52-31.37-11.35-3.9-2.93-4.1-8.77-.57-12.14l11.75-11.21c2.77-2.64 6.89-2.76 10.13-.73 3.87 2.42 8.26 3.72 12.82 3.72h28.11c6.5 0 11.8-5.92 11.8-13.19 0-5.95-3.61-11.19-8.77-12.73l-45-13.5c-18.59-5.58-31.58-23.42-31.58-43.39 0-24.52 19.05-44.44 42.67-45.07V232c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v24.29c11.29.58 22.27 4.51 31.37 11.35 3.9 2.93 4.1 8.77.57 12.14l-11.75 11.21c-2.77 2.64-6.89 2.76-10.13.73-3.87-2.43-8.26-3.72-12.82-3.72h-28.11c-6.5 0-11.8 5.92-11.8 13.19 0 5.95 3.61 11.19 8.77 12.73l45 13.5c18.59 5.58 31.58 23.42 31.58 43.39 0 24.53-19.05 44.44-42.67 45.07z“]},ma={prefix:”fas“,iconName:”file-medical“,icon:[384,512,,”f477“,”M377 105L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128v-6.1c0-6.3-2.5-12.4-7-16.9zm-153 31V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm64 160v48c0 4.4-3.6 8-8 8h-56v56c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8v-56h-56c-4.4 0-8-3.6-8-8v-48c0-4.4 3.6-8 8-8h56v-56c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v56h56c4.4 0 8 3.6 8 8z“]},va={prefix:”fas“,iconName:”file-medical-alt“,icon:[448,512,,”f478“,”M288 136V0H88C74.7 0 64 10.7 64 24v232H8c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8h140.9c3 0 5.8 1.7 7.2 4.4l19.9 39.8 56.8-113.7c2.9-5.9 11.4-5.9 14.3 0l34.7 69.5H352c8.8 0 16 7.2 16 16s-7.2 16-16 16h-89.9L240 275.8l-56.8 113.7c-2.9 5.9-11.4 5.9-14.3 0L134.1 320H64v168c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H312c-13.2 0-24-10.8-24-24zm153-31L343.1 7c-4.5-4.5-10.6-7-17-7H320v128h128v-6.1c0-6.3-2.5-12.4-7-16.9z“]},ga={prefix:”fas“,iconName:”file-pdf“,icon:[384,512,,”f1c1“,”M181.9 256.1c-5-16-4.9-46.9-2-46.9 8.4 0 7.6 36.9 2 46.9zm-1.7 47.2c-7.7 20.2-17.3 43.3-28.4 62.7 18.3-7 39-17.2 62.9-21.9-12.7-9.6-24.9-23.4-34.5-40.8zM86.1 428.1c0 .8 13.2-5.4 34.9-40.2-6.7 6.3-29.1 24.5-34.9 40.2zM248 160h136v328c0 13.3-10.7 24-24 24H24c-13.3 0-24-10.7-24-24V24C0 10.7 10.7 0 24 0h200v136c0 13.2 10.8 24 24 24zm-8 171.8c-20-12.2-33.3-29-42.7-53.8 4.5-18.5 11.6-46.6 6.2-64.2-4.7-29.4-42.4-26.5-47.8-6.8-5 18.3-.4 44.1 8.1 77-11.6 27.6-28.7 64.6-40.8 85.8-.1 0-.1.1-.2.1-27.1 13.9-73.6 44.5-54.5 68 5.6 6.9 16 10 21.5 10 17.9 0 35.7-18 61.1-61.8 25.8-8.5 54.1-19.1 79-23.2 21.7 11.8 47.1 19.5 64 19.5 29.2 0 31.2-32 19.7-43.4-13.9-13.6-54.3-9.7-73.6-7.2zM377 105L279 7c-4.5-4.5-10.6-7-17-7h-6v128h128v-6.1c0-6.3-2.5-12.4-7-16.9zm-74.1 255.3c4.1-2.7-2.5-11.9-42.8-9 37.1 15.8 42.8 9 42.8 9z“]},ya={prefix:”fas“,iconName:”file-powerpoint“,icon:[384,512,,”f1c4“,”M193.7 271.2c8.8 0 15.5 2.7 20.3 8.1 9.6 10.9 9.8 32.7-.2 44.1-4.9 5.6-11.9 8.5-21.1 8.5h-26.9v-60.7h27.9zM377 105L279 7c-4.5-4.5-10.6-7-17-7h-6v128h128v-6.1c0-6.3-2.5-12.4-7-16.9zm-153 31V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm53 165.2c0 90.3-88.8 77.6-111.1 77.6V436c0 6.6-5.4 12-12 12h-30.8c-6.6 0-12-5.4-12-12V236.2c0-6.6 5.4-12 12-12h81c44.5 0 72.9 32.8 72.9 77z“]},ba={prefix:”fas“,iconName:”file-prescription“,icon:[384,512,,”f572“,”M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm68.53 179.48l11.31 11.31c6.25 6.25 6.25 16.38 0 22.63l-29.9 29.9L304 409.38c6.25 6.25 6.25 16.38 0 22.63l-11.31 11.31c-6.25 6.25-16.38 6.25-22.63 0L240 413.25l-30.06 30.06c-6.25 6.25-16.38 6.25-22.63 0L176 432c-6.25-6.25-6.25-16.38 0-22.63l30.06-30.06L146.74 320H128v48c0 8.84-7.16 16-16 16H96c-8.84 0-16-7.16-16-16V208c0-8.84 7.16-16 16-16h80c35.35 0 64 28.65 64 64 0 24.22-13.62 45.05-33.46 55.92L240 345.38l29.9-29.9c6.25-6.25 16.38-6.25 22.63 0zM176 272h-48v-32h48c8.82 0 16 7.18 16 16s-7.18 16-16 16zm208-150.1v6.1H256V0h6.1c6.4 0 12.5 2.5 17 7l97.9 98c4.5 4.5 7 10.6 7 16.9z“]},wa={prefix:”fas“,iconName:”file-signature“,icon:[576,512,,”f573“,”M218.17 424.14c-2.95-5.92-8.09-6.52-10.17-6.52s-7.22.59-10.02 6.19l-7.67 15.34c-6.37 12.78-25.03 11.37-29.48-2.09L144 386.59l-10.61 31.88c-5.89 17.66-22.38 29.53-41 29.53H80c-8.84 0-16-7.16-16-16s7.16-16 16-16h12.39c4.83 0 9.11-3.08 10.64-7.66l18.19-54.64c3.3-9.81 12.44-16.41 22.78-16.41s19.48 6.59 22.77 16.41l13.88 41.64c19.75-16.19 54.06-9.7 66 14.16 1.89 3.78 5.49 5.95 9.36 6.26v-82.12l128-127.09V160H248c-13.2 0-24-10.8-24-24V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24v-40l-128-.11c-16.12-.31-30.58-9.28-37.83-23.75zM384 121.9c0-6.3-2.5-12.4-7-16.9L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128v-6.1zm-96 225.06V416h68.99l161.68-162.78-67.88-67.88L288 346.96zm280.54-179.63l-31.87-31.87c-9.94-9.94-26.07-9.94-36.01 0l-27.25 27.25 67.88 67.88 27.25-27.25c9.95-9.94 9.95-26.07 0-36.01z“]},xa={prefix:”fas“,iconName:”file-upload“,icon:[384,512,,”f574“,”M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm65.18 216.01H224v80c0 8.84-7.16 16-16 16h-32c-8.84 0-16-7.16-16-16v-80H94.82c-14.28 0-21.41-17.29-11.27-27.36l96.42-95.7c6.65-6.61 17.39-6.61 24.04 0l96.42 95.7c10.15 10.07 3.03 27.36-11.25 27.36zM377 105L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128v-6.1c0-6.3-2.5-12.4-7-16.9z“]},Sa={prefix:”fas“,iconName:”file-video“,icon:[384,512,,”f1c8“,”M384 121.941V128H256V0h6.059c6.365 0 12.47 2.529 16.971 7.029l97.941 97.941A24.005 24.005 0 0 1 384 121.941zM224 136V0H24C10.745 0 0 10.745 0 24v464c0 13.255 10.745 24 24 24h336c13.255 0 24-10.745 24-24V160H248c-13.2 0-24-10.8-24-24zm96 144.016v111.963c0 21.445-25.943 31.998-40.971 16.971L224 353.941V392c0 13.255-10.745 24-24 24H88c-13.255 0-24-10.745-24-24V280c0-13.255 10.745-24 24-24h112c13.255 0 24 10.745 24 24v38.059l55.029-55.013c15.011-15.01 40.971-4.491 40.971 16.97z“]},ka={prefix:”fas“,iconName:”file-word“,icon:[384,512,,”f1c2“,”M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm57.1 120H305c7.7 0 13.4 7.1 11.7 14.7l-38 168c-1.2 5.5-6.1 9.3-11.7 9.3h-38c-5.5 0-10.3-3.8-11.6-9.1-25.8-103.5-20.8-81.2-25.6-110.5h-.5c-1.1 14.3-2.4 17.4-25.6 110.5-1.3 5.3-6.1 9.1-11.6 9.1H117c-5.6 0-10.5-3.9-11.7-9.4l-37.8-168c-1.7-7.5 4-14.6 11.7-14.6h24.5c5.7 0 10.7 4 11.8 9.7 15.6 78 20.1 109.5 21 122.2 1.6-10.2 7.3-32.7 29.4-122.7 1.3-5.4 6.1-9.1 11.7-9.1h29.1c5.6 0 10.4 3.8 11.7 9.2 24 100.4 28.8 124 29.6 129.4-.2-11.2-2.6-17.8 21.6-129.2 1-5.6 5.9-9.5 11.5-9.5zM384 121.9v6.1H256V0h6.1c6.4 0 12.5 2.5 17 7l97.9 98c4.5 4.5 7 10.6 7 16.9z“]},_a={prefix:”fas“,iconName:”fill“,icon:[512,512,,”f575“,”M502.63 217.06L294.94 9.37C288.69 3.12 280.5 0 272.31 0s-16.38 3.12-22.62 9.37l-81.58 81.58L81.93 4.77c-6.24-6.25-16.38-6.25-22.62 0L36.69 27.38c-6.24 6.25-6.24 16.38 0 22.63l86.19 86.18-94.76 94.76c-37.49 37.49-37.49 98.26 0 135.75l117.19 117.19c18.75 18.74 43.31 28.12 67.87 28.12 24.57 0 49.13-9.37 67.88-28.12l221.57-221.57c12.49-12.5 12.49-32.76 0-45.26zm-116.22 70.97H65.93c1.36-3.84 3.57-7.98 7.43-11.83l13.15-13.15 81.61-81.61 58.61 58.6c12.49 12.49 32.75 12.49 45.24 0 12.49-12.49 12.49-32.75 0-45.24l-58.61-58.6 58.95-58.95 162.45 162.44-48.35 48.34z“]},za={prefix:”fas“,iconName:”fill-drip“,icon:[576,512,,”f576“,”M512 320s-64 92.65-64 128c0 35.35 28.66 64 64 64s64-28.65 64-64-64-128-64-128zm-9.37-102.94L294.94 9.37C288.69 3.12 280.5 0 272.31 0s-16.38 3.12-22.62 9.37l-81.58 81.58L81.93 4.76c-6.25-6.25-16.38-6.25-22.62 0L36.69 27.38c-6.24 6.25-6.24 16.38 0 22.62l86.19 86.18-94.76 94.76c-37.49 37.48-37.49 98.26 0 135.75l117.19 117.19c18.74 18.74 43.31 28.12 67.87 28.12 24.57 0 49.13-9.37 67.87-28.12l221.57-221.57c12.5-12.5 12.5-32.75.01-45.25zm-116.22 70.97H65.93c1.36-3.84 3.57-7.98 7.43-11.83l13.15-13.15 81.61-81.61 58.6 58.6c12.49 12.49 32.75 12.49 45.24 0s12.49-32.75 0-45.24l-58.6-58.6 58.95-58.95 162.44 162.44-48.34 48.34z“]},Ca={prefix:”fas“,iconName:”film“,icon:[512,512,,”f008“,”M488 64h-8v20c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12V64H96v20c0 6.6-5.4 12-12 12H44c-6.6 0-12-5.4-12-12V64h-8C10.7 64 0 74.7 0 88v336c0 13.3 10.7 24 24 24h8v-20c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v20h320v-20c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v20h8c13.3 0 24-10.7 24-24V88c0-13.3-10.7-24-24-24zM96 372c0 6.6-5.4 12-12 12H44c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm0-96c0 6.6-5.4 12-12 12H44c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm0-96c0 6.6-5.4 12-12 12H44c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm272 208c0 6.6-5.4 12-12 12H156c-6.6 0-12-5.4-12-12v-96c0-6.6 5.4-12 12-12h200c6.6 0 12 5.4 12 12v96zm0-168c0 6.6-5.4 12-12 12H156c-6.6 0-12-5.4-12-12v-96c0-6.6 5.4-12 12-12h200c6.6 0 12 5.4 12 12v96zm112 152c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm0-96c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm0-96c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40z“]},Ma={prefix:”fas“,iconName:”filter“,icon:[512,512,,”f0b0“,”M487.976 0H24.028C2.71 0-8.047 25.866 7.058 40.971L192 225.941V432c0 7.831 3.821 15.17 10.237 19.662l80 55.98C298.02 518.69 320 507.493 320 487.98V225.941l184.947-184.97C520.021 25.896 509.338 0 487.976 0z“]},Oa={prefix:”fas“,iconName:”fingerprint“,icon:[512,512,,”f577“,”M256.12 245.96c-13.25 0-24 10.74-24 24 1.14 72.25-8.14 141.9-27.7 211.55-2.73 9.72 2.15 30.49 23.12 30.49 10.48 0 20.11-6.92 23.09-17.52 13.53-47.91 31.04-125.41 29.48-224.52.01-13.25-10.73-24-23.99-24zm-.86-81.73C194 164.16 151.25 211.3 152.1 265.32c.75 47.94-3.75 95.91-13.37 142.55-2.69 12.98 5.67 25.69 18.64 28.36 13.05 2.67 25.67-5.66 28.36-18.64 10.34-50.09 15.17-101.58 14.37-153.02-.41-25.95 19.92-52.49 54.45-52.34 31.31.47 57.15 25.34 57.62 55.47.77 48.05-2.81 96.33-10.61 143.55-2.17 13.06 6.69 25.42 19.76 27.58 19.97 3.33 26.81-15.1 27.58-19.77 8.28-50.03 12.06-101.21 11.27-152.11-.88-55.8-47.94-101.88-104.91-102.72zm-110.69-19.78c-10.3-8.34-25.37-6.8-33.76 3.48-25.62 31.5-39.39 71.28-38.75 112 .59 37.58-2.47 75.27-9.11 112.05-2.34 13.05 6.31 25.53 19.36 27.89 20.11 3.5 27.07-14.81 27.89-19.36 7.19-39.84 10.5-80.66 9.86-121.33-.47-29.88 9.2-57.88 28-80.97 8.35-10.28 6.79-25.39-3.49-33.76zm109.47-62.33c-15.41-.41-30.87 1.44-45.78 4.97-12.89 3.06-20.87 15.98-17.83 28.89 3.06 12.89 16 20.83 28.89 17.83 11.05-2.61 22.47-3.77 34-3.69 75.43 1.13 137.73 61.5 138.88 134.58.59 37.88-1.28 76.11-5.58 113.63-1.5 13.17 7.95 25.08 21.11 26.58 16.72 1.95 25.51-11.88 26.58-21.11a929.06 929.06 0 0 0 5.89-119.85c-1.56-98.75-85.07-180.33-186.16-181.83zm252.07 121.45c-2.86-12.92-15.51-21.2-28.61-18.27-12.94 2.86-21.12 15.66-18.26 28.61 4.71 21.41 4.91 37.41 4.7 61.6-.11 13.27 10.55 24.09 23.8 24.2h.2c13.17 0 23.89-10.61 24-23.8.18-22.18.4-44.11-5.83-72.34zm-40.12-90.72C417.29 43.46 337.6 1.29 252.81.02 183.02-.82 118.47 24.91 70.46 72.94 24.09 119.37-.9 181.04.14 246.65l-.12 21.47c-.39 13.25 10.03 24.31 23.28 24.69.23.02.48.02.72.02 12.92 0 23.59-10.3 23.97-23.3l.16-23.64c-.83-52.5 19.16-101.86 56.28-139 38.76-38.8 91.34-59.67 147.68-58.86 69.45 1.03 134.73 35.56 174.62 92.39 7.61 10.86 22.56 13.45 33.42 5.86 10.84-7.62 13.46-22.59 5.84-33.43z“]},Ta={prefix:”fas“,iconName:”fire“,icon:[384,512,,”f06d“,”M216 23.86c0-23.8-30.65-32.77-44.15-13.04C48 191.85 224 200 224 288c0 35.63-29.11 64.46-64.85 63.99-35.17-.45-63.15-29.77-63.15-64.94v-85.51c0-21.7-26.47-32.23-41.43-16.5C27.8 213.16 0 261.33 0 320c0 105.87 86.13 192 192 192s192-86.13 192-192c0-170.29-168-193-168-296.14z“]},Ea={prefix:”fas“,iconName:”fire-alt“,icon:[448,512,,”f7e4“,”M323.56 51.2c-20.8 19.3-39.58 39.59-56.22 59.97C240.08 73.62 206.28 35.53 168 0 69.74 91.17 0 209.96 0 281.6 0 408.85 100.29 512 224 512s224-103.15 224-230.4c0-53.27-51.98-163.14-124.44-230.4zm-19.47 340.65C282.43 407.01 255.72 416 226.86 416 154.71 416 96 368.26 96 290.75c0-38.61 24.31-72.63 72.79-130.75 6.93 7.98 98.83 125.34 98.83 125.34l58.63-66.88c4.14 6.85 7.91 13.55 11.27 19.97 27.35 52.19 15.81 118.97-33.43 153.42z“]},La={prefix:”fas“,iconName:”fire-extinguisher“,icon:[448,512,,”f134“,”M434.027 26.329l-168 28C254.693 56.218 256 67.8 256 72h-58.332C208.353 36.108 181.446 0 144 0c-39.435 0-66.368 39.676-52.228 76.203-52.039 13.051-75.381 54.213-90.049 90.884-4.923 12.307 1.063 26.274 13.37 31.197 12.317 4.926 26.279-1.075 31.196-13.37C75.058 112.99 106.964 120 168 120v27.076c-41.543 10.862-72 49.235-72 94.129V488c0 13.255 10.745 24 24 24h144c13.255 0 24-10.745 24-24V240c0-44.731-30.596-82.312-72-92.97V120h40c0 2.974-1.703 15.716 10.027 17.671l168 28C441.342 166.89 448 161.25 448 153.834V38.166c0-7.416-6.658-13.056-13.973-11.837zM144 72c-8.822 0-16-7.178-16-16s7.178-16 16-16 16 7.178 16 16-7.178 16-16 16z“]},Aa={prefix:”fas“,iconName:”first-aid“,icon:[576,512,,”f479“,”M0 80v352c0 26.5 21.5 48 48 48h48V32H48C21.5 32 0 53.5 0 80zm128 400h320V32H128v448zm64-248c0-4.4 3.6-8 8-8h56v-56c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v56h56c4.4 0 8 3.6 8 8v48c0 4.4-3.6 8-8 8h-56v56c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8v-56h-56c-4.4 0-8-3.6-8-8v-48zM528 32h-48v448h48c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48z“]},Ra={prefix:”fas“,iconName:”fish“,icon:[576,512,,”f578“,”M327.1 96c-89.97 0-168.54 54.77-212.27 101.63L27.5 131.58c-12.13-9.18-30.24.6-27.14 14.66L24.54 256 .35 365.77c-3.1 14.06 15.01 23.83 27.14 14.66l87.33-66.05C158.55 361.23 237.13 416 327.1 416 464.56 416 576 288 576 256S464.56 96 327.1 96zm87.43 184c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24 13.26 0 24 10.74 24 24 0 13.25-10.75 24-24 24z“]},Na={prefix:”fas“,iconName:”fist-raised“,icon:[384,512,,”f6de“,”M255.98 160V16c0-8.84-7.16-16-16-16h-32c-8.84 0-16 7.16-16 16v146.93c5.02-1.78 10.34-2.93 15.97-2.93h48.03zm128 95.99c-.01-35.34-28.66-63.99-63.99-63.99H207.85c-8.78 0-15.9 7.07-15.9 15.85v.56c0 26.27 21.3 47.59 47.57 47.59h35.26c9.68 0 13.2 3.58 13.2 8v16.2c0 4.29-3.59 7.78-7.88 8-44.52 2.28-64.16 24.71-96.05 72.55l-6.31 9.47a7.994 7.994 0 0 1-11.09 2.22l-13.31-8.88a7.994 7.994 0 0 1-2.22-11.09l6.31-9.47c15.73-23.6 30.2-43.26 47.31-58.08-17.27-5.51-31.4-18.12-38.87-34.45-6.59 3.41-13.96 5.52-21.87 5.52h-32c-12.34 0-23.49-4.81-32-12.48C71.48 251.19 60.33 256 48 256H16c-5.64 0-10.97-1.15-16-2.95v77.93c0 33.95 13.48 66.5 37.49 90.51L63.99 448v64h255.98v-63.96l35.91-35.92A96.035 96.035 0 0 0 384 344.21l-.02-88.22zm-32.01-90.09V48c0-8.84-7.16-16-16-16h-32c-8.84 0-16 7.16-16 16v112h32c11.28 0 21.94 2.31 32 5.9zM16 224h32c8.84 0 16-7.16 16-16V80c0-8.84-7.16-16-16-16H16C7.16 64 0 71.16 0 80v128c0 8.84 7.16 16 16 16zm95.99 0h32c8.84 0 16-7.16 16-16V48c0-8.84-7.16-16-16-16h-32c-8.84 0-16 7.16-16 16v160c0 8.84 7.16 16 16 16z“]},Ha={prefix:”fas“,iconName:”flag“,icon:[512,512,,”f024“,”M349.565 98.783C295.978 98.783 251.721 64 184.348 64c-24.955 0-47.309 4.384-68.045 12.013a55.947 55.947 0 0 0 3.586-23.562C118.117 24.015 94.806 1.206 66.338.048 34.345-1.254 8 24.296 8 56c0 19.026 9.497 35.825 24 45.945V488c0 13.255 10.745 24 24 24h16c13.255 0 24-10.745 24-24v-94.4c28.311-12.064 63.582-22.122 114.435-22.122 53.588 0 97.844 34.783 165.217 34.783 48.169 0 86.667-16.294 122.505-40.858C506.84 359.452 512 349.571 512 339.045v-243.1c0-23.393-24.269-38.87-45.485-29.016-34.338 15.948-76.454 31.854-116.95 31.854z“]},Pa={prefix:”fas“,iconName:”flag-checkered“,icon:[512,512,,”f11e“,”M243.2 189.9V258c26.1 5.9 49.3 15.6 73.6 22.3v-68.2c-26-5.8-49.4-15.5-73.6-22.2zm223.3-123c-34.3 15.9-76.5 31.9-117 31.9C296 98.8 251.7 64 184.3 64c-25 0-47.3 4.4-68 12 2.8-7.3 4.1-15.2 3.6-23.6C118.1 24 94.8 1.2 66.3 0 34.3-1.3 8 24.3 8 56c0 19 9.5 35.8 24 45.9V488c0 13.3 10.7 24 24 24h16c13.3 0 24-10.7 24-24v-94.4c28.3-12.1 63.6-22.1 114.4-22.1 53.6 0 97.8 34.8 165.2 34.8 48.2 0 86.7-16.3 122.5-40.9 8.7-6 13.8-15.8 13.8-26.4V95.9c.1-23.3-24.2-38.8-45.4-29zM169.6 325.5c-25.8 2.7-50 8.2-73.6 16.6v-70.5c26.2-9.3 47.5-15 73.6-17.4zM464 191c-23.6 9.8-46.3 19.5-73.6 23.9V286c24.8-3.4 51.4-11.8 73.6-26v70.5c-25.1 16.1-48.5 24.7-73.6 27.1V286c-27 3.7-47.9 1.5-73.6-5.6v67.4c-23.9-7.4-47.3-16.7-73.6-21.3V258c-19.7-4.4-40.8-6.8-73.6-3.8v-70c-22.4 3.1-44.6 10.2-73.6 20.9v-70.5c33.2-12.2 50.1-19.8 73.6-22v71.6c27-3.7 48.4-1.3 73.6 5.7v-67.4c23.7 7.4 47.2 16.7 73.6 21.3v68.4c23.7 5.3 47.6 6.9 73.6 2.7V143c27-4.8 52.3-13.6 73.6-22.5z“]},ja={prefix:”fas“,iconName:”flag-usa“,icon:[512,512,,”f74d“,”M32 0C14.3 0 0 14.3 0 32v464c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V32C64 14.3 49.7 0 32 0zm267.9 303.6c-57.2-15.1-111.7-28.8-203.9 11.1V384c185.7-92.2 221.7 53.3 397.5-23.1 11.4-5 18.5-16.5 18.5-28.8v-36c-43.6 17.3-80.2 24.1-112.1 24.1-37.4-.1-68.9-8.4-100-16.6zm0-96c-57.2-15.1-111.7-28.8-203.9 11.1v61.5c94.8-37.6 154.6-22.7 212.1-7.6 57.2 15.1 111.7 28.8 203.9-11.1V200c-43.6 17.3-80.2 24.1-112.1 24.1-37.4 0-68.9-8.3-100-16.5zm9.5-125.9c51.8 15.6 97.4 29 202.6-20.1V30.8c0-25.1-26.8-38.1-49.4-26.6C291.3 91.5 305.4-62.2 96 32.4v151.9c94.8-37.5 154.6-22.7 212.1-7.6 57.2 15 111.7 28.7 203.9-11.1V96.7c-53.6 23.5-93.3 31.4-126.1 31.4s-59-7.8-85.7-15.9c-4-1.2-8.1-2.4-12.1-3.5V75.5c7.2 2 14.3 4.1 21.3 6.2zM160 128.1c-8.8 0-16-7.1-16-16 0-8.8 7.2-16 16-16s16 7.1 16 16-7.2 16-16 16zm0-55.8c-8.8 0-16-7.1-16-16 0-8.8 7.2-16 16-16s16 7.1 16 16c0 8.8-7.2 16-16 16zm64 47.9c-8.8 0-16-7.1-16-16 0-8.8 7.2-16 16-16s16 7.1 16 16c0 8.8-7.2 16-16 16zm0-55.9c-8.8 0-16-7.1-16-16 0-8.8 7.2-16 16-16s16 7.1 16 16c0 8.8-7.2 16-16 16z“]},Va={prefix:”fas“,iconName:”flask“,icon:[448,512,,”f0c3“,”M437.2 403.5L320 215V64h8c13.3 0 24-10.7 24-24V24c0-13.3-10.7-24-24-24H120c-13.3 0-24 10.7-24 24v16c0 13.3 10.7 24 24 24h8v151L10.8 403.5C-18.5 450.6 15.3 512 70.9 512h306.2c55.7 0 89.4-61.5 60.1-108.5zM137.9 320l48.2-77.6c3.7-5.2 5.8-11.6 5.8-18.4V64h64v160c0 6.9 2.2 13.2 5.8 18.4l48.2 77.6h-172z“]},Da={prefix:”fas“,iconName:”flushed“,icon:[496,512,,”f579“,”M344 200c-13.3 0-24 10.7-24 24s10.7 24 24 24 24-10.7 24-24-10.7-24-24-24zm-192 0c-13.3 0-24 10.7-24 24s10.7 24 24 24 24-10.7 24-24-10.7-24-24-24zM248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM80 224c0-39.8 32.2-72 72-72s72 32.2 72 72-32.2 72-72 72-72-32.2-72-72zm232 176H184c-21.2 0-21.2-32 0-32h128c21.2 0 21.2 32 0 32zm32-104c-39.8 0-72-32.2-72-72s32.2-72 72-72 72 32.2 72 72-32.2 72-72 72z“]},Ia={prefix:”fas“,iconName:”folder“,icon:[512,512,,”f07b“,”M464 128H272l-64-64H48C21.49 64 0 85.49 0 112v288c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V176c0-26.51-21.49-48-48-48z“]},Fa={prefix:”fas“,iconName:”folder-minus“,icon:[512,512,,”f65d“,”M464 128H272l-64-64H48C21.49 64 0 85.49 0 112v288c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V176c0-26.51-21.49-48-48-48zm-96 168c0 8.84-7.16 16-16 16H160c-8.84 0-16-7.16-16-16v-16c0-8.84 7.16-16 16-16h192c8.84 0 16 7.16 16 16v16z“]},Ba={prefix:”fas“,iconName:”folder-open“,icon:[576,512,,”f07c“,”M572.694 292.093L500.27 416.248A63.997 63.997 0 0 1 444.989 448H45.025c-18.523 0-30.064-20.093-20.731-36.093l72.424-124.155A64 64 0 0 1 152 256h399.964c18.523 0 30.064 20.093 20.73 36.093zM152 224h328v-48c0-26.51-21.49-48-48-48H272l-64-64H48C21.49 64 0 85.49 0 112v278.046l69.077-118.418C86.214 242.25 117.989 224 152 224z“]},Ua={prefix:”fas“,iconName:”folder-plus“,icon:[512,512,,”f65e“,”M464,128H272L208,64H48A48,48,0,0,0,0,112V400a48,48,0,0,0,48,48H464a48,48,0,0,0,48-48V176A48,48,0,0,0,464,128ZM359.5,296a16,16,0,0,1-16,16h-64v64a16,16,0,0,1-16,16h-16a16,16,0,0,1-16-16V312h-64a16,16,0,0,1-16-16V280a16,16,0,0,1,16-16h64V200a16,16,0,0,1,16-16h16a16,16,0,0,1,16,16v64h64a16,16,0,0,1,16,16Z“]},qa={prefix:”fas“,iconName:”font“,icon:[448,512,,”f031“,”M432 416h-23.41L277.88 53.69A32 32 0 0 0 247.58 32h-47.16a32 32 0 0 0-30.3 21.69L39.41 416H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h128a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16h-19.58l23.3-64h152.56l23.3 64H304a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h128a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM176.85 272L224 142.51 271.15 272z“]},Ga={prefix:”fas“,iconName:”font-awesome-logo-full“,icon:[3992,512,[”Font Awesome“],”f4e6“,”M454.6 0H57.4C25.9 0 0 25.9 0 57.4v397.3C0 486.1 25.9 512 57.4 512h397.3c31.4 0 57.4-25.9 57.4-57.4V57.4C512 25.9 486.1 0 454.6 0zm-58.9 324.9c0 4.8-4.1 6.9-8.9 8.9-19.2 8.1-39.7 15.7-61.5 15.7-40.5 0-68.7-44.8-163.2 2.5v51.8c0 30.3-45.7 30.2-45.7 0v-250c-9-7-15-17.9-15-30.3 0-21 17.1-38.2 38.2-38.2 21 0 38.2 17.1 38.2 38.2 0 12.2-5.8 23.2-14.9 30.2v21c37.1-12 65.5-34.4 146.1-3.4 26.6 11.4 68.7-15.7 76.5-15.7 5.5 0 10.3 4.1 10.3 8.9v160.4zm432.9-174.2h-137v70.1H825c39.8 0 40.4 62.2 0 62.2H691.6v105.6c0 45.5-70.7 46.4-70.7 0V128.3c0-22 18-39.8 39.8-39.8h167.8c39.6 0 40.5 62.2.1 62.2zm191.1 23.4c-169.3 0-169.1 252.4 0 252.4 169.9 0 169.9-252.4 0-252.4zm0 196.1c-81.6 0-82.1-139.8 0-139.8 82.5 0 82.4 139.8 0 139.8zm372.4 53.4c-17.5 0-31.4-13.9-31.4-31.4v-117c0-62.4-72.6-52.5-99.1-16.4v133.4c0 41.5-63.3 41.8-63.3 0V208c0-40 63.1-41.6 63.1 0v3.4c43.3-51.6 162.4-60.4 162.4 39.3v141.5c.3 30.4-31.5 31.4-31.7 31.4zm179.7 2.9c-44.3 0-68.3-22.9-68.3-65.8V235.2H1488c-35.6 0-36.7-55.3 0-55.3h15.5v-37.3c0-41.3 63.8-42.1 63.8 0v37.5h24.9c35.4 0 35.7 55.3 0 55.3h-24.9v108.5c0 29.6 26.1 26.3 27.4 26.3 31.4 0 52.6 56.3-22.9 56.3zM1992 123c-19.5-50.2-95.5-50-114.5 0-107.3 275.7-99.5 252.7-99.5 262.8 0 42.8 58.3 51.2 72.1 14.4l13.5-35.9H2006l13 35.9c14.2 37.7 72.1 27.2 72.1-14.4 0-10.1 5.3 6.8-99.1-262.8zm-108.9 179.1l51.7-142.9 51.8 142.9h-103.5zm591.3-85.6l-53.7 176.3c-12.4 41.2-72 41-84 0l-42.3-135.9-42.3 135.9c-12.4 40.9-72 41.2-84.5 0l-54.2-176.3c-12.5-39.4 49.8-56.1 60.2-16.9L2213 342l45.3-139.5c10.9-32.7 59.6-34.7 71.2 0l45.3 139.5 39.3-142.4c10.3-38.3 72.6-23.8 60.3 16.9zm275.4 75.1c0-42.4-33.9-117.5-119.5-117.5-73.2 0-124.4 56.3-124.4 126 0 77.2 55.3 126.4 128.5 126.4 31.7 0 93-11.5 93-39.8 0-18.3-21.1-31.5-39.3-22.4-49.4 26.2-109 8.4-115.9-43.8h148.3c16.3 0 29.3-13.4 29.3-28.9zM2571 277.7c9.5-73.4 113.9-68.6 118.6 0H2571zm316.7 148.8c-31.4 0-81.6-10.5-96.6-31.9-12.4-17 2.5-39.8 21.8-39.8 16.3 0 36.8 22.9 77.7 22.9 27.4 0 40.4-11 40.4-25.8 0-39.8-142.9-7.4-142.9-102 0-40.4 35.3-75.7 98.6-75.7 31.4 0 74.1 9.9 87.6 29.4 10.8 14.8-1.4 36.2-20.9 36.2-15.1 0-26.7-17.3-66.2-17.3-22.9 0-37.8 10.5-37.8 23.8 0 35.9 142.4 6 142.4 103.1-.1 43.7-37.4 77.1-104.1 77.1zm266.8-252.4c-169.3 0-169.1 252.4 0 252.4 170.1 0 169.6-252.4 0-252.4zm0 196.1c-81.8 0-82-139.8 0-139.8 82.5 0 82.4 139.8 0 139.8zm476.9 22V268.7c0-53.8-61.4-45.8-85.7-10.5v134c0 41.3-63.8 42.1-63.8 0V268.7c0-52.1-59.5-47.4-85.7-10.1v133.6c0 41.5-63.3 41.8-63.3 0V208c0-40 63.1-41.6 63.1 0v3.4c9.9-14.4 41.8-37.3 78.6-37.3 35.3 0 57.7 16.4 66.7 43.8 13.9-21.8 45.8-43.8 82.6-43.8 44.3 0 70.7 23.4 70.7 72.7v145.3c.5 17.3-13.5 31.4-31.9 31.4 3.5.1-31.3 1.1-31.3-31.3zM3992 291.6c0-42.4-32.4-117.5-117.9-117.5-73.2 0-127.5 56.3-127.5 126 0 77.2 58.3 126.4 131.6 126.4 31.7 0 91.5-11.5 91.5-39.8 0-18.3-21.1-31.5-39.3-22.4-49.4 26.2-110.5 8.4-117.5-43.8h149.8c16.3 0 29.1-13.4 29.3-28.9zm-180.5-13.9c9.7-74.4 115.9-68.3 120.1 0h-120.1z“]},Wa={prefix:”fas“,iconName:”football-ball“,icon:[496,512,,”f44e“,”M481.5 60.3c-4.8-18.2-19.1-32.5-37.3-37.4C420.3 16.5 383 8.9 339.4 8L496 164.8c-.8-43.5-8.2-80.6-14.5-104.5zm-467 391.4c4.8 18.2 19.1 32.5 37.3 37.4 23.9 6.4 61.2 14 104.8 14.9L0 347.2c.8 43.5 8.2 80.6 14.5 104.5zM4.2 283.4L220.4 500c132.5-19.4 248.8-118.7 271.5-271.4L275.6 12C143.1 31.4 26.8 130.7 4.2 283.4zm317.3-123.6c3.1-3.1 8.2-3.1 11.3 0l11.3 11.3c3.1 3.1 3.1 8.2 0 11.3l-28.3 28.3 28.3 28.3c3.1 3.1 3.1 8.2 0 11.3l-11.3 11.3c-3.1 3.1-8.2 3.1-11.3 0l-28.3-28.3-22.6 22.7 28.3 28.3c3.1 3.1 3.1 8.2 0 11.3l-11.3 11.3c-3.1 3.1-8.2 3.1-11.3 0L248 278.6l-22.6 22.6 28.3 28.3c3.1 3.1 3.1 8.2 0 11.3l-11.3 11.3c-3.1 3.1-8.2 3.1-11.3 0l-28.3-28.3-28.3 28.3c-3.1 3.1-8.2 3.1-11.3 0l-11.3-11.3c-3.1-3.1-3.1-8.2 0-11.3l28.3-28.3-28.3-28.2c-3.1-3.1-3.1-8.2 0-11.3l11.3-11.3c3.1-3.1 8.2-3.1 11.3 0l28.3 28.3 22.6-22.6-28.3-28.3c-3.1-3.1-3.1-8.2 0-11.3l11.3-11.3c3.1-3.1 8.2-3.1 11.3 0l28.3 28.3 22.6-22.6-28.3-28.3c-3.1-3.1-3.1-8.2 0-11.3l11.3-11.3c3.1-3.1 8.2-3.1 11.3 0l28.3 28.3 28.3-28.5z“]},Za={prefix:”fas“,iconName:”forward“,icon:[512,512,,”f04e“,”M500.5 231.4l-192-160C287.9 54.3 256 68.6 256 96v320c0 27.4 31.9 41.8 52.5 24.6l192-160c15.3-12.8 15.3-36.4 0-49.2zm-256 0l-192-160C31.9 54.3 0 68.6 0 96v320c0 27.4 31.9 41.8 52.5 24.6l192-160c15.3-12.8 15.3-36.4 0-49.2z“]},$a={prefix:”fas“,iconName:”frog“,icon:[576,512,,”f52e“,”M446.53 97.43C439.67 60.23 407.19 32 368 32c-39.23 0-71.72 28.29-78.54 65.54C126.75 112.96-.5 250.12 0 416.98.11 451.9 29.08 480 64 480h304c8.84 0 16-7.16 16-16 0-17.67-14.33-32-32-32h-79.49l35.8-48.33c24.14-36.23 10.35-88.28-33.71-106.6-23.89-9.93-51.55-4.65-72.24 10.88l-32.76 24.59c-7.06 5.31-17.09 3.91-22.41-3.19-5.3-7.08-3.88-17.11 3.19-22.41l34.78-26.09c36.84-27.66 88.28-27.62 125.13 0 10.87 8.15 45.87 39.06 40.8 93.21L469.62 480H560c8.84 0 16-7.16 16-16 0-17.67-14.33-32-32-32h-53.63l-98.52-104.68 154.44-86.65A58.16 58.16 0 0 0 576 189.94c0-21.4-11.72-40.95-30.48-51.23-40.56-22.22-98.99-41.28-98.99-41.28zM368 136c-13.26 0-24-10.75-24-24 0-13.26 10.74-24 24-24 13.25 0 24 10.74 24 24 0 13.25-10.75 24-24 24z“]},Ja={prefix:”fas“,iconName:”frown“,icon:[496,512,,”f119“,”M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm80 168c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm-160 0c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm170.2 218.2C315.8 367.4 282.9 352 248 352s-67.8 15.4-90.2 42.2c-13.5 16.3-38.1-4.2-24.6-20.5C161.7 339.6 203.6 320 248 320s86.3 19.6 114.7 53.8c13.6 16.2-11 36.7-24.5 20.4z“]},Ka={prefix:”fas“,iconName:”frown-open“,icon:[496,512,,”f57a“,”M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM136 208c0-17.7 14.3-32 32-32s32 14.3 32 32-14.3 32-32 32-32-14.3-32-32zm187.3 183.3c-31.2-9.6-59.4-15.3-75.3-15.3s-44.1 5.7-75.3 15.3c-11.5 3.5-22.5-6.3-20.5-18.1 7-40 60.1-61.2 95.8-61.2s88.8 21.3 95.8 61.2c2 11.9-9.1 21.6-20.5 18.1zM328 240c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z“]},Qa={prefix:”fas“,iconName:”funnel-dollar“,icon:[640,512,,”f662“,”M433.46 165.94l101.2-111.87C554.61 34.12 540.48 0 512.26 0H31.74C3.52 0-10.61 34.12 9.34 54.07L192 256v155.92c0 12.59 5.93 24.44 16 32l79.99 60c20.86 15.64 48.47 6.97 59.22-13.57C310.8 455.38 288 406.35 288 352c0-89.79 62.05-165.17 145.46-186.06zM480 192c-88.37 0-160 71.63-160 160s71.63 160 160 160 160-71.63 160-160-71.63-160-160-160zm16 239.88V448c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-16.29c-11.29-.58-22.27-4.52-31.37-11.35-3.9-2.93-4.1-8.77-.57-12.14l11.75-11.21c2.77-2.64 6.89-2.76 10.13-.73 3.87 2.42 8.26 3.72 12.82 3.72h28.11c6.5 0 11.8-5.92 11.8-13.19 0-5.95-3.61-11.19-8.77-12.73l-45-13.5c-18.59-5.58-31.58-23.42-31.58-43.39 0-24.52 19.05-44.44 42.67-45.07V256c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v16.29c11.29.58 22.27 4.51 31.37 11.35 3.9 2.93 4.1 8.77.57 12.14l-11.75 11.21c-2.77 2.64-6.89 2.76-10.13.73-3.87-2.43-8.26-3.72-12.82-3.72h-28.11c-6.5 0-11.8 5.92-11.8 13.19 0 5.95 3.61 11.19 8.77 12.73l45 13.5c18.59 5.58 31.58 23.42 31.58 43.39 0 24.53-19.04 44.44-42.67 45.07z“]},Ya={prefix:”fas“,iconName:”futbol“,icon:[512,512,,”f1e3“,”M504 256c0 136.967-111.033 248-248 248S8 392.967 8 256 119.033 8 256 8s248 111.033 248 248zm-48 0l-.003-.282-26.064 22.741-62.679-58.5 16.454-84.355 34.303 3.072c-24.889-34.216-60.004-60.089-100.709-73.141l13.651 31.939L256 139l-74.953-41.525 13.651-31.939c-40.631 13.028-75.78 38.87-100.709 73.141l34.565-3.073 16.192 84.355-62.678 58.5-26.064-22.741-.003.282c0 43.015 13.497 83.952 38.472 117.991l7.704-33.897 85.138 10.447 36.301 77.826-29.902 17.786c40.202 13.122 84.29 13.148 124.572 0l-29.902-17.786 36.301-77.826 85.138-10.447 7.704 33.897C442.503 339.952 456 299.015 456 256zm-248.102 69.571l-29.894-91.312L256 177.732l77.996 56.527-29.622 91.312h-96.476z“]},Xa={prefix:”fas“,iconName:”gamepad“,icon:[640,512,,”f11b“,”M480.07 96H160a160 160 0 1 0 114.24 272h91.52A160 160 0 1 0 480.07 96zM248 268a12 12 0 0 1-12 12h-52v52a12 12 0 0 1-12 12h-24a12 12 0 0 1-12-12v-52H84a12 12 0 0 1-12-12v-24a12 12 0 0 1 12-12h52v-52a12 12 0 0 1 12-12h24a12 12 0 0 1 12 12v52h52a12 12 0 0 1 12 12zm216 76a40 40 0 1 1 40-40 40 40 0 0 1-40 40zm64-96a40 40 0 1 1 40-40 40 40 0 0 1-40 40z“]},eo={prefix:”fas“,iconName:”gas-pump“,icon:[512,512,,”f52f“,”M336 448H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h320c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zm157.2-340.7l-81-81c-6.2-6.2-16.4-6.2-22.6 0l-11.3 11.3c-6.2 6.2-6.2 16.4 0 22.6L416 97.9V160c0 28.1 20.9 51.3 48 55.2V376c0 13.2-10.8 24-24 24s-24-10.8-24-24v-32c0-48.6-39.4-88-88-88h-8V64c0-35.3-28.7-64-64-64H96C60.7 0 32 28.7 32 64v352h288V304h8c22.1 0 40 17.9 40 40v27.8c0 37.7 27 72 64.5 75.9 43 4.3 79.5-29.5 79.5-71.7V152.6c0-17-6.8-33.3-18.8-45.3zM256 192H96V64h160v128z“]},to={prefix:”fas“,iconName:”gavel“,icon:[512,512,,”f0e3“,”M504.971 199.362l-22.627-22.627c-9.373-9.373-24.569-9.373-33.941 0l-5.657 5.657L329.608 69.255l5.657-5.657c9.373-9.373 9.373-24.569 0-33.941L312.638 7.029c-9.373-9.373-24.569-9.373-33.941 0L154.246 131.48c-9.373 9.373-9.373 24.569 0 33.941l22.627 22.627c9.373 9.373 24.569 9.373 33.941 0l5.657-5.657 39.598 39.598-81.04 81.04-5.657-5.657c-12.497-12.497-32.758-12.497-45.255 0L9.373 412.118c-12.497 12.497-12.497 32.758 0 45.255l45.255 45.255c12.497 12.497 32.758 12.497 45.255 0l114.745-114.745c12.497-12.497 12.497-32.758 0-45.255l-5.657-5.657 81.04-81.04 39.598 39.598-5.657 5.657c-9.373 9.373-9.373 24.569 0 33.941l22.627 22.627c9.373 9.373 24.569 9.373 33.941 0l124.451-124.451c9.372-9.372 9.372-24.568 0-33.941z“]},no={prefix:”fas“,iconName:”gem“,icon:[576,512,,”f3a5“,”M485.5 0L576 160H474.9L405.7 0h79.8zm-128 0l69.2 160H149.3L218.5 0h139zm-267 0h79.8l-69.2 160H0L90.5 0zM0 192h100.7l123 251.7c1.5 3.1-2.7 5.9-5 3.3L0 192zm148.2 0h279.6l-137 318.2c-1 2.4-4.5 2.4-5.5 0L148.2 192zm204.1 251.7l123-251.7H576L357.3 446.9c-2.3 2.7-6.5-.1-5-3.2z“]},ro={prefix:”fas“,iconName:”genderless“,icon:[288,512,,”f22d“,”M144 176c44.1 0 80 35.9 80 80s-35.9 80-80 80-80-35.9-80-80 35.9-80 80-80m0-64C64.5 112 0 176.5 0 256s64.5 144 144 144 144-64.5 144-144-64.5-144-144-144z“]},io={prefix:”fas“,iconName:”ghost“,icon:[384,512,,”f6e2“,”M186.1.09C81.01 3.24 0 94.92 0 200.05v263.92c0 14.26 17.23 21.39 27.31 11.31l24.92-18.53c6.66-4.95 16-3.99 21.51 2.21l42.95 48.35c6.25 6.25 16.38 6.25 22.63 0l40.72-45.85c6.37-7.17 17.56-7.17 23.92 0l40.72 45.85c6.25 6.25 16.38 6.25 22.63 0l42.95-48.35c5.51-6.2 14.85-7.17 21.51-2.21l24.92 18.53c10.08 10.08 27.31 2.94 27.31-11.31V192C384 84 294.83-3.17 186.1.09zM128 224c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm128 0c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z“]},ao={prefix:”fas“,iconName:”gift“,icon:[512,512,,”f06b“,”M32 448c0 17.7 14.3 32 32 32h160V320H32v128zm256 32h160c17.7 0 32-14.3 32-32V320H288v160zm192-320h-42.1c6.2-12.1 10.1-25.5 10.1-40 0-48.5-39.5-88-88-88-41.6 0-68.5 21.3-103 68.3-34.5-47-61.4-68.3-103-68.3-48.5 0-88 39.5-88 88 0 14.5 3.8 27.9 10.1 40H32c-17.7 0-32 14.3-32 32v80c0 8.8 7.2 16 16 16h480c8.8 0 16-7.2 16-16v-80c0-17.7-14.3-32-32-32zm-326.1 0c-22.1 0-40-17.9-40-40s17.9-40 40-40c19.9 0 34.6 3.3 86.1 80h-86.1zm206.1 0h-86.1c51.4-76.5 65.7-80 86.1-80 22.1 0 40 17.9 40 40s-17.9 40-40 40z“]},oo={prefix:”fas“,iconName:”gifts“,icon:[640,512,,”f79c“,”M240.6 194.1c1.9-30.8 17.3-61.2 44-79.8C279.4 103.5 268.7 96 256 96h-29.4l30.7-22c7.2-5.1 8.9-15.1 3.7-22.3l-9.3-13c-5.1-7.2-15.1-8.9-22.3-3.7l-32 22.9 11.5-30.6c3.1-8.3-1.1-17.5-9.4-20.6l-15-5.6c-8.3-3.1-17.5 1.1-20.6 9.4l-19.9 53-19.9-53.1C121 2.1 111.8-2.1 103.5 1l-15 5.6C80.2 9.7 76 19 79.2 27.2l11.5 30.6L58.6 35c-7.2-5.1-17.2-3.5-22.3 3.7l-9.3 13c-5.1 7.2-3.5 17.2 3.7 22.3l30.7 22H32c-17.7 0-32 14.3-32 32v352c0 17.7 14.3 32 32 32h168.9c-5.5-9.5-8.9-20.3-8.9-32V256c0-29.9 20.8-55 48.6-61.9zM224 480c0 17.7 14.3 32 32 32h160V384H224v96zm224 32h160c17.7 0 32-14.3 32-32v-96H448v128zm160-288h-20.4c2.6-7.6 4.4-15.5 4.4-23.8 0-35.5-27-72.2-72.1-72.2-48.1 0-75.9 47.7-87.9 75.3-12.1-27.6-39.9-75.3-87.9-75.3-45.1 0-72.1 36.7-72.1 72.2 0 8.3 1.7 16.2 4.4 23.8H256c-17.7 0-32 14.3-32 32v96h192V224h15.3l.7-.2.7.2H448v128h192v-96c0-17.7-14.3-32-32-32zm-272 0c-2.7-1.4-5.1-3-7.2-4.8-7.3-6.4-8.8-13.8-8.8-19 0-9.7 6.4-24.2 24.1-24.2 18.7 0 35.6 27.4 44.5 48H336zm199.2-4.8c-2.1 1.8-4.5 3.4-7.2 4.8h-52.6c8.8-20.3 25.8-48 44.5-48 17.7 0 24.1 14.5 24.1 24.2 0 5.2-1.5 12.6-8.8 19z“]},co={prefix:”fas“,iconName:”glass-cheers“,icon:[640,512,,”f79f“,”M639.4 433.6c-8.4-20.4-31.8-30.1-52.2-21.6l-22.1 9.2-38.7-101.9c47.9-35 64.8-100.3 34.5-152.8L474.3 16c-8-13.9-25.1-19.7-40-13.6L320 49.8 205.7 2.4c-14.9-6.2-32-.3-40 13.6L79.1 166.5C48.9 219 65.7 284.3 113.6 319.2L74.9 421.1l-22.1-9.2c-20.4-8.5-43.7 1.2-52.2 21.6-1.7 4.1.2 8.8 4.3 10.5l162.3 67.4c4.1 1.7 8.7-.2 10.4-4.3 8.4-20.4-1.2-43.8-21.6-52.3l-22.1-9.2L173.3 342c4.4.5 8.8 1.3 13.1 1.3 51.7 0 99.4-33.1 113.4-85.3l20.2-75.4 20.2 75.4c14 52.2 61.7 85.3 113.4 85.3 4.3 0 8.7-.8 13.1-1.3L506 445.6l-22.1 9.2c-20.4 8.5-30.1 31.9-21.6 52.3 1.7 4.1 6.4 6 10.4 4.3L635.1 444c4-1.7 6-6.3 4.3-10.4zM275.9 162.1l-112.1-46.5 36.5-63.4 94.5 39.2-18.9 70.7zm88.2 0l-18.9-70.7 94.5-39.2 36.5 63.4-112.1 46.5z“]},so={prefix:”fas“,iconName:”glass-martini“,icon:[512,512,,”f000“,”M502.05 57.6C523.3 36.34 508.25 0 478.2 0H33.8C3.75 0-11.3 36.34 9.95 57.6L224 271.64V464h-56c-22.09 0-40 17.91-40 40 0 4.42 3.58 8 8 8h240c4.42 0 8-3.58 8-8 0-22.09-17.91-40-40-40h-56V271.64L502.05 57.6z“]},uo={prefix:”fas“,iconName:”glass-martini-alt“,icon:[512,512,,”f57b“,”M502.05 57.6C523.3 36.34 508.25 0 478.2 0H33.8C3.75 0-11.3 36.34 9.95 57.6L224 271.64V464h-56c-22.09 0-40 17.91-40 40 0 4.42 3.58 8 8 8h240c4.42 0 8-3.58 8-8 0-22.09-17.91-40-40-40h-56V271.64L502.05 57.6zM443.77 48l-48 48H116.24l-48-48h375.53z“]},lo={prefix:”fas“,iconName:”glass-whiskey“,icon:[512,512,,”f7a0“,”M480 32H32C12.5 32-2.4 49.2.3 68.5l56 356.5c4.5 31.5 31.5 54.9 63.4 54.9h273c31.8 0 58.9-23.4 63.4-54.9l55.6-356.5C514.4 49.2 499.5 32 480 32zm-37.4 64l-30 192h-313L69.4 96h373.2z“]},fo={prefix:”fas“,iconName:”glasses“,icon:[576,512,,”f530“,”M574.1 280.37L528.75 98.66c-5.91-23.7-21.59-44.05-43-55.81-21.44-11.73-46.97-14.11-70.19-6.33l-15.25 5.08c-8.39 2.79-12.92 11.86-10.12 20.24l5.06 15.18c2.79 8.38 11.85 12.91 20.23 10.12l13.18-4.39c10.87-3.62 23-3.57 33.16 1.73 10.29 5.37 17.57 14.56 20.37 25.82l38.46 153.82c-22.19-6.81-49.79-12.46-81.2-12.46-34.77 0-73.98 7.02-114.85 26.74h-73.18c-40.87-19.74-80.08-26.75-114.86-26.75-31.42 0-59.02 5.65-81.21 12.46l38.46-153.83c2.79-11.25 10.09-20.45 20.38-25.81 10.16-5.3 22.28-5.35 33.15-1.73l13.17 4.39c8.38 2.79 17.44-1.74 20.23-10.12l5.06-15.18c2.8-8.38-1.73-17.45-10.12-20.24l-15.25-5.08c-23.22-7.78-48.75-5.41-70.19 6.33-21.41 11.77-37.09 32.11-43 55.8L1.9 280.37A64.218 64.218 0 0 0 0 295.86v70.25C0 429.01 51.58 480 115.2 480h37.12c60.28 0 110.37-45.94 114.88-105.37l2.93-38.63h35.75l2.93 38.63C313.31 434.06 363.4 480 423.68 480h37.12c63.62 0 115.2-50.99 115.2-113.88v-70.25c0-5.23-.64-10.43-1.9-15.5zm-370.72 89.42c-1.97 25.91-24.4 46.21-51.06 46.21H115.2C86.97 416 64 393.62 64 366.11v-37.54c18.12-6.49 43.42-12.92 72.58-12.92 23.86 0 47.26 4.33 69.93 12.92l-3.13 41.22zM512 366.12c0 27.51-22.97 49.88-51.2 49.88h-37.12c-26.67 0-49.1-20.3-51.06-46.21l-3.13-41.22c22.67-8.59 46.08-12.92 69.95-12.92 29.12 0 54.43 6.44 72.55 12.93v37.54z“]},ho={prefix:”fas“,iconName:”globe“,icon:[496,512,,”f0ac“,”M336.5 160C322 70.7 287.8 8 248 8s-74 62.7-88.5 152h177zM152 256c0 22.2 1.2 43.5 3.3 64h185.3c2.1-20.5 3.3-41.8 3.3-64s-1.2-43.5-3.3-64H155.3c-2.1 20.5-3.3 41.8-3.3 64zm324.7-96c-28.6-67.9-86.5-120.4-158-141.6 24.4 33.8 41.2 84.7 50 141.6h108zM177.2 18.4C105.8 39.6 47.8 92.1 19.3 160h108c8.7-56.9 25.5-107.8 49.9-141.6zM487.4 192H372.7c2.1 21 3.3 42.5 3.3 64s-1.2 43-3.3 64h114.6c5.5-20.5 8.6-41.8 8.6-64s-3.1-43.5-8.5-64zM120 256c0-21.5 1.2-43 3.3-64H8.6C3.2 212.5 0 233.8 0 256s3.2 43.5 8.6 64h114.6c-2-21-3.2-42.5-3.2-64zm39.5 96c14.5 89.3 48.7 152 88.5 152s74-62.7 88.5-152h-177zm159.3 141.6c71.4-21.2 129.4-73.7 158-141.6h-108c-8.8 56.9-25.6 107.8-50 141.6zM19.3 352c28.6 67.9 86.5 120.4 158 141.6-24.4-33.8-41.2-84.7-50-141.6h-108z“]},po={prefix:”fas“,iconName:”globe-africa“,icon:[496,512,,”f57c“,”M248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm160 215.5v6.93c0 5.87-3.32 11.24-8.57 13.86l-15.39 7.7a15.485 15.485 0 0 1-15.53-.97l-18.21-12.14a15.52 15.52 0 0 0-13.5-1.81l-2.65.88c-9.7 3.23-13.66 14.79-7.99 23.3l13.24 19.86c2.87 4.31 7.71 6.9 12.89 6.9h8.21c8.56 0 15.5 6.94 15.5 15.5v11.34c0 3.35-1.09 6.62-3.1 9.3l-18.74 24.98c-1.42 1.9-2.39 4.1-2.83 6.43l-4.3 22.83c-.62 3.29-2.29 6.29-4.76 8.56a159.608 159.608 0 0 0-25 29.16l-13.03 19.55a27.756 27.756 0 0 1-23.09 12.36c-10.51 0-20.12-5.94-24.82-15.34a78.902 78.902 0 0 1-8.33-35.29V367.5c0-8.56-6.94-15.5-15.5-15.5h-25.88c-14.49 0-28.38-5.76-38.63-16a54.659 54.659 0 0 1-16-38.63v-14.06c0-17.19 8.1-33.38 21.85-43.7l27.58-20.69a54.663 54.663 0 0 1 32.78-10.93h.89c8.48 0 16.85 1.97 24.43 5.77l14.72 7.36c3.68 1.84 7.93 2.14 11.83.84l47.31-15.77c6.33-2.11 10.6-8.03 10.6-14.7 0-8.56-6.94-15.5-15.5-15.5h-10.09c-4.11 0-8.05-1.63-10.96-4.54l-6.92-6.92a15.493 15.493 0 0 0-10.96-4.54H199.5c-8.56 0-15.5-6.94-15.5-15.5v-4.4c0-7.11 4.84-13.31 11.74-15.04l14.45-3.61c3.74-.94 7-3.23 9.14-6.44l8.08-12.11c2.87-4.31 7.71-6.9 12.89-6.9h24.21c8.56 0 15.5-6.94 15.5-15.5v-21.7C359.23 71.63 422.86 131.02 441.93 208H423.5c-8.56 0-15.5 6.94-15.5 15.5z“]},mo={prefix:”fas“,iconName:”globe-americas“,icon:[496,512,,”f57d“,”M248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm82.29 357.6c-3.9 3.88-7.99 7.95-11.31 11.28-2.99 3-5.1 6.7-6.17 10.71-1.51 5.66-2.73 11.38-4.77 16.87l-17.39 46.85c-13.76 3-28 4.69-42.65 4.69v-27.38c1.69-12.62-7.64-36.26-22.63-51.25-6-6-9.37-14.14-9.37-22.63v-32.01c0-11.64-6.27-22.34-16.46-27.97-14.37-7.95-34.81-19.06-48.81-26.11-11.48-5.78-22.1-13.14-31.65-21.75l-.8-.72a114.792 114.792 0 0 1-18.06-20.74c-9.38-13.77-24.66-36.42-34.59-51.14 20.47-45.5 57.36-82.04 103.2-101.89l24.01 12.01C203.48 89.74 216 82.01 216 70.11v-11.3c7.99-1.29 16.12-2.11 24.39-2.42l28.3 28.3c6.25 6.25 6.25 16.38 0 22.63L264 112l-10.34 10.34c-3.12 3.12-3.12 8.19 0 11.31l4.69 4.69c3.12 3.12 3.12 8.19 0 11.31l-8 8a8.008 8.008 0 0 1-5.66 2.34h-8.99c-2.08 0-4.08.81-5.58 2.27l-9.92 9.65a8.008 8.008 0 0 0-1.58 9.31l15.59 31.19c2.66 5.32-1.21 11.58-7.15 11.58h-5.64c-1.93 0-3.79-.7-5.24-1.96l-9.28-8.06a16.017 16.017 0 0 0-15.55-3.1l-31.17 10.39a11.95 11.95 0 0 0-8.17 11.34c0 4.53 2.56 8.66 6.61 10.69l11.08 5.54c9.41 4.71 19.79 7.16 30.31 7.16s22.59 27.29 32 32h66.75c8.49 0 16.62 3.37 22.63 9.37l13.69 13.69a30.503 30.503 0 0 1 8.93 21.57 46.536 46.536 0 0 1-13.72 32.98zM417 274.25c-5.79-1.45-10.84-5-14.15-9.97l-17.98-26.97a23.97 23.97 0 0 1 0-26.62l19.59-29.38c2.32-3.47 5.5-6.29 9.24-8.15l12.98-6.49C440.2 193.59 448 223.87 448 256c0 8.67-.74 17.16-1.82 25.54L417 274.25z“]},vo={prefix:”fas“,iconName:”globe-asia“,icon:[496,512,,”f57e“,”M248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm-11.34 240.23c-2.89 4.82-8.1 7.77-13.72 7.77h-.31c-4.24 0-8.31 1.69-11.31 4.69l-5.66 5.66c-3.12 3.12-3.12 8.19 0 11.31l5.66 5.66c3 3 4.69 7.07 4.69 11.31V304c0 8.84-7.16 16-16 16h-6.11c-6.06 0-11.6-3.42-14.31-8.85l-22.62-45.23c-2.44-4.88-8.95-5.94-12.81-2.08l-19.47 19.46c-3 3-7.07 4.69-11.31 4.69H50.81C49.12 277.55 48 266.92 48 256c0-110.28 89.72-200 200-200 21.51 0 42.2 3.51 61.63 9.82l-50.16 38.53c-5.11 3.41-4.63 11.06.86 13.81l10.83 5.41c5.42 2.71 8.84 8.25 8.84 14.31V216c0 4.42-3.58 8-8 8h-3.06c-3.03 0-5.8-1.71-7.15-4.42-1.56-3.12-5.96-3.29-7.76-.3l-17.37 28.95zM408 358.43c0 4.24-1.69 8.31-4.69 11.31l-9.57 9.57c-3 3-7.07 4.69-11.31 4.69h-15.16c-4.24 0-8.31-1.69-11.31-4.69l-13.01-13.01a26.767 26.767 0 0 0-25.42-7.04l-21.27 5.32c-1.27.32-2.57.48-3.88.48h-10.34c-4.24 0-8.31-1.69-11.31-4.69l-11.91-11.91a8.008 8.008 0 0 1-2.34-5.66v-10.2c0-3.27 1.99-6.21 5.03-7.43l39.34-15.74c1.98-.79 3.86-1.82 5.59-3.05l23.71-16.89a7.978 7.978 0 0 1 4.64-1.48h12.09c3.23 0 6.15 1.94 7.39 4.93l5.35 12.85a4 4 0 0 0 3.69 2.46h3.8c1.78 0 3.35-1.18 3.84-2.88l4.2-14.47c.5-1.71 2.06-2.88 3.84-2.88h6.06c2.21 0 4 1.79 4 4v12.93c0 2.12.84 4.16 2.34 5.66l11.91 11.91c3 3 4.69 7.07 4.69 11.31v24.6z“]},go={prefix:”fas“,iconName:”globe-europe“,icon:[496,512,,”f7a2“,”M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm200 248c0 22.5-3.9 44.2-10.8 64.4h-20.3c-4.3 0-8.4-1.7-11.4-4.8l-32-32.6c-4.5-4.6-4.5-12.1.1-16.7l12.5-12.5v-8.7c0-3-1.2-5.9-3.3-8l-9.4-9.4c-2.1-2.1-5-3.3-8-3.3h-16c-6.2 0-11.3-5.1-11.3-11.3 0-3 1.2-5.9 3.3-8l9.4-9.4c2.1-2.1 5-3.3 8-3.3h32c6.2 0 11.3-5.1 11.3-11.3v-9.4c0-6.2-5.1-11.3-11.3-11.3h-36.7c-8.8 0-16 7.2-16 16v4.5c0 6.9-4.4 13-10.9 15.2l-31.6 10.5c-3.3 1.1-5.5 4.1-5.5 7.6v2.2c0 4.4-3.6 8-8 8h-16c-4.4 0-8-3.6-8-8s-3.6-8-8-8H247c-3 0-5.8 1.7-7.2 4.4l-9.4 18.7c-2.7 5.4-8.2 8.8-14.3 8.8H194c-8.8 0-16-7.2-16-16V199c0-4.2 1.7-8.3 4.7-11.3l20.1-20.1c4.6-4.6 7.2-10.9 7.2-17.5 0-3.4 2.2-6.5 5.5-7.6l40-13.3c1.7-.6 3.2-1.5 4.4-2.7l26.8-26.8c2.1-2.1 3.3-5 3.3-8 0-6.2-5.1-11.3-11.3-11.3H258l-16 16v8c0 4.4-3.6 8-8 8h-16c-4.4 0-8-3.6-8-8v-20c0-2.5 1.2-4.9 3.2-6.4l28.9-21.7c1.9-.1 3.8-.3 5.7-.3C358.3 56 448 145.7 448 256zM130.1 149.1c0-3 1.2-5.9 3.3-8l25.4-25.4c2.1-2.1 5-3.3 8-3.3 6.2 0 11.3 5.1 11.3 11.3v16c0 3-1.2 5.9-3.3 8l-9.4 9.4c-2.1 2.1-5 3.3-8 3.3h-16c-6.2 0-11.3-5.1-11.3-11.3zm128 306.4v-7.1c0-8.8-7.2-16-16-16h-20.2c-10.8 0-26.7-5.3-35.4-11.8l-22.2-16.7c-11.5-8.6-18.2-22.1-18.2-36.4v-23.9c0-16 8.4-30.8 22.1-39l42.9-25.7c7.1-4.2 15.2-6.5 23.4-6.5h31.2c10.9 0 21.4 3.9 29.6 10.9l43.2 37.1h18.3c8.5 0 16.6 3.4 22.6 9.4l17.3 17.3c3.4 3.4 8.1 5.3 12.9 5.3H423c-32.4 58.9-93.8 99.5-164.9 103.1z“]},yo={prefix:”fas“,iconName:”golf-ball“,icon:[416,512,,”f450“,”M96 416h224c0 17.7-14.3 32-32 32h-16c-17.7 0-32 14.3-32 32v20c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-20c0-17.7-14.3-32-32-32h-16c-17.7 0-32-14.3-32-32zm320-208c0 74.2-39 139.2-97.5 176h-221C39 347.2 0 282.2 0 208 0 93.1 93.1 0 208 0s208 93.1 208 208zm-180.1 43.9c18.3 0 33.1-14.8 33.1-33.1 0-14.4-9.3-26.3-22.1-30.9 9.6 26.8-15.6 51.3-41.9 41.9 4.6 12.8 16.5 22.1 30.9 22.1zm49.1 46.9c0-14.4-9.3-26.3-22.1-30.9 9.6 26.8-15.6 51.3-41.9 41.9 4.6 12.8 16.5 22.1 30.9 22.1 18.3 0 33.1-14.9 33.1-33.1zm64-64c0-14.4-9.3-26.3-22.1-30.9 9.6 26.8-15.6 51.3-41.9 41.9 4.6 12.8 16.5 22.1 30.9 22.1 18.3 0 33.1-14.9 33.1-33.1z“]},bo={prefix:”fas“,iconName:”gopuram“,icon:[512,512,,”f664“,”M496 352h-16V240c0-8.8-7.2-16-16-16h-16v-80c0-8.8-7.2-16-16-16h-16V16c0-8.8-7.2-16-16-16s-16 7.2-16 16v16h-64V16c0-8.8-7.2-16-16-16s-16 7.2-16 16v16h-64V16c0-8.8-7.2-16-16-16s-16 7.2-16 16v16h-64V16c0-8.8-7.2-16-16-16S96 7.2 96 16v112H80c-8.8 0-16 7.2-16 16v80H48c-8.8 0-16 7.2-16 16v112H16c-8.8 0-16 7.2-16 16v128c0 8.8 7.2 16 16 16h80V352h32V224h32v-96h32v96h-32v128h-32v160h80v-80c0-8.8 7.2-16 16-16h64c8.8 0 16 7.2 16 16v80h80V352h-32V224h-32v-96h32v96h32v128h32v160h80c8.8 0 16-7.2 16-16V368c0-8.8-7.2-16-16-16zM232 176c0-8.8 7.2-16 16-16h16c8.8 0 16 7.2 16 16v48h-48zm56 176h-64v-64c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16z“]},wo={prefix:”fas“,iconName:”graduation-cap“,icon:[640,512,,”f19d“,”M622.34 153.2L343.4 67.5c-15.2-4.67-31.6-4.67-46.79 0L17.66 153.2c-23.54 7.23-23.54 38.36 0 45.59l48.63 14.94c-10.67 13.19-17.23 29.28-17.88 46.9C38.78 266.15 32 276.11 32 288c0 10.78 5.68 19.85 13.86 25.65L20.33 428.53C18.11 438.52 25.71 448 35.94 448h56.11c10.24 0 17.84-9.48 15.62-19.47L82.14 313.65C90.32 307.85 96 298.78 96 288c0-11.57-6.47-21.25-15.66-26.87.76-15.02 8.44-28.3 20.69-36.72L296.6 284.5c9.06 2.78 26.44 6.25 46.79 0l278.95-85.7c23.55-7.24 23.55-38.36 0-45.6zM352.79 315.09c-28.53 8.76-52.84 3.92-65.59 0l-145.02-44.55L128 384c0 35.35 85.96 64 192 64s192-28.65 192-64l-14.18-113.47-145.03 44.56z“]},xo={prefix:”fas“,iconName:”greater-than“,icon:[384,512,,”f531“,”M365.52 209.85L59.22 67.01c-16.06-7.49-35.15-.54-42.64 15.52L3.01 111.61c-7.49 16.06-.54 35.15 15.52 42.64L236.96 256.1 18.49 357.99C2.47 365.46-4.46 384.5 3.01 400.52l13.52 29C24 445.54 43.04 452.47 59.06 445l306.47-142.91a32.003 32.003 0 0 0 18.48-29v-34.23c-.01-12.45-7.21-23.76-18.49-29.01z“]},So={prefix:”fas“,iconName:”greater-than-equal“,icon:[448,512,,”f532“,”M55.22 107.69l175.56 68.09-175.44 68.05c-18.39 6.03-27.88 24.39-21.2 41l12.09 30.08c6.68 16.61 26.99 25.19 45.38 19.15L393.02 214.2c13.77-4.52 22.98-16.61 22.98-30.17v-15.96c0-13.56-9.21-25.65-22.98-30.17L91.3 17.92c-18.29-6-38.51 2.53-45.15 19.06L34.12 66.9c-6.64 16.53 2.81 34.79 21.1 40.79zM424 400H24c-13.25 0-24 10.74-24 24v48c0 13.25 10.75 24 24 24h400c13.25 0 24-10.75 24-24v-48c0-13.26-10.75-24-24-24z“]},ko={prefix:”fas“,iconName:”grimace“,icon:[496,512,,”f57f“,”M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM144 400h-8c-17.7 0-32-14.3-32-32v-8h40v40zm0-56h-40v-8c0-17.7 14.3-32 32-32h8v40zm-8-136c0-17.7 14.3-32 32-32s32 14.3 32 32-14.3 32-32 32-32-14.3-32-32zm72 192h-48v-40h48v40zm0-56h-48v-40h48v40zm64 56h-48v-40h48v40zm0-56h-48v-40h48v40zm64 56h-48v-40h48v40zm0-56h-48v-40h48v40zm-8-104c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm64 128c0 17.7-14.3 32-32 32h-8v-40h40v8zm0-24h-40v-40h8c17.7 0 32 14.3 32 32v8z“]},_o={prefix:”fas“,iconName:”grin“,icon:[496,512,,”f580“,”M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm80 168c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm-160 0c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm80 256c-60.6 0-134.5-38.3-143.8-93.3-2-11.8 9.3-21.6 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.3-3.7 22.6 6.1 20.7 17.9-9.3 55-83.2 93.3-143.8 93.3z“]},zo={prefix:”fas“,iconName:”grin-alt“,icon:[496,512,,”f581“,”M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm63.7 128.7c7.6-11.4 24.7-11.7 32.7 0 12.4 18.4 15.1 36.9 15.7 55.3-.5 18.4-3.3 36.9-15.7 55.3-7.6 11.4-24.7 11.7-32.7 0-12.4-18.4-15.1-36.9-15.7-55.3.5-18.4 3.3-36.9 15.7-55.3zm-160 0c7.6-11.4 24.7-11.7 32.7 0 12.4 18.4 15.1 36.9 15.7 55.3-.5 18.4-3.3 36.9-15.7 55.3-7.6 11.4-24.7 11.7-32.7 0-12.4-18.4-15.1-36.9-15.7-55.3.5-18.4 3.3-36.9 15.7-55.3zM248 432c-60.6 0-134.5-38.3-143.8-93.3-2-11.8 9.3-21.6 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.4-3.7 22.6 6.1 20.7 17.9-9.3 55-83.2 93.3-143.8 93.3z“]},Co={prefix:”fas“,iconName:”grin-beam“,icon:[496,512,,”f582“,”M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm80 144c23.8 0 52.7 29.3 56 71.4.7 8.6-10.8 11.9-14.9 4.5l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.1 7.3-15.6 4-14.9-4.5 3.1-42.1 32-71.4 55.8-71.4zm-160 0c23.8 0 52.7 29.3 56 71.4.7 8.6-10.8 11.9-14.9 4.5l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.2 7.4-15.6 4-14.9-4.5 3.1-42.1 32-71.4 55.8-71.4zm80 280c-60.6 0-134.5-38.3-143.8-93.3-2-11.9 9.4-21.6 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.4-3.7 22.6 6.1 20.7 17.9-9.3 55-83.2 93.3-143.8 93.3z“]},Mo={prefix:”fas“,iconName:”grin-beam-sweat“,icon:[504,512,,”f583“,”M456 128c26.5 0 48-21 48-47 0-20-28.5-60.4-41.6-77.8-3.2-4.3-9.6-4.3-12.8 0C436.5 20.6 408 61 408 81c0 26 21.5 47 48 47zm0 32c-44.1 0-80-35.4-80-79 0-4.4.3-14.2 8.1-32.2C345 23.1 298.3 8 248 8 111 8 0 119 0 256s111 248 248 248 248-111 248-248c0-35.1-7.4-68.4-20.5-98.6-6.3 1.5-12.7 2.6-19.5 2.6zm-128-8c23.8 0 52.7 29.3 56 71.4.7 8.6-10.8 12-14.9 4.5l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.1 7.4-15.6 4-14.9-4.5 3.1-42.1 32-71.4 55.8-71.4zm-160 0c23.8 0 52.7 29.3 56 71.4.7 8.6-10.8 12-14.9 4.5l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.2 7.4-15.6 4-14.9-4.5 3.1-42.1 32-71.4 55.8-71.4zm80 280c-60.6 0-134.5-38.3-143.8-93.3-2-11.8 9.3-21.6 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.5-3.7 22.6 6.2 20.7 17.9-9.3 55-83.2 93.3-143.8 93.3z“]},Oo={prefix:”fas“,iconName:”grin-hearts“,icon:[496,512,,”f584“,”M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM90.4 183.6c6.7-17.6 26.7-26.7 44.9-21.9l7.1 1.9 2-7.1c5-18.1 22.8-30.9 41.5-27.9 21.4 3.4 34.4 24.2 28.8 44.5L195.3 243c-1.2 4.5-5.9 7.2-10.5 6l-70.2-18.2c-20.4-5.4-31.9-27-24.2-47.2zM248 432c-60.6 0-134.5-38.3-143.8-93.3-2-11.8 9.2-21.5 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.4-3.6 22.6 6.1 20.7 17.9-9.3 55-83.2 93.3-143.8 93.3zm133.4-201.3l-70.2 18.2c-4.5 1.2-9.2-1.5-10.5-6L281.3 173c-5.6-20.3 7.4-41.1 28.8-44.5 18.6-3 36.4 9.8 41.5 27.9l2 7.1 7.1-1.9c18.2-4.7 38.2 4.3 44.9 21.9 7.7 20.3-3.8 41.9-24.2 47.2z“]},To={prefix:”fas“,iconName:”grin-squint“,icon:[496,512,,”f585“,”M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm33.8 189.7l80-48c11.6-6.9 24 7.7 15.4 18L343.6 208l33.6 40.3c8.7 10.4-3.9 24.8-15.4 18l-80-48c-7.7-4.7-7.7-15.9 0-20.6zm-163-30c-8.6-10.3 3.8-24.9 15.4-18l80 48c7.8 4.7 7.8 15.9 0 20.6l-80 48c-11.5 6.8-24-7.6-15.4-18l33.6-40.3-33.6-40.3zM248 432c-60.6 0-134.5-38.3-143.8-93.3-2-11.9 9.4-21.6 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.5-3.7 22.6 6.2 20.7 17.9-9.3 55-83.2 93.3-143.8 93.3z“]},Eo={prefix:”fas“,iconName:”grin-squint-tears“,icon:[512,512,,”f586“,”M409.6 111.9c22.6-3.2 73.5-12 88.3-26.8 19.2-19.2 18.9-50.6-.7-70.2S446-5 426.9 14.2c-14.8 14.8-23.5 65.7-26.8 88.3-.8 5.5 3.9 10.2 9.5 9.4zM102.4 400.1c-22.6 3.2-73.5 12-88.3 26.8-19.1 19.1-18.8 50.6.8 70.2s51 19.9 70.2.7c14.8-14.8 23.5-65.7 26.8-88.3.8-5.5-3.9-10.2-9.5-9.4zm311.7-256.5c-33 3.9-48.6-25.1-45.7-45.7 3.4-24 7.4-42.1 11.5-56.5C285.1-13.4 161.8-.5 80.6 80.6-.5 161.7-13.4 285 41.4 379.9c14.4-4.1 32.4-8 56.5-11.5 33.2-3.9 48.6 25.2 45.7 45.7-3.4 24-7.4 42.1-11.5 56.5 94.8 54.8 218.1 41.9 299.3-39.2s94-204.4 39.2-299.3c-14.4 4.1-32.5 8-56.5 11.5zM255.7 106c3.3-13.2 22.4-11.5 23.6 1.8l4.8 52.3 52.3 4.8c13.4 1.2 14.9 20.3 1.8 23.6l-90.5 22.6c-8.9 2.2-16.7-5.9-14.5-14.5l22.5-90.6zm-90.9 230.3L160 284l-52.3-4.8c-13.4-1.2-14.9-20.3-1.8-23.6l90.5-22.6c8.8-2.2 16.7 5.8 14.5 14.5L188.3 338c-3.1 13.2-22.2 11.7-23.5-1.7zm215.7 44.2c-29.3 29.3-75.7 50.4-116.7 50.4-18.9 0-36.6-4.5-51-14.7-9.8-6.9-8.7-21.8 2-27.2 28.3-14.6 63.9-42.4 97.8-76.3s61.7-69.6 76.3-97.8c5.4-10.5 20.2-11.9 27.3-2 32.3 45.3 7.1 124.7-35.7 167.6z“]},Lo={prefix:”fas“,iconName:”grin-stars“,icon:[496,512,,”f587“,”M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM94.6 168.9l34.9-5 15.5-31.6c2.9-5.8 11-5.8 13.9 0l15.5 31.6 34.9 5c6.2 1 8.9 8.6 4.3 13.2l-25.4 24.6 6 34.9c1 6.2-5.3 11-11 7.9L152 233.3l-31.3 16.3c-5.7 3.1-12-1.7-11-7.9l6-34.9-25.4-24.6c-4.6-4.7-1.9-12.3 4.3-13.3zM248 432c-60.6 0-134.5-38.3-143.8-93.3-2-11.8 9.3-21.5 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.5-3.7 22.6 6.1 20.7 17.9-9.3 55-83.2 93.3-143.8 93.3zm157.7-249.9l-25.4 24.6 6 34.9c1 6.2-5.3 11-11 7.9L344 233.3l-31.3 16.3c-5.7 3.1-12-1.7-11-7.9l6-34.9-25.4-24.6c-4.5-4.6-1.9-12.2 4.3-13.2l34.9-5 15.5-31.6c2.9-5.8 11-5.8 13.9 0l15.5 31.6 34.9 5c6.3.9 9 8.5 4.4 13.1z“]},Ao={prefix:”fas“,iconName:”grin-tears“,icon:[640,512,,”f588“,”M102.4 256.1c-22.6 3.2-73.5 12-88.3 26.8-19.1 19.1-18.8 50.6.8 70.2s51 19.9 70.2.7c14.8-14.8 23.5-65.7 26.8-88.3.8-5.5-3.9-10.2-9.5-9.4zm523.4 26.8c-14.8-14.8-65.7-23.5-88.3-26.8-5.5-.8-10.3 3.9-9.5 9.5 3.2 22.6 12 73.5 26.8 88.3 19.2 19.2 50.6 18.9 70.2-.7s20-51.2.8-70.3zm-129.4-12.8c-3.8-26.6 19.1-49.5 45.7-45.7 8.9 1.3 16.8 2.7 24.3 4.1C552.7 104.5 447.7 8 320 8S87.3 104.5 73.6 228.5c7.5-1.4 15.4-2.8 24.3-4.1 33.2-3.9 48.6 25.3 45.7 45.7-11.8 82.3-29.9 100.4-35.8 106.4-.9.9-2 1.6-3 2.5 42.7 74.6 123 125 215.2 125s172.5-50.4 215.2-125.1c-1-.9-2.1-1.5-3-2.5-5.9-5.9-24-24-35.8-106.3zM400 152c23.8 0 52.7 29.3 56 71.4.7 8.6-10.8 12-14.9 4.5l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.2 7.4-15.6 4-14.9-4.5 3.1-42.1 32-71.4 55.8-71.4zm-160 0c23.8 0 52.7 29.3 56 71.4.7 8.6-10.8 12-14.9 4.5l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.2 7.4-15.6 4-14.9-4.5 3.1-42.1 32-71.4 55.8-71.4zm80 280c-60.6 0-134.5-38.3-143.8-93.3-2-11.7 9.2-21.6 20.7-17.9C227.1 330.5 272 336 320 336s92.9-5.5 123.1-15.2c11.4-3.7 22.6 6.1 20.7 17.9-9.3 55-83.2 93.3-143.8 93.3z“]},Ro={prefix:”fas“,iconName:”grin-tongue“,icon:[496,512,,”f589“,”M248 8C111 8 0 119 0 256c0 106.3 67 196.7 161 232-5.6-12.2-9-25.7-9-40v-45.5c-24.7-16.2-43.5-38.1-47.8-63.8-2-11.8 9.3-21.5 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.4-3.6 22.6 6.1 20.7 17.9-4.3 25.7-23.1 47.6-47.8 63.8V448c0 14.3-3.4 27.8-9 40 94-35.3 161-125.7 161-232C496 119 385 8 248 8zm-80 232c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm160 0c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm-34.9 134.6c-14.4-6.5-31.1 2.2-34.6 17.6l-1.8 7.8c-2.1 9.2-15.2 9.2-17.3 0l-1.8-7.8c-3.5-15.4-20.2-24.1-34.6-17.6-.9.4.3-.2-18.9 9.4v63c0 35.2 28 64.5 63.1 64.9 35.7.5 64.9-28.4 64.9-64v-64c-19.5-9.6-18.2-8.9-19-9.3z“]},No={prefix:”fas“,iconName:”grin-tongue-squint“,icon:[496,512,,”f58a“,”M293.1 374.6c-14.4-6.5-31.1 2.2-34.6 17.6l-1.8 7.8c-2.1 9.2-15.2 9.2-17.3 0l-1.8-7.8c-3.5-15.4-20.2-24.1-34.6-17.6-.9.4.3-.2-18.9 9.4v63c0 35.2 28 64.5 63.1 64.9 35.7.5 64.9-28.4 64.9-64v-64c-19.5-9.6-18.2-8.9-19-9.3zM248 8C111 8 0 119 0 256c0 106.3 67 196.7 161 232-5.6-12.2-9-25.7-9-40v-45.5c-24.7-16.2-43.5-38.1-47.8-63.8-2-11.8 9.2-21.5 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.4-3.7 22.6 6.1 20.7 17.9-4.3 25.7-23.1 47.6-47.8 63.8V448c0 14.3-3.4 27.8-9 40 94-35.3 161-125.7 161-232C496 119 385 8 248 8zm-33.8 210.3l-80 48c-11.5 6.8-24-7.6-15.4-18l33.6-40.3-33.6-40.3c-8.6-10.3 3.8-24.9 15.4-18l80 48c7.7 4.7 7.7 15.9 0 20.6zm163 30c8.7 10.4-3.9 24.8-15.4 18l-80-48c-7.8-4.7-7.8-15.9 0-20.6l80-48c11.7-6.9 23.9 7.7 15.4 18L343.6 208l33.6 40.3z“]},Ho={prefix:”fas“,iconName:”grin-tongue-wink“,icon:[496,512,,”f58b“,”M344 184c-13.3 0-24 10.7-24 24s10.7 24 24 24 24-10.7 24-24-10.7-24-24-24zM248 8C111 8 0 119 0 256c0 106.3 67 196.7 161 232-5.6-12.2-9-25.7-9-40v-45.5c-24.7-16.2-43.5-38.1-47.8-63.8-2-11.8 9.3-21.5 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.5-3.7 22.6 6.1 20.7 17.9-4.3 25.7-23.1 47.6-47.8 63.8V448c0 14.3-3.4 27.8-9 40 94-35.3 161-125.7 161-232C496 119 385 8 248 8zm-56 225l-9.5-8.5c-14.8-13.2-46.2-13.2-61 0L112 233c-8.5 7.4-21.6.3-19.8-10.8 4-25.2 34.2-42.1 59.9-42.1S208 197 212 222.2c1.6 11.1-11.6 18.2-20 10.8zm152 39c-35.3 0-64-28.7-64-64s28.7-64 64-64 64 28.7 64 64-28.7 64-64 64zm-50.9 102.6c-14.4-6.5-31.1 2.2-34.6 17.6l-1.8 7.8c-2.1 9.2-15.2 9.2-17.3 0l-1.8-7.8c-3.5-15.4-20.2-24.1-34.6-17.6-.9.4.3-.2-18.9 9.4v63c0 35.2 28 64.5 63.1 64.9 35.7.5 64.9-28.4 64.9-64v-64c-19.5-9.6-18.2-8.9-19-9.3z“]},Po={prefix:”fas“,iconName:”grin-wink“,icon:[496,512,,”f58c“,”M0 256c0 137 111 248 248 248s248-111 248-248S385 8 248 8 0 119 0 256zm200-48c0 17.7-14.3 32-32 32s-32-14.3-32-32 14.3-32 32-32 32 14.3 32 32zm168 25l-9.5-8.5c-14.8-13.2-46.2-13.2-61 0L288 233c-8.3 7.4-21.6.4-19.8-10.8 4-25.2 34.2-42.1 59.9-42.1S384 197 388 222.2c1.6 11-11.5 18.2-20 10.8zm-243.1 87.8C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.3-3.7 22.6 6 20.7 17.9-9.2 55-83.2 93.3-143.8 93.3s-134.5-38.3-143.8-93.3c-2-11.9 9.3-21.6 20.7-17.9z“]},jo={prefix:”fas“,iconName:”grip-horizontal“,icon:[448,512,,”f58d“,”M96 288H32c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32zm160 0h-64c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32zm160 0h-64c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32zM96 96H32c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32zm160 0h-64c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32zm160 0h-64c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32z“]},Vo={prefix:”fas“,iconName:”grip-lines“,icon:[512,512,,”f7a4“,”M496 288H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h480c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zm0-128H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h480c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16z“]},Do={prefix:”fas“,iconName:”grip-lines-vertical“,icon:[256,512,,”f7a5“,”M96 496V16c0-8.8-7.2-16-16-16H48c-8.8 0-16 7.2-16 16v480c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16zm128 0V16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v480c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16z“]},Io={prefix:”fas“,iconName:”grip-vertical“,icon:[320,512,,”f58e“,”M96 32H32C14.33 32 0 46.33 0 64v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32V64c0-17.67-14.33-32-32-32zm0 160H32c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32zm0 160H32c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32zM288 32h-64c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32V64c0-17.67-14.33-32-32-32zm0 160h-64c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32zm0 160h-64c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32z“]},Fo={prefix:”fas“,iconName:”guitar“,icon:[512,512,,”f7a6“,”M502.63 39L473 9.37a32 32 0 0 0-45.26 0L381.46 55.7a35.14 35.14 0 0 0-8.53 13.79L360.77 106l-76.26 76.26c-12.16-8.76-25.5-15.74-40.1-19.14-33.45-7.78-67-.88-89.88 22a82.45 82.45 0 0 0-20.24 33.47c-6 18.56-23.21 32.69-42.15 34.46-23.7 2.27-45.73 11.45-62.61 28.44C-16.11 327-7.9 409 47.58 464.45S185 528 230.56 482.52c17-16.88 26.16-38.9 28.45-62.71 1.76-18.85 15.89-36.13 34.43-42.14a82.6 82.6 0 0 0 33.48-20.25c22.87-22.88 29.74-56.36 22-89.75-3.39-14.64-10.37-28-19.16-40.2L406 151.23l36.48-12.16a35.14 35.14 0 0 0 13.79-8.53l46.33-46.32a32 32 0 0 0 .03-45.22zM208 352a48 48 0 1 1 48-48 48 48 0 0 1-48 48z“]},Bo={prefix:”fas“,iconName:”h-square“,icon:[448,512,,”f0fd“,”M448 80v352c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V80c0-26.51 21.49-48 48-48h352c26.51 0 48 21.49 48 48zm-112 48h-32c-8.837 0-16 7.163-16 16v80H160v-80c0-8.837-7.163-16-16-16h-32c-8.837 0-16 7.163-16 16v224c0 8.837 7.163 16 16 16h32c8.837 0 16-7.163 16-16v-80h128v80c0 8.837 7.163 16 16 16h32c8.837 0 16-7.163 16-16V144c0-8.837-7.163-16-16-16z“]},Uo={prefix:”fas“,iconName:”hamburger“,icon:[512,512,,”f805“,”M464 256H48a48 48 0 0 0 0 96h416a48 48 0 0 0 0-96zm16 128H32a16 16 0 0 0-16 16v16a64 64 0 0 0 64 64h352a64 64 0 0 0 64-64v-16a16 16 0 0 0-16-16zM58.64 224h394.72c34.57 0 54.62-43.9 34.82-75.88C448 83.2 359.55 32.1 256 32c-103.54.1-192 51.2-232.18 116.11C4 180.09 24.07 224 58.64 224zM384 112a16 16 0 1 1-16 16 16 16 0 0 1 16-16zM256 80a16 16 0 1 1-16 16 16 16 0 0 1 16-16zm-128 32a16 16 0 1 1-16 16 16 16 0 0 1 16-16z“]},qo={prefix:”fas“,iconName:”hammer“,icon:[576,512,,”f6e3“,”M571.31 193.94l-22.63-22.63c-6.25-6.25-16.38-6.25-22.63 0l-11.31 11.31-28.9-28.9c5.63-21.31.36-44.9-16.35-61.61l-45.25-45.25c-62.48-62.48-163.79-62.48-226.28 0l90.51 45.25v18.75c0 16.97 6.74 33.25 18.75 45.25l49.14 49.14c16.71 16.71 40.3 21.98 61.61 16.35l28.9 28.9-11.31 11.31c-6.25 6.25-6.25 16.38 0 22.63l22.63 22.63c6.25 6.25 16.38 6.25 22.63 0l90.51-90.51c6.23-6.24 6.23-16.37-.02-22.62zm-286.72-15.2c-3.7-3.7-6.84-7.79-9.85-11.95L19.64 404.96c-25.57 23.88-26.26 64.19-1.53 88.93s65.05 24.05 88.93-1.53l238.13-255.07c-3.96-2.91-7.9-5.87-11.44-9.41l-49.14-49.14z“]},Go={prefix:”fas“,iconName:”hamsa“,icon:[512,512,,”f665“,”M509.34 307.25C504.28 295.56 492.75 288 480 288h-64V80c0-22-18-40-40-40s-40 18-40 40v134c0 5.52-4.48 10-10 10h-20c-5.52 0-10-4.48-10-10V40c0-22-18-40-40-40s-40 18-40 40v174c0 5.52-4.48 10-10 10h-20c-5.52 0-10-4.48-10-10V80c0-22-18-40-40-40S96 58 96 80v208H32c-12.75 0-24.28 7.56-29.34 19.25a31.966 31.966 0 0 0 5.94 34.58l102.69 110.03C146.97 490.08 199.69 512 256 512s109.03-21.92 144.72-60.14L503.4 341.83a31.966 31.966 0 0 0 5.94-34.58zM256 416c-53.02 0-96-64-96-64s42.98-64 96-64 96 64 96 64-42.98 64-96 64zm0-96c-17.67 0-32 14.33-32 32s14.33 32 32 32 32-14.33 32-32-14.33-32-32-32z“]},Wo={prefix:”fas“,iconName:”hand-holding“,icon:[576,512,,”f4bd“,”M565.3 328.1c-11.8-10.7-30.2-10-42.6 0L430.3 402c-11.3 9.1-25.4 14-40 14H272c-8.8 0-16-7.2-16-16s7.2-16 16-16h78.3c15.9 0 30.7-10.9 33.3-26.6 3.3-20-12.1-37.4-31.6-37.4H192c-27 0-53.1 9.3-74.1 26.3L71.4 384H16c-8.8 0-16 7.2-16 16v96c0 8.8 7.2 16 16 16h356.8c14.5 0 28.6-4.9 40-14L564 377c15.2-12.1 16.4-35.3 1.3-48.9z“]},Zo={prefix:”fas“,iconName:”hand-holding-heart“,icon:[576,512,,”f4be“,”M275.3 250.5c7 7.4 18.4 7.4 25.5 0l108.9-114.2c31.6-33.2 29.8-88.2-5.6-118.8-30.8-26.7-76.7-21.9-104.9 7.7L288 36.9l-11.1-11.6C248.7-4.4 202.8-9.2 172 17.5c-35.3 30.6-37.2 85.6-5.6 118.8l108.9 114.2zm290 77.6c-11.8-10.7-30.2-10-42.6 0L430.3 402c-11.3 9.1-25.4 14-40 14H272c-8.8 0-16-7.2-16-16s7.2-16 16-16h78.3c15.9 0 30.7-10.9 33.3-26.6 3.3-20-12.1-37.4-31.6-37.4H192c-27 0-53.1 9.3-74.1 26.3L71.4 384H16c-8.8 0-16 7.2-16 16v96c0 8.8 7.2 16 16 16h356.8c14.5 0 28.6-4.9 40-14L564 377c15.2-12.1 16.4-35.3 1.3-48.9z“]},$o={prefix:”fas“,iconName:”hand-holding-medical“,icon:[576,512,,”e05c“,”M159.88,175.82h64v64a16,16,0,0,0,16,16h64a16,16,0,0,0,16-16v-64h64a16,16,0,0,0,16-16v-64a16,16,0,0,0-16-16h-64v-64a16,16,0,0,0-16-16h-64a16,16,0,0,0-16,16v64h-64a16,16,0,0,0-16,16v64A16,16,0,0,0,159.88,175.82ZM568.07,336.13a39.91,39.91,0,0,0-55.93-8.47L392.47,415.84H271.86a16,16,0,0,1,0-32H350.1c16,0,30.75-10.87,33.37-26.61a32.06,32.06,0,0,0-31.62-37.38h-160a117.7,117.7,0,0,0-74.12,26.25l-46.5,37.74H15.87a16.11,16.11,0,0,0-16,16v96a16.11,16.11,0,0,0,16,16h347a104.8,104.8,0,0,0,61.7-20.27L559.6,392A40,40,0,0,0,568.07,336.13Z“]},Jo={prefix:”fas“,iconName:”hand-holding-usd“,icon:[576,512,,”f4c0“,”M271.06,144.3l54.27,14.3a8.59,8.59,0,0,1,6.63,8.1c0,4.6-4.09,8.4-9.12,8.4h-35.6a30,30,0,0,1-11.19-2.2c-5.24-2.2-11.28-1.7-15.3,2l-19,17.5a11.68,11.68,0,0,0-2.25,2.66,11.42,11.42,0,0,0,3.88,15.74,83.77,83.77,0,0,0,34.51,11.5V240c0,8.8,7.83,16,17.37,16h17.37c9.55,0,17.38-7.2,17.38-16V222.4c32.93-3.6,57.84-31,53.5-63-3.15-23-22.46-41.3-46.56-47.7L282.68,97.4a8.59,8.59,0,0,1-6.63-8.1c0-4.6,4.09-8.4,9.12-8.4h35.6A30,30,0,0,1,332,83.1c5.23,2.2,11.28,1.7,15.3-2l19-17.5A11.31,11.31,0,0,0,368.47,61a11.43,11.43,0,0,0-3.84-15.78,83.82,83.82,0,0,0-34.52-11.5V16c0-8.8-7.82-16-17.37-16H295.37C285.82,0,278,7.2,278,16V33.6c-32.89,3.6-57.85,31-53.51,63C227.63,119.6,247,137.9,271.06,144.3ZM565.27,328.1c-11.8-10.7-30.2-10-42.6,0L430.27,402a63.64,63.64,0,0,1-40,14H272a16,16,0,0,1,0-32h78.29c15.9,0,30.71-10.9,33.25-26.6a31.2,31.2,0,0,0,.46-5.46A32,32,0,0,0,352,320H192a117.66,117.66,0,0,0-74.1,26.29L71.4,384H16A16,16,0,0,0,0,400v96a16,16,0,0,0,16,16H372.77a64,64,0,0,0,40-14L564,377a32,32,0,0,0,1.28-48.9Z“]},Ko={prefix:”fas“,iconName:”hand-holding-water“,icon:[576,512,,”f4c1“,”M288 256c53 0 96-42.1 96-94 0-40-57.1-120.7-83.2-155.6-6.4-8.5-19.2-8.5-25.6 0C249.1 41.3 192 122 192 162c0 51.9 43 94 96 94zm277.3 72.1c-11.8-10.7-30.2-10-42.6 0L430.3 402c-11.3 9.1-25.4 14-40 14H272c-8.8 0-16-7.2-16-16s7.2-16 16-16h78.3c15.9 0 30.7-10.9 33.3-26.6 3.3-20-12.1-37.4-31.6-37.4H192c-27 0-53.1 9.3-74.1 26.3L71.4 384H16c-8.8 0-16 7.2-16 16v96c0 8.8 7.2 16 16 16h356.8c14.5 0 28.6-4.9 40-14L564 377c15.2-12.1 16.4-35.3 1.3-48.9z“]},Qo={prefix:”fas“,iconName:”hand-lizard“,icon:[576,512,,”f258“,”M384 480h192V363.778a95.998 95.998 0 0 0-14.833-51.263L398.127 54.368A48 48 0 0 0 357.544 32H24C10.745 32 0 42.745 0 56v16c0 30.928 25.072 56 56 56h229.981c12.844 0 21.556 13.067 16.615 24.923l-21.41 51.385A32 32 0 0 1 251.648 224H128c-35.346 0-64 28.654-64 64v8c0 13.255 10.745 24 24 24h147.406a47.995 47.995 0 0 1 25.692 7.455l111.748 70.811A24.001 24.001 0 0 1 384 418.539V480z“]},Yo={prefix:”fas“,iconName:”hand-middle-finger“,icon:[512,512,,”f806“,”M479.93 317.12a37.33 37.33 0 0 0-28.28-36.19L416 272v-49.59c0-11.44-9.69-21.29-23.15-23.54l-38.4-6.4C336.63 189.5 320 200.86 320 216v32a8 8 0 0 1-16 0V50c0-26.28-20.25-49.2-46.52-50A48 48 0 0 0 208 48v200a8 8 0 0 1-16 0v-32c0-15.15-16.63-26.51-34.45-23.54l-30.68 5.12c-18 3-30.87 16.12-30.87 31.38V376a8 8 0 0 1-16 0v-76l-27.36 15A37.34 37.34 0 0 0 32 348.4v73.47a37.31 37.31 0 0 0 10.93 26.39l30.93 30.93A112 112 0 0 0 153.05 512h215A112 112 0 0 0 480 400z“]},Xo={prefix:”fas“,iconName:”hand-paper“,icon:[448,512,,”f256“,”M408.781 128.007C386.356 127.578 368 146.36 368 168.79V256h-8V79.79c0-22.43-18.356-41.212-40.781-40.783C297.488 39.423 280 57.169 280 79v177h-8V40.79C272 18.36 253.644-.422 231.219.007 209.488.423 192 18.169 192 40v216h-8V80.79c0-22.43-18.356-41.212-40.781-40.783C121.488 40.423 104 58.169 104 80v235.992l-31.648-43.519c-12.993-17.866-38.009-21.817-55.877-8.823-17.865 12.994-21.815 38.01-8.822 55.877l125.601 172.705A48 48 0 0 0 172.073 512h197.59c22.274 0 41.622-15.324 46.724-37.006l26.508-112.66a192.011 192.011 0 0 0 5.104-43.975V168c.001-21.831-17.487-39.577-39.218-39.993z“]},ec={prefix:”fas“,iconName:”hand-peace“,icon:[448,512,,”f25b“,”M408 216c-22.092 0-40 17.909-40 40h-8v-32c0-22.091-17.908-40-40-40s-40 17.909-40 40v32h-8V48c0-26.51-21.49-48-48-48s-48 21.49-48 48v208h-13.572L92.688 78.449C82.994 53.774 55.134 41.63 30.461 51.324 5.787 61.017-6.356 88.877 3.337 113.551l74.765 190.342-31.09 24.872c-15.381 12.306-19.515 33.978-9.741 51.081l64 112A39.998 39.998 0 0 0 136 512h240c18.562 0 34.686-12.77 38.937-30.838l32-136A39.97 39.97 0 0 0 448 336v-80c0-22.091-17.908-40-40-40z“]},tc={prefix:”fas“,iconName:”hand-point-down“,icon:[384,512,,”f0a7“,”M91.826 467.2V317.966c-8.248 5.841-16.558 10.57-24.918 14.153C35.098 345.752-.014 322.222 0 288c.008-18.616 10.897-32.203 29.092-40 28.286-12.122 64.329-78.648 77.323-107.534 7.956-17.857 25.479-28.453 43.845-28.464l.001-.002h171.526c11.812 0 21.897 8.596 23.703 20.269 7.25 46.837 38.483 61.76 38.315 123.731-.007 2.724.195 13.254.195 16 0 50.654-22.122 81.574-71.263 72.6-9.297 18.597-39.486 30.738-62.315 16.45-21.177 24.645-53.896 22.639-70.944 6.299V467.2c0 24.15-20.201 44.8-43.826 44.8-23.283 0-43.826-21.35-43.826-44.8zM112 72V24c0-13.255 10.745-24 24-24h192c13.255 0 24 10.745 24 24v48c0 13.255-10.745 24-24 24H136c-13.255 0-24-10.745-24-24zm212-24c0-11.046-8.954-20-20-20s-20 8.954-20 20 8.954 20 20 20 20-8.954 20-20z“]},nc={prefix:”fas“,iconName:”hand-point-left“,icon:[512,512,,”f0a5“,”M44.8 155.826h149.234c-5.841-8.248-10.57-16.558-14.153-24.918C166.248 99.098 189.778 63.986 224 64c18.616.008 32.203 10.897 40 29.092 12.122 28.286 78.648 64.329 107.534 77.323 17.857 7.956 28.453 25.479 28.464 43.845l.002.001v171.526c0 11.812-8.596 21.897-20.269 23.703-46.837 7.25-61.76 38.483-123.731 38.315-2.724-.007-13.254.195-16 .195-50.654 0-81.574-22.122-72.6-71.263-18.597-9.297-30.738-39.486-16.45-62.315-24.645-21.177-22.639-53.896-6.299-70.944H44.8c-24.15 0-44.8-20.201-44.8-43.826 0-23.283 21.35-43.826 44.8-43.826zM440 176h48c13.255 0 24 10.745 24 24v192c0 13.255-10.745 24-24 24h-48c-13.255 0-24-10.745-24-24V200c0-13.255 10.745-24 24-24zm24 212c11.046 0 20-8.954 20-20s-8.954-20-20-20-20 8.954-20 20 8.954 20 20 20z“]},rc={prefix:”fas“,iconName:”hand-point-right“,icon:[512,512,,”f0a4“,”M512 199.652c0 23.625-20.65 43.826-44.8 43.826h-99.851c16.34 17.048 18.346 49.766-6.299 70.944 14.288 22.829 2.147 53.017-16.45 62.315C353.574 425.878 322.654 448 272 448c-2.746 0-13.276-.203-16-.195-61.971.168-76.894-31.065-123.731-38.315C120.596 407.683 112 397.599 112 385.786V214.261l.002-.001c.011-18.366 10.607-35.889 28.464-43.845 28.886-12.994 95.413-49.038 107.534-77.323 7.797-18.194 21.384-29.084 40-29.092 34.222-.014 57.752 35.098 44.119 66.908-3.583 8.359-8.312 16.67-14.153 24.918H467.2c23.45 0 44.8 20.543 44.8 43.826zM96 200v192c0 13.255-10.745 24-24 24H24c-13.255 0-24-10.745-24-24V200c0-13.255 10.745-24 24-24h48c13.255 0 24 10.745 24 24zM68 368c0-11.046-8.954-20-20-20s-20 8.954-20 20 8.954 20 20 20 20-8.954 20-20z“]},ic={prefix:”fas“,iconName:”hand-point-up“,icon:[384,512,,”f0a6“,”M135.652 0c23.625 0 43.826 20.65 43.826 44.8v99.851c17.048-16.34 49.766-18.346 70.944 6.299 22.829-14.288 53.017-2.147 62.315 16.45C361.878 158.426 384 189.346 384 240c0 2.746-.203 13.276-.195 16 .168 61.971-31.065 76.894-38.315 123.731C343.683 391.404 333.599 400 321.786 400H150.261l-.001-.002c-18.366-.011-35.889-10.607-43.845-28.464C93.421 342.648 57.377 276.122 29.092 264 10.897 256.203.008 242.616 0 224c-.014-34.222 35.098-57.752 66.908-44.119 8.359 3.583 16.67 8.312 24.918 14.153V44.8c0-23.45 20.543-44.8 43.826-44.8zM136 416h192c13.255 0 24 10.745 24 24v48c0 13.255-10.745 24-24 24H136c-13.255 0-24-10.745-24-24v-48c0-13.255 10.745-24 24-24zm168 28c-11.046 0-20 8.954-20 20s8.954 20 20 20 20-8.954 20-20-8.954-20-20-20z“]},ac={prefix:”fas“,iconName:”hand-pointer“,icon:[448,512,,”f25a“,”M448 240v96c0 3.084-.356 6.159-1.063 9.162l-32 136C410.686 499.23 394.562 512 376 512H168a40.004 40.004 0 0 1-32.35-16.473l-127.997-176c-12.993-17.866-9.043-42.883 8.822-55.876 17.867-12.994 42.884-9.043 55.877 8.823L104 315.992V40c0-22.091 17.908-40 40-40s40 17.909 40 40v200h8v-40c0-22.091 17.908-40 40-40s40 17.909 40 40v40h8v-24c0-22.091 17.908-40 40-40s40 17.909 40 40v24h8c0-22.091 17.908-40 40-40s40 17.909 40 40zm-256 80h-8v96h8v-96zm88 0h-8v96h8v-96zm88 0h-8v96h8v-96z“]},oc={prefix:”fas“,iconName:”hand-rock“,icon:[512,512,,”f255“,”M464.8 80c-26.9-.4-48.8 21.2-48.8 48h-8V96.8c0-26.3-20.9-48.3-47.2-48.8-26.9-.4-48.8 21.2-48.8 48v32h-8V80.8c0-26.3-20.9-48.3-47.2-48.8-26.9-.4-48.8 21.2-48.8 48v48h-8V96.8c0-26.3-20.9-48.3-47.2-48.8-26.9-.4-48.8 21.2-48.8 48v136l-8-7.1v-48.1c0-26.3-20.9-48.3-47.2-48.8C21.9 127.6 0 149.2 0 176v66.4c0 27.4 11.7 53.5 32.2 71.8l111.7 99.3c10.2 9.1 16.1 22.2 16.1 35.9v6.7c0 13.3 10.7 24 24 24h240c13.3 0 24-10.7 24-24v-2.9c0-12.8 2.6-25.5 7.5-37.3l49-116.3c5-11.8 7.5-24.5 7.5-37.3V128.8c0-26.3-20.9-48.4-47.2-48.8z“]},cc={prefix:”fas“,iconName:”hand-scissors“,icon:[512,512,,”f257“,”M216 440c0-22.092 17.909-40 40-40v-8h-32c-22.091 0-40-17.908-40-40s17.909-40 40-40h32v-8H48c-26.51 0-48-21.49-48-48s21.49-48 48-48h208v-13.572l-177.551-69.74c-24.674-9.694-36.818-37.555-27.125-62.228 9.693-24.674 37.554-36.817 62.228-27.124l190.342 74.765 24.872-31.09c12.306-15.381 33.978-19.515 51.081-9.741l112 64A40.002 40.002 0 0 1 512 168v240c0 18.562-12.77 34.686-30.838 38.937l-136 32A39.982 39.982 0 0 1 336 480h-80c-22.091 0-40-17.908-40-40z“]},sc={prefix:”fas“,iconName:”hand-sparkles“,icon:[640,512,,”e05d“,”M106.66,170.64l.09,0,49.55-20.65a7.32,7.32,0,0,0,3.68-6h0a7.29,7.29,0,0,0-3.68-6l-49.57-20.67-.07,0L86,67.68a6.66,6.66,0,0,0-11.92,0l-20.7,49.63-.05,0L3.7,138A7.29,7.29,0,0,0,0,144H0a7.32,7.32,0,0,0,3.68,6L53.27,170.6l.07,0L74,220.26a6.65,6.65,0,0,0,11.92,0l20.69-49.62ZM471.38,467.41l-1-.42-1-.5a38.67,38.67,0,0,1,0-69.14l1-.49,1-.43,37.49-15.63,15.63-37.48.41-1,.47-.95c3.85-7.74,10.58-13.63,18.35-17.34,0-1.33.25-2.69.27-4V144a32,32,0,0,0-64,0v72a8,8,0,0,1-8,8H456a8,8,0,0,1-8-8V64a32,32,0,0,0-64,0V216a8,8,0,0,1-8,8H360a8,8,0,0,1-8-8V32a32,32,0,0,0-64,0V216a8,8,0,0,1-8,8H264a8,8,0,0,1-8-8V64a32,32,0,0,0-64,0v241l-23.59-32.49a40,40,0,0,0-64.71,47.09L229.3,492.21A48.07,48.07,0,0,0,268.09,512H465.7c19.24,0,35.65-11.73,43.24-28.79l-.07-.17ZM349.79,339.52,320,351.93l-12.42,29.78a4,4,0,0,1-7.15,0L288,351.93l-29.79-12.41a4,4,0,0,1,0-7.16L288,319.94l12.42-29.78a4,4,0,0,1,7.15,0L320,319.94l29.79,12.42a4,4,0,0,1,0,7.16ZM640,431.91a7.28,7.28,0,0,0-3.68-6l-49.57-20.67-.07,0L566,355.63a6.66,6.66,0,0,0-11.92,0l-20.7,49.63-.05,0L483.7,426a7.28,7.28,0,0,0-3.68,6h0a7.29,7.29,0,0,0,3.68,5.95l49.57,20.67.07,0L554,508.21a6.65,6.65,0,0,0,11.92,0l20.69-49.62h0l.09,0,49.55-20.66a7.29,7.29,0,0,0,3.68-5.95h0Z“]},uc={prefix:”fas“,iconName:”hand-spock“,icon:[512,512,,”f259“,”M510.9005,145.27027,442.604,432.09391A103.99507,103.99507,0,0,1,341.43745,512H214.074a135.96968,135.96968,0,0,1-93.18489-36.95291L12.59072,373.12723a39.992,39.992,0,0,1,54.8122-58.24988l60.59342,57.02528v0a283.24849,283.24849,0,0,0-11.6703-80.46734L73.63726,147.36011a40.00575,40.00575,0,1,1,76.71833-22.7187l37.15458,125.39477a8.33113,8.33113,0,0,0,16.05656-4.4414L153.26183,49.95406A39.99638,39.99638,0,1,1,230.73015,30.0166l56.09491,218.15825a10.42047,10.42047,0,0,0,20.30018-.501L344.80766,63.96966a40.052,40.052,0,0,1,51.30245-30.0893c19.86073,6.2998,30.86262,27.67378,26.67564,48.08487l-33.83869,164.966a7.55172,7.55172,0,0,0,14.74406,3.2666l29.3973-123.45874a39.99414,39.99414,0,1,1,77.81208,18.53121Z“]},lc={prefix:”fas“,iconName:”hands“,icon:[640,512,,”f4c2“,”M204.8 230.4c-10.6-14.1-30.7-17-44.8-6.4-14.1 10.6-17 30.7-6.4 44.8l38.1 50.8c4.8 6.4 4.1 15.3-1.5 20.9l-12.8 12.8c-6.7 6.7-17.6 6.2-23.6-1.1L64 244.4V96c0-17.7-14.3-32-32-32S0 78.3 0 96v218.4c0 10.9 3.7 21.5 10.5 30l104.1 134.3c5 6.5 8.4 13.9 10.4 21.7 1.8 6.9 8.1 11.6 15.3 11.6H272c8.8 0 16-7.2 16-16V384c0-27.7-9-54.6-25.6-76.8l-57.6-76.8zM608 64c-17.7 0-32 14.3-32 32v148.4l-89.8 107.8c-6 7.2-17 7.7-23.6 1.1l-12.8-12.8c-5.6-5.6-6.3-14.5-1.5-20.9l38.1-50.8c10.6-14.1 7.7-34.2-6.4-44.8-14.1-10.6-34.2-7.7-44.8 6.4l-57.6 76.8C361 329.4 352 356.3 352 384v112c0 8.8 7.2 16 16 16h131.7c7.1 0 13.5-4.7 15.3-11.6 2-7.8 5.4-15.2 10.4-21.7l104.1-134.3c6.8-8.5 10.5-19.1 10.5-30V96c0-17.7-14.3-32-32-32z“]},fc={prefix:”fas“,iconName:”hands-helping“,icon:[640,512,,”f4c4“,”M488 192H336v56c0 39.7-32.3 72-72 72s-72-32.3-72-72V126.4l-64.9 39C107.8 176.9 96 197.8 96 220.2v47.3l-80 46.2C.7 322.5-4.6 342.1 4.3 357.4l80 138.6c8.8 15.3 28.4 20.5 43.7 11.7L231.4 448H368c35.3 0 64-28.7 64-64h16c17.7 0 32-14.3 32-32v-64h8c13.3 0 24-10.7 24-24v-48c0-13.3-10.7-24-24-24zm147.7-37.4L555.7 16C546.9.7 527.3-4.5 512 4.3L408.6 64H306.4c-12 0-23.7 3.4-33.9 9.7L239 94.6c-9.4 5.8-15 16.1-15 27.1V248c0 22.1 17.9 40 40 40s40-17.9 40-40v-88h184c30.9 0 56 25.1 56 56v28.5l80-46.2c15.3-8.9 20.5-28.4 11.7-43.7z“]},hc={prefix:”fas“,iconName:”hands-wash“,icon:[576,512,,”e05e“,”M496,224a48,48,0,1,0-48-48A48,48,0,0,0,496,224ZM311.47,178.45A56.77,56.77,0,0,1,328,176a56,56,0,0,1,19,3.49l15.35-48.61A24,24,0,0,0,342,99.74c-11.53-1.35-22.21,6.44-25.71,17.51l-20.9,66.17ZM93.65,386.33c.8-.19,1.54-.54,2.35-.71V359.93a156,156,0,0,1,107.06-148l73.7-22.76L310.92,81.05a24,24,0,0,0-20.33-31.11c-11.53-1.34-22.22,6.45-25.72,17.52L231.42,173.88a8,8,0,0,1-15.26-4.83L259.53,31.26A24,24,0,0,0,239.2.15C227.67-1.19,217,6.6,213.49,17.66L165.56,169.37a8,8,0,1,1-15.26-4.82l38.56-122a24,24,0,0,0-20.33-31.11C157,10,146.32,17.83,142.82,28.9l-60,189.85L80.76,168.7A24,24,0,0,0,56.9,144.55c-13.23-.05-24.72,10.54-24.9,23.86V281.14A123.69,123.69,0,0,0,93.65,386.33ZM519.1,336H360a8,8,0,0,1,0-16H488a24,24,0,0,0,23.54-28.76C509.35,279.84,498.71,272,487.1,272H288l47.09-17.06a24,24,0,0,0-14.18-45.88L213.19,242.31A123.88,123.88,0,0,0,128,360v25.65a79.78,79.78,0,0,1,58,108.63A118.9,118.9,0,0,0,248,512H456a24,24,0,0,0,23.54-28.76C477.35,471.84,466.71,464,455.1,464H360a8,8,0,0,1,0-16H488a24,24,0,0,0,23.54-28.76C509.35,407.84,498.71,400,487.1,400H360a8,8,0,0,1,0-16H520a24,24,0,0,0,23.54-28.76C541.35,343.84,530.71,336,519.1,336ZM416,64a32,32,0,1,0-32-32A32,32,0,0,0,416,64ZM112,416a48,48,0,1,0,48,48A48,48,0,0,0,112,416Z“]},dc={prefix:”fas“,iconName:”handshake“,icon:[640,512,,”f2b5“,”M434.7 64h-85.9c-8 0-15.7 3-21.6 8.4l-98.3 90c-.1.1-.2.3-.3.4-16.6 15.6-16.3 40.5-2.1 56 12.7 13.9 39.4 17.6 56.1 2.7.1-.1.3-.1.4-.2l79.9-73.2c6.5-5.9 16.7-5.5 22.6 1 6 6.5 5.5 16.6-1 22.6l-26.1 23.9L504 313.8c2.9 2.4 5.5 5 7.9 7.7V128l-54.6-54.6c-5.9-6-14.1-9.4-22.6-9.4zM544 128.2v223.9c0 17.7 14.3 32 32 32h64V128.2h-96zm48 223.9c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zM0 384h64c17.7 0 32-14.3 32-32V128.2H0V384zm48-63.9c8.8 0 16 7.2 16 16s-7.2 16-16 16-16-7.2-16-16c0-8.9 7.2-16 16-16zm435.9 18.6L334.6 217.5l-30 27.5c-29.7 27.1-75.2 24.5-101.7-4.4-26.9-29.4-24.8-74.9 4.4-101.7L289.1 64h-83.8c-8.5 0-16.6 3.4-22.6 9.4L128 128v223.9h18.3l90.5 81.9c27.4 22.3 67.7 18.1 90-9.3l.2-.2 17.9 15.5c15.9 13 39.4 10.5 52.3-5.4l31.4-38.6 5.4 4.4c13.7 11.1 33.9 9.1 45-4.7l9.5-11.7c11.2-13.8 9.1-33.9-4.6-45.1z“]},pc={prefix:”fas“,iconName:”handshake-alt-slash“,icon:[640,512,,”e05f“,”M358.59,195.6,504.2,313.8a63.4,63.4,0,0,1,22.21,37.91H624a16.05,16.05,0,0,0,16-16V143.91A16,16,0,0,0,624,128H512L457.41,73.41A32,32,0,0,0,434.8,64H348.91a32,32,0,0,0-21.61,8.41l-88.12,80.68-25.69-19.85L289.09,64H205.3a32,32,0,0,0-22.6,9.41l-20.34,20.3L45.47,3.38A16,16,0,0,0,23,6.19L3.38,31.46A16,16,0,0,0,6.19,53.91L594.54,508.63A16,16,0,0,0,617,505.82l19.64-25.27a16,16,0,0,0-2.81-22.45L303.4,202.72l32.69-29.92,27-24.7a16,16,0,0,1,21.61,23.61ZM16,128A16.05,16.05,0,0,0,0,144V335.91a16,16,0,0,0,16,16H146.3l90.5,81.89a64,64,0,0,0,90-9.3l.2-.2,17.91,15.5a37.16,37.16,0,0,0,52.29-5.39l8.8-10.82L23.56,128Z“]},mc={prefix:”fas“,iconName:”handshake-slash“,icon:[640,512,,”e060“,”M0,128.21V384H64a32,32,0,0,0,32-32V184L23.83,128.21ZM48,320.1a16,16,0,1,1-16,16A16,16,0,0,1,48,320.1Zm80,31.81h18.3l90.5,81.89a64,64,0,0,0,90-9.3l.2-.2,17.91,15.5a37.16,37.16,0,0,0,52.29-5.39l8.8-10.82L128,208.72Zm416-223.7V352.1a32,32,0,0,0,32,32h64V128.21ZM592,352.1a16,16,0,1,1,16-16A16,16,0,0,1,592,352.1ZM303.33,202.67l59.58-54.57a16,16,0,0,1,21.59,23.61L358.41,195.6,504,313.8a73.08,73.08,0,0,1,7.91,7.7V128L457.3,73.41A31.76,31.76,0,0,0,434.7,64H348.8a31.93,31.93,0,0,0-21.6,8.41l-88.07,80.64-25.64-19.81L289.09,64H205.3a32,32,0,0,0-22.6,9.41L162.36,93.72,45.47,3.38A16,16,0,0,0,23,6.19L3.38,31.46A16,16,0,0,0,6.19,53.91L594.53,508.63A16,16,0,0,0,617,505.82l19.65-25.27a16,16,0,0,0-2.82-22.45Z“]},vc={prefix:”fas“,iconName:”hanukiah“,icon:[640,512,,”f6e6“,”M232 160c-4.42 0-8 3.58-8 8v120h32V168c0-4.42-3.58-8-8-8h-16zm-64 0c-4.42 0-8 3.58-8 8v120h32V168c0-4.42-3.58-8-8-8h-16zm224 0c-4.42 0-8 3.58-8 8v120h32V168c0-4.42-3.58-8-8-8h-16zm64 0c-4.42 0-8 3.58-8 8v120h32V168c0-4.42-3.58-8-8-8h-16zm88 8c0-4.42-3.58-8-8-8h-16c-4.42 0-8 3.58-8 8v120h32V168zm-440-8c-4.42 0-8 3.58-8 8v120h32V168c0-4.42-3.58-8-8-8h-16zm520 0h-32c-8.84 0-16 7.16-16 16v112c0 17.67-14.33 32-32 32H352V128c0-8.84-7.16-16-16-16h-32c-8.84 0-16 7.16-16 16v192H96c-17.67 0-32-14.33-32-32V176c0-8.84-7.16-16-16-16H16c-8.84 0-16 7.16-16 16v112c0 53.02 42.98 96 96 96h192v64H112c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h416c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16H352v-64h192c53.02 0 96-42.98 96-96V176c0-8.84-7.16-16-16-16zm-16-32c13.25 0 24-11.94 24-26.67S608 48 608 48s-24 38.61-24 53.33S594.75 128 608 128zm-576 0c13.25 0 24-11.94 24-26.67S32 48 32 48 8 86.61 8 101.33 18.75 128 32 128zm288-48c13.25 0 24-11.94 24-26.67S320 0 320 0s-24 38.61-24 53.33S306.75 80 320 80zm-208 48c13.25 0 24-11.94 24-26.67S112 48 112 48s-24 38.61-24 53.33S98.75 128 112 128zm64 0c13.25 0 24-11.94 24-26.67S176 48 176 48s-24 38.61-24 53.33S162.75 128 176 128zm64 0c13.25 0 24-11.94 24-26.67S240 48 240 48s-24 38.61-24 53.33S226.75 128 240 128zm160 0c13.25 0 24-11.94 24-26.67S400 48 400 48s-24 38.61-24 53.33S386.75 128 400 128zm64 0c13.25 0 24-11.94 24-26.67S464 48 464 48s-24 38.61-24 53.33S450.75 128 464 128zm64 0c13.25 0 24-11.94 24-26.67S528 48 528 48s-24 38.61-24 53.33S514.75 128 528 128z“]},gc={prefix:”fas“,iconName:”hard-hat“,icon:[512,512,,”f807“,”M480 288c0-80.25-49.28-148.92-119.19-177.62L320 192V80a16 16 0 0 0-16-16h-96a16 16 0 0 0-16 16v112l-40.81-81.62C81.28 139.08 32 207.75 32 288v64h448zm16 96H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h480a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16z“]},yc={prefix:”fas“,iconName:”hashtag“,icon:[448,512,,”f292“,”M440.667 182.109l7.143-40c1.313-7.355-4.342-14.109-11.813-14.109h-74.81l14.623-81.891C377.123 38.754 371.468 32 363.997 32h-40.632a12 12 0 0 0-11.813 9.891L296.175 128H197.54l14.623-81.891C213.477 38.754 207.822 32 200.35 32h-40.632a12 12 0 0 0-11.813 9.891L132.528 128H53.432a12 12 0 0 0-11.813 9.891l-7.143 40C33.163 185.246 38.818 192 46.289 192h74.81L98.242 320H19.146a12 12 0 0 0-11.813 9.891l-7.143 40C-1.123 377.246 4.532 384 12.003 384h74.81L72.19 465.891C70.877 473.246 76.532 480 84.003 480h40.632a12 12 0 0 0 11.813-9.891L151.826 384h98.634l-14.623 81.891C234.523 473.246 240.178 480 247.65 480h40.632a12 12 0 0 0 11.813-9.891L315.472 384h79.096a12 12 0 0 0 11.813-9.891l7.143-40c1.313-7.355-4.342-14.109-11.813-14.109h-74.81l22.857-128h79.096a12 12 0 0 0 11.813-9.891zM261.889 320h-98.634l22.857-128h98.634l-22.857 128z“]},bc={prefix:”fas“,iconName:”hat-cowboy“,icon:[640,512,,”f8c0“,”M490 296.9C480.51 239.51 450.51 64 392.3 64c-14 0-26.49 5.93-37 14a58.21 58.21 0 0 1-70.58 0c-10.51-8-23-14-37-14-58.2 0-88.2 175.47-97.71 232.88C188.81 309.47 243.73 320 320 320s131.23-10.51 170-23.1zm142.9-37.18a16 16 0 0 0-19.75 1.5c-1 .9-101.27 90.78-293.16 90.78-190.82 0-292.22-89.94-293.24-90.84A16 16 0 0 0 1 278.53C1.73 280.55 78.32 480 320 480s318.27-199.45 319-201.47a16 16 0 0 0-6.09-18.81z“]},wc={prefix:”fas“,iconName:”hat-cowboy-side“,icon:[640,512,,”f8c1“,”M260.8 291.06c-28.63-22.94-62-35.06-96.4-35.06C87 256 21.47 318.72 1.43 412.06c-3.55 16.6-.43 33.83 8.57 47.3C18.75 472.47 31.83 480 45.88 480H592c-103.21 0-155-37.07-233.19-104.46zm234.65-18.29L468.4 116.2A64 64 0 0 0 392 64.41L200.85 105a64 64 0 0 0-50.35 55.79L143.61 226c6.9-.83 13.7-2 20.79-2 41.79 0 82 14.55 117.29 42.82l98 84.48C450.76 412.54 494.9 448 592 448a48 48 0 0 0 48-48c0-25.39-29.6-119.33-144.55-127.23z“]},xc={prefix:”fas“,iconName:”hat-wizard“,icon:[512,512,,”f6e8“,”M496 448H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h480c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zm-304-64l-64-32 64-32 32-64 32 64 64 32-64 32-16 32h208l-86.41-201.63a63.955 63.955 0 0 1-1.89-45.45L416 0 228.42 107.19a127.989 127.989 0 0 0-53.46 59.15L64 416h144l-16-32zm64-224l16-32 16 32 32 16-32 16-16 32-16-32-32-16 32-16z“]},Sc={prefix:”fas“,iconName:”hdd“,icon:[576,512,,”f0a0“,”M576 304v96c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48v-96c0-26.51 21.49-48 48-48h480c26.51 0 48 21.49 48 48zm-48-80a79.557 79.557 0 0 1 30.777 6.165L462.25 85.374A48.003 48.003 0 0 0 422.311 64H153.689a48 48 0 0 0-39.938 21.374L17.223 230.165A79.557 79.557 0 0 1 48 224h480zm-48 96c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm-96 0c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32z“]},kc={prefix:”fas“,iconName:”head-side-cough“,icon:[640,512,,”e061“,”M616,304a24,24,0,1,0-24-24A24,24,0,0,0,616,304ZM552,416a24,24,0,1,0,24,24A24,24,0,0,0,552,416Zm-64-56a24,24,0,1,0,24,24A24,24,0,0,0,488,360ZM616,464a24,24,0,1,0,24,24A24,24,0,0,0,616,464Zm0-104a24,24,0,1,0,24,24A24,24,0,0,0,616,360Zm-64-40a24,24,0,1,0,24,24A24,24,0,0,0,552,320Zm-74.78-45c-21-47.12-48.5-151.75-73.12-186.75A208.13,208.13,0,0,0,234.1,0H192C86,0,0,86,0,192c0,56.75,24.75,107.62,64,142.88V512H288V480h64a64,64,0,0,0,64-64H320a32,32,0,0,1,0-64h96V320h32A32,32,0,0,0,477.22,275ZM288,224a32,32,0,1,1,32-32A32.07,32.07,0,0,1,288,224Z“]},_c={prefix:”fas“,iconName:”head-side-cough-slash“,icon:[640,512,,”e062“,”M454.11,319.21c19.56-3.81,31.62-25,23.11-44.21-21-47.12-48.5-151.75-73.12-186.75A208.13,208.13,0,0,0,234.1,0H192A190.64,190.64,0,0,0,84.18,33.3L45.46,3.38A16,16,0,0,0,23,6.19L3.37,31.46A16,16,0,0,0,6.18,53.91L594.53,508.63A16,16,0,0,0,617,505.82l19.64-25.27a16,16,0,0,0-2.81-22.45ZM313.39,210.45,263.61,172c5.88-7.14,14.43-12,24.36-12a32.06,32.06,0,0,1,32,32C320,199,317.24,205.17,313.39,210.45ZM616,304a24,24,0,1,0-24-24A24,24,0,0,0,616,304Zm-64,64a24,24,0,1,0-24-24A24,24,0,0,0,552,368ZM288,384a32,32,0,0,1,32-32h19.54L20.73,105.59A190.86,190.86,0,0,0,0,192c0,56.75,24.75,107.62,64,142.88V512H288V480h64a64,64,0,0,0,64-64H320A32,32,0,0,1,288,384Zm328-24a24,24,0,1,0,24,24A24,24,0,0,0,616,360Z“]},zc={prefix:”fas“,iconName:”head-side-mask“,icon:[512,512,,”e063“,”M.15,184.42C-2.17,244.21,23,298.06,64,334.88V512H224V316.51L3.67,156.25A182.28,182.28,0,0,0,.15,184.42ZM509.22,275c-21-47.12-48.5-151.75-73.12-186.75A208.11,208.11,0,0,0,266.11,0H200C117,0,42.48,50.57,13.25,123.65L239.21,288H511.76A31.35,31.35,0,0,0,509.22,275ZM320,224a32,32,0,1,1,32-32A32.07,32.07,0,0,1,320,224Zm16,144H496l16-48H256V512H401.88a64,64,0,0,0,60.71-43.76L464,464H336a16,16,0,0,1,0-32H474.67l10.67-32H336a16,16,0,0,1,0-32Z“]},Cc={prefix:”fas“,iconName:”head-side-virus“,icon:[512,512,,”e064“,”M272,240a16,16,0,1,0,16,16A16,16,0,0,0,272,240Zm-64-64a16,16,0,1,0,16,16A16,16,0,0,0,208,176Zm301.2,99c-20.93-47.12-48.43-151.73-73.07-186.75A207.9,207.9,0,0,0,266.09,0H192C86,0,0,86,0,192A191.23,191.23,0,0,0,64,334.81V512H320V448h64a64,64,0,0,0,64-64V320H480A32,32,0,0,0,509.2,275ZM368,240H355.88c-28.51,0-42.79,34.47-22.63,54.63l8.58,8.57a16,16,0,1,1-22.63,22.63l-8.57-8.58C290.47,297.09,256,311.37,256,339.88V352a16,16,0,0,1-32,0V339.88c0-28.51-34.47-42.79-54.63-22.63l-8.57,8.58a16,16,0,0,1-22.63-22.63l8.58-8.57c20.16-20.16,5.88-54.63-22.63-54.63H112a16,16,0,0,1,0-32h12.12c28.51,0,42.79-34.47,22.63-54.63l-8.58-8.57a16,16,0,0,1,22.63-22.63l8.57,8.58c20.16,20.16,54.63,5.88,54.63-22.63V96a16,16,0,0,1,32,0v12.12c0,28.51,34.47,42.79,54.63,22.63l8.57-8.58a16,16,0,0,1,22.63,22.63l-8.58,8.57C313.09,173.53,327.37,208,355.88,208H368a16,16,0,0,1,0,32Z“]},Mc={prefix:”fas“,iconName:”heading“,icon:[512,512,,”f1dc“,”M448 96v320h32a16 16 0 0 1 16 16v32a16 16 0 0 1-16 16H320a16 16 0 0 1-16-16v-32a16 16 0 0 1 16-16h32V288H160v128h32a16 16 0 0 1 16 16v32a16 16 0 0 1-16 16H32a16 16 0 0 1-16-16v-32a16 16 0 0 1 16-16h32V96H32a16 16 0 0 1-16-16V48a16 16 0 0 1 16-16h160a16 16 0 0 1 16 16v32a16 16 0 0 1-16 16h-32v128h192V96h-32a16 16 0 0 1-16-16V48a16 16 0 0 1 16-16h160a16 16 0 0 1 16 16v32a16 16 0 0 1-16 16z“]},Oc={prefix:”fas“,iconName:”headphones“,icon:[512,512,,”f025“,”M256 32C114.52 32 0 146.496 0 288v48a32 32 0 0 0 17.689 28.622l14.383 7.191C34.083 431.903 83.421 480 144 480h24c13.255 0 24-10.745 24-24V280c0-13.255-10.745-24-24-24h-24c-31.342 0-59.671 12.879-80 33.627V288c0-105.869 86.131-192 192-192s192 86.131 192 192v1.627C427.671 268.879 399.342 256 368 256h-24c-13.255 0-24 10.745-24 24v176c0 13.255 10.745 24 24 24h24c60.579 0 109.917-48.098 111.928-108.187l14.382-7.191A32 32 0 0 0 512 336v-48c0-141.479-114.496-256-256-256z“]},Tc={prefix:”fas“,iconName:”headphones-alt“,icon:[512,512,,”f58f“,”M160 288h-16c-35.35 0-64 28.7-64 64.12v63.76c0 35.41 28.65 64.12 64 64.12h16c17.67 0 32-14.36 32-32.06V320.06c0-17.71-14.33-32.06-32-32.06zm208 0h-16c-17.67 0-32 14.35-32 32.06v127.88c0 17.7 14.33 32.06 32 32.06h16c35.35 0 64-28.71 64-64.12v-63.76c0-35.41-28.65-64.12-64-64.12zM256 32C112.91 32 4.57 151.13 0 288v112c0 8.84 7.16 16 16 16h16c8.84 0 16-7.16 16-16V288c0-114.67 93.33-207.8 208-207.82 114.67.02 208 93.15 208 207.82v112c0 8.84 7.16 16 16 16h16c8.84 0 16-7.16 16-16V288C507.43 151.13 399.09 32 256 32z“]},Ec={prefix:”fas“,iconName:”headset“,icon:[512,512,,”f590“,”M192 208c0-17.67-14.33-32-32-32h-16c-35.35 0-64 28.65-64 64v48c0 35.35 28.65 64 64 64h16c17.67 0 32-14.33 32-32V208zm176 144c35.35 0 64-28.65 64-64v-48c0-35.35-28.65-64-64-64h-16c-17.67 0-32 14.33-32 32v112c0 17.67 14.33 32 32 32h16zM256 0C113.18 0 4.58 118.83 0 256v16c0 8.84 7.16 16 16 16h16c8.84 0 16-7.16 16-16v-16c0-114.69 93.31-208 208-208s208 93.31 208 208h-.12c.08 2.43.12 165.72.12 165.72 0 23.35-18.93 42.28-42.28 42.28H320c0-26.51-21.49-48-48-48h-32c-26.51 0-48 21.49-48 48s21.49 48 48 48h181.72c49.86 0 90.28-40.42 90.28-90.28V256C507.42 118.83 398.82 0 256 0z“]},Lc={prefix:”fas“,iconName:”heart“,icon:[512,512,,”f004“,”M462.3 62.6C407.5 15.9 326 24.3 275.7 76.2L256 96.5l-19.7-20.3C186.1 24.3 104.5 15.9 49.7 62.6c-62.8 53.6-66.1 149.8-9.9 207.9l193.5 199.8c12.5 12.9 32.8 12.9 45.3 0l193.5-199.8c56.3-58.1 53-154.3-9.8-207.9z“]},Ac={prefix:”fas“,iconName:”heart-broken“,icon:[512,512,,”f7a9“,”M473.7 73.8l-2.4-2.5c-46-47-118-51.7-169.6-14.8L336 159.9l-96 64 48 128-144-144 96-64-28.6-86.5C159.7 19.6 87 24 40.7 71.4l-2.4 2.4C-10.4 123.6-12.5 202.9 31 256l212.1 218.6c7.1 7.3 18.6 7.3 25.7 0L481 255.9c43.5-53 41.4-132.3-7.3-182.1z“]},Rc={prefix:”fas“,iconName:”heartbeat“,icon:[512,512,,”f21e“,”M320.2 243.8l-49.7 99.4c-6 12.1-23.4 11.7-28.9-.6l-56.9-126.3-30 71.7H60.6l182.5 186.5c7.1 7.3 18.6 7.3 25.7 0L451.4 288H342.3l-22.1-44.2zM473.7 73.9l-2.4-2.5c-51.5-52.6-135.8-52.6-187.4 0L256 100l-27.9-28.5c-51.5-52.7-135.9-52.7-187.4 0l-2.4 2.4C-10.4 123.7-12.5 203 31 256h102.4l35.9-86.2c5.4-12.9 23.6-13.2 29.4-.4l58.2 129.3 49-97.9c5.9-11.8 22.7-11.8 28.6 0l27.6 55.2H481c43.5-53 41.4-132.3-7.3-182.1z“]},Nc={prefix:”fas“,iconName:”helicopter“,icon:[640,512,,”f533“,”M304 384h272c17.67 0 32-14.33 32-32 0-123.71-100.29-224-224-224V64h176c8.84 0 16-7.16 16-16V16c0-8.84-7.16-16-16-16H144c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h176v64H112L68.8 70.4C65.78 66.37 61.03 64 56 64H16.01C5.6 64-2.04 73.78.49 83.88L32 192l160 64 86.4 115.2A31.992 31.992 0 0 0 304 384zm112-188.49C478.55 208.3 528.03 257.44 540.79 320H416V195.51zm219.37 263.3l-22.15-22.2c-6.25-6.26-16.24-6.1-22.64.01-7.09 6.77-13.84 11.25-24.64 11.25H240c-8.84 0-16 7.18-16 16.03v32.06c0 8.85 7.16 16.03 16 16.03h325.94c14.88 0 35.3-.47 68.45-29.52 7.02-6.14 7.57-17.05.98-23.66z“]},Hc={prefix:”fas“,iconName:”highlighter“,icon:[544,512,,”f591“,”M0 479.98L99.92 512l35.45-35.45-67.04-67.04L0 479.98zm124.61-240.01a36.592 36.592 0 0 0-10.79 38.1l13.05 42.83-50.93 50.94 96.23 96.23 50.86-50.86 42.74 13.08c13.73 4.2 28.65-.01 38.15-10.78l35.55-41.64-173.34-173.34-41.52 35.44zm403.31-160.7l-63.2-63.2c-20.49-20.49-53.38-21.52-75.12-2.35L190.55 183.68l169.77 169.78L530.27 154.4c19.18-21.74 18.15-54.63-2.35-75.13z“]},Pc={prefix:”fas“,iconName:”hiking“,icon:[384,512,,”f6ec“,”M80.95 472.23c-4.28 17.16 6.14 34.53 23.28 38.81 2.61.66 5.22.95 7.8.95 14.33 0 27.37-9.7 31.02-24.23l25.24-100.97-52.78-52.78-34.56 138.22zm14.89-196.12L137 117c2.19-8.42-3.14-16.95-11.92-19.06-43.88-10.52-88.35 15.07-99.32 57.17L.49 253.24c-2.19 8.42 3.14 16.95 11.92 19.06l63.56 15.25c8.79 2.1 17.68-3.02 19.87-11.44zM368 160h-16c-8.84 0-16 7.16-16 16v16h-34.75l-46.78-46.78C243.38 134.11 228.61 128 212.91 128c-27.02 0-50.47 18.3-57.03 44.52l-26.92 107.72a32.012 32.012 0 0 0 8.42 30.39L224 397.25V480c0 17.67 14.33 32 32 32s32-14.33 32-32v-82.75c0-17.09-6.66-33.16-18.75-45.25l-46.82-46.82c.15-.5.49-.89.62-1.41l19.89-79.57 22.43 22.43c6 6 14.14 9.38 22.62 9.38h48v240c0 8.84 7.16 16 16 16h16c8.84 0 16-7.16 16-16V176c.01-8.84-7.15-16-15.99-16zM240 96c26.51 0 48-21.49 48-48S266.51 0 240 0s-48 21.49-48 48 21.49 48 48 48z“]},jc={prefix:”fas“,iconName:”hippo“,icon:[640,512,,”f6ed“,”M581.12 96.2c-27.67-.15-52.5 17.58-76.6 26.62C489.98 88.27 455.83 64 416 64c-11.28 0-21.95 2.3-32 5.88V56c0-13.26-10.75-24-24-24h-16c-13.25 0-24 10.74-24 24v48.98C286.01 79.58 241.24 64 192 64 85.96 64 0 135.64 0 224v240c0 8.84 7.16 16 16 16h64c8.84 0 16-7.16 16-16v-70.79C128.35 407.57 166.72 416 208 416s79.65-8.43 112-22.79V464c0 8.84 7.16 16 16 16h64c8.84 0 16-7.16 16-16V288h128v32c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-32c17.67 0 32-14.33 32-32v-92.02c0-34.09-24.79-67.59-58.88-67.78zM448 176c-8.84 0-16-7.16-16-16s7.16-16 16-16 16 7.16 16 16-7.16 16-16 16z“]},Vc={prefix:”fas“,iconName:”history“,icon:[512,512,,”f1da“,”M504 255.531c.253 136.64-111.18 248.372-247.82 248.468-59.015.042-113.223-20.53-155.822-54.911-11.077-8.94-11.905-25.541-1.839-35.607l11.267-11.267c8.609-8.609 22.353-9.551 31.891-1.984C173.062 425.135 212.781 440 256 440c101.705 0 184-82.311 184-184 0-101.705-82.311-184-184-184-48.814 0-93.149 18.969-126.068 49.932l50.754 50.754c10.08 10.08 2.941 27.314-11.313 27.314H24c-8.837 0-16-7.163-16-16V38.627c0-14.254 17.234-21.393 27.314-11.314l49.372 49.372C129.209 34.136 189.552 8 256 8c136.81 0 247.747 110.78 248 247.531zm-180.912 78.784l9.823-12.63c8.138-10.463 6.253-25.542-4.21-33.679L288 256.349V152c0-13.255-10.745-24-24-24h-16c-13.255 0-24 10.745-24 24v135.651l65.409 50.874c10.463 8.137 25.541 6.253 33.679-4.21z“]},Dc={prefix:”fas“,iconName:”hockey-puck“,icon:[512,512,,”f453“,”M0 160c0-53 114.6-96 256-96s256 43 256 96-114.6 96-256 96S0 213 0 160zm0 82.2V352c0 53 114.6 96 256 96s256-43 256-96V242.2c-113.4 82.3-398.5 82.4-512 0z“]},Ic={prefix:”fas“,iconName:”holly-berry“,icon:[448,512,,”f7aa“,”M144 192c26.5 0 48-21.5 48-48s-21.5-48-48-48-48 21.5-48 48 21.5 48 48 48zm112-48c0 26.5 21.5 48 48 48s48-21.5 48-48-21.5-48-48-48-48 21.5-48 48zm-32-48c26.5 0 48-21.5 48-48S250.5 0 224 0s-48 21.5-48 48 21.5 48 48 48zm-16.2 139.1c.1-12.4-13.1-20.1-23.8-13.7-34.3 20.3-71.4 32.7-108.7 36.2-9.7.9-15.6 11.3-11.6 20.2 6.2 13.9 11.1 28.6 14.7 43.8 3.6 15.2-5.3 30.6-20.2 35.1-14.9 4.5-30.1 7.6-45.3 9.1-9.7 1-15.7 11.3-11.7 20.2 15 32.8 22.9 69.5 23 107.7.1 14.4 15.2 23.1 27.6 16 33.2-19 68.9-30.5 104.8-33.9 9.7-.9 15.6-11.3 11.6-20.2-6.2-13.9-11.1-28.6-14.7-43.8-3.6-15.2 5.3-30.6 20.2-35.1 14.9-4.5 30.1-7.6 45.3-9.1 9.7-1 15.7-11.3 11.7-20.2-15.5-34.2-23.3-72.5-22.9-112.3zM435 365.6c-15.2-1.6-30.3-4.7-45.3-9.1-14.9-4.5-23.8-19.9-20.2-35.1 3.6-15.2 8.5-29.8 14.7-43.8 4-8.9-1.9-19.3-11.6-20.2-37.3-3.5-74.4-15.9-108.7-36.2-10.7-6.3-23.9 1.4-23.8 13.7 0 1.6-.2 3.2-.2 4.9.2 33.3 7 65.7 19.9 94 5.7 12.4 5.2 26.6-.6 38.9 4.9 1.2 9.9 2.2 14.8 3.7 14.9 4.5 23.8 19.9 20.2 35.1-3.6 15.2-8.5 29.8-14.7 43.8-4 8.9 1.9 19.3 11.6 20.2 35.9 3.4 71.6 14.9 104.8 33.9 12.5 7.1 27.6-1.6 27.6-16 .2-38.2 8-75 23-107.7 4.3-8.7-1.8-19.1-11.5-20.1z“]},Fc={prefix:”fas“,iconName:”home“,icon:[576,512,,”f015“,”M280.37 148.26L96 300.11V464a16 16 0 0 0 16 16l112.06-.29a16 16 0 0 0 15.92-16V368a16 16 0 0 1 16-16h64a16 16 0 0 1 16 16v95.64a16 16 0 0 0 16 16.05L464 480a16 16 0 0 0 16-16V300L295.67 148.26a12.19 12.19 0 0 0-15.3 0zM571.6 251.47L488 182.56V44.05a12 12 0 0 0-12-12h-56a12 12 0 0 0-12 12v72.61L318.47 43a48 48 0 0 0-61 0L4.34 251.47a12 12 0 0 0-1.6 16.9l25.5 31A12 12 0 0 0 45.15 301l235.22-193.74a12.19 12.19 0 0 1 15.3 0L530.9 301a12 12 0 0 0 16.9-1.6l25.5-31a12 12 0 0 0-1.7-16.93z“]},Bc={prefix:”fas“,iconName:”horse“,icon:[576,512,,”f6f0“,”M575.92 76.6c-.01-8.13-3.02-15.87-8.58-21.8-3.78-4.03-8.58-9.12-13.69-14.5 11.06-6.84 19.5-17.49 22.18-30.66C576.85 4.68 572.96 0 567.9 0H447.92c-70.69 0-128 57.31-128 128H160c-28.84 0-54.4 12.98-72 33.11V160c-48.53 0-88 39.47-88 88v56c0 8.84 7.16 16 16 16h16c8.84 0 16-7.16 16-16v-56c0-13.22 6.87-24.39 16.78-31.68-.21 2.58-.78 5.05-.78 7.68 0 27.64 11.84 52.36 30.54 69.88l-25.72 68.6a63.945 63.945 0 0 0-2.16 37.99l24.85 99.41A15.982 15.982 0 0 0 107.02 512h65.96c10.41 0 18.05-9.78 15.52-19.88l-26.31-105.26 23.84-63.59L320 345.6V496c0 8.84 7.16 16 16 16h64c8.84 0 16-7.16 16-16V318.22c19.74-20.19 32-47.75 32-78.22 0-.22-.07-.42-.08-.64V136.89l16 7.11 18.9 37.7c7.45 14.87 25.05 21.55 40.49 15.37l32.55-13.02a31.997 31.997 0 0 0 20.12-29.74l-.06-77.71zm-64 19.4c-8.84 0-16-7.16-16-16s7.16-16 16-16 16 7.16 16 16-7.16 16-16 16z“]},Uc={prefix:”fas“,iconName:”horse-head“,icon:[512,512,,”f7ab“,”M509.8 332.5l-69.9-164.3c-14.9-41.2-50.4-71-93-79.2 18-10.6 46.3-35.9 34.2-82.3-1.3-5-7.1-7.9-12-6.1L166.9 76.3C35.9 123.4 0 238.9 0 398.8V480c0 17.7 14.3 32 32 32h236.2c23.8 0 39.3-25 28.6-46.3L256 384v-.7c-45.6-3.5-84.6-30.7-104.3-69.6-1.6-3.1-.9-6.9 1.6-9.3l12.1-12.1c3.9-3.9 10.6-2.7 12.9 2.4 14.8 33.7 48.2 57.4 87.4 57.4 17.2 0 33-5.1 46.8-13.2l46 63.9c6 8.4 15.7 13.3 26 13.3h50.3c8.5 0 16.6-3.4 22.6-9.4l45.3-39.8c8.9-9.1 11.7-22.6 7.1-34.4zM328 224c-13.3 0-24-10.7-24-24s10.7-24 24-24 24 10.7 24 24-10.7 24-24 24z“]},qc={prefix:”fas“,iconName:”hospital“,icon:[448,512,,”f0f8“,”M448 492v20H0v-20c0-6.627 5.373-12 12-12h20V120c0-13.255 10.745-24 24-24h88V24c0-13.255 10.745-24 24-24h112c13.255 0 24 10.745 24 24v72h88c13.255 0 24 10.745 24 24v360h20c6.627 0 12 5.373 12 12zM308 192h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12zm-168 64h40c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12zm104 128h-40c-6.627 0-12 5.373-12 12v84h64v-84c0-6.627-5.373-12-12-12zm64-96h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12zm-116 12c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12v-40zM182 96h26v26a6 6 0 0 0 6 6h20a6 6 0 0 0 6-6V96h26a6 6 0 0 0 6-6V70a6 6 0 0 0-6-6h-26V38a6 6 0 0 0-6-6h-20a6 6 0 0 0-6 6v26h-26a6 6 0 0 0-6 6v20a6 6 0 0 0 6 6z“]},Gc={prefix:”fas“,iconName:”hospital-alt“,icon:[576,512,,”f47d“,”M544 96H416V32c0-17.7-14.3-32-32-32H192c-17.7 0-32 14.3-32 32v64H32c-17.7 0-32 14.3-32 32v368c0 8.8 7.2 16 16 16h544c8.8 0 16-7.2 16-16V128c0-17.7-14.3-32-32-32zM160 436c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm0-128c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm160 128c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm0-128c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm16-170c0 3.3-2.7 6-6 6h-26v26c0 3.3-2.7 6-6 6h-20c-3.3 0-6-2.7-6-6v-26h-26c-3.3 0-6-2.7-6-6v-20c0-3.3 2.7-6 6-6h26V86c0-3.3 2.7-6 6-6h20c3.3 0 6 2.7 6 6v26h26c3.3 0 6 2.7 6 6v20zm144 298c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm0-128c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40z“]},Wc={prefix:”fas“,iconName:”hospital-symbol“,icon:[512,512,,”f47e“,”M256 0C114.6 0 0 114.6 0 256s114.6 256 256 256 256-114.6 256-256S397.4 0 256 0zm112 376c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8v-88h-96v88c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8V136c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v88h96v-88c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v240z“]},Zc={prefix:”fas“,iconName:”hospital-user“,icon:[640,512,,”f80d“,”M480 320a96 96 0 1 0-96-96 96 96 0 0 0 96 96zm48 32a22.88 22.88 0 0 0-7.06 1.09 124.76 124.76 0 0 1-81.89 0A22.82 22.82 0 0 0 432 352a112 112 0 0 0-112 112.62c.14 26.26 21.73 47.38 48 47.38h224c26.27 0 47.86-21.12 48-47.38A112 112 0 0 0 528 352zm-198.09 10.45A145.19 145.19 0 0 1 352 344.62V128a32 32 0 0 0-32-32h-32V32a32 32 0 0 0-32-32H96a32 32 0 0 0-32 32v64H32a32 32 0 0 0-32 32v368a16 16 0 0 0 16 16h288.31A78.62 78.62 0 0 1 288 464.79a143.06 143.06 0 0 1 41.91-102.34zM144 404a12 12 0 0 1-12 12H92a12 12 0 0 1-12-12v-40a12 12 0 0 1 12-12h40a12 12 0 0 1 12 12zm0-128a12 12 0 0 1-12 12H92a12 12 0 0 1-12-12v-40a12 12 0 0 1 12-12h40a12 12 0 0 1 12 12zm48-122a6 6 0 0 1-6 6h-20a6 6 0 0 1-6-6v-26h-26a6 6 0 0 1-6-6v-20a6 6 0 0 1 6-6h26V70a6 6 0 0 1 6-6h20a6 6 0 0 1 6 6v26h26a6 6 0 0 1 6 6v20a6 6 0 0 1-6 6h-26zm80 250a12 12 0 0 1-12 12h-40a12 12 0 0 1-12-12v-40a12 12 0 0 1 12-12h40a12 12 0 0 1 12 12zm0-128a12 12 0 0 1-12 12h-40a12 12 0 0 1-12-12v-40a12 12 0 0 1 12-12h40a12 12 0 0 1 12 12z“]},$c={prefix:”fas“,iconName:”hot-tub“,icon:[512,512,,”f593“,”M414.21 177.65c1.02 8.21 7.75 14.35 15.75 14.35h16.12c9.51 0 17.08-8.57 16-18.35-4.34-39.11-22.4-74.53-50.13-97.16-17.37-14.17-28.82-36.75-31.98-62.15C378.96 6.14 372.22 0 364.23 0h-16.12c-9.51 0-17.09 8.57-16 18.35 4.34 39.11 22.4 74.53 50.13 97.16 17.36 14.17 28.82 36.75 31.97 62.14zm-108 0c1.02 8.21 7.75 14.35 15.75 14.35h16.12c9.51 0 17.08-8.57 16-18.35-4.34-39.11-22.4-74.53-50.13-97.16-17.37-14.17-28.82-36.75-31.98-62.15C270.96 6.14 264.22 0 256.23 0h-16.12c-9.51 0-17.09 8.57-16 18.35 4.34 39.11 22.4 74.53 50.13 97.16 17.36 14.17 28.82 36.75 31.97 62.14zM480 256H256l-110.93-83.2a63.99 63.99 0 0 0-38.4-12.8H64c-35.35 0-64 28.65-64 64v224c0 35.35 28.65 64 64 64h384c35.35 0 64-28.65 64-64V288c0-17.67-14.33-32-32-32zM128 440c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8V328c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v112zm96 0c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8V328c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v112zm96 0c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8V328c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v112zm96 0c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8V328c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v112zM64 128c35.35 0 64-28.65 64-64S99.35 0 64 0 0 28.65 0 64s28.65 64 64 64z“]},Jc={prefix:”fas“,iconName:”hotdog“,icon:[512,512,,”f80f“,”M488.56 23.44a80 80 0 0 0-113.12 0l-352 352a80 80 0 1 0 113.12 113.12l352-352a80 80 0 0 0 0-113.12zm-49.93 95.19c-19.6 19.59-37.52 22.67-51.93 25.14C373.76 146 364.4 147.6 352 160s-14 21.76-16.23 34.71c-2.48 14.4-5.55 32.33-25.15 51.92s-37.52 22.67-51.92 25.15C245.75 274 236.4 275.6 224 288s-14 21.75-16.23 34.7c-2.47 14.4-5.54 32.33-25.14 51.92s-37.53 22.68-51.93 25.15C117.76 402 108.4 403.6 96 416a16 16 0 0 1-22.63-22.63c19.6-19.59 37.52-22.67 51.92-25.14 13-2.22 22.3-3.82 34.71-16.23s14-21.75 16.22-34.7c2.48-14.4 5.55-32.33 25.15-51.92s37.52-22.67 51.92-25.14c13-2.22 22.3-3.83 34.7-16.23s14-21.76 16.24-34.71c2.47-14.4 5.54-32.33 25.14-51.92s37.52-22.68 51.92-25.15C394.24 110 403.59 108.41 416 96a16 16 0 0 1 22.63 22.63zM31.44 322.18L322.18 31.44l-11.54-11.55c-25-25-63.85-26.66-86.79-3.72L16.17 223.85c-22.94 22.94-21.27 61.79 3.72 86.78zm449.12-132.36L189.82 480.56l11.54 11.55c25 25 63.85 26.66 86.79 3.72l207.68-207.68c22.94-22.94 21.27-61.79-3.72-86.79z“]},Kc={prefix:”fas“,iconName:”hotel“,icon:[576,512,,”f594“,”M560 64c8.84 0 16-7.16 16-16V16c0-8.84-7.16-16-16-16H16C7.16 0 0 7.16 0 16v32c0 8.84 7.16 16 16 16h15.98v384H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h240v-80c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16v80h240c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16h-16V64h16zm-304 44.8c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v38.4c0 6.4-6.4 12.8-12.8 12.8h-38.4c-6.4 0-12.8-6.4-12.8-12.8v-38.4zm0 96c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v38.4c0 6.4-6.4 12.8-12.8 12.8h-38.4c-6.4 0-12.8-6.4-12.8-12.8v-38.4zm-128-96c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v38.4c0 6.4-6.4 12.8-12.8 12.8h-38.4c-6.4 0-12.8-6.4-12.8-12.8v-38.4zM179.2 256h-38.4c-6.4 0-12.8-6.4-12.8-12.8v-38.4c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v38.4c0 6.4-6.4 12.8-12.8 12.8zM192 384c0-53.02 42.98-96 96-96s96 42.98 96 96H192zm256-140.8c0 6.4-6.4 12.8-12.8 12.8h-38.4c-6.4 0-12.8-6.4-12.8-12.8v-38.4c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v38.4zm0-96c0 6.4-6.4 12.8-12.8 12.8h-38.4c-6.4 0-12.8-6.4-12.8-12.8v-38.4c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v38.4z“]},Qc={prefix:”fas“,iconName:”hourglass“,icon:[384,512,,”f254“,”M360 64c13.255 0 24-10.745 24-24V24c0-13.255-10.745-24-24-24H24C10.745 0 0 10.745 0 24v16c0 13.255 10.745 24 24 24 0 90.965 51.016 167.734 120.842 192C75.016 280.266 24 357.035 24 448c-13.255 0-24 10.745-24 24v16c0 13.255 10.745 24 24 24h336c13.255 0 24-10.745 24-24v-16c0-13.255-10.745-24-24-24 0-90.965-51.016-167.734-120.842-192C308.984 231.734 360 154.965 360 64z“]},Yc={prefix:”fas“,iconName:”hourglass-end“,icon:[384,512,,”f253“,”M360 64c13.255 0 24-10.745 24-24V24c0-13.255-10.745-24-24-24H24C10.745 0 0 10.745 0 24v16c0 13.255 10.745 24 24 24 0 90.965 51.016 167.734 120.842 192C75.016 280.266 24 357.035 24 448c-13.255 0-24 10.745-24 24v16c0 13.255 10.745 24 24 24h336c13.255 0 24-10.745 24-24v-16c0-13.255-10.745-24-24-24 0-90.965-51.016-167.734-120.842-192C308.984 231.734 360 154.965 360 64zM192 208c-57.787 0-104-66.518-104-144h208c0 77.945-46.51 144-104 144z“]},Xc={prefix:”fas“,iconName:”hourglass-half“,icon:[384,512,,”f252“,”M360 0H24C10.745 0 0 10.745 0 24v16c0 13.255 10.745 24 24 24 0 90.965 51.016 167.734 120.842 192C75.016 280.266 24 357.035 24 448c-13.255 0-24 10.745-24 24v16c0 13.255 10.745 24 24 24h336c13.255 0 24-10.745 24-24v-16c0-13.255-10.745-24-24-24 0-90.965-51.016-167.734-120.842-192C308.984 231.734 360 154.965 360 64c13.255 0 24-10.745 24-24V24c0-13.255-10.745-24-24-24zm-75.078 384H99.08c17.059-46.797 52.096-80 92.92-80 40.821 0 75.862 33.196 92.922 80zm.019-256H99.078C91.988 108.548 88 86.748 88 64h208c0 22.805-3.987 44.587-11.059 64z“]},es={prefix:”fas“,iconName:”hourglass-start“,icon:[384,512,,”f251“,”M360 0H24C10.745 0 0 10.745 0 24v16c0 13.255 10.745 24 24 24 0 90.965 51.016 167.734 120.842 192C75.016 280.266 24 357.035 24 448c-13.255 0-24 10.745-24 24v16c0 13.255 10.745 24 24 24h336c13.255 0 24-10.745 24-24v-16c0-13.255-10.745-24-24-24 0-90.965-51.016-167.734-120.842-192C308.984 231.734 360 154.965 360 64c13.255 0 24-10.745 24-24V24c0-13.255-10.745-24-24-24zm-64 448H88c0-77.458 46.204-144 104-144 57.786 0 104 66.517 104 144z“]},ts={prefix:”fas“,iconName:”house-damage“,icon:[576,512,,”f6f1“,”M288 114.96L69.47 307.71c-1.62 1.46-3.69 2.14-5.47 3.35V496c0 8.84 7.16 16 16 16h149.23L192 439.19l104.11-64-60.16-119.22L384 392.75l-104.11 64L319.81 512H496c8.84 0 16-7.16 16-16V311.1c-1.7-1.16-3.72-1.82-5.26-3.2L288 114.96zm282.69 121.32L512 184.45V48c0-8.84-7.16-16-16-16h-64c-8.84 0-16 7.16-16 16v51.69L314.75 10.31C307.12 3.45 297.56.01 288 0s-19.1 3.41-26.7 10.27L5.31 236.28c-6.57 5.91-7.12 16.02-1.21 22.6l21.4 23.82c5.9 6.57 16.02 7.12 22.6 1.21L277.42 81.63c6.05-5.33 15.12-5.33 21.17 0L527.91 283.9c6.57 5.9 16.69 5.36 22.6-1.21l21.4-23.82c5.9-6.57 5.36-16.69-1.22-22.59z“]},ns={prefix:”fas“,iconName:”house-user“,icon:[576,512,,”e065“,”M570.69,236.27,512,184.44V48a16,16,0,0,0-16-16H432a16,16,0,0,0-16,16V99.67L314.78,10.3C308.5,4.61,296.53,0,288,0s-20.46,4.61-26.74,10.3l-256,226A18.27,18.27,0,0,0,0,248.2a18.64,18.64,0,0,0,4.09,10.71L25.5,282.7a21.14,21.14,0,0,0,12,5.3,21.67,21.67,0,0,0,10.69-4.11l15.9-14V480a32,32,0,0,0,32,32H480a32,32,0,0,0,32-32V269.88l15.91,14A21.94,21.94,0,0,0,538.63,288a20.89,20.89,0,0,0,11.87-5.31l21.41-23.81A21.64,21.64,0,0,0,576,248.19,21,21,0,0,0,570.69,236.27ZM288,176a64,64,0,1,1-64,64A64,64,0,0,1,288,176ZM400,448H176a16,16,0,0,1-16-16,96,96,0,0,1,96-96h64a96,96,0,0,1,96,96A16,16,0,0,1,400,448Z“]},rs={prefix:”fas“,iconName:”hryvnia“,icon:[384,512,,”f6f2“,”M368 240c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16h-41.86c13.41-28.63 13.74-63.33-4.13-94.05C303.34 49.84 267.1 32 229.96 32h-78.82c-24.32 0-47.86 8.53-66.54 24.09L72.83 65.9c-10.18 8.49-11.56 23.62-3.07 33.8l20.49 24.59c8.49 10.19 23.62 11.56 33.81 3.07l11.73-9.78c4.32-3.6 9.77-5.57 15.39-5.57h83.62c11.69 0 21.2 9.52 21.2 21.2 0 5.91-2.48 11.58-6.81 15.58L219.7 176H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h134.37l-34.67 32H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h41.86c-13.41 28.63-13.74 63.33 4.13 94.05C80.66 462.15 116.9 480 154.04 480h78.82c24.32 0 47.86-8.53 66.54-24.09l11.77-9.81c10.18-8.49 11.56-23.62 3.07-33.8l-20.49-24.59c-8.49-10.19-23.62-11.56-33.81-3.07l-11.75 9.8a23.992 23.992 0 0 1-15.36 5.56H149.2c-11.69 0-21.2-9.52-21.2-21.2 0-5.91 2.48-11.58 6.81-15.58L164.3 336H368c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16H233.63l34.67-32H368z“]},is={prefix:”fas“,iconName:”i-cursor“,icon:[256,512,,”f246“,”M256 52.048V12.065C256 5.496 250.726.148 244.158.066 211.621-.344 166.469.011 128 37.959 90.266.736 46.979-.114 11.913.114 5.318.157 0 5.519 0 12.114v39.645c0 6.687 5.458 12.078 12.145 11.998C38.111 63.447 96 67.243 96 112.182V224H60c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h36v112c0 44.932-56.075 48.031-83.95 47.959C5.404 447.942 0 453.306 0 459.952v39.983c0 6.569 5.274 11.917 11.842 11.999 32.537.409 77.689.054 116.158-37.894 37.734 37.223 81.021 38.073 116.087 37.845 6.595-.043 11.913-5.405 11.913-12V460.24c0-6.687-5.458-12.078-12.145-11.998C217.889 448.553 160 444.939 160 400V288h36c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-36V112.182c0-44.932 56.075-48.213 83.95-48.142 6.646.018 12.05-5.346 12.05-11.992z“]},as={prefix:”fas“,iconName:”ice-cream“,icon:[448,512,,”f810“,”M368 160h-.94a144 144 0 1 0-286.12 0H80a48 48 0 0 0 0 96h288a48 48 0 0 0 0-96zM195.38 493.69a31.52 31.52 0 0 0 57.24 0L352 288H96z“]},os={prefix:”fas“,iconName:”icicles“,icon:[512,512,,”f7ad“,”M511.4 37.9C515.1 18.2 500 0 480 0H32C10.6 0-4.8 20.7 1.4 41.2l87.1 273.4c2.5 7.2 12.7 7.2 15.1 0L140 190.5l44.2 187.3c1.9 8.3 13.7 8.3 15.6 0l46.5-196.9 34.1 133.4c2.3 7.6 13 7.6 15.3 0l45.8-172.5 66.7 363.8c1.7 8.6 14 8.6 15.7 0l87.5-467.7z“]},cs={prefix:”fas“,iconName:”icons“,icon:[512,512,,”f86d“,”M116.65 219.35a15.68 15.68 0 0 0 22.65 0l96.75-99.83c28.15-29 26.5-77.1-4.91-103.88C203.75-7.7 163-3.5 137.86 22.44L128 32.58l-9.85-10.14C93.05-3.5 52.25-7.7 24.86 15.64c-31.41 26.78-33 74.85-5 103.88zm143.92 100.49h-48l-7.08-14.24a27.39 27.39 0 0 0-25.66-17.78h-71.71a27.39 27.39 0 0 0-25.66 17.78l-7 14.24h-48A27.45 27.45 0 0 0 0 347.3v137.25A27.44 27.44 0 0 0 27.43 512h233.14A27.45 27.45 0 0 0 288 484.55V347.3a27.45 27.45 0 0 0-27.43-27.46zM144 468a52 52 0 1 1 52-52 52 52 0 0 1-52 52zm355.4-115.9h-60.58l22.36-50.75c2.1-6.65-3.93-13.21-12.18-13.21h-75.59c-6.3 0-11.66 3.9-12.5 9.1l-16.8 106.93c-1 6.3 4.88 11.89 12.5 11.89h62.31l-24.2 83c-1.89 6.65 4.2 12.9 12.23 12.9a13.26 13.26 0 0 0 10.92-5.25l92.4-138.91c4.88-6.91-1.16-15.7-10.87-15.7zM478.08.33L329.51 23.17C314.87 25.42 304 38.92 304 54.83V161.6a83.25 83.25 0 0 0-16-1.7c-35.35 0-64 21.48-64 48s28.65 48 64 48c35.2 0 63.73-21.32 64-47.66V99.66l112-17.22v47.18a83.25 83.25 0 0 0-16-1.7c-35.35 0-64 21.48-64 48s28.65 48 64 48c35.2 0 63.73-21.32 64-47.66V32c0-19.48-16-34.42-33.92-31.67z“]},ss={prefix:”fas“,iconName:”id-badge“,icon:[384,512,,”f2c1“,”M336 0H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zM144 32h96c8.8 0 16 7.2 16 16s-7.2 16-16 16h-96c-8.8 0-16-7.2-16-16s7.2-16 16-16zm48 128c35.3 0 64 28.7 64 64s-28.7 64-64 64-64-28.7-64-64 28.7-64 64-64zm112 236.8c0 10.6-10 19.2-22.4 19.2H102.4C90 416 80 407.4 80 396.8v-19.2c0-31.8 30.1-57.6 67.2-57.6h5c12.3 5.1 25.7 8 39.8 8s27.6-2.9 39.8-8h5c37.1 0 67.2 25.8 67.2 57.6v19.2z“]},us={prefix:”fas“,iconName:”id-card“,icon:[576,512,,”f2c2“,”M528 32H48C21.5 32 0 53.5 0 80v16h576V80c0-26.5-21.5-48-48-48zM0 432c0 26.5 21.5 48 48 48h480c26.5 0 48-21.5 48-48V128H0v304zm352-232c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H360c-4.4 0-8-3.6-8-8v-16zm0 64c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H360c-4.4 0-8-3.6-8-8v-16zm0 64c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H360c-4.4 0-8-3.6-8-8v-16zM176 192c35.3 0 64 28.7 64 64s-28.7 64-64 64-64-28.7-64-64 28.7-64 64-64zM67.1 396.2C75.5 370.5 99.6 352 128 352h8.2c12.3 5.1 25.7 8 39.8 8s27.6-2.9 39.8-8h8.2c28.4 0 52.5 18.5 60.9 44.2 3.2 9.9-5.2 19.8-15.6 19.8H82.7c-10.4 0-18.8-10-15.6-19.8z“]},ls={prefix:”fas“,iconName:”id-card-alt“,icon:[576,512,,”f47f“,”M528 64H384v96H192V64H48C21.5 64 0 85.5 0 112v352c0 26.5 21.5 48 48 48h480c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48zM288 224c35.3 0 64 28.7 64 64s-28.7 64-64 64-64-28.7-64-64 28.7-64 64-64zm93.3 224H194.7c-10.4 0-18.8-10-15.6-19.8 8.3-25.6 32.4-44.2 60.9-44.2h8.2c12.3 5.1 25.7 8 39.8 8s27.6-2.9 39.8-8h8.2c28.4 0 52.5 18.5 60.9 44.2 3.2 9.8-5.2 19.8-15.6 19.8zM352 32c0-17.7-14.3-32-32-32h-64c-17.7 0-32 14.3-32 32v96h128V32z“]},fs={prefix:”fas“,iconName:”igloo“,icon:[576,512,,”f7ae“,”M320 33.9c-10.5-1.2-21.2-1.9-32-1.9-99.8 0-187.8 50.8-239.4 128H320V33.9zM96 192H30.3C11.1 230.6 0 274 0 320h96V192zM352 39.4V160h175.4C487.2 99.9 424.8 55.9 352 39.4zM480 320h96c0-46-11.1-89.4-30.3-128H480v128zm-64 64v96h128c17.7 0 32-14.3 32-32v-96H411.5c2.6 10.3 4.5 20.9 4.5 32zm32-192H128v128h49.8c22.2-38.1 63-64 110.2-64s88 25.9 110.2 64H448V192zM0 448c0 17.7 14.3 32 32 32h128v-96c0-11.1 1.9-21.7 4.5-32H0v96zm288-160c-53 0-96 43-96 96v96h192v-96c0-53-43-96-96-96z“]},hs={prefix:”fas“,iconName:”image“,icon:[512,512,,”f03e“,”M464 448H48c-26.51 0-48-21.49-48-48V112c0-26.51 21.49-48 48-48h416c26.51 0 48 21.49 48 48v288c0 26.51-21.49 48-48 48zM112 120c-30.928 0-56 25.072-56 56s25.072 56 56 56 56-25.072 56-56-25.072-56-56-56zM64 384h384V272l-87.515-87.515c-4.686-4.686-12.284-4.686-16.971 0L208 320l-55.515-55.515c-4.686-4.686-12.284-4.686-16.971 0L64 336v48z“]},ds={prefix:”fas“,iconName:”images“,icon:[576,512,,”f302“,”M480 416v16c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V176c0-26.51 21.49-48 48-48h16v208c0 44.112 35.888 80 80 80h336zm96-80V80c0-26.51-21.49-48-48-48H144c-26.51 0-48 21.49-48 48v256c0 26.51 21.49 48 48 48h384c26.51 0 48-21.49 48-48zM256 128c0 26.51-21.49 48-48 48s-48-21.49-48-48 21.49-48 48-48 48 21.49 48 48zm-96 144l55.515-55.515c4.686-4.686 12.284-4.686 16.971 0L272 256l135.515-135.515c4.686-4.686 12.284-4.686 16.971 0L512 208v112H160v-48z“]},ps={prefix:”fas“,iconName:”inbox“,icon:[576,512,,”f01c“,”M567.938 243.908L462.25 85.374A48.003 48.003 0 0 0 422.311 64H153.689a48 48 0 0 0-39.938 21.374L8.062 243.908A47.994 47.994 0 0 0 0 270.533V400c0 26.51 21.49 48 48 48h480c26.51 0 48-21.49 48-48V270.533a47.994 47.994 0 0 0-8.062-26.625zM162.252 128h251.497l85.333 128H376l-32 64H232l-32-64H76.918l85.334-128z“]},ms={prefix:”fas“,iconName:”indent“,icon:[448,512,,”f03c“,”M27.31 363.3l96-96a16 16 0 0 0 0-22.62l-96-96C17.27 138.66 0 145.78 0 160v192c0 14.31 17.33 21.3 27.31 11.3zM432 416H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm3.17-128H204.83A12.82 12.82 0 0 0 192 300.83v38.34A12.82 12.82 0 0 0 204.83 352h230.34A12.82 12.82 0 0 0 448 339.17v-38.34A12.82 12.82 0 0 0 435.17 288zm0-128H204.83A12.82 12.82 0 0 0 192 172.83v38.34A12.82 12.82 0 0 0 204.83 224h230.34A12.82 12.82 0 0 0 448 211.17v-38.34A12.82 12.82 0 0 0 435.17 160zM432 32H16A16 16 0 0 0 0 48v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16z“]},vs={prefix:”fas“,iconName:”industry“,icon:[512,512,,”f275“,”M475.115 163.781L336 252.309v-68.28c0-18.916-20.931-30.399-36.885-20.248L160 252.309V56c0-13.255-10.745-24-24-24H24C10.745 32 0 42.745 0 56v400c0 13.255 10.745 24 24 24h464c13.255 0 24-10.745 24-24V184.029c0-18.917-20.931-30.399-36.885-20.248z“]},gs={prefix:”fas“,iconName:”infinity“,icon:[640,512,,”f534“,”M471.1 96C405 96 353.3 137.3 320 174.6 286.7 137.3 235 96 168.9 96 75.8 96 0 167.8 0 256s75.8 160 168.9 160c66.1 0 117.8-41.3 151.1-78.6 33.3 37.3 85 78.6 151.1 78.6 93.1 0 168.9-71.8 168.9-160S564.2 96 471.1 96zM168.9 320c-40.2 0-72.9-28.7-72.9-64s32.7-64 72.9-64c38.2 0 73.4 36.1 94 64-20.4 27.6-55.9 64-94 64zm302.2 0c-38.2 0-73.4-36.1-94-64 20.4-27.6 55.9-64 94-64 40.2 0 72.9 28.7 72.9 64s-32.7 64-72.9 64z“]},ys={prefix:”fas“,iconName:”info“,icon:[192,512,,”f129“,”M20 424.229h20V279.771H20c-11.046 0-20-8.954-20-20V212c0-11.046 8.954-20 20-20h112c11.046 0 20 8.954 20 20v212.229h20c11.046 0 20 8.954 20 20V492c0 11.046-8.954 20-20 20H20c-11.046 0-20-8.954-20-20v-47.771c0-11.046 8.954-20 20-20zM96 0C56.235 0 24 32.235 24 72s32.235 72 72 72 72-32.235 72-72S135.764 0 96 0z“]},bs={prefix:”fas“,iconName:”info-circle“,icon:[512,512,,”f05a“,”M256 8C119.043 8 8 119.083 8 256c0 136.997 111.043 248 248 248s248-111.003 248-248C504 119.083 392.957 8 256 8zm0 110c23.196 0 42 18.804 42 42s-18.804 42-42 42-42-18.804-42-42 18.804-42 42-42zm56 254c0 6.627-5.373 12-12 12h-88c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h12v-64h-12c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h64c6.627 0 12 5.373 12 12v100h12c6.627 0 12 5.373 12 12v24z“]},ws={prefix:”fas“,iconName:”italic“,icon:[320,512,,”f033“,”M320 48v32a16 16 0 0 1-16 16h-62.76l-80 320H208a16 16 0 0 1 16 16v32a16 16 0 0 1-16 16H16a16 16 0 0 1-16-16v-32a16 16 0 0 1 16-16h62.76l80-320H112a16 16 0 0 1-16-16V48a16 16 0 0 1 16-16h192a16 16 0 0 1 16 16z“]},xs={prefix:”fas“,iconName:”jedi“,icon:[576,512,,”f669“,”M535.95308,352c-42.64069,94.17188-137.64086,160-247.9848,160q-6.39844,0-12.84377-.29688C171.15558,506.9375,81.26481,442.23438,40.01474,352H79.93668L21.3272,293.40625a264.82522,264.82522,0,0,1-5.10938-39.42187,273.6653,273.6653,0,0,1,.5-29.98438H63.93665L22.546,182.625A269.79782,269.79782,0,0,1,130.51489,20.54688a16.06393,16.06393,0,0,1,9.28127-3,16.36332,16.36332,0,0,1,13.5,7.25,16.02739,16.02739,0,0,1,1.625,15.09374,138.387,138.387,0,0,0-9.84376,51.26563c0,45.10937,21.04691,86.57813,57.71884,113.73437a16.29989,16.29989,0,0,1,1.20313,25.39063c-26.54692,23.98437-41.17194,56.5-41.17194,91.57813,0,60.03124,42.95319,110.28124,99.89079,121.92187l2.5-65.26563L238.062,397a8.33911,8.33911,0,0,1-10-.75,8.025,8.025,0,0,1-1.39063-9.9375l20.125-33.76562-42.06257-8.73438a7.9898,7.9898,0,0,1,0-15.65625l42.06257-8.71875-20.10941-33.73438a7.99122,7.99122,0,0,1,11.35939-10.71874L268.437,295.64062,279.95265,7.67188a7.97138,7.97138,0,0,1,8-7.67188h.04687a8.02064,8.02064,0,0,1,7.95314,7.70312L307.48394,295.625l30.39068-20.67188a8.08327,8.08327,0,0,1,10,.8125,7.99866,7.99866,0,0,1,1.39062,9.90626L329.12461,319.4375l42.07819,8.73438a7.99373,7.99373,0,0,1,0,15.65624l-42.07819,8.71876,20.1094,33.73437a7.97791,7.97791,0,0,1-1.32812,9.92187A8.25739,8.25739,0,0,1,337.87462,397L310.7027,378.53125l2.5,65.34375c48.48446-9.40625,87.57828-48.15625,97.31267-96.5A123.52652,123.52652,0,0,0,371.9528,230.29688a16.30634,16.30634,0,0,1,1.20313-25.42188c36.65631-27.17188,57.6876-68.60938,57.6876-113.73438a138.01689,138.01689,0,0,0-9.85939-51.3125,15.98132,15.98132,0,0,1,1.60937-15.09374,16.36914,16.36914,0,0,1,13.5-7.23438,16.02453,16.02453,0,0,1,9.25,2.98438A271.26947,271.26947,0,0,1,553.25,182.76562L511.99992,224h46.9532C559.3125,229.76562,560,235.45312,560,241.26562a270.092,270.092,0,0,1-5.125,51.85938L495.98427,352Z“]},Ss={prefix:”fas“,iconName:”joint“,icon:[640,512,,”f595“,”M444.34 181.1c22.38 15.68 35.66 41.16 35.66 68.59V280c0 4.42 3.58 8 8 8h48c4.42 0 8-3.58 8-8v-30.31c0-43.24-21.01-83.41-56.34-108.06C463.85 125.02 448 99.34 448 70.31V8c0-4.42-3.58-8-8-8h-48c-4.42 0-8 3.58-8 8v66.4c0 43.69 24.56 81.63 60.34 106.7zM194.97 358.98C126.03 370.07 59.69 394.69 0 432c83.65 52.28 180.3 80 278.94 80h88.57L254.79 380.49c-14.74-17.2-37.45-25.11-59.82-21.51zM553.28 87.09c-5.67-3.8-9.28-9.96-9.28-16.78V8c0-4.42-3.58-8-8-8h-48c-4.42 0-8 3.58-8 8v62.31c0 22.02 10.17 43.41 28.64 55.39C550.79 153.04 576 199.54 576 249.69V280c0 4.42 3.58 8 8 8h48c4.42 0 8-3.58 8-8v-30.31c0-65.44-32.41-126.19-86.72-162.6zM360.89 352.05c-34.4.06-86.81.15-88.21.17l117.8 137.43A63.987 63.987 0 0 0 439.07 512h88.45L409.57 374.4a63.955 63.955 0 0 0-48.68-22.35zM616 352H432l117.99 137.65A63.987 63.987 0 0 0 598.58 512H616c13.25 0 24-10.75 24-24V376c0-13.26-10.75-24-24-24z“]},ks={prefix:”fas“,iconName:”journal-whills“,icon:[448,512,,”f66a“,”M438.40625,377.59375c-3.20313,12.8125-3.20313,57.60937,0,73.60937Q447.9922,460.78907,448,470.40625v16c0,16-12.79688,25.59375-25.59375,25.59375H96c-54.40625,0-96-41.59375-96-96V96C0,41.59375,41.59375,0,96,0H422.40625C438.40625,0,448,9.59375,448,25.59375v332.8125Q448,372.79688,438.40625,377.59375ZM380.79688,384H96c-16,0-32,12.79688-32,32s12.79688,32,32,32H380.79688ZM128.01562,176.01562c0,.51563.14063.98438.14063,1.5l37.10937,32.46876A7.99954,7.99954,0,0,1,160,224h-.01562a9.17678,9.17678,0,0,1-5.25-1.98438L131.14062,201.375C142.6875,250.95312,186.90625,288,240,288s97.3125-37.04688,108.875-86.625l-23.59375,20.64062a8.02516,8.02516,0,0,1-5.26563,1.96876H320a9.14641,9.14641,0,0,1-6.01562-2.71876A9.26508,9.26508,0,0,1,312,216a9.097,9.097,0,0,1,2.73438-6.01562l37.10937-32.46876c.01563-.53124.15625-1,.15625-1.51562,0-11.04688-2.09375-21.51562-5.06251-31.59375l-21.26562,21.25a8.00467,8.00467,0,0,1-11.32812-11.3125l26.42187-26.40625a111.81517,111.81517,0,0,0-46.35937-49.26562,63.02336,63.02336,0,0,1-14.0625,82.64062A55.83846,55.83846,0,0,1,251.625,254.73438l-1.42188-34.28126,12.67188,8.625a3.967,3.967,0,0,0,2.25.6875,3.98059,3.98059,0,0,0,3.43749-6.03124l-8.53124-14.3125,17.90625-3.71876a4.00647,4.00647,0,0,0,0-7.84374l-17.90625-3.71876,8.53124-14.3125a3.98059,3.98059,0,0,0-3.43749-6.03124,4.726,4.726,0,0,0-2.25.67187L248.6875,184.125,244,71.82812a4.00386,4.00386,0,0,0-8,0l-4.625,110.8125-12-8.15624a4.003,4.003,0,0,0-5.68751,5.35937l8.53126,14.3125L204.3125,197.875a3.99686,3.99686,0,0,0,0,7.82812l17.90625,3.73438-8.53126,14.29688a4.72469,4.72469,0,0,0-.56249,2.04687,4.59547,4.59547,0,0,0,1.25,2.90625,4.01059,4.01059,0,0,0,2.75,1.09375,4.09016,4.09016,0,0,0,2.25-.6875l10.35937-7.04687L228.375,254.76562a55.86414,55.86414,0,0,1-28.71875-93.45312,63.01119,63.01119,0,0,1-14.04688-82.65625,111.93158,111.93158,0,0,0-46.375,49.26563l26.42187,26.42187a7.99917,7.99917,0,0,1-11.3125,11.3125l-21.26563-21.26563C130.09375,154.48438,128,164.95312,128.01562,176.01562Z“]},_s={prefix:”fas“,iconName:”kaaba“,icon:[576,512,,”f66b“,”M554.12 83.51L318.36 4.93a95.962 95.962 0 0 0-60.71 0L21.88 83.51A32.006 32.006 0 0 0 0 113.87v49.01l265.02-79.51c15.03-4.5 30.92-4.5 45.98 0l265 79.51v-49.01c0-13.77-8.81-26-21.88-30.36zm-279.9 30.52L0 196.3v228.38c0 15 10.42 27.98 25.06 31.24l242.12 53.8a95.937 95.937 0 0 0 41.65 0l242.12-53.8c14.64-3.25 25.06-16.24 25.06-31.24V196.29l-274.2-82.26c-9.04-2.72-18.59-2.72-27.59 0zM128 230.11c0 3.61-2.41 6.77-5.89 7.72l-80 21.82C37.02 261.03 32 257.2 32 251.93v-16.58c0-3.61 2.41-6.77 5.89-7.72l80-21.82c5.09-1.39 10.11 2.44 10.11 7.72v16.58zm144-39.28c0 3.61-2.41 6.77-5.89 7.72l-96 26.18c-5.09 1.39-10.11-2.44-10.11-7.72v-16.58c0-3.61 2.41-6.77 5.89-7.72l96-26.18c5.09-1.39 10.11 2.44 10.11 7.72v16.58zm176 22.7c0-5.28 5.02-9.11 10.11-7.72l80 21.82c3.48.95 5.89 4.11 5.89 7.72v16.58c0 5.28-5.02 9.11-10.11 7.72l-80-21.82a7.997 7.997 0 0 1-5.89-7.72v-16.58zm-144-39.27c0-5.28 5.02-9.11 10.11-7.72l96 26.18c3.48.95 5.89 4.11 5.89 7.72v16.58c0 5.28-5.02 9.11-10.11 7.72l-96-26.18a7.997 7.997 0 0 1-5.89-7.72v-16.58z“]},zs={prefix:”fas“,iconName:”key“,icon:[512,512,,”f084“,”M512 176.001C512 273.203 433.202 352 336 352c-11.22 0-22.19-1.062-32.827-3.069l-24.012 27.014A23.999 23.999 0 0 1 261.223 384H224v40c0 13.255-10.745 24-24 24h-40v40c0 13.255-10.745 24-24 24H24c-13.255 0-24-10.745-24-24v-78.059c0-6.365 2.529-12.47 7.029-16.971l161.802-161.802C163.108 213.814 160 195.271 160 176 160 78.798 238.797.001 335.999 0 433.488-.001 512 78.511 512 176.001zM336 128c0 26.51 21.49 48 48 48s48-21.49 48-48-21.49-48-48-48-48 21.49-48 48z“]},Cs={prefix:”fas“,iconName:”keyboard“,icon:[576,512,,”f11c“,”M528 448H48c-26.51 0-48-21.49-48-48V112c0-26.51 21.49-48 48-48h480c26.51 0 48 21.49 48 48v288c0 26.51-21.49 48-48 48zM128 180v-40c0-6.627-5.373-12-12-12H76c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm-336 96v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm-336 96v-40c0-6.627-5.373-12-12-12H76c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm288 0v-40c0-6.627-5.373-12-12-12H172c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h232c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12z“]},Ms={prefix:”fas“,iconName:”khanda“,icon:[512,512,,”f66d“,”M415.81 66c-6.37-3.5-14.37-2.33-19.36 3.02a15.974 15.974 0 0 0-1.91 19.52c16.49 26.16 25.2 56.39 25.2 87.41-.19 53.25-26.77 102.69-71.27 132.41l-76.63 53.35v-20.1l44.05-36.09c3.92-4.2 5-10.09 2.81-15.28L310.85 273c33.84-19.26 56.94-55.25 56.94-96.99 0-40.79-22.02-76.13-54.59-95.71l5.22-11.44c2.34-5.53.93-11.83-3.57-16.04L255.86 0l-58.99 52.81c-4.5 4.21-5.9 10.51-3.57 16.04l5.22 11.44c-32.57 19.58-54.59 54.93-54.59 95.72 0 41.75 23.09 77.73 56.94 96.99l-7.85 17.24c-2.19 5.18-1.1 11.07 2.81 15.28l44.05 36.09v19.9l-76.59-53.33C119.02 278.62 92.44 229.19 92.26 176c0-31.08 8.71-61.31 25.2-87.47 3.87-6.16 2.4-13.77-2.59-19.08-5-5.34-13.68-6.2-20.02-2.7C16.32 109.6-22.3 205.3 13.36 295.99c7.07 17.99 17.89 34.38 30.46 49.06l55.97 65.36c4.87 5.69 13.04 7.24 19.65 3.72l79.35-42.23L228 392.23l-47.08 32.78c-1.67-.37-3.23-1.01-5.01-1.01-13.25 0-23.99 10.74-23.99 24 0 13.25 10.74 24 23.99 24 12.1 0 21.69-9.11 23.33-20.76l40.63-28.28v29.95c-9.39 5.57-15.99 15.38-15.99 27.1 0 17.67 14.32 32 31.98 32s31.98-14.33 31.98-32c0-11.71-6.61-21.52-15.99-27.1v-30.15l40.91 28.48C314.41 462.89 324 472 336.09 472c13.25 0 23.99-10.75 23.99-24 0-13.26-10.74-24-23.99-24-1.78 0-3.34.64-5.01 1.01L284 392.23l29.21-20.34 79.35 42.23c6.61 3.52 14.78 1.97 19.65-3.71l52.51-61.31c18.87-22.02 34-47.5 41.25-75.59 21.62-83.66-16.45-167.27-90.16-207.51zm-95.99 110c0 22.3-11.49 41.92-28.83 53.38l-5.65-12.41c-8.75-24.52-8.75-51.04 0-75.56l7.83-17.18c16.07 11.65 26.65 30.45 26.65 51.77zm-127.93 0c0-21.32 10.58-40.12 26.66-51.76l7.83 17.18c8.75 24.52 8.75 51.03 0 75.56l-5.65 12.41c-17.34-11.46-28.84-31.09-28.84-53.39z“]},Os={prefix:”fas“,iconName:”kiss“,icon:[496,512,,”f596“,”M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm-80 232c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm136 156c0 19.2-28.7 41.5-71.5 44-8.5.8-12.1-11.8-3.6-15.4l17-7.2c13-5.5 20.8-13.5 20.8-21.5s-7.8-16-20.8-21.5l-17-7.2c-6-2.5-6.1-12.2 0-14.8l17-7.2c13-5.5 20.8-13.5 20.8-21.5s-7.8-16-20.8-21.5l-17-7.2c-8.6-3.6-4.8-16.5 3.6-15.4 42.8 2.5 71.5 24.8 71.5 44 0 13-13.4 27.3-35.2 36C290.6 368.7 304 383 304 396zm24-156c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z“]},Ts={prefix:”fas“,iconName:”kiss-beam“,icon:[496,512,,”f597“,”M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm-39 219.9l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.2 7.4-15.6 4-14.9-4.5 3.3-42.1 32.2-71.4 56-71.4s52.7 29.3 56 71.4c.5 8.5-10.9 12-15.1 4.5zM304 396c0 19.2-28.7 41.5-71.5 44-8.5.8-12.1-11.8-3.6-15.4l17-7.2c13-5.5 20.8-13.5 20.8-21.5s-7.8-16-20.8-21.5l-17-7.2c-6-2.5-6.1-12.2 0-14.8l17-7.2c13-5.5 20.8-13.5 20.8-21.5s-7.8-16-20.8-21.5l-17-7.2c-8.6-3.6-4.8-16.5 3.6-15.4 42.8 2.5 71.5 24.8 71.5 44 0 13-13.4 27.3-35.2 36C290.6 368.7 304 383 304 396zm65-168.1l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.1 7.3-15.6 4-14.9-4.5 3.3-42.1 32.2-71.4 56-71.4s52.7 29.3 56 71.4c.5 8.5-10.9 12-15.1 4.5z“]},Es={prefix:”fas“,iconName:”kiss-wink-heart“,icon:[504,512,,”f598“,”M501.1 402.5c-8-20.8-31.5-31.5-53.1-25.9l-8.4 2.2-2.3-8.4c-5.9-21.4-27-36.5-49-33-25.2 4-40.6 28.6-34 52.6l22.9 82.6c1.5 5.3 7 8.5 12.4 7.1l83-21.5c24.1-6.3 37.7-31.8 28.5-55.7zm-177.6-4c-5.6-20.3-2.3-42 9-59.7 29.7-46.3 98.7-45.5 127.8 4.3 6.4.1 12.6 1.4 18.6 2.9 10.9-27.9 17.1-58.2 17.1-90C496 119 385 8 248 8S0 119 0 256s111 248 248 248c35.4 0 68.9-7.5 99.4-20.9-.3-.7-23.9-84.6-23.9-84.6zM168 240c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm120 156c0 19.2-28.7 41.5-71.5 44-8.5.8-12.1-11.8-3.6-15.4l17-7.2c13-5.5 20.8-13.5 20.8-21.5s-7.8-16-20.8-21.5l-17-7.2c-6-2.5-5.7-12.3 0-14.8l17-7.2c13-5.5 20.8-13.5 20.8-21.5s-7.8-16-20.8-21.5l-17-7.2c-8.8-3.7-4.6-16.6 3.6-15.4 42.8 2.5 71.5 24.8 71.5 44 0 13-13.4 27.3-35.2 36C274.6 368.7 288 383 288 396zm16-179c-8.3 7.4-21.6.4-19.8-10.8 4-25.2 34.2-42.1 59.9-42.1S400 181 404 206.2c1.7 11.1-11.3 18.3-19.8 10.8l-9.5-8.5c-14.8-13.2-46.2-13.2-61 0L304 217z“]},Ls={prefix:”fas“,iconName:”kiwi-bird“,icon:[576,512,,”f535“,”M575.81 217.98C572.64 157.41 518.28 112 457.63 112h-9.37c-52.82 0-104.25-16.25-147.74-46.24-41.99-28.96-96.04-41.62-153.21-28.7C129.3 41.12-.08 78.24 0 224c.04 70.95 38.68 132.8 95.99 166.01V464c0 8.84 7.16 16 16 16h16c8.84 0 16-7.16 16-16v-54.26c15.36 3.96 31.4 6.26 48 6.26 5.44 0 10.68-.73 16-1.18V464c0 8.84 7.16 16 16 16h16c8.84 0 16-7.16 16-16v-59.43c14.24-5.06 27.88-11.39 40.34-19.51C342.07 355.25 393.86 336 448.46 336c25.48 0 16.01-.31 23.05-.78l74.41 136.44c2.86 5.23 8.3 8.34 14.05 8.34 1.31 0 2.64-.16 3.95-.5 7.09-1.8 12.05-8.19 12.05-15.5 0 0 .14-240.24-.16-246.02zM463.97 248c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24zm80 153.25l-39.86-73.08c15.12-5.83 28.73-14.6 39.86-25.98v99.06z“]},As={prefix:”fas“,iconName:”landmark“,icon:[512,512,,”f66f“,”M501.62 92.11L267.24 2.04a31.958 31.958 0 0 0-22.47 0L10.38 92.11A16.001 16.001 0 0 0 0 107.09V144c0 8.84 7.16 16 16 16h480c8.84 0 16-7.16 16-16v-36.91c0-6.67-4.14-12.64-10.38-14.98zM64 192v160H48c-8.84 0-16 7.16-16 16v48h448v-48c0-8.84-7.16-16-16-16h-16V192h-64v160h-96V192h-64v160h-96V192H64zm432 256H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h480c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16z“]},Rs={prefix:”fas“,iconName:”language“,icon:[640,512,,”f1ab“,”M152.1 236.2c-3.5-12.1-7.8-33.2-7.8-33.2h-.5s-4.3 21.1-7.8 33.2l-11.1 37.5H163zM616 96H336v320h280c13.3 0 24-10.7 24-24V120c0-13.3-10.7-24-24-24zm-24 120c0 6.6-5.4 12-12 12h-11.4c-6.9 23.6-21.7 47.4-42.7 69.9 8.4 6.4 17.1 12.5 26.1 18 5.5 3.4 7.3 10.5 4.1 16.2l-7.9 13.9c-3.4 5.9-10.9 7.8-16.7 4.3-12.6-7.8-24.5-16.1-35.4-24.9-10.9 8.7-22.7 17.1-35.4 24.9-5.8 3.5-13.3 1.6-16.7-4.3l-7.9-13.9c-3.2-5.6-1.4-12.8 4.2-16.2 9.3-5.7 18-11.7 26.1-18-7.9-8.4-14.9-17-21-25.7-4-5.7-2.2-13.6 3.7-17.1l6.5-3.9 7.3-4.3c5.4-3.2 12.4-1.7 16 3.4 5 7 10.8 14 17.4 20.9 13.5-14.2 23.8-28.9 30-43.2H412c-6.6 0-12-5.4-12-12v-16c0-6.6 5.4-12 12-12h64v-16c0-6.6 5.4-12 12-12h16c6.6 0 12 5.4 12 12v16h64c6.6 0 12 5.4 12 12zM0 120v272c0 13.3 10.7 24 24 24h280V96H24c-13.3 0-24 10.7-24 24zm58.9 216.1L116.4 167c1.7-4.9 6.2-8.1 11.4-8.1h32.5c5.1 0 9.7 3.3 11.4 8.1l57.5 169.1c2.6 7.8-3.1 15.9-11.4 15.9h-22.9a12 12 0 0 1-11.5-8.6l-9.4-31.9h-60.2l-9.1 31.8c-1.5 5.1-6.2 8.7-11.5 8.7H70.3c-8.2 0-14-8.1-11.4-15.9z“]},Ns={prefix:”fas“,iconName:”laptop“,icon:[640,512,,”f109“,”M624 416H381.54c-.74 19.81-14.71 32-32.74 32H288c-18.69 0-33.02-17.47-32.77-32H16c-8.8 0-16 7.2-16 16v16c0 35.2 28.8 64 64 64h512c35.2 0 64-28.8 64-64v-16c0-8.8-7.2-16-16-16zM576 48c0-26.4-21.6-48-48-48H112C85.6 0 64 21.6 64 48v336h512V48zm-64 272H128V64h384v256z“]},Hs={prefix:”fas“,iconName:”laptop-code“,icon:[640,512,,”f5fc“,”M255.03 261.65c6.25 6.25 16.38 6.25 22.63 0l11.31-11.31c6.25-6.25 6.25-16.38 0-22.63L253.25 192l35.71-35.72c6.25-6.25 6.25-16.38 0-22.63l-11.31-11.31c-6.25-6.25-16.38-6.25-22.63 0l-58.34 58.34c-6.25 6.25-6.25 16.38 0 22.63l58.35 58.34zm96.01-11.3l11.31 11.31c6.25 6.25 16.38 6.25 22.63 0l58.34-58.34c6.25-6.25 6.25-16.38 0-22.63l-58.34-58.34c-6.25-6.25-16.38-6.25-22.63 0l-11.31 11.31c-6.25 6.25-6.25 16.38 0 22.63L386.75 192l-35.71 35.72c-6.25 6.25-6.25 16.38 0 22.63zM624 416H381.54c-.74 19.81-14.71 32-32.74 32H288c-18.69 0-33.02-17.47-32.77-32H16c-8.8 0-16 7.2-16 16v16c0 35.2 28.8 64 64 64h512c35.2 0 64-28.8 64-64v-16c0-8.8-7.2-16-16-16zM576 48c0-26.4-21.6-48-48-48H112C85.6 0 64 21.6 64 48v336h512V48zm-64 272H128V64h384v256z“]},Ps={prefix:”fas“,iconName:”laptop-house“,icon:[640,512,,”e066“,”M272,288H208a16,16,0,0,1-16-16V208a16,16,0,0,1,16-16h64a16,16,0,0,1,16,16v37.12C299.11,232.24,315,224,332.8,224H469.74l6.65-7.53A16.51,16.51,0,0,0,480,207a16.31,16.31,0,0,0-4.75-10.61L416,144V48a16,16,0,0,0-16-16H368a16,16,0,0,0-16,16V87.3L263.5,8.92C258,4,247.45,0,240.05,0s-17.93,4-23.47,8.92L4.78,196.42A16.15,16.15,0,0,0,0,207a16.4,16.4,0,0,0,3.55,9.39L22.34,237.7A16.22,16.22,0,0,0,33,242.48,16.51,16.51,0,0,0,42.34,239L64,219.88V384a32,32,0,0,0,32,32H272ZM629.33,448H592V288c0-17.67-12.89-32-28.8-32H332.8c-15.91,0-28.8,14.33-28.8,32V448H266.67A10.67,10.67,0,0,0,256,458.67v10.66A42.82,42.82,0,0,0,298.6,512H597.4A42.82,42.82,0,0,0,640,469.33V458.67A10.67,10.67,0,0,0,629.33,448ZM544,448H352V304H544Z“]},js={prefix:”fas“,iconName:”laptop-medical“,icon:[640,512,,”f812“,”M232 224h56v56a8 8 0 0 0 8 8h48a8 8 0 0 0 8-8v-56h56a8 8 0 0 0 8-8v-48a8 8 0 0 0-8-8h-56v-56a8 8 0 0 0-8-8h-48a8 8 0 0 0-8 8v56h-56a8 8 0 0 0-8 8v48a8 8 0 0 0 8 8zM576 48a48.14 48.14 0 0 0-48-48H112a48.14 48.14 0 0 0-48 48v336h512zm-64 272H128V64h384zm112 96H381.54c-.74 19.81-14.71 32-32.74 32H288c-18.69 0-33-17.47-32.77-32H16a16 16 0 0 0-16 16v16a64.19 64.19 0 0 0 64 64h512a64.19 64.19 0 0 0 64-64v-16a16 16 0 0 0-16-16z“]},Vs={prefix:”fas“,iconName:”laugh“,icon:[496,512,,”f599“,”M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm80 152c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm-160 0c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm88 272h-16c-73.4 0-134-55-142.9-126-1.2-9.5 6.3-18 15.9-18h270c9.6 0 17.1 8.4 15.9 18-8.9 71-69.5 126-142.9 126z“]},Ds={prefix:”fas“,iconName:”laugh-beam“,icon:[496,512,,”f59a“,”M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm24 199.4c3.3-42.1 32.2-71.4 56-71.4s52.7 29.3 56 71.4c.7 8.6-10.8 11.9-14.9 4.5l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.2 7.4-15.8 4.1-15.1-4.5zm-160 0c3.3-42.1 32.2-71.4 56-71.4s52.7 29.3 56 71.4c.7 8.6-10.8 11.9-14.9 4.5l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.3 7.4-15.8 4-15.1-4.5zM398.9 306C390 377 329.4 432 256 432h-16c-73.4 0-134-55-142.9-126-1.2-9.5 6.3-18 15.9-18h270c9.6 0 17.1 8.4 15.9 18z“]},Is={prefix:”fas“,iconName:”laugh-squint“,icon:[496,512,,”f59b“,”M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm33.8 161.7l80-48c11.6-6.9 24 7.7 15.4 18L343.6 180l33.6 40.3c8.7 10.4-3.9 24.8-15.4 18l-80-48c-7.7-4.7-7.7-15.9 0-20.6zm-163-30c-8.6-10.3 3.8-24.9 15.4-18l80 48c7.8 4.7 7.8 15.9 0 20.6l-80 48c-11.5 6.8-24-7.6-15.4-18l33.6-40.3-33.6-40.3zM398.9 306C390 377 329.4 432 256 432h-16c-73.4 0-134-55-142.9-126-1.2-9.5 6.3-18 15.9-18h270c9.6 0 17.1 8.4 15.9 18z“]},Fs={prefix:”fas“,iconName:”laugh-wink“,icon:[496,512,,”f59c“,”M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm20.1 198.1c4-25.2 34.2-42.1 59.9-42.1s55.9 16.9 59.9 42.1c1.7 11.1-11.4 18.3-19.8 10.8l-9.5-8.5c-14.8-13.2-46.2-13.2-61 0L288 217c-8.4 7.4-21.6.3-19.9-10.9zM168 160c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm230.9 146C390 377 329.4 432 256 432h-16c-73.4 0-134-55-142.9-126-1.2-9.5 6.3-18 15.9-18h270c9.6 0 17.1 8.4 15.9 18z“]},Bs={prefix:”fas“,iconName:”layer-group“,icon:[512,512,,”f5fd“,”M12.41 148.02l232.94 105.67c6.8 3.09 14.49 3.09 21.29 0l232.94-105.67c16.55-7.51 16.55-32.52 0-40.03L266.65 2.31a25.607 25.607 0 0 0-21.29 0L12.41 107.98c-16.55 7.51-16.55 32.53 0 40.04zm487.18 88.28l-58.09-26.33-161.64 73.27c-7.56 3.43-15.59 5.17-23.86 5.17s-16.29-1.74-23.86-5.17L70.51 209.97l-58.1 26.33c-16.55 7.5-16.55 32.5 0 40l232.94 105.59c6.8 3.08 14.49 3.08 21.29 0L499.59 276.3c16.55-7.5 16.55-32.5 0-40zm0 127.8l-57.87-26.23-161.86 73.37c-7.56 3.43-15.59 5.17-23.86 5.17s-16.29-1.74-23.86-5.17L70.29 337.87 12.41 364.1c-16.55 7.5-16.55 32.5 0 40l232.94 105.59c6.8 3.08 14.49 3.08 21.29 0L499.59 404.1c16.55-7.5 16.55-32.5 0-40z“]},Us={prefix:”fas“,iconName:”leaf“,icon:[576,512,,”f06c“,”M546.2 9.7c-5.6-12.5-21.6-13-28.3-1.2C486.9 62.4 431.4 96 368 96h-80C182 96 96 182 96 288c0 7 .8 13.7 1.5 20.5C161.3 262.8 253.4 224 384 224c8.8 0 16 7.2 16 16s-7.2 16-16 16C132.6 256 26 410.1 2.4 468c-6.6 16.3 1.2 34.9 17.5 41.6 16.4 6.8 35-1.1 41.8-17.3 1.5-3.6 20.9-47.9 71.9-90.6 32.4 43.9 94 85.8 174.9 77.2C465.5 467.5 576 326.7 576 154.3c0-50.2-10.8-102.2-29.8-144.6z“]},qs={prefix:”fas“,iconName:”lemon“,icon:[512,512,,”f094“,”M489.038 22.963C465.944-.13 434.648-5.93 413.947 6.129c-58.906 34.312-181.25-53.077-321.073 86.746S40.441 355.041 6.129 413.945c-12.059 20.702-6.26 51.999 16.833 75.093 23.095 23.095 54.392 28.891 75.095 16.832 58.901-34.31 181.246 53.079 321.068-86.743S471.56 156.96 505.871 98.056c12.059-20.702 6.261-51.999-16.833-75.093zM243.881 95.522c-58.189 14.547-133.808 90.155-148.358 148.358-1.817 7.27-8.342 12.124-15.511 12.124-1.284 0-2.59-.156-3.893-.481-8.572-2.144-13.784-10.83-11.642-19.403C81.901 166.427 166.316 81.93 236.119 64.478c8.575-2.143 17.261 3.069 19.403 11.642s-3.069 17.259-11.641 19.402z“]},Gs={prefix:”fas“,iconName:”less-than“,icon:[384,512,,”f536“,”M365.46 357.74L147.04 255.89l218.47-101.88c16.02-7.47 22.95-26.51 15.48-42.53l-13.52-29C360 66.46 340.96 59.53 324.94 67L18.48 209.91a32.014 32.014 0 0 0-18.48 29v34.24c0 12.44 7.21 23.75 18.48 29l306.31 142.83c16.06 7.49 35.15.54 42.64-15.52l13.56-29.08c7.49-16.06.54-35.15-15.53-42.64z“]},Ws={prefix:”fas“,iconName:”less-than-equal“,icon:[448,512,,”f537“,”M54.98 214.2l301.41 119.87c18.39 6.03 38.71-2.54 45.38-19.15l12.09-30.08c6.68-16.61-2.82-34.97-21.21-41l-175.44-68.05 175.56-68.09c18.29-6 27.74-24.27 21.1-40.79l-12.03-29.92c-6.64-16.53-26.86-25.06-45.15-19.06L54.98 137.89C41.21 142.41 32 154.5 32 168.07v15.96c0 13.56 9.21 25.65 22.98 30.17zM424 400H24c-13.25 0-24 10.74-24 24v48c0 13.25 10.75 24 24 24h400c13.25 0 24-10.75 24-24v-48c0-13.26-10.75-24-24-24z“]},Zs={prefix:”fas“,iconName:”level-down-alt“,icon:[320,512,,”f3be“,”M313.553 392.331L209.587 504.334c-9.485 10.214-25.676 10.229-35.174 0L70.438 392.331C56.232 377.031 67.062 352 88.025 352H152V80H68.024a11.996 11.996 0 0 1-8.485-3.515l-56-56C-4.021 12.926 1.333 0 12.024 0H208c13.255 0 24 10.745 24 24v328h63.966c20.878 0 31.851 24.969 17.587 40.331z“]},$s={prefix:”fas“,iconName:”level-up-alt“,icon:[320,512,,”f3bf“,”M313.553 119.669L209.587 7.666c-9.485-10.214-25.676-10.229-35.174 0L70.438 119.669C56.232 134.969 67.062 160 88.025 160H152v272H68.024a11.996 11.996 0 0 0-8.485 3.515l-56 56C-4.021 499.074 1.333 512 12.024 512H208c13.255 0 24-10.745 24-24V160h63.966c20.878 0 31.851-24.969 17.587-40.331z“]},Js={prefix:”fas“,iconName:”life-ring“,icon:[512,512,,”f1cd“,”M256 8C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 8zm173.696 119.559l-63.399 63.399c-10.987-18.559-26.67-34.252-45.255-45.255l63.399-63.399a218.396 218.396 0 0 1 45.255 45.255zM256 352c-53.019 0-96-42.981-96-96s42.981-96 96-96 96 42.981 96 96-42.981 96-96 96zM127.559 82.304l63.399 63.399c-18.559 10.987-34.252 26.67-45.255 45.255l-63.399-63.399a218.372 218.372 0 0 1 45.255-45.255zM82.304 384.441l63.399-63.399c10.987 18.559 26.67 34.252 45.255 45.255l-63.399 63.399a218.396 218.396 0 0 1-45.255-45.255zm302.137 45.255l-63.399-63.399c18.559-10.987 34.252-26.67 45.255-45.255l63.399 63.399a218.403 218.403 0 0 1-45.255 45.255z“]},Ks={prefix:”fas“,iconName:”lightbulb“,icon:[352,512,,”f0eb“,”M96.06 454.35c.01 6.29 1.87 12.45 5.36 17.69l17.09 25.69a31.99 31.99 0 0 0 26.64 14.28h61.71a31.99 31.99 0 0 0 26.64-14.28l17.09-25.69a31.989 31.989 0 0 0 5.36-17.69l.04-38.35H96.01l.05 38.35zM0 176c0 44.37 16.45 84.85 43.56 115.78 16.52 18.85 42.36 58.23 52.21 91.45.04.26.07.52.11.78h160.24c.04-.26.07-.51.11-.78 9.85-33.22 35.69-72.6 52.21-91.45C335.55 260.85 352 220.37 352 176 352 78.61 272.91-.3 175.45 0 73.44.31 0 82.97 0 176zm176-80c-44.11 0-80 35.89-80 80 0 8.84-7.16 16-16 16s-16-7.16-16-16c0-61.76 50.24-112 112-112 8.84 0 16 7.16 16 16s-7.16 16-16 16z“]},Qs={prefix:”fas“,iconName:”link“,icon:[512,512,,”f0c1“,”M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z“]},Ys={prefix:”fas“,iconName:”lira-sign“,icon:[384,512,,”f195“,”M371.994 256h-48.019C317.64 256 312 260.912 312 267.246 312 368 230.179 416 144 416V256.781l134.603-29.912A12 12 0 0 0 288 215.155v-40.976c0-7.677-7.109-13.38-14.603-11.714L144 191.219V160.78l134.603-29.912A12 12 0 0 0 288 119.154V78.179c0-7.677-7.109-13.38-14.603-11.714L144 95.219V44c0-6.627-5.373-12-12-12H76c-6.627 0-12 5.373-12 12v68.997L9.397 125.131A12 12 0 0 0 0 136.845v40.976c0 7.677 7.109 13.38 14.603 11.714L64 178.558v30.439L9.397 221.131A12 12 0 0 0 0 232.845v40.976c0 7.677 7.109 13.38 14.603 11.714L64 274.558V468c0 6.627 5.373 12 12 12h79.583c134.091 0 223.255-77.834 228.408-211.592.261-6.782-5.211-12.408-11.997-12.408z“]},Xs={prefix:”fas“,iconName:”list“,icon:[512,512,,”f03a“,”M80 368H16a16 16 0 0 0-16 16v64a16 16 0 0 0 16 16h64a16 16 0 0 0 16-16v-64a16 16 0 0 0-16-16zm0-320H16A16 16 0 0 0 0 64v64a16 16 0 0 0 16 16h64a16 16 0 0 0 16-16V64a16 16 0 0 0-16-16zm0 160H16a16 16 0 0 0-16 16v64a16 16 0 0 0 16 16h64a16 16 0 0 0 16-16v-64a16 16 0 0 0-16-16zm416 176H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16z“]},eu={prefix:”fas“,iconName:”list-alt“,icon:[512,512,,”f022“,”M464 480H48c-26.51 0-48-21.49-48-48V80c0-26.51 21.49-48 48-48h416c26.51 0 48 21.49 48 48v352c0 26.51-21.49 48-48 48zM128 120c-22.091 0-40 17.909-40 40s17.909 40 40 40 40-17.909 40-40-17.909-40-40-40zm0 96c-22.091 0-40 17.909-40 40s17.909 40 40 40 40-17.909 40-40-17.909-40-40-40zm0 96c-22.091 0-40 17.909-40 40s17.909 40 40 40 40-17.909 40-40-17.909-40-40-40zm288-136v-32c0-6.627-5.373-12-12-12H204c-6.627 0-12 5.373-12 12v32c0 6.627 5.373 12 12 12h200c6.627 0 12-5.373 12-12zm0 96v-32c0-6.627-5.373-12-12-12H204c-6.627 0-12 5.373-12 12v32c0 6.627 5.373 12 12 12h200c6.627 0 12-5.373 12-12zm0 96v-32c0-6.627-5.373-12-12-12H204c-6.627 0-12 5.373-12 12v32c0 6.627 5.373 12 12 12h200c6.627 0 12-5.373 12-12z“]},tu={prefix:”fas“,iconName:”list-ol“,icon:[512,512,,”f0cb“,”M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z“]},nu={prefix:”fas“,iconName:”list-ul“,icon:[512,512,,”f0ca“,”M48 48a48 48 0 1 0 48 48 48 48 0 0 0-48-48zm0 160a48 48 0 1 0 48 48 48 48 0 0 0-48-48zm0 160a48 48 0 1 0 48 48 48 48 0 0 0-48-48zm448 16H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16z“]},ru={prefix:”fas“,iconName:”location-arrow“,icon:[512,512,,”f124“,”M444.52 3.52L28.74 195.42c-47.97 22.39-31.98 92.75 19.19 92.75h175.91v175.91c0 51.17 70.36 67.17 92.75 19.19l191.9-415.78c15.99-38.39-25.59-79.97-63.97-63.97z“]},iu={prefix:”fas“,iconName:”lock“,icon:[448,512,,”f023“,”M400 224h-24v-72C376 68.2 307.8 0 224 0S72 68.2 72 152v72H48c-26.5 0-48 21.5-48 48v192c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V272c0-26.5-21.5-48-48-48zm-104 0H152v-72c0-39.7 32.3-72 72-72s72 32.3 72 72v72z“]},au={prefix:”fas“,iconName:”lock-open“,icon:[576,512,,”f3c1“,”M423.5 0C339.5.3 272 69.5 272 153.5V224H48c-26.5 0-48 21.5-48 48v192c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V272c0-26.5-21.5-48-48-48h-48v-71.1c0-39.6 31.7-72.5 71.3-72.9 40-.4 72.7 32.1 72.7 72v80c0 13.3 10.7 24 24 24h32c13.3 0 24-10.7 24-24v-80C576 68 507.5-.3 423.5 0z“]},ou={prefix:”fas“,iconName:”long-arrow-alt-down“,icon:[256,512,,”f309“,”M168 345.941V44c0-6.627-5.373-12-12-12h-56c-6.627 0-12 5.373-12 12v301.941H41.941c-21.382 0-32.09 25.851-16.971 40.971l86.059 86.059c9.373 9.373 24.569 9.373 33.941 0l86.059-86.059c15.119-15.119 4.411-40.971-16.971-40.971H168z“]},cu={prefix:”fas“,iconName:”long-arrow-alt-left“,icon:[448,512,,”f30a“,”M134.059 296H436c6.627 0 12-5.373 12-12v-56c0-6.627-5.373-12-12-12H134.059v-46.059c0-21.382-25.851-32.09-40.971-16.971L7.029 239.029c-9.373 9.373-9.373 24.569 0 33.941l86.059 86.059c15.119 15.119 40.971 4.411 40.971-16.971V296z“]},su={prefix:”fas“,iconName:”long-arrow-alt-right“,icon:[448,512,,”f30b“,”M313.941 216H12c-6.627 0-12 5.373-12 12v56c0 6.627 5.373 12 12 12h301.941v46.059c0 21.382 25.851 32.09 40.971 16.971l86.059-86.059c9.373-9.373 9.373-24.569 0-33.941l-86.059-86.059c-15.119-15.119-40.971-4.411-40.971 16.971V216z“]},uu={prefix:”fas“,iconName:”long-arrow-alt-up“,icon:[256,512,,”f30c“,”M88 166.059V468c0 6.627 5.373 12 12 12h56c6.627 0 12-5.373 12-12V166.059h46.059c21.382 0 32.09-25.851 16.971-40.971l-86.059-86.059c-9.373-9.373-24.569-9.373-33.941 0l-86.059 86.059c-15.119 15.119-4.411 40.971 16.971 40.971H88z“]},lu={prefix:”fas“,iconName:”low-vision“,icon:[576,512,,”f2a8“,”M569.344 231.631C512.96 135.949 407.81 72 288 72c-28.468 0-56.102 3.619-82.451 10.409L152.778 10.24c-7.601-10.858-22.564-13.5-33.423-5.9l-13.114 9.178c-10.86 7.601-13.502 22.566-5.9 33.426l43.131 58.395C89.449 131.73 40.228 174.683 6.682 231.581c-.01.017-.023.033-.034.05-8.765 14.875-8.964 33.528 0 48.739 38.5 65.332 99.742 115.862 172.859 141.349L55.316 244.302A272.194 272.194 0 0 1 83.61 208.39l119.4 170.58h.01l40.63 58.04a330.055 330.055 0 0 0 78.94 1.17l-189.98-271.4a277.628 277.628 0 0 1 38.777-21.563l251.836 356.544c7.601 10.858 22.564 13.499 33.423 5.9l13.114-9.178c10.86-7.601 13.502-22.567 5.9-33.426l-43.12-58.377-.007-.009c57.161-27.978 104.835-72.04 136.81-126.301a47.938 47.938 0 0 0 .001-48.739zM390.026 345.94l-19.066-27.23c24.682-32.567 27.711-76.353 8.8-111.68v.03c0 23.65-19.17 42.82-42.82 42.82-23.828 0-42.82-19.349-42.82-42.82 0-23.65 19.17-42.82 42.82-42.82h.03c-24.75-13.249-53.522-15.643-79.51-7.68l-19.068-27.237C253.758 123.306 270.488 120 288 120c75.162 0 136 60.826 136 136 0 34.504-12.833 65.975-33.974 89.94z“]},fu={prefix:”fas“,iconName:”luggage-cart“,icon:[640,512,,”f59d“,”M224 320h32V96h-32c-17.67 0-32 14.33-32 32v160c0 17.67 14.33 32 32 32zm352-32V128c0-17.67-14.33-32-32-32h-32v224h32c17.67 0 32-14.33 32-32zm48 96H128V16c0-8.84-7.16-16-16-16H16C7.16 0 0 7.16 0 16v32c0 8.84 7.16 16 16 16h48v368c0 8.84 7.16 16 16 16h82.94c-1.79 5.03-2.94 10.36-2.94 16 0 26.51 21.49 48 48 48s48-21.49 48-48c0-5.64-1.15-10.97-2.94-16h197.88c-1.79 5.03-2.94 10.36-2.94 16 0 26.51 21.49 48 48 48s48-21.49 48-48c0-5.64-1.15-10.97-2.94-16H624c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zM480 96V48c0-26.51-21.49-48-48-48h-96c-26.51 0-48 21.49-48 48v272h192V96zm-48 0h-96V48h96v48z“]},hu={prefix:”fas“,iconName:”lungs“,icon:[640,512,,”f604“,”M636.11 390.15C614.44 308.85 580.07 231 534.1 159.13 511.98 124.56 498.03 96 454.05 96 415.36 96 384 125.42 384 161.71v60.11l-32.88-21.92a15.996 15.996 0 0 1-7.12-13.31V16c0-8.84-7.16-16-16-16h-16c-8.84 0-16 7.16-16 16v170.59c0 5.35-2.67 10.34-7.12 13.31L256 221.82v-60.11C256 125.42 224.64 96 185.95 96c-43.98 0-57.93 28.56-80.05 63.13C59.93 231 25.56 308.85 3.89 390.15 1.3 399.84 0 409.79 0 419.78c0 61.23 62.48 105.44 125.24 88.62l59.5-15.95c42.18-11.3 71.26-47.47 71.26-88.62v-87.49l-85.84 57.23a7.992 7.992 0 0 1-11.09-2.22l-8.88-13.31a7.992 7.992 0 0 1 2.22-11.09L320 235.23l167.59 111.72a7.994 7.994 0 0 1 2.22 11.09l-8.88 13.31a7.994 7.994 0 0 1-11.09 2.22L384 316.34v87.49c0 41.15 29.08 77.31 71.26 88.62l59.5 15.95C577.52 525.22 640 481.01 640 419.78c0-9.99-1.3-19.94-3.89-29.63z“]},du={prefix:”fas“,iconName:”lungs-virus“,icon:[640,512,,”e067“,”M344,150.68V16A16,16,0,0,0,328,0H312a16,16,0,0,0-16,16V150.68a46.45,46.45,0,0,1,48,0ZM195.54,444.46a48.06,48.06,0,0,1,0-67.88l8.58-8.58H192a48,48,0,0,1,0-96h12.12l-8.58-8.57a48,48,0,0,1,60.46-74V161.75C256,125.38,224.62,96,186,96c-44,0-58,28.5-80.12,63.13a819.52,819.52,0,0,0-102,231A113.16,113.16,0,0,0,0,419.75C0,481,62.5,525.26,125.25,508.38l59.5-15.87a98.51,98.51,0,0,0,52.5-34.75,46.49,46.49,0,0,1-41.71-13.3Zm226.29-22.63a16,16,0,0,0,0-22.62l-8.58-8.58C393.09,370.47,407.37,336,435.88,336H448a16,16,0,0,0,0-32H435.88c-28.51,0-42.79-34.47-22.63-54.62l8.58-8.58a16,16,0,0,0-22.63-22.63l-8.57,8.58C370.47,246.91,336,232.63,336,204.12V192a16,16,0,0,0-32,0v12.12c0,28.51-34.47,42.79-54.63,22.63l-8.57-8.58a16,16,0,0,0-22.63,22.63l8.58,8.58c20.16,20.15,5.88,54.62-22.63,54.62H192a16,16,0,0,0,0,32h12.12c28.51,0,42.79,34.47,22.63,54.63l-8.58,8.58a16,16,0,1,0,22.63,22.62l8.57-8.57C269.53,393.1,304,407.38,304,435.88V448a16,16,0,0,0,32,0V435.88c0-28.5,34.47-42.78,54.63-22.62l8.57,8.57a16,16,0,0,0,22.63,0ZM288,304a16,16,0,1,1,16-16A16,16,0,0,1,288,304Zm64,64a16,16,0,1,1,16-16A16,16,0,0,1,352,368Zm284.12,22.13a819.52,819.52,0,0,0-102-231C512,124.5,498,96,454,96c-38.62,0-70,29.38-70,65.75v27.72a48,48,0,0,1,60.46,74L435.88,272H448a48,48,0,0,1,0,96H435.88l8.58,8.58a47.7,47.7,0,0,1-41.71,81.18,98.51,98.51,0,0,0,52.5,34.75l59.5,15.87C577.5,525.26,640,481,640,419.75A113.16,113.16,0,0,0,636.12,390.13Z“]},pu={prefix:”fas“,iconName:”magic“,icon:[512,512,,”f0d0“,”M224 96l16-32 32-16-32-16-16-32-16 32-32 16 32 16 16 32zM80 160l26.66-53.33L160 80l-53.34-26.67L80 0 53.34 53.33 0 80l53.34 26.67L80 160zm352 128l-26.66 53.33L352 368l53.34 26.67L432 448l26.66-53.33L512 368l-53.34-26.67L432 288zm70.62-193.77L417.77 9.38C411.53 3.12 403.34 0 395.15 0c-8.19 0-16.38 3.12-22.63 9.38L9.38 372.52c-12.5 12.5-12.5 32.76 0 45.25l84.85 84.85c6.25 6.25 14.44 9.37 22.62 9.37 8.19 0 16.38-3.12 22.63-9.37l363.14-363.15c12.5-12.48 12.5-32.75 0-45.24zM359.45 203.46l-50.91-50.91 86.6-86.6 50.91 50.91-86.6 86.6z“]},mu={prefix:”fas“,iconName:”magnet“,icon:[512,512,,”f076“,”M164.07 148.1H12a12 12 0 0 1-12-12v-80a36 36 0 0 1 36-36h104a36 36 0 0 1 36 36v80a11.89 11.89 0 0 1-11.93 12zm347.93-12V56a36 36 0 0 0-36-36H372a36 36 0 0 0-36 36v80a12 12 0 0 0 12 12h152a11.89 11.89 0 0 0 12-11.9zm-164 44a12 12 0 0 0-12 12v52c0 128.1-160 127.9-160 0v-52a12 12 0 0 0-12-12H12.1a12 12 0 0 0-12 12.1c.1 21.4.6 40.3 0 53.3 0 150.6 136.17 246.6 256.75 246.6s255-96 255-246.7c-.6-12.8-.2-33 0-53.2a12 12 0 0 0-12-12.1z“]},vu={prefix:”fas“,iconName:”mail-bulk“,icon:[576,512,,”f674“,”M160 448c-25.6 0-51.2-22.4-64-32-64-44.8-83.2-60.8-96-70.4V480c0 17.67 14.33 32 32 32h256c17.67 0 32-14.33 32-32V345.6c-12.8 9.6-32 25.6-96 70.4-12.8 9.6-38.4 32-64 32zm128-192H32c-17.67 0-32 14.33-32 32v16c25.6 19.2 22.4 19.2 115.2 86.4 9.6 6.4 28.8 25.6 44.8 25.6s35.2-19.2 44.8-22.4c92.8-67.2 89.6-67.2 115.2-86.4V288c0-17.67-14.33-32-32-32zm256-96H224c-17.67 0-32 14.33-32 32v32h96c33.21 0 60.59 25.42 63.71 57.82l.29-.22V416h192c17.67 0 32-14.33 32-32V192c0-17.67-14.33-32-32-32zm-32 128h-64v-64h64v64zm-352-96c0-35.29 28.71-64 64-64h224V32c0-17.67-14.33-32-32-32H96C78.33 0 64 14.33 64 32v192h96v-32z“]},gu={prefix:”fas“,iconName:”male“,icon:[192,512,,”f183“,”M96 0c35.346 0 64 28.654 64 64s-28.654 64-64 64-64-28.654-64-64S60.654 0 96 0m48 144h-11.36c-22.711 10.443-49.59 10.894-73.28 0H48c-26.51 0-48 21.49-48 48v136c0 13.255 10.745 24 24 24h16v136c0 13.255 10.745 24 24 24h64c13.255 0 24-10.745 24-24V352h16c13.255 0 24-10.745 24-24V192c0-26.51-21.49-48-48-48z“]},yu={prefix:”fas“,iconName:”map“,icon:[576,512,,”f279“,”M0 117.66v346.32c0 11.32 11.43 19.06 21.94 14.86L160 416V32L20.12 87.95A32.006 32.006 0 0 0 0 117.66zM192 416l192 64V96L192 32v384zM554.06 33.16L416 96v384l139.88-55.95A31.996 31.996 0 0 0 576 394.34V48.02c0-11.32-11.43-19.06-21.94-14.86z“]},bu={prefix:”fas“,iconName:”map-marked“,icon:[576,512,,”f59f“,”M288 0c-69.59 0-126 56.41-126 126 0 56.26 82.35 158.8 113.9 196.02 6.39 7.54 17.82 7.54 24.2 0C331.65 284.8 414 182.26 414 126 414 56.41 357.59 0 288 0zM20.12 215.95A32.006 32.006 0 0 0 0 245.66v250.32c0 11.32 11.43 19.06 21.94 14.86L160 448V214.92c-8.84-15.98-16.07-31.54-21.25-46.42L20.12 215.95zM288 359.67c-14.07 0-27.38-6.18-36.51-16.96-19.66-23.2-40.57-49.62-59.49-76.72v182l192 64V266c-18.92 27.09-39.82 53.52-59.49 76.72-9.13 10.77-22.44 16.95-36.51 16.95zm266.06-198.51L416 224v288l139.88-55.95A31.996 31.996 0 0 0 576 426.34V176.02c0-11.32-11.43-19.06-21.94-14.86z“]},wu={prefix:”fas“,iconName:”map-marked-alt“,icon:[576,512,,”f5a0“,”M288 0c-69.59 0-126 56.41-126 126 0 56.26 82.35 158.8 113.9 196.02 6.39 7.54 17.82 7.54 24.2 0C331.65 284.8 414 182.26 414 126 414 56.41 357.59 0 288 0zm0 168c-23.2 0-42-18.8-42-42s18.8-42 42-42 42 18.8 42 42-18.8 42-42 42zM20.12 215.95A32.006 32.006 0 0 0 0 245.66v250.32c0 11.32 11.43 19.06 21.94 14.86L160 448V214.92c-8.84-15.98-16.07-31.54-21.25-46.42L20.12 215.95zM288 359.67c-14.07 0-27.38-6.18-36.51-16.96-19.66-23.2-40.57-49.62-59.49-76.72v182l192 64V266c-18.92 27.09-39.82 53.52-59.49 76.72-9.13 10.77-22.44 16.95-36.51 16.95zm266.06-198.51L416 224v288l139.88-55.95A31.996 31.996 0 0 0 576 426.34V176.02c0-11.32-11.43-19.06-21.94-14.86z“]},xu={prefix:”fas“,iconName:”map-marker“,icon:[384,512,,”f041“,”M172.268 501.67C26.97 291.031 0 269.413 0 192 0 85.961 85.961 0 192 0s192 85.961 192 192c0 77.413-26.97 99.031-172.268 309.67-9.535 13.774-29.93 13.773-39.464 0z“]},Su={prefix:”fas“,iconName:”map-marker-alt“,icon:[384,512,,”f3c5“,”M172.268 501.67C26.97 291.031 0 269.413 0 192 0 85.961 85.961 0 192 0s192 85.961 192 192c0 77.413-26.97 99.031-172.268 309.67-9.535 13.774-29.93 13.773-39.464 0zM192 272c44.183 0 80-35.817 80-80s-35.817-80-80-80-80 35.817-80 80 35.817 80 80 80z“]},ku={prefix:”fas“,iconName:”map-pin“,icon:[288,512,,”f276“,”M112 316.94v156.69l22.02 33.02c4.75 7.12 15.22 7.12 19.97 0L176 473.63V316.94c-10.39 1.92-21.06 3.06-32 3.06s-21.61-1.14-32-3.06zM144 0C64.47 0 0 64.47 0 144s64.47 144 144 144 144-64.47 144-144S223.53 0 144 0zm0 76c-37.5 0-68 30.5-68 68 0 6.62-5.38 12-12 12s-12-5.38-12-12c0-50.73 41.28-92 92-92 6.62 0 12 5.38 12 12s-5.38 12-12 12z“]},_u={prefix:”fas“,iconName:”map-signs“,icon:[512,512,,”f277“,”M507.31 84.69L464 41.37c-6-6-14.14-9.37-22.63-9.37H288V16c0-8.84-7.16-16-16-16h-32c-8.84 0-16 7.16-16 16v16H56c-13.25 0-24 10.75-24 24v80c0 13.25 10.75 24 24 24h385.37c8.49 0 16.62-3.37 22.63-9.37l43.31-43.31c6.25-6.26 6.25-16.38 0-22.63zM224 496c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16V384h-64v112zm232-272H288v-32h-64v32H70.63c-8.49 0-16.62 3.37-22.63 9.37L4.69 276.69c-6.25 6.25-6.25 16.38 0 22.63L48 342.63c6 6 14.14 9.37 22.63 9.37H456c13.25 0 24-10.75 24-24v-80c0-13.25-10.75-24-24-24z“]},zu={prefix:”fas“,iconName:”marker“,icon:[512,512,,”f5a1“,”M93.95 290.03A327.038 327.038 0 0 0 .17 485.11l-.03.23c-1.7 15.28 11.21 28.2 26.49 26.51a327.02 327.02 0 0 0 195.34-93.8l75.4-75.4-128.02-128.02-75.4 75.4zM485.49 26.51c-35.35-35.35-92.67-35.35-128.02 0l-21.76 21.76-36.56-36.55c-15.62-15.62-40.95-15.62-56.56 0L138.47 115.84c-6.25 6.25-6.25 16.38 0 22.63l22.62 22.62c6.25 6.25 16.38 6.25 22.63 0l87.15-87.15 19.59 19.59L191.98 192 320 320.02l165.49-165.49c35.35-35.35 35.35-92.66 0-128.02z“]},Cu={prefix:”fas“,iconName:”mars“,icon:[384,512,,”f222“,”M372 64h-79c-10.7 0-16 12.9-8.5 20.5l16.9 16.9-80.7 80.7c-22.2-14-48.5-22.1-76.7-22.1C64.5 160 0 224.5 0 304s64.5 144 144 144 144-64.5 144-144c0-28.2-8.1-54.5-22.1-76.7l80.7-80.7 16.9 16.9c7.6 7.6 20.5 2.2 20.5-8.5V76c0-6.6-5.4-12-12-12zM144 384c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80z“]},Mu={prefix:”fas“,iconName:”mars-double“,icon:[512,512,,”f227“,”M340 0h-79c-10.7 0-16 12.9-8.5 20.5l16.9 16.9-48.7 48.7C198.5 72.1 172.2 64 144 64 64.5 64 0 128.5 0 208s64.5 144 144 144 144-64.5 144-144c0-28.2-8.1-54.5-22.1-76.7l48.7-48.7 16.9 16.9c2.4 2.4 5.5 3.5 8.4 3.5 6.2 0 12.1-4.8 12.1-12V12c0-6.6-5.4-12-12-12zM144 288c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80zm356-128.1h-79c-10.7 0-16 12.9-8.5 20.5l16.9 16.9-48.7 48.7c-18.2-11.4-39-18.9-61.5-21.3-2.1 21.8-8.2 43.3-18.4 63.3 1.1 0 2.2-.1 3.2-.1 44.1 0 80 35.9 80 80s-35.9 80-80 80-80-35.9-80-80c0-1.1 0-2.2.1-3.2-20 10.2-41.5 16.4-63.3 18.4C168.4 455.6 229.6 512 304 512c79.5 0 144-64.5 144-144 0-28.2-8.1-54.5-22.1-76.7l48.7-48.7 16.9 16.9c2.4 2.4 5.4 3.5 8.4 3.5 6.2 0 12.1-4.8 12.1-12v-79c0-6.7-5.4-12.1-12-12.1z“]},Ou={prefix:”fas“,iconName:”mars-stroke“,icon:[384,512,,”f229“,”M372 64h-79c-10.7 0-16 12.9-8.5 20.5l16.9 16.9-17.5 17.5-14.1-14.1c-4.7-4.7-12.3-4.7-17 0L224.5 133c-4.7 4.7-4.7 12.3 0 17l14.1 14.1-18 18c-22.2-14-48.5-22.1-76.7-22.1C64.5 160 0 224.5 0 304s64.5 144 144 144 144-64.5 144-144c0-28.2-8.1-54.5-22.1-76.7l18-18 14.1 14.1c4.7 4.7 12.3 4.7 17 0l28.3-28.3c4.7-4.7 4.7-12.3 0-17L329.2 164l17.5-17.5 16.9 16.9c7.6 7.6 20.5 2.2 20.5-8.5V76c-.1-6.6-5.5-12-12.1-12zM144 384c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80z“]},Tu={prefix:”fas“,iconName:”mars-stroke-h“,icon:[480,512,,”f22b“,”M476.2 247.5l-55.9-55.9c-7.6-7.6-20.5-2.2-20.5 8.5V224H376v-20c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v20h-27.6c-5.8-25.6-18.7-49.9-38.6-69.8C189.6 98 98.4 98 42.2 154.2c-56.2 56.2-56.2 147.4 0 203.6 56.2 56.2 147.4 56.2 203.6 0 19.9-19.9 32.8-44.2 38.6-69.8H312v20c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-20h23.9v23.9c0 10.7 12.9 16 20.5 8.5l55.9-55.9c4.6-4.7 4.6-12.3-.1-17zm-275.6 65.1c-31.2 31.2-81.9 31.2-113.1 0-31.2-31.2-31.2-81.9 0-113.1 31.2-31.2 81.9-31.2 113.1 0 31.2 31.1 31.2 81.9 0 113.1z“]},Eu={prefix:”fas“,iconName:”mars-stroke-v“,icon:[288,512,,”f22a“,”M245.8 234.2c-19.9-19.9-44.2-32.8-69.8-38.6v-25.4h20c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-20V81.4h23.9c10.7 0 16-12.9 8.5-20.5L152.5 5.1c-4.7-4.7-12.3-4.7-17 0L79.6 61c-7.6 7.6-2.2 20.5 8.5 20.5H112v24.7H92c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h20v25.4c-25.6 5.8-49.9 18.7-69.8 38.6-56.2 56.2-56.2 147.4 0 203.6 56.2 56.2 147.4 56.2 203.6 0 56.3-56.2 56.3-147.4 0-203.6zm-45.2 158.4c-31.2 31.2-81.9 31.2-113.1 0-31.2-31.2-31.2-81.9 0-113.1 31.2-31.2 81.9-31.2 113.1 0 31.2 31.1 31.2 81.9 0 113.1z“]},Lu={prefix:”fas“,iconName:”mask“,icon:[640,512,,”f6fa“,”M320.67 64c-442.6 0-357.57 384-158.46 384 39.9 0 77.47-20.69 101.42-55.86l25.73-37.79c15.66-22.99 46.97-22.99 62.63 0l25.73 37.79C401.66 427.31 439.23 448 479.13 448c189.86 0 290.63-384-158.46-384zM184 308.36c-41.06 0-67.76-25.66-80.08-41.05-5.23-6.53-5.23-16.09 0-22.63 12.32-15.4 39.01-41.05 80.08-41.05s67.76 25.66 80.08 41.05c5.23 6.53 5.23 16.09 0 22.63-12.32 15.4-39.02 41.05-80.08 41.05zm272 0c-41.06 0-67.76-25.66-80.08-41.05-5.23-6.53-5.23-16.09 0-22.63 12.32-15.4 39.01-41.05 80.08-41.05s67.76 25.66 80.08 41.05c5.23 6.53 5.23 16.09 0 22.63-12.32 15.4-39.02 41.05-80.08 41.05z“]},Au={prefix:”fas“,iconName:”medal“,icon:[512,512,,”f5a2“,”M223.75 130.75L154.62 15.54A31.997 31.997 0 0 0 127.18 0H16.03C3.08 0-4.5 14.57 2.92 25.18l111.27 158.96c29.72-27.77 67.52-46.83 109.56-53.39zM495.97 0H384.82c-11.24 0-21.66 5.9-27.44 15.54l-69.13 115.21c42.04 6.56 79.84 25.62 109.56 53.38L509.08 25.18C516.5 14.57 508.92 0 495.97 0zM256 160c-97.2 0-176 78.8-176 176s78.8 176 176 176 176-78.8 176-176-78.8-176-176-176zm92.52 157.26l-37.93 36.96 8.97 52.22c1.6 9.36-8.26 16.51-16.65 12.09L256 393.88l-46.9 24.65c-8.4 4.45-18.25-2.74-16.65-12.09l8.97-52.22-37.93-36.96c-6.82-6.64-3.05-18.23 6.35-19.59l52.43-7.64 23.43-47.52c2.11-4.28 6.19-6.39 10.28-6.39 4.11 0 8.22 2.14 10.33 6.39l23.43 47.52 52.43 7.64c9.4 1.36 13.17 12.95 6.35 19.59z“]},Ru={prefix:”fas“,iconName:”medkit“,icon:[512,512,,”f0fa“,”M96 480h320V128h-32V80c0-26.51-21.49-48-48-48H176c-26.51 0-48 21.49-48 48v48H96v352zm96-384h128v32H192V96zm320 80v256c0 26.51-21.49 48-48 48h-16V128h16c26.51 0 48 21.49 48 48zM64 480H48c-26.51 0-48-21.49-48-48V176c0-26.51 21.49-48 48-48h16v352zm288-208v32c0 8.837-7.163 16-16 16h-48v48c0 8.837-7.163 16-16 16h-32c-8.837 0-16-7.163-16-16v-48h-48c-8.837 0-16-7.163-16-16v-32c0-8.837 7.163-16 16-16h48v-48c0-8.837 7.163-16 16-16h32c8.837 0 16 7.163 16 16v48h48c8.837 0 16 7.163 16 16z“]},Nu={prefix:”fas“,iconName:”meh“,icon:[496,512,,”f11a“,”M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm-80 168c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm176 192H152c-21.2 0-21.2-32 0-32h192c21.2 0 21.2 32 0 32zm-16-128c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z“]},Hu={prefix:”fas“,iconName:”meh-blank“,icon:[496,512,,”f5a4“,”M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm-80 232c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm160 0c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z“]},Pu={prefix:”fas“,iconName:”meh-rolling-eyes“,icon:[496,512,,”f5a5“,”M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM88 224c0-24.3 13.7-45.2 33.6-56-.7 2.6-1.6 5.2-1.6 8 0 17.7 14.3 32 32 32s32-14.3 32-32c0-2.8-.9-5.4-1.6-8 19.9 10.8 33.6 31.7 33.6 56 0 35.3-28.7 64-64 64s-64-28.7-64-64zm224 176H184c-21.2 0-21.2-32 0-32h128c21.2 0 21.2 32 0 32zm32-112c-35.3 0-64-28.7-64-64 0-24.3 13.7-45.2 33.6-56-.7 2.6-1.6 5.2-1.6 8 0 17.7 14.3 32 32 32s32-14.3 32-32c0-2.8-.9-5.4-1.6-8 19.9 10.8 33.6 31.7 33.6 56 0 35.3-28.7 64-64 64z“]},ju={prefix:”fas“,iconName:”memory“,icon:[640,512,,”f538“,”M640 130.94V96c0-17.67-14.33-32-32-32H32C14.33 64 0 78.33 0 96v34.94c18.6 6.61 32 24.19 32 45.06s-13.4 38.45-32 45.06V320h640v-98.94c-18.6-6.61-32-24.19-32-45.06s13.4-38.45 32-45.06zM224 256h-64V128h64v128zm128 0h-64V128h64v128zm128 0h-64V128h64v128zM0 448h64v-26.67c0-8.84 7.16-16 16-16s16 7.16 16 16V448h128v-26.67c0-8.84 7.16-16 16-16s16 7.16 16 16V448h128v-26.67c0-8.84 7.16-16 16-16s16 7.16 16 16V448h128v-26.67c0-8.84 7.16-16 16-16s16 7.16 16 16V448h64v-96H0v96z“]},Vu={prefix:”fas“,iconName:”menorah“,icon:[640,512,,”f676“,”M144 128h-32c-8.84 0-16 7.16-16 16v144h64V144c0-8.84-7.16-16-16-16zm96 0h-32c-8.84 0-16 7.16-16 16v144h64V144c0-8.84-7.16-16-16-16zm192 0h-32c-8.84 0-16 7.16-16 16v144h64V144c0-8.84-7.16-16-16-16zm96 0h-32c-8.84 0-16 7.16-16 16v144h64V144c0-8.84-7.16-16-16-16zm80-32c17.67 0 32-14.33 32-32S608 0 608 0s-32 46.33-32 64 14.33 32 32 32zm-96 0c17.67 0 32-14.33 32-32S512 0 512 0s-32 46.33-32 64 14.33 32 32 32zm-96 0c17.67 0 32-14.33 32-32S416 0 416 0s-32 46.33-32 64 14.33 32 32 32zm-96 0c17.67 0 32-14.33 32-32S320 0 320 0s-32 46.33-32 64 14.33 32 32 32zm-96 0c17.67 0 32-14.33 32-32S224 0 224 0s-32 46.33-32 64 14.33 32 32 32zm-96 0c17.67 0 32-14.33 32-32S128 0 128 0 96 46.33 96 64s14.33 32 32 32zm-96 0c17.67 0 32-14.33 32-32S32 0 32 0 0 46.33 0 64s14.33 32 32 32zm544 192c0 17.67-14.33 32-32 32H352V144c0-8.84-7.16-16-16-16h-32c-8.84 0-16 7.16-16 16v176H96c-17.67 0-32-14.33-32-32V144c0-8.84-7.16-16-16-16H16c-8.84 0-16 7.16-16 16v144c0 53.02 42.98 96 96 96h192v64H112c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h416c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16H352v-64h192c53.02 0 96-42.98 96-96V144c0-8.84-7.16-16-16-16h-32c-8.84 0-16 7.16-16 16v144z“]},Du={prefix:”fas“,iconName:”mercury“,icon:[288,512,,”f223“,”M288 208c0-44.2-19.9-83.7-51.2-110.1 2.5-1.8 4.9-3.8 7.2-5.8 24.7-21.2 39.8-48.8 43.2-78.8.9-7.1-4.7-13.3-11.9-13.3h-40.5C229 0 224.1 4.1 223 9.8c-2.4 12.5-9.6 24.3-20.7 33.8C187 56.8 166.3 64 144 64s-43-7.2-58.4-20.4C74.5 34.1 67.4 22.3 64.9 9.8 63.8 4.1 58.9 0 53.2 0H12.7C5.5 0-.1 6.2.8 13.3 4.2 43.4 19.2 71 44 92.2c2.3 2 4.7 3.9 7.2 5.8C19.9 124.3 0 163.8 0 208c0 68.5 47.9 125.9 112 140.4V400H76c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h36v36c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-36h36c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-36v-51.6c64.1-14.5 112-71.9 112-140.4zm-224 0c0-44.1 35.9-80 80-80s80 35.9 80 80-35.9 80-80 80-80-35.9-80-80z“]},Iu={prefix:”fas“,iconName:”meteor“,icon:[512,512,,”f753“,”M511.328,20.8027c-11.60759,38.70264-34.30724,111.70173-61.30311,187.70077,6.99893,2.09372,13.4042,4,18.60653,5.59368a16.06158,16.06158,0,0,1,9.49854,22.906c-22.106,42.29635-82.69047,152.795-142.47819,214.40356-.99984,1.09373-1.99969,2.5-2.99954,3.49995A194.83046,194.83046,0,1,1,57.085,179.41009c.99985-1,2.40588-2,3.49947-3,61.59994-59.90549,171.97367-120.40473,214.37343-142.4982a16.058,16.058,0,0,1,22.90274,9.49988c1.59351,5.09368,3.49947,11.5936,5.5929,18.59351C379.34818,35.00565,452.43074,12.30281,491.12794.70921A16.18325,16.18325,0,0,1,511.328,20.8027ZM319.951,320.00207A127.98041,127.98041,0,1,0,191.97061,448.00046,127.97573,127.97573,0,0,0,319.951,320.00207Zm-127.98041-31.9996a31.9951,31.9951,0,1,1-31.9951-31.9996A31.959,31.959,0,0,1,191.97061,288.00247Zm31.9951,79.999a15.99755,15.99755,0,1,1-15.99755-15.9998A16.04975,16.04975,0,0,1,223.96571,368.00147Z“]},Fu={prefix:”fas“,iconName:”microchip“,icon:[512,512,,”f2db“,”M416 48v416c0 26.51-21.49 48-48 48H144c-26.51 0-48-21.49-48-48V48c0-26.51 21.49-48 48-48h224c26.51 0 48 21.49 48 48zm96 58v12a6 6 0 0 1-6 6h-18v6a6 6 0 0 1-6 6h-42V88h42a6 6 0 0 1 6 6v6h18a6 6 0 0 1 6 6zm0 96v12a6 6 0 0 1-6 6h-18v6a6 6 0 0 1-6 6h-42v-48h42a6 6 0 0 1 6 6v6h18a6 6 0 0 1 6 6zm0 96v12a6 6 0 0 1-6 6h-18v6a6 6 0 0 1-6 6h-42v-48h42a6 6 0 0 1 6 6v6h18a6 6 0 0 1 6 6zm0 96v12a6 6 0 0 1-6 6h-18v6a6 6 0 0 1-6 6h-42v-48h42a6 6 0 0 1 6 6v6h18a6 6 0 0 1 6 6zM30 376h42v48H30a6 6 0 0 1-6-6v-6H6a6 6 0 0 1-6-6v-12a6 6 0 0 1 6-6h18v-6a6 6 0 0 1 6-6zm0-96h42v48H30a6 6 0 0 1-6-6v-6H6a6 6 0 0 1-6-6v-12a6 6 0 0 1 6-6h18v-6a6 6 0 0 1 6-6zm0-96h42v48H30a6 6 0 0 1-6-6v-6H6a6 6 0 0 1-6-6v-12a6 6 0 0 1 6-6h18v-6a6 6 0 0 1 6-6zm0-96h42v48H30a6 6 0 0 1-6-6v-6H6a6 6 0 0 1-6-6v-12a6 6 0 0 1 6-6h18v-6a6 6 0 0 1 6-6z“]},Bu={prefix:”fas“,iconName:”microphone“,icon:[352,512,,”f130“,”M176 352c53.02 0 96-42.98 96-96V96c0-53.02-42.98-96-96-96S80 42.98 80 96v160c0 53.02 42.98 96 96 96zm160-160h-16c-8.84 0-16 7.16-16 16v48c0 74.8-64.49 134.82-140.79 127.38C96.71 376.89 48 317.11 48 250.3V208c0-8.84-7.16-16-16-16H16c-8.84 0-16 7.16-16 16v40.16c0 89.64 63.97 169.55 152 181.69V464H96c-8.84 0-16 7.16-16 16v16c0 8.84 7.16 16 16 16h160c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16h-56v-33.77C285.71 418.47 352 344.9 352 256v-48c0-8.84-7.16-16-16-16z“]},Uu={prefix:”fas“,iconName:”microphone-alt“,icon:[352,512,,”f3c9“,”M336 192h-16c-8.84 0-16 7.16-16 16v48c0 74.8-64.49 134.82-140.79 127.38C96.71 376.89 48 317.11 48 250.3V208c0-8.84-7.16-16-16-16H16c-8.84 0-16 7.16-16 16v40.16c0 89.64 63.97 169.55 152 181.69V464H96c-8.84 0-16 7.16-16 16v16c0 8.84 7.16 16 16 16h160c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16h-56v-33.77C285.71 418.47 352 344.9 352 256v-48c0-8.84-7.16-16-16-16zM176 352c53.02 0 96-42.98 96-96h-85.33c-5.89 0-10.67-3.58-10.67-8v-16c0-4.42 4.78-8 10.67-8H272v-32h-85.33c-5.89 0-10.67-3.58-10.67-8v-16c0-4.42 4.78-8 10.67-8H272v-32h-85.33c-5.89 0-10.67-3.58-10.67-8v-16c0-4.42 4.78-8 10.67-8H272c0-53.02-42.98-96-96-96S80 42.98 80 96v160c0 53.02 42.98 96 96 96z“]},qu={prefix:”fas“,iconName:”microphone-alt-slash“,icon:[640,512,,”f539“,”M633.82 458.1L476.26 336.33C488.74 312.21 496 284.98 496 256v-48c0-8.84-7.16-16-16-16h-16c-8.84 0-16 7.16-16 16v48c0 17.92-3.96 34.8-10.72 50.2l-26.55-20.52c3.1-9.4 5.28-19.22 5.28-29.67h-43.67l-41.4-32H416v-32h-85.33c-5.89 0-10.67-3.58-10.67-8v-16c0-4.42 4.78-8 10.67-8H416v-32h-85.33c-5.89 0-10.67-3.58-10.67-8v-16c0-4.42 4.78-8 10.67-8H416c0-53.02-42.98-96-96-96s-96 42.98-96 96v45.36L45.47 3.37C38.49-2.05 28.43-.8 23.01 6.18L3.37 31.45C-2.05 38.42-.8 48.47 6.18 53.9l588.36 454.73c6.98 5.43 17.03 4.17 22.46-2.81l19.64-25.27c5.41-6.97 4.16-17.02-2.82-22.45zM400 464h-56v-33.78c11.71-1.62 23.1-4.28 33.96-8.08l-50.4-38.96c-6.71.4-13.41.87-20.35.2-55.85-5.45-98.74-48.63-111.18-101.85L144 241.31v6.85c0 89.64 63.97 169.55 152 181.69V464h-56c-8.84 0-16 7.16-16 16v16c0 8.84 7.16 16 16 16h160c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16z“]},Gu={prefix:”fas“,iconName:”microphone-slash“,icon:[640,512,,”f131“,”M633.82 458.1l-157.8-121.96C488.61 312.13 496 285.01 496 256v-48c0-8.84-7.16-16-16-16h-16c-8.84 0-16 7.16-16 16v48c0 17.92-3.96 34.8-10.72 50.2l-26.55-20.52c3.1-9.4 5.28-19.22 5.28-29.67V96c0-53.02-42.98-96-96-96s-96 42.98-96 96v45.36L45.47 3.37C38.49-2.05 28.43-.8 23.01 6.18L3.37 31.45C-2.05 38.42-.8 48.47 6.18 53.9l588.36 454.73c6.98 5.43 17.03 4.17 22.46-2.81l19.64-25.27c5.41-6.97 4.16-17.02-2.82-22.45zM400 464h-56v-33.77c11.66-1.6 22.85-4.54 33.67-8.31l-50.11-38.73c-6.71.4-13.41.87-20.35.2-55.85-5.45-98.74-48.63-111.18-101.85L144 241.31v6.85c0 89.64 63.97 169.55 152 181.69V464h-56c-8.84 0-16 7.16-16 16v16c0 8.84 7.16 16 16 16h160c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16z“]},Wu={prefix:”fas“,iconName:”microscope“,icon:[512,512,,”f610“,”M160 320h12v16c0 8.84 7.16 16 16 16h40c8.84 0 16-7.16 16-16v-16h12c17.67 0 32-14.33 32-32V64c0-17.67-14.33-32-32-32V16c0-8.84-7.16-16-16-16h-64c-8.84 0-16 7.16-16 16v16c-17.67 0-32 14.33-32 32v224c0 17.67 14.33 32 32 32zm304 128h-1.29C493.24 413.99 512 369.2 512 320c0-105.88-86.12-192-192-192v64c70.58 0 128 57.42 128 128s-57.42 128-128 128H48c-26.51 0-48 21.49-48 48 0 8.84 7.16 16 16 16h480c8.84 0 16-7.16 16-16 0-26.51-21.49-48-48-48zm-360-32h208c4.42 0 8-3.58 8-8v-16c0-4.42-3.58-8-8-8H104c-4.42 0-8 3.58-8 8v16c0 4.42 3.58 8 8 8z“]},Zu={prefix:”fas“,iconName:”minus“,icon:[448,512,,”f068“,”M416 208H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h384c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32z“]},$u={prefix:”fas“,iconName:”minus-circle“,icon:[512,512,,”f056“,”M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zM124 296c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h264c6.6 0 12 5.4 12 12v56c0 6.6-5.4 12-12 12H124z“]},Ju={prefix:”fas“,iconName:”minus-square“,icon:[448,512,,”f146“,”M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM92 296c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h264c6.6 0 12 5.4 12 12v56c0 6.6-5.4 12-12 12H92z“]},Ku={prefix:”fas“,iconName:”mitten“,icon:[448,512,,”f7b5“,”M368 416H48c-8.8 0-16 7.2-16 16v64c0 8.8 7.2 16 16 16h320c8.8 0 16-7.2 16-16v-64c0-8.8-7.2-16-16-16zm57-209.1c-27.2-22.6-67.5-19-90.1 8.2l-20.9 25-29.6-128.4c-18-77.5-95.4-125.9-172.8-108C34.2 21.6-14.2 98.9 3.7 176.4L51.6 384h309l72.5-87c22.7-27.2 19-67.5-8.1-90.1z“]},Qu={prefix:”fas“,iconName:”mobile“,icon:[320,512,,”f10b“,”M272 0H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h224c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zM160 480c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z“]},Yu={prefix:”fas“,iconName:”mobile-alt“,icon:[320,512,,”f3cd“,”M272 0H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h224c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zM160 480c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm112-108c0 6.6-5.4 12-12 12H60c-6.6 0-12-5.4-12-12V60c0-6.6 5.4-12 12-12h200c6.6 0 12 5.4 12 12v312z“]},Xu={prefix:”fas“,iconName:”money-bill“,icon:[640,512,,”f0d6“,”M608 64H32C14.33 64 0 78.33 0 96v320c0 17.67 14.33 32 32 32h576c17.67 0 32-14.33 32-32V96c0-17.67-14.33-32-32-32zM48 400v-64c35.35 0 64 28.65 64 64H48zm0-224v-64h64c0 35.35-28.65 64-64 64zm272 176c-44.19 0-80-42.99-80-96 0-53.02 35.82-96 80-96s80 42.98 80 96c0 53.03-35.83 96-80 96zm272 48h-64c0-35.35 28.65-64 64-64v64zm0-224c-35.35 0-64-28.65-64-64h64v64z“]},el={prefix:”fas“,iconName:”money-bill-alt“,icon:[640,512,,”f3d1“,”M352 288h-16v-88c0-4.42-3.58-8-8-8h-13.58c-4.74 0-9.37 1.4-13.31 4.03l-15.33 10.22a7.994 7.994 0 0 0-2.22 11.09l8.88 13.31a7.994 7.994 0 0 0 11.09 2.22l.47-.31V288h-16c-4.42 0-8 3.58-8 8v16c0 4.42 3.58 8 8 8h64c4.42 0 8-3.58 8-8v-16c0-4.42-3.58-8-8-8zM608 64H32C14.33 64 0 78.33 0 96v320c0 17.67 14.33 32 32 32h576c17.67 0 32-14.33 32-32V96c0-17.67-14.33-32-32-32zM48 400v-64c35.35 0 64 28.65 64 64H48zm0-224v-64h64c0 35.35-28.65 64-64 64zm272 192c-53.02 0-96-50.15-96-112 0-61.86 42.98-112 96-112s96 50.14 96 112c0 61.87-43 112-96 112zm272 32h-64c0-35.35 28.65-64 64-64v64zm0-224c-35.35 0-64-28.65-64-64h64v64z“]},tl={prefix:”fas“,iconName:”money-bill-wave“,icon:[640,512,,”f53a“,”M621.16 54.46C582.37 38.19 543.55 32 504.75 32c-123.17-.01-246.33 62.34-369.5 62.34-30.89 0-61.76-3.92-92.65-13.72-3.47-1.1-6.95-1.62-10.35-1.62C15.04 79 0 92.32 0 110.81v317.26c0 12.63 7.23 24.6 18.84 29.46C57.63 473.81 96.45 480 135.25 480c123.17 0 246.34-62.35 369.51-62.35 30.89 0 61.76 3.92 92.65 13.72 3.47 1.1 6.95 1.62 10.35 1.62 17.21 0 32.25-13.32 32.25-31.81V83.93c-.01-12.64-7.24-24.6-18.85-29.47zM48 132.22c20.12 5.04 41.12 7.57 62.72 8.93C104.84 170.54 79 192.69 48 192.69v-60.47zm0 285v-47.78c34.37 0 62.18 27.27 63.71 61.4-22.53-1.81-43.59-6.31-63.71-13.62zM320 352c-44.19 0-80-42.99-80-96 0-53.02 35.82-96 80-96s80 42.98 80 96c0 53.03-35.83 96-80 96zm272 27.78c-17.52-4.39-35.71-6.85-54.32-8.44 5.87-26.08 27.5-45.88 54.32-49.28v57.72zm0-236.11c-30.89-3.91-54.86-29.7-55.81-61.55 19.54 2.17 38.09 6.23 55.81 12.66v48.89z“]},nl={prefix:”fas“,iconName:”money-bill-wave-alt“,icon:[640,512,,”f53b“,”M621.16 54.46C582.37 38.19 543.55 32 504.75 32c-123.17-.01-246.33 62.34-369.5 62.34-30.89 0-61.76-3.92-92.65-13.72-3.47-1.1-6.95-1.62-10.35-1.62C15.04 79 0 92.32 0 110.81v317.26c0 12.63 7.23 24.6 18.84 29.46C57.63 473.81 96.45 480 135.25 480c123.17 0 246.34-62.35 369.51-62.35 30.89 0 61.76 3.92 92.65 13.72 3.47 1.1 6.95 1.62 10.35 1.62 17.21 0 32.25-13.32 32.25-31.81V83.93c-.01-12.64-7.24-24.6-18.85-29.47zM320 352c-44.19 0-80-42.99-80-96 0-53.02 35.82-96 80-96s80 42.98 80 96c0 53.03-35.83 96-80 96z“]},rl={prefix:”fas“,iconName:”money-check“,icon:[640,512,,”f53c“,”M0 448c0 17.67 14.33 32 32 32h576c17.67 0 32-14.33 32-32V128H0v320zm448-208c0-8.84 7.16-16 16-16h96c8.84 0 16 7.16 16 16v32c0 8.84-7.16 16-16 16h-96c-8.84 0-16-7.16-16-16v-32zm0 120c0-4.42 3.58-8 8-8h112c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H456c-4.42 0-8-3.58-8-8v-16zM64 264c0-4.42 3.58-8 8-8h304c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8v-16zm0 96c0-4.42 3.58-8 8-8h176c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8v-16zM624 32H16C7.16 32 0 39.16 0 48v48h640V48c0-8.84-7.16-16-16-16z“]},il={prefix:”fas“,iconName:”money-check-alt“,icon:[640,512,,”f53d“,”M608 32H32C14.33 32 0 46.33 0 64v384c0 17.67 14.33 32 32 32h576c17.67 0 32-14.33 32-32V64c0-17.67-14.33-32-32-32zM176 327.88V344c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-16.29c-11.29-.58-22.27-4.52-31.37-11.35-3.9-2.93-4.1-8.77-.57-12.14l11.75-11.21c2.77-2.64 6.89-2.76 10.13-.73 3.87 2.42 8.26 3.72 12.82 3.72h28.11c6.5 0 11.8-5.92 11.8-13.19 0-5.95-3.61-11.19-8.77-12.73l-45-13.5c-18.59-5.58-31.58-23.42-31.58-43.39 0-24.52 19.05-44.44 42.67-45.07V152c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v16.29c11.29.58 22.27 4.51 31.37 11.35 3.9 2.93 4.1 8.77.57 12.14l-11.75 11.21c-2.77 2.64-6.89 2.76-10.13.73-3.87-2.43-8.26-3.72-12.82-3.72h-28.11c-6.5 0-11.8 5.92-11.8 13.19 0 5.95 3.61 11.19 8.77 12.73l45 13.5c18.59 5.58 31.58 23.42 31.58 43.39 0 24.53-19.05 44.44-42.67 45.07zM416 312c0 4.42-3.58 8-8 8H296c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h112c4.42 0 8 3.58 8 8v16zm160 0c0 4.42-3.58 8-8 8h-80c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h80c4.42 0 8 3.58 8 8v16zm0-96c0 4.42-3.58 8-8 8H296c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h272c4.42 0 8 3.58 8 8v16z“]},al={prefix:”fas“,iconName:”monument“,icon:[384,512,,”f5a6“,”M368 448H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h352c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zm-78.86-347.26a31.97 31.97 0 0 0-9.21-19.44L203.31 4.69c-6.25-6.25-16.38-6.25-22.63 0l-76.6 76.61a31.97 31.97 0 0 0-9.21 19.44L64 416h256l-30.86-315.26zM240 307.2c0 6.4-6.4 12.8-12.8 12.8h-70.4c-6.4 0-12.8-6.4-12.8-12.8v-38.4c0-6.4 6.4-12.8 12.8-12.8h70.4c6.4 0 12.8 6.4 12.8 12.8v38.4z“]},ol={prefix:”fas“,iconName:”moon“,icon:[512,512,,”f186“,”M283.211 512c78.962 0 151.079-35.925 198.857-94.792 7.068-8.708-.639-21.43-11.562-19.35-124.203 23.654-238.262-71.576-238.262-196.954 0-72.222 38.662-138.635 101.498-174.394 9.686-5.512 7.25-20.197-3.756-22.23A258.156 258.156 0 0 0 283.211 0c-141.309 0-256 114.511-256 256 0 141.309 114.511 256 256 256z“]},cl={prefix:”fas“,iconName:”mortar-pestle“,icon:[512,512,,”f5a7“,”M501.54 60.91c17.22-17.22 12.51-46.25-9.27-57.14a35.696 35.696 0 0 0-37.37 3.37L251.09 160h151.37l99.08-99.09zM496 192H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h16c0 80.98 50.2 150.11 121.13 178.32-12.76 16.87-21.72 36.8-24.95 58.69-1.46 9.92 6.04 18.98 16.07 18.98h223.5c10.03 0 17.53-9.06 16.07-18.98-3.22-21.89-12.18-41.82-24.95-58.69C429.8 406.11 480 336.98 480 256h16c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16z“]},sl={prefix:”fas“,iconName:”mosque“,icon:[640,512,,”f678“,”M0 480c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32V160H0v320zm579.16-192c17.86-17.39 28.84-37.34 28.84-58.91 0-52.86-41.79-93.79-87.92-122.9-41.94-26.47-80.63-57.77-111.96-96.22L400 0l-8.12 9.97c-31.33 38.45-70.01 69.76-111.96 96.22C233.79 135.3 192 176.23 192 229.09c0 21.57 10.98 41.52 28.84 58.91h358.32zM608 320H192c-17.67 0-32 14.33-32 32v128c0 17.67 14.33 32 32 32h32v-64c0-17.67 14.33-32 32-32s32 14.33 32 32v64h64v-72c0-48 48-72 48-72s48 24 48 72v72h64v-64c0-17.67 14.33-32 32-32s32 14.33 32 32v64h32c17.67 0 32-14.33 32-32V352c0-17.67-14.33-32-32-32zM64 0S0 32 0 96v32h128V96c0-64-64-96-64-96z“]},ul={prefix:”fas“,iconName:”motorcycle“,icon:[640,512,,”f21c“,”M512.9 192c-14.9-.1-29.1 2.3-42.4 6.9L437.6 144H520c13.3 0 24-10.7 24-24V88c0-13.3-10.7-24-24-24h-45.3c-6.8 0-13.3 2.9-17.8 7.9l-37.5 41.7-22.8-38C392.2 68.4 384.4 64 376 64h-80c-8.8 0-16 7.2-16 16v16c0 8.8 7.2 16 16 16h66.4l19.2 32H227.9c-17.7-23.1-44.9-40-99.9-40H72.5C59 104 47.7 115 48 128.5c.2 13 10.9 23.5 24 23.5h56c24.5 0 38.7 10.9 47.8 24.8l-11.3 20.5c-13-3.9-26.9-5.7-41.3-5.2C55.9 194.5 1.6 249.6 0 317c-1.6 72.1 56.3 131 128 131 59.6 0 109.7-40.8 124-96h84.2c13.7 0 24.6-11.4 24-25.1-2.1-47.1 17.5-93.7 56.2-125l12.5 20.8c-27.6 23.7-45.1 58.9-44.8 98.2.5 69.6 57.2 126.5 126.8 127.1 71.6.7 129.8-57.5 129.2-129.1-.7-69.6-57.6-126.4-127.2-126.9zM128 400c-44.1 0-80-35.9-80-80s35.9-80 80-80c4.2 0 8.4.3 12.5 1L99 316.4c-8.8 16 2.8 35.6 21 35.6h81.3c-12.4 28.2-40.6 48-73.3 48zm463.9-75.6c-2.2 40.6-35 73.4-75.5 75.5-46.1 2.5-84.4-34.3-84.4-79.9 0-21.4 8.4-40.8 22.1-55.1l49.4 82.4c4.5 7.6 14.4 10 22 5.5l13.7-8.2c7.6-4.5 10-14.4 5.5-22l-48.6-80.9c5.2-1.1 10.5-1.6 15.9-1.6 45.6-.1 82.3 38.2 79.9 84.3z“]},ll={prefix:”fas“,iconName:”mountain“,icon:[640,512,,”f6fc“,”M634.92 462.7l-288-448C341.03 5.54 330.89 0 320 0s-21.03 5.54-26.92 14.7l-288 448a32.001 32.001 0 0 0-1.17 32.64A32.004 32.004 0 0 0 32 512h576c11.71 0 22.48-6.39 28.09-16.67a31.983 31.983 0 0 0-1.17-32.63zM320 91.18L405.39 224H320l-64 64-38.06-38.06L320 91.18z“]},fl={prefix:”fas“,iconName:”mouse“,icon:[384,512,,”f8cc“,”M0 352a160 160 0 0 0 160 160h64a160 160 0 0 0 160-160V224H0zM176 0h-16A160 160 0 0 0 0 160v32h176zm48 0h-16v192h176v-32A160 160 0 0 0 224 0z“]},hl={prefix:”fas“,iconName:”mouse-pointer“,icon:[320,512,,”f245“,”M302.189 329.126H196.105l55.831 135.993c3.889 9.428-.555 19.999-9.444 23.999l-49.165 21.427c-9.165 4-19.443-.571-23.332-9.714l-53.053-129.136-86.664 89.138C18.729 472.71 0 463.554 0 447.977V18.299C0 1.899 19.921-6.096 30.277 5.443l284.412 292.542c11.472 11.179 3.007 31.141-12.5 31.141z“]},dl={prefix:”fas“,iconName:”mug-hot“,icon:[512,512,,”f7b6“,”M127.1 146.5c1.3 7.7 8 13.5 16 13.5h16.5c9.8 0 17.6-8.5 16.3-18-3.8-28.2-16.4-54.2-36.6-74.7-14.4-14.7-23.6-33.3-26.4-53.5C111.8 5.9 105 0 96.8 0H80.4C70.6 0 63 8.5 64.1 18c3.9 31.9 18 61.3 40.6 84.4 12 12.2 19.7 27.5 22.4 44.1zm112 0c1.3 7.7 8 13.5 16 13.5h16.5c9.8 0 17.6-8.5 16.3-18-3.8-28.2-16.4-54.2-36.6-74.7-14.4-14.7-23.6-33.3-26.4-53.5C223.8 5.9 217 0 208.8 0h-16.4c-9.8 0-17.5 8.5-16.3 18 3.9 31.9 18 61.3 40.6 84.4 12 12.2 19.7 27.5 22.4 44.1zM400 192H32c-17.7 0-32 14.3-32 32v192c0 53 43 96 96 96h192c53 0 96-43 96-96h16c61.8 0 112-50.2 112-112s-50.2-112-112-112zm0 160h-16v-96h16c26.5 0 48 21.5 48 48s-21.5 48-48 48z“]},pl={prefix:”fas“,iconName:”music“,icon:[512,512,,”f001“,”M470.38 1.51L150.41 96A32 32 0 0 0 128 126.51v261.41A139 139 0 0 0 96 384c-53 0-96 28.66-96 64s43 64 96 64 96-28.66 96-64V214.32l256-75v184.61a138.4 138.4 0 0 0-32-3.93c-53 0-96 28.66-96 64s43 64 96 64 96-28.65 96-64V32a32 32 0 0 0-41.62-30.49z“]},ml={prefix:”fas“,iconName:”network-wired“,icon:[640,512,,”f6ff“,”M640 264v-16c0-8.84-7.16-16-16-16H344v-40h72c17.67 0 32-14.33 32-32V32c0-17.67-14.33-32-32-32H224c-17.67 0-32 14.33-32 32v128c0 17.67 14.33 32 32 32h72v40H16c-8.84 0-16 7.16-16 16v16c0 8.84 7.16 16 16 16h104v40H64c-17.67 0-32 14.33-32 32v128c0 17.67 14.33 32 32 32h160c17.67 0 32-14.33 32-32V352c0-17.67-14.33-32-32-32h-56v-40h304v40h-56c-17.67 0-32 14.33-32 32v128c0 17.67 14.33 32 32 32h160c17.67 0 32-14.33 32-32V352c0-17.67-14.33-32-32-32h-56v-40h104c8.84 0 16-7.16 16-16zM256 128V64h128v64H256zm-64 320H96v-64h96v64zm352 0h-96v-64h96v64z“]},vl={prefix:”fas“,iconName:”neuter“,icon:[288,512,,”f22c“,”M288 176c0-79.5-64.5-144-144-144S0 96.5 0 176c0 68.5 47.9 125.9 112 140.4V468c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12V316.4c64.1-14.5 112-71.9 112-140.4zm-144 80c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80z“]},gl={prefix:”fas“,iconName:”newspaper“,icon:[576,512,,”f1ea“,”M552 64H88c-13.255 0-24 10.745-24 24v8H24c-13.255 0-24 10.745-24 24v272c0 30.928 25.072 56 56 56h472c26.51 0 48-21.49 48-48V88c0-13.255-10.745-24-24-24zM56 400a8 8 0 0 1-8-8V144h16v248a8 8 0 0 1-8 8zm236-16H140c-6.627 0-12-5.373-12-12v-8c0-6.627 5.373-12 12-12h152c6.627 0 12 5.373 12 12v8c0 6.627-5.373 12-12 12zm208 0H348c-6.627 0-12-5.373-12-12v-8c0-6.627 5.373-12 12-12h152c6.627 0 12 5.373 12 12v8c0 6.627-5.373 12-12 12zm-208-96H140c-6.627 0-12-5.373-12-12v-8c0-6.627 5.373-12 12-12h152c6.627 0 12 5.373 12 12v8c0 6.627-5.373 12-12 12zm208 0H348c-6.627 0-12-5.373-12-12v-8c0-6.627 5.373-12 12-12h152c6.627 0 12 5.373 12 12v8c0 6.627-5.373 12-12 12zm0-96H140c-6.627 0-12-5.373-12-12v-40c0-6.627 5.373-12 12-12h360c6.627 0 12 5.373 12 12v40c0 6.627-5.373 12-12 12z“]},yl={prefix:”fas“,iconName:”not-equal“,icon:[448,512,,”f53e“,”M416 208c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32h-23.88l51.87-66.81c5.37-7.02 4.04-17.06-2.97-22.43L415.61 3.3c-7.02-5.38-17.06-4.04-22.44 2.97L311.09 112H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h204.56l-74.53 96H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h55.49l-51.87 66.81c-5.37 7.01-4.04 17.05 2.97 22.43L64 508.7c7.02 5.38 17.06 4.04 22.43-2.97L168.52 400H416c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32H243.05l74.53-96H416z“]},bl={prefix:”fas“,iconName:”notes-medical“,icon:[384,512,,”f481“,”M336 64h-80c0-35.3-28.7-64-64-64s-64 28.7-64 64H48C21.5 64 0 85.5 0 112v352c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48zM192 40c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24zm96 304c0 4.4-3.6 8-8 8h-56v56c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8v-56h-56c-4.4 0-8-3.6-8-8v-48c0-4.4 3.6-8 8-8h56v-56c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v56h56c4.4 0 8 3.6 8 8v48zm0-192c0 4.4-3.6 8-8 8H104c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h176c4.4 0 8 3.6 8 8v16z“]},wl={prefix:”fas“,iconName:”object-group“,icon:[512,512,,”f247“,”M480 128V96h20c6.627 0 12-5.373 12-12V44c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v20H64V44c0-6.627-5.373-12-12-12H12C5.373 32 0 37.373 0 44v40c0 6.627 5.373 12 12 12h20v320H12c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12v-20h384v20c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-20V128zM96 276V140c0-6.627 5.373-12 12-12h168c6.627 0 12 5.373 12 12v136c0 6.627-5.373 12-12 12H108c-6.627 0-12-5.373-12-12zm320 96c0 6.627-5.373 12-12 12H236c-6.627 0-12-5.373-12-12v-52h72c13.255 0 24-10.745 24-24v-72h84c6.627 0 12 5.373 12 12v136z“]},xl={prefix:”fas“,iconName:”object-ungroup“,icon:[576,512,,”f248“,”M64 320v26a6 6 0 0 1-6 6H6a6 6 0 0 1-6-6v-52a6 6 0 0 1 6-6h26V96H6a6 6 0 0 1-6-6V38a6 6 0 0 1 6-6h52a6 6 0 0 1 6 6v26h288V38a6 6 0 0 1 6-6h52a6 6 0 0 1 6 6v52a6 6 0 0 1-6 6h-26v192h26a6 6 0 0 1 6 6v52a6 6 0 0 1-6 6h-52a6 6 0 0 1-6-6v-26H64zm480-64v-32h26a6 6 0 0 0 6-6v-52a6 6 0 0 0-6-6h-52a6 6 0 0 0-6 6v26H408v72h8c13.255 0 24 10.745 24 24v64c0 13.255-10.745 24-24 24h-64c-13.255 0-24-10.745-24-24v-8H192v72h-26a6 6 0 0 0-6 6v52a6 6 0 0 0 6 6h52a6 6 0 0 0 6-6v-26h288v26a6 6 0 0 0 6 6h52a6 6 0 0 0 6-6v-52a6 6 0 0 0-6-6h-26V256z“]},Sl={prefix:”fas“,iconName:”oil-can“,icon:[640,512,,”f613“,”M629.8 160.31L416 224l-50.49-25.24a64.07 64.07 0 0 0-28.62-6.76H280v-48h56c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16H176c-8.84 0-16 7.16-16 16v16c0 8.84 7.16 16 16 16h56v48h-56L37.72 166.86a31.9 31.9 0 0 0-5.79-.53C14.67 166.33 0 180.36 0 198.34v94.95c0 15.46 11.06 28.72 26.28 31.48L96 337.46V384c0 17.67 14.33 32 32 32h274.63c8.55 0 16.75-3.42 22.76-9.51l212.26-214.75c1.5-1.5 2.34-3.54 2.34-5.66V168c.01-5.31-5.08-9.15-10.19-7.69zM96 288.67l-48-8.73v-62.43l48 8.73v62.43zm453.33 84.66c0 23.56 19.1 42.67 42.67 42.67s42.67-19.1 42.67-42.67S592 288 592 288s-42.67 61.77-42.67 85.33z“]},kl={prefix:”fas“,iconName:”om“,icon:[512,512,,”f679“,”M360.6 60.94a10.43 10.43 0 0 0 14.76 0l21.57-21.56a10.43 10.43 0 0 0 0-14.76L375.35 3.06c-4.08-4.07-10.68-4.07-14.76 0l-21.57 21.56a10.43 10.43 0 0 0 0 14.76l21.58 21.56zM412.11 192c-26.69 0-51.77 10.39-70.64 29.25l-24.25 24.25c-6.78 6.77-15.78 10.5-25.38 10.5H245c10.54-22.1 14.17-48.11 7.73-75.23-10.1-42.55-46.36-76.11-89.52-83.19-36.15-5.93-70.9 5.04-96.01 28.78-7.36 6.96-6.97 18.85 1.12 24.93l26.15 19.63c5.72 4.3 13.66 4.32 19.2-.21 8.45-6.9 19.02-10.71 30.27-10.71 26.47 0 48.01 21.53 48.01 48s-21.54 48-48.01 48h-31.9c-11.96 0-19.74 12.58-14.39 23.28l16.09 32.17c2.53 5.06 7.6 8.1 13.17 8.55h33.03c35.3 0 64.01 28.7 64.01 64s-28.71 64-64.01 64c-96.02 0-122.35-54.02-145.15-92.03-4.53-7.55-14.77-3.58-14.79 5.22C-.09 416 41.13 512 159.94 512c70.59 0 128.02-57.42 128.02-128 0-23.42-6.78-45.1-17.81-64h21.69c26.69 0 51.77-10.39 70.64-29.25l24.25-24.25c6.78-6.77 15.78-10.5 25.38-10.5 19.78 0 35.88 16.09 35.88 35.88V392c0 13.23-18.77 24-32.01 24-39.4 0-66.67-24.24-81.82-42.89-4.77-5.87-14.2-2.54-14.2 5.02V416s0 64 96.02 64c48.54 0 96.02-39.47 96.02-88V291.88c0-55.08-44.8-99.88-99.89-99.88zm42.18-124.73c-85.55 65.12-169.05 2.75-172.58.05-6.02-4.62-14.44-4.38-20.14.55-5.74 4.92-7.27 13.17-3.66 19.8 1.61 2.95 40.37 72.34 118.8 72.34 79.92 0 98.78-31.36 101.75-37.66 1.02-2.12 1.53-4.47 1.53-6.83V80c0-13.22-15.14-20.69-25.7-12.73z“]},_l={prefix:”fas“,iconName:”otter“,icon:[640,512,,”f700“,”M608 32h-32l-13.25-13.25A63.97 63.97 0 0 0 517.49 0H497c-11.14 0-22.08 2.91-31.75 8.43L312 96h-56C149.96 96 64 181.96 64 288v1.61c0 32.75-16 62.14-39.56 84.89-18.19 17.58-28.1 43.68-23.19 71.8 6.76 38.8 42.9 65.7 82.28 65.7H192c17.67 0 32-14.33 32-32s-14.33-32-32-32H80c-8.83 0-16-7.17-16-16s7.17-16 16-16h224c8.84 0 16-7.16 16-16v-16c0-17.67-14.33-32-32-32h-64l149.49-80.5L448 416h80c8.84 0 16-7.16 16-16v-16c0-17.67-14.33-32-32-32h-28.22l-55.11-110.21L521.14 192H544c53.02 0 96-42.98 96-96V64c0-17.67-14.33-32-32-32zm-96 16c8.84 0 16 7.16 16 16s-7.16 16-16 16-16-7.16-16-16 7.16-16 16-16zm32 96h-34.96L407.2 198.84l-13.77-27.55L512 112h77.05c-6.62 18.58-24.22 32-45.05 32z“]},zl={prefix:”fas“,iconName:”outdent“,icon:[448,512,,”f03b“,”M100.69 363.29c10 10 27.31 2.93 27.31-11.31V160c0-14.32-17.33-21.31-27.31-11.31l-96 96a16 16 0 0 0 0 22.62zM432 416H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm3.17-128H204.83A12.82 12.82 0 0 0 192 300.83v38.34A12.82 12.82 0 0 0 204.83 352h230.34A12.82 12.82 0 0 0 448 339.17v-38.34A12.82 12.82 0 0 0 435.17 288zm0-128H204.83A12.82 12.82 0 0 0 192 172.83v38.34A12.82 12.82 0 0 0 204.83 224h230.34A12.82 12.82 0 0 0 448 211.17v-38.34A12.82 12.82 0 0 0 435.17 160zM432 32H16A16 16 0 0 0 0 48v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16z“]},Cl={prefix:”fas“,iconName:”pager“,icon:[512,512,,”f815“,”M448 64H64a64 64 0 0 0-64 64v256a64 64 0 0 0 64 64h384a64 64 0 0 0 64-64V128a64 64 0 0 0-64-64zM160 368H80a16 16 0 0 1-16-16v-16a16 16 0 0 1 16-16h80zm128-16a16 16 0 0 1-16 16h-80v-48h80a16 16 0 0 1 16 16zm160-128a32 32 0 0 1-32 32H96a32 32 0 0 1-32-32v-64a32 32 0 0 1 32-32h320a32 32 0 0 1 32 32z“]},Ml={prefix:”fas“,iconName:”paint-brush“,icon:[512,512,,”f1fc“,”M167.02 309.34c-40.12 2.58-76.53 17.86-97.19 72.3-2.35 6.21-8 9.98-14.59 9.98-11.11 0-45.46-27.67-55.25-34.35C0 439.62 37.93 512 128 512c75.86 0 128-43.77 128-120.19 0-3.11-.65-6.08-.97-9.13l-88.01-73.34zM457.89 0c-15.16 0-29.37 6.71-40.21 16.45C213.27 199.05 192 203.34 192 257.09c0 13.7 3.25 26.76 8.73 38.7l63.82 53.18c7.21 1.8 14.64 3.03 22.39 3.03 62.11 0 98.11-45.47 211.16-256.46 7.38-14.35 13.9-29.85 13.9-45.99C512 20.64 486 0 457.89 0z“]},Ol={prefix:”fas“,iconName:”paint-roller“,icon:[512,512,,”f5aa“,”M416 128V32c0-17.67-14.33-32-32-32H32C14.33 0 0 14.33 0 32v96c0 17.67 14.33 32 32 32h352c17.67 0 32-14.33 32-32zm32-64v128c0 17.67-14.33 32-32 32H256c-35.35 0-64 28.65-64 64v32c-17.67 0-32 14.33-32 32v128c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32V352c0-17.67-14.33-32-32-32v-32h160c53.02 0 96-42.98 96-96v-64c0-35.35-28.65-64-64-64z“]},Tl={prefix:”fas“,iconName:”palette“,icon:[512,512,,”f53f“,”M204.3 5C104.9 24.4 24.8 104.3 5.2 203.4c-37 187 131.7 326.4 258.8 306.7 41.2-6.4 61.4-54.6 42.5-91.7-23.1-45.4 9.9-98.4 60.9-98.4h79.7c35.8 0 64.8-29.6 64.9-65.3C511.5 97.1 368.1-26.9 204.3 5zM96 320c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm32-128c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm128-64c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm128 64c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z“]},El={prefix:”fas“,iconName:”pallet“,icon:[640,512,,”f482“,”M144 256h352c8.8 0 16-7.2 16-16V16c0-8.8-7.2-16-16-16H384v128l-64-32-64 32V0H144c-8.8 0-16 7.2-16 16v224c0 8.8 7.2 16 16 16zm480 128c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h48v64H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h608c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16h-48v-64h48zm-336 64H128v-64h160v64zm224 0H352v-64h160v64z“]},Ll={prefix:”fas“,iconName:”paper-plane“,icon:[512,512,,”f1d8“,”M476 3.2L12.5 270.6c-18.1 10.4-15.8 35.6 2.2 43.2L121 358.4l287.3-253.2c5.5-4.9 13.3 2.6 8.6 8.3L176 407v80.5c0 23.6 28.5 32.9 42.5 15.8L282 426l124.6 52.2c14.2 6 30.4-2.9 33-18.2l72-432C515 7.8 493.3-6.8 476 3.2z“]},Al={prefix:”fas“,iconName:”paperclip“,icon:[448,512,,”f0c6“,”M43.246 466.142c-58.43-60.289-57.341-157.511 1.386-217.581L254.392 34c44.316-45.332 116.351-45.336 160.671 0 43.89 44.894 43.943 117.329 0 162.276L232.214 383.128c-29.855 30.537-78.633 30.111-107.982-.998-28.275-29.97-27.368-77.473 1.452-106.953l143.743-146.835c6.182-6.314 16.312-6.422 22.626-.241l22.861 22.379c6.315 6.182 6.422 16.312.241 22.626L171.427 319.927c-4.932 5.045-5.236 13.428-.648 18.292 4.372 4.634 11.245 4.711 15.688.165l182.849-186.851c19.613-20.062 19.613-52.725-.011-72.798-19.189-19.627-49.957-19.637-69.154 0L90.39 293.295c-34.763 35.56-35.299 93.12-1.191 128.313 34.01 35.093 88.985 35.137 123.058.286l172.06-175.999c6.177-6.319 16.307-6.433 22.626-.256l22.877 22.364c6.319 6.177 6.434 16.307.256 22.626l-172.06 175.998c-59.576 60.938-155.943 60.216-214.77-.485z“]},Rl={prefix:”fas“,iconName:”parachute-box“,icon:[512,512,,”f4cd“,”M511.9 175c-9.1-75.6-78.4-132.4-158.3-158.7C390 55.7 416 116.9 416 192h28.1L327.5 321.5c-2.5-.6-4.8-1.5-7.5-1.5h-48V192h112C384 76.8 315.1 0 256 0S128 76.8 128 192h112v128h-48c-2.7 0-5 .9-7.5 1.5L67.9 192H96c0-75.1 26-136.3 62.4-175.7C78.5 42.7 9.2 99.5.1 175c-1.1 9.1 6.8 17 16 17h8.7l136.7 151.9c-.7 2.6-1.6 5.2-1.6 8.1v128c0 17.7 14.3 32 32 32h128c17.7 0 32-14.3 32-32V352c0-2.9-.9-5.4-1.6-8.1L487.1 192h8.7c9.3 0 17.2-7.8 16.1-17z“]},Nl={prefix:”fas“,iconName:”paragraph“,icon:[448,512,,”f1dd“,”M448 48v32a16 16 0 0 1-16 16h-48v368a16 16 0 0 1-16 16h-32a16 16 0 0 1-16-16V96h-32v368a16 16 0 0 1-16 16h-32a16 16 0 0 1-16-16V352h-32a160 160 0 0 1 0-320h240a16 16 0 0 1 16 16z“]},Hl={prefix:”fas“,iconName:”parking“,icon:[448,512,,”f540“,”M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM240 320h-48v48c0 8.8-7.2 16-16 16h-32c-8.8 0-16-7.2-16-16V144c0-8.8 7.2-16 16-16h96c52.9 0 96 43.1 96 96s-43.1 96-96 96zm0-128h-48v64h48c17.6 0 32-14.4 32-32s-14.4-32-32-32z“]},Pl={prefix:”fas“,iconName:”passport“,icon:[448,512,,”f5ab“,”M129.62 176h39.09c1.49-27.03 6.54-51.35 14.21-70.41-27.71 13.24-48.02 39.19-53.3 70.41zm0 32c5.29 31.22 25.59 57.17 53.3 70.41-7.68-19.06-12.72-43.38-14.21-70.41h-39.09zM224 286.69c7.69-7.45 20.77-34.42 23.43-78.69h-46.87c2.67 44.26 15.75 71.24 23.44 78.69zM200.57 176h46.87c-2.66-44.26-15.74-71.24-23.43-78.69-7.7 7.45-20.78 34.43-23.44 78.69zm64.51 102.41c27.71-13.24 48.02-39.19 53.3-70.41h-39.09c-1.49 27.03-6.53 51.35-14.21 70.41zM416 0H64C28.65 0 0 28.65 0 64v384c0 35.35 28.65 64 64 64h352c17.67 0 32-14.33 32-32V32c0-17.67-14.33-32-32-32zm-80 416H112c-8.8 0-16-7.2-16-16s7.2-16 16-16h224c8.8 0 16 7.2 16 16s-7.2 16-16 16zm-112-96c-70.69 0-128-57.31-128-128S153.31 64 224 64s128 57.31 128 128-57.31 128-128 128zm41.08-214.41c7.68 19.06 12.72 43.38 14.21 70.41h39.09c-5.28-31.22-25.59-57.17-53.3-70.41z“]},jl={prefix:”fas“,iconName:”pastafarianism“,icon:[640,512,,”f67b“,”M624.54 347.67c-32.7-12.52-57.36 4.25-75.37 16.45-17.06 11.53-23.25 14.42-31.41 11.36-8.12-3.09-10.83-9.38-15.89-29.38-3.33-13.15-7.44-29.32-17.95-42.65 2.24-2.91 4.43-5.79 6.38-8.57C500.47 304.45 513.71 312 532 312c33.95 0 50.87-25.78 62.06-42.83 10.59-16.14 15-21.17 21.94-21.17 13.25 0 24-10.75 24-24s-10.75-24-24-24c-33.95 0-50.87 25.78-62.06 42.83-10.6 16.14-15 21.17-21.94 21.17-17.31 0-37.48-61.43-97.26-101.91l17.25-34.5C485.43 125.5 512 97.98 512 64c0-35.35-28.65-64-64-64s-64 28.65-64 64c0 13.02 3.94 25.1 10.62 35.21l-18.15 36.3c-16.98-4.6-35.6-7.51-56.46-7.51s-39.49 2.91-56.46 7.51l-18.15-36.3C252.06 89.1 256 77.02 256 64c0-35.35-28.65-64-64-64s-64 28.65-64 64c0 33.98 26.56 61.5 60.02 63.6l17.25 34.5C145.68 202.44 125.15 264 108 264c-6.94 0-11.34-5.03-21.94-21.17C74.88 225.78 57.96 200 24 200c-13.25 0-24 10.75-24 24s10.75 24 24 24c6.94 0 11.34 5.03 21.94 21.17C57.13 286.22 74.05 312 108 312c18.29 0 31.53-7.55 41.7-17.11 1.95 2.79 4.14 5.66 6.38 8.57-10.51 13.33-14.62 29.5-17.95 42.65-5.06 20-7.77 26.28-15.89 29.38-8.11 3.06-14.33.17-31.41-11.36-18.03-12.2-42.72-28.92-75.37-16.45-12.39 4.72-18.59 18.58-13.87 30.97 4.72 12.41 18.61 18.61 30.97 13.88 8.16-3.09 14.34-.19 31.39 11.36 13.55 9.16 30.83 20.86 52.42 20.84 7.17 0 14.83-1.28 22.97-4.39 32.66-12.44 39.98-41.33 45.33-62.44 2.21-8.72 3.99-14.49 5.95-18.87 16.62 13.61 36.95 25.88 61.64 34.17-9.96 37-32.18 90.8-60.26 90.8-13.25 0-24 10.75-24 24s10.75 24 24 24c66.74 0 97.05-88.63 107.42-129.14 6.69.6 13.42 1.14 20.58 1.14s13.89-.54 20.58-1.14C350.95 423.37 381.26 512 448 512c13.25 0 24-10.75 24-24s-10.75-24-24-24c-27.94 0-50.21-53.81-60.22-90.81 24.69-8.29 45-20.56 61.62-34.16 1.96 4.38 3.74 10.15 5.95 18.87 5.34 21.11 12.67 50 45.33 62.44 8.14 3.11 15.8 4.39 22.97 4.39 21.59 0 38.87-11.69 52.42-20.84 17.05-11.55 23.28-14.45 31.39-11.36 12.39 4.75 26.27-1.47 30.97-13.88 4.71-12.4-1.49-26.26-13.89-30.98zM448 48c8.82 0 16 7.18 16 16s-7.18 16-16 16-16-7.18-16-16 7.18-16 16-16zm-256 0c8.82 0 16 7.18 16 16s-7.18 16-16 16-16-7.18-16-16 7.18-16 16-16z“]},Vl={prefix:”fas“,iconName:”paste“,icon:[448,512,,”f0ea“,”M128 184c0-30.879 25.122-56 56-56h136V56c0-13.255-10.745-24-24-24h-80.61C204.306 12.89 183.637 0 160 0s-44.306 12.89-55.39 32H24C10.745 32 0 42.745 0 56v336c0 13.255 10.745 24 24 24h104V184zm32-144c13.255 0 24 10.745 24 24s-10.745 24-24 24-24-10.745-24-24 10.745-24 24-24zm184 248h104v200c0 13.255-10.745 24-24 24H184c-13.255 0-24-10.745-24-24V184c0-13.255 10.745-24 24-24h136v104c0 13.2 10.8 24 24 24zm104-38.059V256h-96v-96h6.059a24 24 0 0 1 16.97 7.029l65.941 65.941a24.002 24.002 0 0 1 7.03 16.971z“]},Dl={prefix:”fas“,iconName:”pause“,icon:[448,512,,”f04c“,”M144 479H48c-26.5 0-48-21.5-48-48V79c0-26.5 21.5-48 48-48h96c26.5 0 48 21.5 48 48v352c0 26.5-21.5 48-48 48zm304-48V79c0-26.5-21.5-48-48-48h-96c-26.5 0-48 21.5-48 48v352c0 26.5 21.5 48 48 48h96c26.5 0 48-21.5 48-48z“]},Il={prefix:”fas“,iconName:”pause-circle“,icon:[512,512,,”f28b“,”M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm-16 328c0 8.8-7.2 16-16 16h-48c-8.8 0-16-7.2-16-16V176c0-8.8 7.2-16 16-16h48c8.8 0 16 7.2 16 16v160zm112 0c0 8.8-7.2 16-16 16h-48c-8.8 0-16-7.2-16-16V176c0-8.8 7.2-16 16-16h48c8.8 0 16 7.2 16 16v160z“]},Fl={prefix:”fas“,iconName:”paw“,icon:[512,512,,”f1b0“,”M256 224c-79.41 0-192 122.76-192 200.25 0 34.9 26.81 55.75 71.74 55.75 48.84 0 81.09-25.08 120.26-25.08 39.51 0 71.85 25.08 120.26 25.08 44.93 0 71.74-20.85 71.74-55.75C448 346.76 335.41 224 256 224zm-147.28-12.61c-10.4-34.65-42.44-57.09-71.56-50.13-29.12 6.96-44.29 40.69-33.89 75.34 10.4 34.65 42.44 57.09 71.56 50.13 29.12-6.96 44.29-40.69 33.89-75.34zm84.72-20.78c30.94-8.14 46.42-49.94 34.58-93.36s-46.52-72.01-77.46-63.87-46.42 49.94-34.58 93.36c11.84 43.42 46.53 72.02 77.46 63.87zm281.39-29.34c-29.12-6.96-61.15 15.48-71.56 50.13-10.4 34.65 4.77 68.38 33.89 75.34 29.12 6.96 61.15-15.48 71.56-50.13 10.4-34.65-4.77-68.38-33.89-75.34zm-156.27 29.34c30.94 8.14 65.62-20.45 77.46-63.87 11.84-43.42-3.64-85.21-34.58-93.36s-65.62 20.45-77.46 63.87c-11.84 43.42 3.64 85.22 34.58 93.36z“]},Bl={prefix:”fas“,iconName:”peace“,icon:[496,512,,”f67c“,”M248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm184 248c0 31.93-8.2 61.97-22.57 88.17L280 240.63V74.97c86.23 15.21 152 90.5 152 181.03zM216 437.03c-33.86-5.97-64.49-21.2-89.29-43.02L216 322.57v114.46zm64-114.46L369.29 394c-24.8 21.82-55.43 37.05-89.29 43.02V322.57zm-64-247.6v165.66L86.57 344.17C72.2 317.97 64 287.93 64 256c0-90.53 65.77-165.82 152-181.03z“]},Ul={prefix:”fas“,iconName:”pen“,icon:[512,512,,”f304“,”M290.74 93.24l128.02 128.02-277.99 277.99-114.14 12.6C11.35 513.54-1.56 500.62.14 485.34l12.7-114.22 277.9-277.88zm207.2-19.06l-60.11-60.11c-18.75-18.75-49.16-18.75-67.91 0l-56.55 56.55 128.02 128.02 56.55-56.55c18.75-18.76 18.75-49.16 0-67.91z“]},ql={prefix:”fas“,iconName:”pen-alt“,icon:[512,512,,”f305“,”M497.94 74.17l-60.11-60.11c-18.75-18.75-49.16-18.75-67.91 0l-56.55 56.55 128.02 128.02 56.55-56.55c18.75-18.75 18.75-49.15 0-67.91zm-246.8-20.53c-15.62-15.62-40.94-15.62-56.56 0L75.8 172.43c-6.25 6.25-6.25 16.38 0 22.62l22.63 22.63c6.25 6.25 16.38 6.25 22.63 0l101.82-101.82 22.63 22.62L93.95 290.03A327.038 327.038 0 0 0 .17 485.11l-.03.23c-1.7 15.28 11.21 28.2 26.49 26.51a327.02 327.02 0 0 0 195.34-93.8l196.79-196.79-82.77-82.77-84.85-84.85z“]},Gl={prefix:”fas“,iconName:”pen-fancy“,icon:[512,512,,”f5ac“,”M79.18 282.94a32.005 32.005 0 0 0-20.24 20.24L0 480l4.69 4.69 92.89-92.89c-.66-2.56-1.57-5.03-1.57-7.8 0-17.67 14.33-32 32-32s32 14.33 32 32-14.33 32-32 32c-2.77 0-5.24-.91-7.8-1.57l-92.89 92.89L32 512l176.82-58.94a31.983 31.983 0 0 0 20.24-20.24l33.07-84.07-98.88-98.88-84.07 33.07zM369.25 28.32L186.14 227.81l97.85 97.85 199.49-183.11C568.4 67.48 443.73-55.94 369.25 28.32z“]},Wl={prefix:”fas“,iconName:”pen-nib“,icon:[512,512,,”f5ad“,”M136.6 138.79a64.003 64.003 0 0 0-43.31 41.35L0 460l14.69 14.69L164.8 324.58c-2.99-6.26-4.8-13.18-4.8-20.58 0-26.51 21.49-48 48-48s48 21.49 48 48-21.49 48-48 48c-7.4 0-14.32-1.81-20.58-4.8L37.31 497.31 52 512l279.86-93.29a64.003 64.003 0 0 0 41.35-43.31L416 224 288 96l-151.4 42.79zm361.34-64.62l-60.11-60.11c-18.75-18.75-49.16-18.75-67.91 0l-56.55 56.55 128.02 128.02 56.55-56.55c18.75-18.75 18.75-49.15 0-67.91z“]},Zl={prefix:”fas“,iconName:”pen-square“,icon:[448,512,,”f14b“,”M400 480H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48v352c0 26.5-21.5 48-48 48zM238.1 177.9L102.4 313.6l-6.3 57.1c-.8 7.6 5.6 14.1 13.3 13.3l57.1-6.3L302.2 242c2.3-2.3 2.3-6.1 0-8.5L246.7 178c-2.5-2.4-6.3-2.4-8.6-.1zM345 165.1L314.9 135c-9.4-9.4-24.6-9.4-33.9 0l-23.1 23.1c-2.3 2.3-2.3 6.1 0 8.5l55.5 55.5c2.3 2.3 6.1 2.3 8.5 0L345 199c9.3-9.3 9.3-24.5 0-33.9z“]},$l={prefix:”fas“,iconName:”pencil-alt“,icon:[512,512,,”f303“,”M497.9 142.1l-46.1 46.1c-4.7 4.7-12.3 4.7-17 0l-111-111c-4.7-4.7-4.7-12.3 0-17l46.1-46.1c18.7-18.7 49.1-18.7 67.9 0l60.1 60.1c18.8 18.7 18.8 49.1 0 67.9zM284.2 99.8L21.6 362.4.4 483.9c-2.9 16.4 11.4 30.6 27.8 27.8l121.5-21.3 262.6-262.6c4.7-4.7 4.7-12.3 0-17l-111-111c-4.8-4.7-12.4-4.7-17.1 0zM124.1 339.9c-5.5-5.5-5.5-14.3 0-19.8l154-154c5.5-5.5 14.3-5.5 19.8 0s5.5 14.3 0 19.8l-154 154c-5.5 5.5-14.3 5.5-19.8 0zM88 424h48v36.3l-64.5 11.3-31.1-31.1L51.7 376H88v48z“]},Jl={prefix:”fas“,iconName:”pencil-ruler“,icon:[512,512,,”f5ae“,”M109.46 244.04l134.58-134.56-44.12-44.12-61.68 61.68a7.919 7.919 0 0 1-11.21 0l-11.21-11.21c-3.1-3.1-3.1-8.12 0-11.21l61.68-61.68-33.64-33.65C131.47-3.1 111.39-3.1 99 9.29L9.29 99c-12.38 12.39-12.39 32.47 0 44.86l100.17 100.18zm388.47-116.8c18.76-18.76 18.75-49.17 0-67.93l-45.25-45.25c-18.76-18.76-49.18-18.76-67.95 0l-46.02 46.01 113.2 113.2 46.02-46.03zM316.08 82.71l-297 296.96L.32 487.11c-2.53 14.49 10.09 27.11 24.59 24.56l107.45-18.84L429.28 195.9 316.08 82.71zm186.63 285.43l-33.64-33.64-61.68 61.68c-3.1 3.1-8.12 3.1-11.21 0l-11.21-11.21c-3.09-3.1-3.09-8.12 0-11.21l61.68-61.68-44.14-44.14L267.93 402.5l100.21 100.2c12.39 12.39 32.47 12.39 44.86 0l89.71-89.7c12.39-12.39 12.39-32.47 0-44.86z“]},Kl={prefix:”fas“,iconName:”people-arrows“,icon:[576,512,,”e068“,”M96,128A64,64,0,1,0,32,64,64,64,0,0,0,96,128Zm0,176.08a44.11,44.11,0,0,1,13.64-32L181.77,204c1.65-1.55,3.77-2.31,5.61-3.57A63.91,63.91,0,0,0,128,160H64A64,64,0,0,0,0,224v96a32,32,0,0,0,32,32V480a32,32,0,0,0,32,32h64a32,32,0,0,0,32-32V383.61l-50.36-47.53A44.08,44.08,0,0,1,96,304.08ZM480,128a64,64,0,1,0-64-64A64,64,0,0,0,480,128Zm32,32H448a63.91,63.91,0,0,0-59.38,40.42c1.84,1.27,4,2,5.62,3.59l72.12,68.06a44.37,44.37,0,0,1,0,64L416,383.62V480a32,32,0,0,0,32,32h64a32,32,0,0,0,32-32V352a32,32,0,0,0,32-32V224A64,64,0,0,0,512,160ZM444.4,295.34l-72.12-68.06A12,12,0,0,0,352,236v36H224V236a12,12,0,0,0-20.28-8.73L131.6,295.34a12.4,12.4,0,0,0,0,17.47l72.12,68.07A12,12,0,0,0,224,372.14V336H352v36.14a12,12,0,0,0,20.28,8.74l72.12-68.07A12.4,12.4,0,0,0,444.4,295.34Z“]},Ql={prefix:”fas“,iconName:”people-carry“,icon:[640,512,,”f4ce“,”M128 96c26.5 0 48-21.5 48-48S154.5 0 128 0 80 21.5 80 48s21.5 48 48 48zm384 0c26.5 0 48-21.5 48-48S538.5 0 512 0s-48 21.5-48 48 21.5 48 48 48zm125.7 372.1l-44-110-41.1 46.4-2 18.2 27.7 69.2c5 12.5 17 20.1 29.7 20.1 4 0 8-.7 11.9-2.3 16.4-6.6 24.4-25.2 17.8-41.6zm-34.2-209.8L585 178.1c-4.6-20-18.6-36.8-37.5-44.9-18.5-8-39-6.7-56.1 3.3-22.7 13.4-39.7 34.5-48.1 59.4L432 229.8 416 240v-96c0-8.8-7.2-16-16-16H240c-8.8 0-16 7.2-16 16v96l-16.1-10.2-11.3-33.9c-8.3-25-25.4-46-48.1-59.4-17.2-10-37.6-11.3-56.1-3.3-18.9 8.1-32.9 24.9-37.5 44.9l-18.4 80.2c-4.6 20 .7 41.2 14.4 56.7l67.2 75.9 10.1 92.6C130 499.8 143.8 512 160 512c1.2 0 2.3-.1 3.5-.2 17.6-1.9 30.2-17.7 28.3-35.3l-10.1-92.8c-1.5-13-6.9-25.1-15.6-35l-43.3-49 17.6-70.3 6.8 20.4c4.1 12.5 11.9 23.4 24.5 32.6l51.1 32.5c4.6 2.9 12.1 4.6 17.2 5h160c5.1-.4 12.6-2.1 17.2-5l51.1-32.5c12.6-9.2 20.4-20 24.5-32.6l6.8-20.4 17.6 70.3-43.3 49c-8.7 9.9-14.1 22-15.6 35l-10.1 92.8c-1.9 17.6 10.8 33.4 28.3 35.3 1.2.1 2.3.2 3.5.2 16.1 0 30-12.1 31.8-28.5l10.1-92.6 67.2-75.9c13.6-15.5 19-36.7 14.4-56.7zM46.3 358.1l-44 110c-6.6 16.4 1.4 35 17.8 41.6 16.8 6.6 35.1-1.7 41.6-17.8l27.7-69.2-2-18.2-41.1-46.4z“]},Yl={prefix:”fas“,iconName:”pepper-hot“,icon:[512,512,,”f816“,”M330.67 263.12V173.4l-52.75-24.22C219.44 218.76 197.58 400 56 400a56 56 0 0 0 0 112c212.64 0 370.65-122.87 419.18-210.34l-37.05-38.54zm131.09-128.37C493.92 74.91 477.18 26.48 458.62 3a8 8 0 0 0-11.93-.59l-22.9 23a8.06 8.06 0 0 0-.89 10.23c6.86 10.36 17.05 35.1-1.4 72.32A142.85 142.85 0 0 0 364.34 96c-28 0-54 8.54-76.34 22.59l74.67 34.29v78.24h89.09L506.44 288c3.26-12.62 5.56-25.63 5.56-39.31a154 154 0 0 0-50.24-113.94z“]},Xl={prefix:”fas“,iconName:”percent“,icon:[448,512,,”f295“,”M112 224c61.9 0 112-50.1 112-112S173.9 0 112 0 0 50.1 0 112s50.1 112 112 112zm0-160c26.5 0 48 21.5 48 48s-21.5 48-48 48-48-21.5-48-48 21.5-48 48-48zm224 224c-61.9 0-112 50.1-112 112s50.1 112 112 112 112-50.1 112-112-50.1-112-112-112zm0 160c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zM392.3.2l31.6-.1c19.4-.1 30.9 21.8 19.7 37.8L77.4 501.6a23.95 23.95 0 0 1-19.6 10.2l-33.4.1c-19.5 0-30.9-21.9-19.7-37.8l368-463.7C377.2 4 384.5.2 392.3.2z“]},ef={prefix:”fas“,iconName:”percentage“,icon:[384,512,,”f541“,”M109.25 173.25c24.99-24.99 24.99-65.52 0-90.51-24.99-24.99-65.52-24.99-90.51 0-24.99 24.99-24.99 65.52 0 90.51 25 25 65.52 25 90.51 0zm256 165.49c-24.99-24.99-65.52-24.99-90.51 0-24.99 24.99-24.99 65.52 0 90.51 24.99 24.99 65.52 24.99 90.51 0 25-24.99 25-65.51 0-90.51zm-1.94-231.43l-22.62-22.62c-12.5-12.5-32.76-12.5-45.25 0L20.69 359.44c-12.5 12.5-12.5 32.76 0 45.25l22.62 22.62c12.5 12.5 32.76 12.5 45.25 0l274.75-274.75c12.5-12.49 12.5-32.75 0-45.25z“]},tf={prefix:”fas“,iconName:”person-booth“,icon:[576,512,,”f756“,”M192 496c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V320h-64v176zm32-272h-50.9l-45.2-45.3C115.8 166.6 99.7 160 82.7 160H64c-17.1 0-33.2 6.7-45.3 18.8C6.7 190.9 0 207 0 224.1L.2 320 0 480c0 17.7 14.3 32 31.9 32 17.6 0 32-14.3 32-32l.1-100.7c.9.5 1.6 1.3 2.5 1.7l29.1 43v56c0 17.7 14.3 32 32 32s32-14.3 32-32v-56.5c0-9.9-2.3-19.8-6.7-28.6l-41.2-61.3V253l20.9 20.9c9.1 9.1 21.1 14.1 33.9 14.1H224c17.7 0 32-14.3 32-32s-14.3-32-32-32zM64 128c26.5 0 48-21.5 48-48S90.5 32 64 32 16 53.5 16 80s21.5 48 48 48zm224-96l31.5 223.1-30.9 154.6c-4.3 21.6 13 38.3 31.4 38.3 15.2 0 28-9.1 32.3-30.4.9 16.9 14.6 30.4 31.7 30.4 17.7 0 32-14.3 32-32 0 17.7 14.3 32 32 32s32-14.3 32-32V0H288v32zm-96 0v160h64V0h-32c-17.7 0-32 14.3-32 32zM544 0h-32v496c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V32c0-17.7-14.3-32-32-32z“]},nf={prefix:”fas“,iconName:”phone“,icon:[512,512,,”f095“,”M493.4 24.6l-104-24c-11.3-2.6-22.9 3.3-27.5 13.9l-48 112c-4.2 9.8-1.4 21.3 6.9 28l60.6 49.6c-36 76.7-98.9 140.5-177.2 177.2l-49.6-60.6c-6.8-8.3-18.2-11.1-28-6.9l-112 48C3.9 366.5-2 378.1.6 389.4l24 104C27.1 504.2 36.7 512 48 512c256.1 0 464-207.5 464-464 0-11.2-7.7-20.9-18.6-23.4z“]},rf={prefix:”fas“,iconName:”phone-alt“,icon:[512,512,,”f879“,”M497.39 361.8l-112-48a24 24 0 0 0-28 6.9l-49.6 60.6A370.66 370.66 0 0 1 130.6 204.11l60.6-49.6a23.94 23.94 0 0 0 6.9-28l-48-112A24.16 24.16 0 0 0 122.6.61l-104 24A24 24 0 0 0 0 48c0 256.5 207.9 464 464 464a24 24 0 0 0 23.4-18.6l24-104a24.29 24.29 0 0 0-14.01-27.6z“]},af={prefix:”fas“,iconName:”phone-slash“,icon:[640,512,,”f3dd“,”M268.2 381.4l-49.6-60.6c-6.8-8.3-18.2-11.1-28-6.9l-112 48c-10.7 4.6-16.5 16.1-13.9 27.5l24 104c2.5 10.8 12.1 18.6 23.4 18.6 100.7 0 193.7-32.4 269.7-86.9l-80-61.8c-10.9 6.5-22.1 12.7-33.6 18.1zm365.6 76.7L475.1 335.5C537.9 256.4 576 156.9 576 48c0-11.2-7.7-20.9-18.6-23.4l-104-24c-11.3-2.6-22.9 3.3-27.5 13.9l-48 112c-4.2 9.8-1.4 21.3 6.9 28l60.6 49.6c-12.2 26.1-27.9 50.3-46 72.8L45.5 3.4C38.5-2 28.5-.8 23 6.2L3.4 31.4c-5.4 7-4.2 17 2.8 22.4l588.4 454.7c7 5.4 17 4.2 22.5-2.8l19.6-25.3c5.4-6.8 4.1-16.9-2.9-22.3z“]},of={prefix:”fas“,iconName:”phone-square“,icon:[448,512,,”f098“,”M400 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48V80c0-26.51-21.49-48-48-48zM94 416c-7.033 0-13.057-4.873-14.616-11.627l-14.998-65a15 15 0 0 1 8.707-17.16l69.998-29.999a15 15 0 0 1 17.518 4.289l30.997 37.885c48.944-22.963 88.297-62.858 110.781-110.78l-37.886-30.997a15.001 15.001 0 0 1-4.289-17.518l30-69.998a15 15 0 0 1 17.16-8.707l65 14.998A14.997 14.997 0 0 1 384 126c0 160.292-129.945 290-290 290z“]},cf={prefix:”fas“,iconName:”phone-square-alt“,icon:[448,512,,”f87b“,”M400 32H48A48 48 0 0 0 0 80v352a48 48 0 0 0 48 48h352a48 48 0 0 0 48-48V80a48 48 0 0 0-48-48zm-16.39 307.37l-15 65A15 15 0 0 1 354 416C194 416 64 286.29 64 126a15.7 15.7 0 0 1 11.63-14.61l65-15A18.23 18.23 0 0 1 144 96a16.27 16.27 0 0 1 13.79 9.09l30 70A17.9 17.9 0 0 1 189 181a17 17 0 0 1-5.5 11.61l-37.89 31a231.91 231.91 0 0 0 110.78 110.78l31-37.89A17 17 0 0 1 299 291a17.85 17.85 0 0 1 5.91 1.21l70 30A16.25 16.25 0 0 1 384 336a17.41 17.41 0 0 1-.39 3.37z“]},sf={prefix:”fas“,iconName:”phone-volume“,icon:[384,512,,”f2a0“,”M97.333 506.966c-129.874-129.874-129.681-340.252 0-469.933 5.698-5.698 14.527-6.632 21.263-2.422l64.817 40.513a17.187 17.187 0 0 1 6.849 20.958l-32.408 81.021a17.188 17.188 0 0 1-17.669 10.719l-55.81-5.58c-21.051 58.261-20.612 122.471 0 179.515l55.811-5.581a17.188 17.188 0 0 1 17.669 10.719l32.408 81.022a17.188 17.188 0 0 1-6.849 20.958l-64.817 40.513a17.19 17.19 0 0 1-21.264-2.422zM247.126 95.473c11.832 20.047 11.832 45.008 0 65.055-3.95 6.693-13.108 7.959-18.718 2.581l-5.975-5.726c-3.911-3.748-4.793-9.622-2.261-14.41a32.063 32.063 0 0 0 0-29.945c-2.533-4.788-1.65-10.662 2.261-14.41l5.975-5.726c5.61-5.378 14.768-4.112 18.718 2.581zm91.787-91.187c60.14 71.604 60.092 175.882 0 247.428-4.474 5.327-12.53 5.746-17.552.933l-5.798-5.557c-4.56-4.371-4.977-11.529-.93-16.379 49.687-59.538 49.646-145.933 0-205.422-4.047-4.85-3.631-12.008.93-16.379l5.798-5.557c5.022-4.813 13.078-4.394 17.552.933zm-45.972 44.941c36.05 46.322 36.108 111.149 0 157.546-4.39 5.641-12.697 6.251-17.856 1.304l-5.818-5.579c-4.4-4.219-4.998-11.095-1.285-15.931 26.536-34.564 26.534-82.572 0-117.134-3.713-4.836-3.115-11.711 1.285-15.931l5.818-5.579c5.159-4.947 13.466-4.337 17.856 1.304z“]},uf={prefix:”fas“,iconName:”photo-video“,icon:[640,512,,”f87c“,”M608 0H160a32 32 0 0 0-32 32v96h160V64h192v320h128a32 32 0 0 0 32-32V32a32 32 0 0 0-32-32zM232 103a9 9 0 0 1-9 9h-30a9 9 0 0 1-9-9V73a9 9 0 0 1 9-9h30a9 9 0 0 1 9 9zm352 208a9 9 0 0 1-9 9h-30a9 9 0 0 1-9-9v-30a9 9 0 0 1 9-9h30a9 9 0 0 1 9 9zm0-104a9 9 0 0 1-9 9h-30a9 9 0 0 1-9-9v-30a9 9 0 0 1 9-9h30a9 9 0 0 1 9 9zm0-104a9 9 0 0 1-9 9h-30a9 9 0 0 1-9-9V73a9 9 0 0 1 9-9h30a9 9 0 0 1 9 9zm-168 57H32a32 32 0 0 0-32 32v288a32 32 0 0 0 32 32h384a32 32 0 0 0 32-32V192a32 32 0 0 0-32-32zM96 224a32 32 0 1 1-32 32 32 32 0 0 1 32-32zm288 224H64v-32l64-64 32 32 128-128 96 96z“]},lf={prefix:”fas“,iconName:”piggy-bank“,icon:[576,512,,”f4d3“,”M560 224h-29.5c-8.8-20-21.6-37.7-37.4-52.5L512 96h-32c-29.4 0-55.4 13.5-73 34.3-7.6-1.1-15.1-2.3-23-2.3H256c-77.4 0-141.9 55-156.8 128H56c-14.8 0-26.5-13.5-23.5-28.8C34.7 215.8 45.4 208 57 208h1c3.3 0 6-2.7 6-6v-20c0-3.3-2.7-6-6-6-28.5 0-53.9 20.4-57.5 48.6C-3.9 258.8 22.7 288 56 288h40c0 52.2 25.4 98.1 64 127.3V496c0 8.8 7.2 16 16 16h64c8.8 0 16-7.2 16-16v-48h128v48c0 8.8 7.2 16 16 16h64c8.8 0 16-7.2 16-16v-80.7c11.8-8.9 22.3-19.4 31.3-31.3H560c8.8 0 16-7.2 16-16V240c0-8.8-7.2-16-16-16zm-128 64c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zM256 96h128c5.4 0 10.7.4 15.9.8 0-.3.1-.5.1-.8 0-53-43-96-96-96s-96 43-96 96c0 2.1.5 4.1.6 6.2 15.2-3.9 31-6.2 47.4-6.2z“]},ff={prefix:”fas“,iconName:”pills“,icon:[576,512,,”f484“,”M112 32C50.1 32 0 82.1 0 144v224c0 61.9 50.1 112 112 112s112-50.1 112-112V144c0-61.9-50.1-112-112-112zm48 224H64V144c0-26.5 21.5-48 48-48s48 21.5 48 48v112zm139.7-29.7c-3.5-3.5-9.4-3.1-12.3.8-45.3 62.5-40.4 150.1 15.9 206.4 56.3 56.3 143.9 61.2 206.4 15.9 4-2.9 4.3-8.8.8-12.3L299.7 226.3zm229.8-19c-56.3-56.3-143.9-61.2-206.4-15.9-4 2.9-4.3 8.8-.8 12.3l210.8 210.8c3.5 3.5 9.4 3.1 12.3-.8 45.3-62.6 40.5-150.1-15.9-206.4z“]},hf={prefix:”fas“,iconName:”pizza-slice“,icon:[512,512,,”f818“,”M158.87.15c-16.16-1.52-31.2 8.42-35.33 24.12l-14.81 56.27c187.62 5.49 314.54 130.61 322.48 317l56.94-15.78c15.72-4.36 25.49-19.68 23.62-35.9C490.89 165.08 340.78 17.32 158.87.15zm-58.47 112L.55 491.64a16.21 16.21 0 0 0 20 19.75l379-105.1c-4.27-174.89-123.08-292.14-299.15-294.1zM128 416a32 32 0 1 1 32-32 32 32 0 0 1-32 32zm48-152a32 32 0 1 1 32-32 32 32 0 0 1-32 32zm104 104a32 32 0 1 1 32-32 32 32 0 0 1-32 32z“]},df={prefix:”fas“,iconName:”place-of-worship“,icon:[640,512,,”f67f“,”M620.61 366.55L512 320v192h112c8.84 0 16-7.16 16-16V395.96a32 32 0 0 0-19.39-29.41zM0 395.96V496c0 8.84 7.16 16 16 16h112V320L19.39 366.55A32 32 0 0 0 0 395.96zm464.46-149.28L416 217.6V102.63c0-8.49-3.37-16.62-9.38-22.63L331.31 4.69c-6.25-6.25-16.38-6.25-22.62 0L233.38 80c-6 6-9.38 14.14-9.38 22.63V217.6l-48.46 29.08A31.997 31.997 0 0 0 160 274.12V512h96v-96c0-35.35 28.66-64 64-64s64 28.65 64 64v96h96V274.12c0-11.24-5.9-21.66-15.54-27.44z“]},pf={prefix:”fas“,iconName:”plane“,icon:[576,512,,”f072“,”M480 192H365.71L260.61 8.06A16.014 16.014 0 0 0 246.71 0h-65.5c-10.63 0-18.3 10.17-15.38 20.39L214.86 192H112l-43.2-57.6c-3.02-4.03-7.77-6.4-12.8-6.4H16.01C5.6 128-2.04 137.78.49 147.88L32 256 .49 364.12C-2.04 374.22 5.6 384 16.01 384H56c5.04 0 9.78-2.37 12.8-6.4L112 320h102.86l-49.03 171.6c-2.92 10.22 4.75 20.4 15.38 20.4h65.5c5.74 0 11.04-3.08 13.89-8.06L365.71 320H480c35.35 0 96-28.65 96-64s-60.65-64-96-64z“]},mf={prefix:”fas“,iconName:”plane-arrival“,icon:[640,512,,”f5af“,”M624 448H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h608c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zM44.81 205.66l88.74 80a62.607 62.607 0 0 0 25.47 13.93l287.6 78.35c26.48 7.21 54.56 8.72 81 1.36 29.67-8.27 43.44-21.21 47.25-35.71 3.83-14.5-1.73-32.71-23.37-54.96-19.28-19.82-44.35-32.79-70.83-40l-97.51-26.56L282.8 30.22c-1.51-5.81-5.95-10.35-11.66-11.91L206.05.58c-10.56-2.88-20.9 5.32-20.71 16.44l47.92 164.21-102.2-27.84-27.59-67.88c-1.93-4.89-6.01-8.57-11.02-9.93L52.72 64.75c-10.34-2.82-20.53 5-20.72 15.88l.23 101.78c.19 8.91 6.03 17.34 12.58 23.25z“]},vf={prefix:”fas“,iconName:”plane-departure“,icon:[640,512,,”f5b0“,”M624 448H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h608c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zM80.55 341.27c6.28 6.84 15.1 10.72 24.33 10.71l130.54-.18a65.62 65.62 0 0 0 29.64-7.12l290.96-147.65c26.74-13.57 50.71-32.94 67.02-58.31 18.31-28.48 20.3-49.09 13.07-63.65-7.21-14.57-24.74-25.27-58.25-27.45-29.85-1.94-59.54 5.92-86.28 19.48l-98.51 49.99-218.7-82.06a17.799 17.799 0 0 0-18-1.11L90.62 67.29c-10.67 5.41-13.25 19.65-5.17 28.53l156.22 98.1-103.21 52.38-72.35-36.47a17.804 17.804 0 0 0-16.07.02L9.91 230.22c-10.44 5.3-13.19 19.12-5.57 28.08l76.21 82.97z“]},gf={prefix:”fas“,iconName:”plane-slash“,icon:[640,512,,”e069“,”M32.48,147.88,64,256,32.48,364.13A16,16,0,0,0,48,384H88a16,16,0,0,0,12.8-6.41L144,320H246.85l-49,171.59A16,16,0,0,0,213.2,512h65.5a16,16,0,0,0,13.89-8.06l66.6-116.54L34.35,136.34A15.47,15.47,0,0,0,32.48,147.88ZM633.82,458.09,455.14,320H512c35.34,0,96-28.66,96-64s-60.66-64-96-64H397.7L292.61,8.06C290.06,3.61,283.84,0,278.71,0H213.2a16,16,0,0,0-15.38,20.39l36.94,129.29L45.46,3.38A16,16,0,0,0,23,6.19L3.37,31.45A16,16,0,0,0,6.18,53.91L594.54,508.63A16,16,0,0,0,617,505.81l19.64-25.26A16,16,0,0,0,633.82,458.09Z“]},yf={prefix:”fas“,iconName:”play“,icon:[448,512,,”f04b“,”M424.4 214.7L72.4 6.6C43.8-10.3 0 6.1 0 47.9V464c0 37.5 40.7 60.1 72.4 41.3l352-208c31.4-18.5 31.5-64.1 0-82.6z“]},bf={prefix:”fas“,iconName:”play-circle“,icon:[512,512,,”f144“,”M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm115.7 272l-176 101c-15.8 8.8-35.7-2.5-35.7-21V152c0-18.4 19.8-29.8 35.7-21l176 107c16.4 9.2 16.4 32.9 0 42z“]},wf={prefix:”fas“,iconName:”plug“,icon:[384,512,,”f1e6“,”M320,32a32,32,0,0,0-64,0v96h64Zm48,128H16A16,16,0,0,0,0,176v32a16,16,0,0,0,16,16H32v32A160.07,160.07,0,0,0,160,412.8V512h64V412.8A160.07,160.07,0,0,0,352,256V224h16a16,16,0,0,0,16-16V176A16,16,0,0,0,368,160ZM128,32a32,32,0,0,0-64,0v96h64Z“]},xf={prefix:”fas“,iconName:”plus“,icon:[448,512,,”f067“,”M416 208H272V64c0-17.67-14.33-32-32-32h-32c-17.67 0-32 14.33-32 32v144H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h144v144c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32V304h144c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32z“]},Sf={prefix:”fas“,iconName:”plus-circle“,icon:[512,512,,”f055“,”M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm144 276c0 6.6-5.4 12-12 12h-92v92c0 6.6-5.4 12-12 12h-56c-6.6 0-12-5.4-12-12v-92h-92c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h92v-92c0-6.6 5.4-12 12-12h56c6.6 0 12 5.4 12 12v92h92c6.6 0 12 5.4 12 12v56z“]},kf={prefix:”fas“,iconName:”plus-square“,icon:[448,512,,”f0fe“,”M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-32 252c0 6.6-5.4 12-12 12h-92v92c0 6.6-5.4 12-12 12h-56c-6.6 0-12-5.4-12-12v-92H92c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h92v-92c0-6.6 5.4-12 12-12h56c6.6 0 12 5.4 12 12v92h92c6.6 0 12 5.4 12 12v56z“]},_f={prefix:”fas“,iconName:”podcast“,icon:[448,512,,”f2ce“,”M267.429 488.563C262.286 507.573 242.858 512 224 512c-18.857 0-38.286-4.427-43.428-23.437C172.927 460.134 160 388.898 160 355.75c0-35.156 31.142-43.75 64-43.75s64 8.594 64 43.75c0 32.949-12.871 104.179-20.571 132.813zM156.867 288.554c-18.693-18.308-29.958-44.173-28.784-72.599 2.054-49.724 42.395-89.956 92.124-91.881C274.862 121.958 320 165.807 320 220c0 26.827-11.064 51.116-28.866 68.552-2.675 2.62-2.401 6.986.628 9.187 9.312 6.765 16.46 15.343 21.234 25.363 1.741 3.654 6.497 4.66 9.449 1.891 28.826-27.043 46.553-65.783 45.511-108.565-1.855-76.206-63.595-138.208-139.793-140.369C146.869 73.753 80 139.215 80 220c0 41.361 17.532 78.7 45.55 104.989 2.953 2.771 7.711 1.77 9.453-1.887 4.774-10.021 11.923-18.598 21.235-25.363 3.029-2.2 3.304-6.566.629-9.185zM224 0C100.204 0 0 100.185 0 224c0 89.992 52.602 165.647 125.739 201.408 4.333 2.118 9.267-1.544 8.535-6.31-2.382-15.512-4.342-30.946-5.406-44.339-.146-1.836-1.149-3.486-2.678-4.512-47.4-31.806-78.564-86.016-78.187-147.347.592-96.237 79.29-174.648 175.529-174.899C320.793 47.747 400 126.797 400 224c0 61.932-32.158 116.49-80.65 147.867-.999 14.037-3.069 30.588-5.624 47.23-.732 4.767 4.203 8.429 8.535 6.31C395.227 389.727 448 314.187 448 224 448 100.205 347.815 0 224 0zm0 160c-35.346 0-64 28.654-64 64s28.654 64 64 64 64-28.654 64-64-28.654-64-64-64z“]},zf={prefix:”fas“,iconName:”poll“,icon:[448,512,,”f681“,”M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM160 368c0 8.84-7.16 16-16 16h-32c-8.84 0-16-7.16-16-16V240c0-8.84 7.16-16 16-16h32c8.84 0 16 7.16 16 16v128zm96 0c0 8.84-7.16 16-16 16h-32c-8.84 0-16-7.16-16-16V144c0-8.84 7.16-16 16-16h32c8.84 0 16 7.16 16 16v224zm96 0c0 8.84-7.16 16-16 16h-32c-8.84 0-16-7.16-16-16v-64c0-8.84 7.16-16 16-16h32c8.84 0 16 7.16 16 16v64z“]},Cf={prefix:”fas“,iconName:”poll-h“,icon:[448,512,,”f682“,”M448 432V80c0-26.5-21.5-48-48-48H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48zM112 192c-8.84 0-16-7.16-16-16v-32c0-8.84 7.16-16 16-16h128c8.84 0 16 7.16 16 16v32c0 8.84-7.16 16-16 16H112zm0 96c-8.84 0-16-7.16-16-16v-32c0-8.84 7.16-16 16-16h224c8.84 0 16 7.16 16 16v32c0 8.84-7.16 16-16 16H112zm0 96c-8.84 0-16-7.16-16-16v-32c0-8.84 7.16-16 16-16h64c8.84 0 16 7.16 16 16v32c0 8.84-7.16 16-16 16h-64z“]},Mf={prefix:”fas“,iconName:”poo“,icon:[512,512,,”f2fe“,”M451.4 369.1C468.7 356 480 335.4 480 312c0-39.8-32.2-72-72-72h-14.1c13.4-11.7 22.1-28.8 22.1-48 0-35.3-28.7-64-64-64h-5.9c3.6-10.1 5.9-20.7 5.9-32 0-53-43-96-96-96-5.2 0-10.2.7-15.1 1.5C250.3 14.6 256 30.6 256 48c0 44.2-35.8 80-80 80h-16c-35.3 0-64 28.7-64 64 0 19.2 8.7 36.3 22.1 48H104c-39.8 0-72 32.2-72 72 0 23.4 11.3 44 28.6 57.1C26.3 374.6 0 404.1 0 440c0 39.8 32.2 72 72 72h368c39.8 0 72-32.2 72-72 0-35.9-26.3-65.4-60.6-70.9zM192 256c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm159.5 139C341 422.9 293 448 256 448s-85-25.1-95.5-53c-2-5.3 2-11 7.8-11h175.4c5.8 0 9.8 5.7 7.8 11zM320 320c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z“]},Of={prefix:”fas“,iconName:”poo-storm“,icon:[448,512,,”f75a“,”M308 336h-57.7l17.3-64.9c2-7.6-3.7-15.1-11.6-15.1h-68c-6 0-11.1 4.5-11.9 10.4l-16 120c-1 7.2 4.6 13.6 11.9 13.6h59.3l-23 97.2c-1.8 7.6 4 14.8 11.7 14.8 4.2 0 8.2-2.2 10.4-6l88-152c4.6-8-1.2-18-10.4-18zm66.4-111.3c5.9-9.6 9.6-20.6 9.6-32.7 0-35.3-28.7-64-64-64h-5.9c3.6-10.1 5.9-20.7 5.9-32 0-53-43-96-96-96-5.2 0-10.2.7-15.1 1.5C218.3 14.6 224 30.6 224 48c0 44.2-35.8 80-80 80h-16c-35.3 0-64 28.7-64 64 0 12.1 3.7 23.1 9.6 32.7C32.6 228 0 262.2 0 304c0 44 36 80 80 80h48.3c.1-.6 0-1.2 0-1.8l16-120c3-21.8 21.7-38.2 43.7-38.2h68c13.8 0 26.5 6.3 34.9 17.2s11.2 24.8 7.6 38.1l-6.6 24.7h16c15.7 0 30.3 8.4 38.1 22 7.8 13.6 7.8 30.5 0 44l-8.1 14h30c44 0 80-36 80-80 .1-41.8-32.5-76-73.5-79.3z“]},Tf={prefix:”fas“,iconName:”poop“,icon:[512,512,,”f619“,”M451.36 369.14C468.66 355.99 480 335.41 480 312c0-39.77-32.24-72-72-72h-14.07c13.42-11.73 22.07-28.78 22.07-48 0-35.35-28.65-64-64-64h-5.88c3.57-10.05 5.88-20.72 5.88-32 0-53.02-42.98-96-96-96-5.17 0-10.15.74-15.11 1.52C250.31 14.64 256 30.62 256 48c0 44.18-35.82 80-80 80h-16c-35.35 0-64 28.65-64 64 0 19.22 8.65 36.27 22.07 48H104c-39.76 0-72 32.23-72 72 0 23.41 11.34 43.99 28.64 57.14C26.31 374.62 0 404.12 0 440c0 39.76 32.24 72 72 72h368c39.76 0 72-32.24 72-72 0-35.88-26.31-65.38-60.64-70.86z“]},Ef={prefix:”fas“,iconName:”portrait“,icon:[384,512,,”f3e0“,”M336 0H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zM192 128c35.3 0 64 28.7 64 64s-28.7 64-64 64-64-28.7-64-64 28.7-64 64-64zm112 236.8c0 10.6-10 19.2-22.4 19.2H102.4C90 384 80 375.4 80 364.8v-19.2c0-31.8 30.1-57.6 67.2-57.6h5c12.3 5.1 25.7 8 39.8 8s27.6-2.9 39.8-8h5c37.1 0 67.2 25.8 67.2 57.6v19.2z“]},Lf={prefix:”fas“,iconName:”pound-sign“,icon:[320,512,,”f154“,”M308 352h-45.495c-6.627 0-12 5.373-12 12v50.848H128V288h84c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-84v-63.556c0-32.266 24.562-57.086 61.792-57.086 23.658 0 45.878 11.505 57.652 18.849 5.151 3.213 11.888 2.051 15.688-2.685l28.493-35.513c4.233-5.276 3.279-13.005-2.119-17.081C273.124 54.56 236.576 32 187.931 32 106.026 32 48 84.742 48 157.961V224H20c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h28v128H12c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h296c6.627 0 12-5.373 12-12V364c0-6.627-5.373-12-12-12z“]},Af={prefix:”fas“,iconName:”power-off“,icon:[512,512,,”f011“,”M400 54.1c63 45 104 118.6 104 201.9 0 136.8-110.8 247.7-247.5 248C120 504.3 8.2 393 8 256.4 7.9 173.1 48.9 99.3 111.8 54.2c11.7-8.3 28-4.8 35 7.7L162.6 90c5.9 10.5 3.1 23.8-6.6 31-41.5 30.8-68 79.6-68 134.9-.1 92.3 74.5 168.1 168 168.1 91.6 0 168.6-74.2 168-169.1-.3-51.8-24.7-101.8-68.1-134-9.7-7.2-12.4-20.5-6.5-30.9l15.8-28.1c7-12.4 23.2-16.1 34.8-7.8zM296 264V24c0-13.3-10.7-24-24-24h-32c-13.3 0-24 10.7-24 24v240c0 13.3 10.7 24 24 24h32c13.3 0 24-10.7 24-24z“]},Rf={prefix:”fas“,iconName:”pray“,icon:[384,512,,”f683“,”M256 128c35.35 0 64-28.65 64-64S291.35 0 256 0s-64 28.65-64 64 28.65 64 64 64zm-30.63 169.75c14.06 16.72 39 19.09 55.97 5.22l88-72.02c17.09-13.98 19.59-39.19 5.62-56.28-13.97-17.11-39.19-19.59-56.31-5.62l-57.44 47-38.91-46.31c-15.44-18.39-39.22-27.92-64-25.33-24.19 2.48-45.25 16.27-56.37 36.92l-49.37 92.03c-23.4 43.64-8.69 96.37 34.19 123.75L131.56 432H40c-22.09 0-40 17.91-40 40s17.91 40 40 40h208c34.08 0 53.77-42.79 28.28-68.28L166.42 333.86l34.8-64.87 24.15 28.76z“]},Nf={prefix:”fas“,iconName:”praying-hands“,icon:[640,512,,”f684“,”M272 191.91c-17.6 0-32 14.4-32 32v80c0 8.84-7.16 16-16 16s-16-7.16-16-16v-76.55c0-17.39 4.72-34.47 13.69-49.39l77.75-129.59c9.09-15.16 4.19-34.81-10.97-43.91-14.45-8.67-32.72-4.3-42.3 9.21-.2.23-.62.21-.79.48l-117.26 175.9C117.56 205.9 112 224.31 112 243.29v80.23l-90.12 30.04A31.974 31.974 0 0 0 0 383.91v96c0 10.82 8.52 32 32 32 2.69 0 5.41-.34 8.06-1.03l179.19-46.62C269.16 449.99 304 403.8 304 351.91v-128c0-17.6-14.4-32-32-32zm346.12 161.73L528 323.6v-80.23c0-18.98-5.56-37.39-16.12-53.23L394.62 14.25c-.18-.27-.59-.24-.79-.48-9.58-13.51-27.85-17.88-42.3-9.21-15.16 9.09-20.06 28.75-10.97 43.91l77.75 129.59c8.97 14.92 13.69 32 13.69 49.39V304c0 8.84-7.16 16-16 16s-16-7.16-16-16v-80c0-17.6-14.4-32-32-32s-32 14.4-32 32v128c0 51.89 34.84 98.08 84.75 112.34l179.19 46.62c2.66.69 5.38 1.03 8.06 1.03 23.48 0 32-21.18 32-32v-96c0-13.77-8.81-25.99-21.88-30.35z“]},Hf={prefix:”fas“,iconName:”prescription“,icon:[384,512,,”f5b1“,”M301.26 352l78.06-78.06c6.25-6.25 6.25-16.38 0-22.63l-22.63-22.63c-6.25-6.25-16.38-6.25-22.63 0L256 306.74l-83.96-83.96C219.31 216.8 256 176.89 256 128c0-53.02-42.98-96-96-96H16C7.16 32 0 39.16 0 48v256c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-80h18.75l128 128-78.06 78.06c-6.25 6.25-6.25 16.38 0 22.63l22.63 22.63c6.25 6.25 16.38 6.25 22.63 0L256 397.25l78.06 78.06c6.25 6.25 16.38 6.25 22.63 0l22.63-22.63c6.25-6.25 6.25-16.38 0-22.63L301.26 352zM64 96h96c17.64 0 32 14.36 32 32s-14.36 32-32 32H64V96z“]},Pf={prefix:”fas“,iconName:”prescription-bottle“,icon:[384,512,,”f485“,”M32 192h120c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H32v64h120c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H32v64h120c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H32v64c0 17.6 14.4 32 32 32h256c17.6 0 32-14.4 32-32V128H32v64zM360 0H24C10.8 0 0 10.8 0 24v48c0 13.2 10.8 24 24 24h336c13.2 0 24-10.8 24-24V24c0-13.2-10.8-24-24-24z“]},jf={prefix:”fas“,iconName:”prescription-bottle-alt“,icon:[384,512,,”f486“,”M360 0H24C10.8 0 0 10.8 0 24v48c0 13.2 10.8 24 24 24h336c13.2 0 24-10.8 24-24V24c0-13.2-10.8-24-24-24zM32 480c0 17.6 14.4 32 32 32h256c17.6 0 32-14.4 32-32V128H32v352zm64-184c0-4.4 3.6-8 8-8h56v-56c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v56h56c4.4 0 8 3.6 8 8v48c0 4.4-3.6 8-8 8h-56v56c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8v-56h-56c-4.4 0-8-3.6-8-8v-48z“]},Vf={prefix:”fas“,iconName:”print“,icon:[512,512,,”f02f“,”M448 192V77.25c0-8.49-3.37-16.62-9.37-22.63L393.37 9.37c-6-6-14.14-9.37-22.63-9.37H96C78.33 0 64 14.33 64 32v160c-35.35 0-64 28.65-64 64v112c0 8.84 7.16 16 16 16h48v96c0 17.67 14.33 32 32 32h320c17.67 0 32-14.33 32-32v-96h48c8.84 0 16-7.16 16-16V256c0-35.35-28.65-64-64-64zm-64 256H128v-96h256v96zm0-224H128V64h192v48c0 8.84 7.16 16 16 16h48v96zm48 72c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24z“]},Df={prefix:”fas“,iconName:”procedures“,icon:[640,512,,”f487“,”M528 224H272c-8.8 0-16 7.2-16 16v144H64V144c0-8.8-7.2-16-16-16H16c-8.8 0-16 7.2-16 16v352c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-48h512v48c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V336c0-61.9-50.1-112-112-112zM136 96h126.1l27.6 55.2c5.9 11.8 22.7 11.8 28.6 0L368 51.8 390.1 96H512c8.8 0 16-7.2 16-16s-7.2-16-16-16H409.9L382.3 8.8C376.4-3 359.6-3 353.7 8.8L304 108.2l-19.9-39.8c-1.4-2.7-4.1-4.4-7.2-4.4H136c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8zm24 256c35.3 0 64-28.7 64-64s-28.7-64-64-64-64 28.7-64 64 28.7 64 64 64z“]},If={prefix:”fas“,iconName:”project-diagram“,icon:[640,512,,”f542“,”M384 320H256c-17.67 0-32 14.33-32 32v128c0 17.67 14.33 32 32 32h128c17.67 0 32-14.33 32-32V352c0-17.67-14.33-32-32-32zM192 32c0-17.67-14.33-32-32-32H32C14.33 0 0 14.33 0 32v128c0 17.67 14.33 32 32 32h95.72l73.16 128.04C211.98 300.98 232.4 288 256 288h.28L192 175.51V128h224V64H192V32zM608 0H480c-17.67 0-32 14.33-32 32v128c0 17.67 14.33 32 32 32h128c17.67 0 32-14.33 32-32V32c0-17.67-14.33-32-32-32z“]},Ff={prefix:”fas“,iconName:”pump-medical“,icon:[384,512,,”e06a“,”M235.51,159.82H84.24A64,64,0,0,0,20.51,218L.14,442a64,64,0,0,0,63.74,69.8h192A64,64,0,0,0,319.61,442L299.24,218A64,64,0,0,0,235.51,159.82Zm4.37,173.33a13.35,13.35,0,0,1-13.34,13.34h-40v40a13.33,13.33,0,0,1-13.33,13.33H146.54a13.33,13.33,0,0,1-13.33-13.33v-40h-40a13.34,13.34,0,0,1-13.33-13.34V306.49a13.33,13.33,0,0,1,13.33-13.34h40v-40a13.33,13.33,0,0,1,13.33-13.33h26.67a13.33,13.33,0,0,1,13.33,13.33v40h40a13.34,13.34,0,0,1,13.34,13.34ZM379.19,93.88,335.87,50.56a64,64,0,0,0-45.24-18.74H223.88a32,32,0,0,0-32-32h-64a32,32,0,0,0-32,32v96h128v-32h66.75l43.31,43.31a16,16,0,0,0,22.63,0l22.62-22.62A16,16,0,0,0,379.19,93.88Z“]},Bf={prefix:”fas“,iconName:”pump-soap“,icon:[384,512,,”e06b“,”M235.63,160H84.37a64,64,0,0,0-63.74,58.21L.27,442.21A64,64,0,0,0,64,512H256a64,64,0,0,0,63.74-69.79l-20.36-224A64,64,0,0,0,235.63,160ZM160,416c-33.12,0-60-26.33-60-58.75,0-25,35.7-75.47,52-97.27A10,10,0,0,1,168,260c16.33,21.8,52,72.27,52,97.27C220,389.67,193.12,416,160,416ZM379.31,94.06,336,50.74A64,64,0,0,0,290.75,32H224A32,32,0,0,0,192,0H128A32,32,0,0,0,96,32v96H224V96h66.75l43.31,43.31a16,16,0,0,0,22.63,0l22.62-22.62A16,16,0,0,0,379.31,94.06Z“]},Uf={prefix:”fas“,iconName:”puzzle-piece“,icon:[576,512,,”f12e“,”M519.442 288.651c-41.519 0-59.5 31.593-82.058 31.593C377.409 320.244 432 144 432 144s-196.288 80-196.288-3.297c0-35.827 36.288-46.25 36.288-85.985C272 19.216 243.885 0 210.539 0c-34.654 0-66.366 18.891-66.366 56.346 0 41.364 31.711 59.277 31.711 81.75C175.885 207.719 0 166.758 0 166.758v333.237s178.635 41.047 178.635-28.662c0-22.473-40-40.107-40-81.471 0-37.456 29.25-56.346 63.577-56.346 33.673 0 61.788 19.216 61.788 54.717 0 39.735-36.288 50.158-36.288 85.985 0 60.803 129.675 25.73 181.23 25.73 0 0-34.725-120.101 25.827-120.101 35.962 0 46.423 36.152 86.308 36.152C556.712 416 576 387.99 576 354.443c0-34.199-18.962-65.792-56.558-65.792z“]},qf={prefix:”fas“,iconName:”qrcode“,icon:[448,512,,”f029“,”M0 224h192V32H0v192zM64 96h64v64H64V96zm192-64v192h192V32H256zm128 128h-64V96h64v64zM0 480h192V288H0v192zm64-128h64v64H64v-64zm352-64h32v128h-96v-32h-32v96h-64V288h96v32h64v-32zm0 160h32v32h-32v-32zm-64 0h32v32h-32v-32z“]},Gf={prefix:”fas“,iconName:”question“,icon:[384,512,,”f128“,”M202.021 0C122.202 0 70.503 32.703 29.914 91.026c-7.363 10.58-5.093 25.086 5.178 32.874l43.138 32.709c10.373 7.865 25.132 6.026 33.253-4.148 25.049-31.381 43.63-49.449 82.757-49.449 30.764 0 68.816 19.799 68.816 49.631 0 22.552-18.617 34.134-48.993 51.164-35.423 19.86-82.299 44.576-82.299 106.405V320c0 13.255 10.745 24 24 24h72.471c13.255 0 24-10.745 24-24v-5.773c0-42.86 125.268-44.645 125.268-160.627C377.504 66.256 286.902 0 202.021 0zM192 373.459c-38.196 0-69.271 31.075-69.271 69.271 0 38.195 31.075 69.27 69.271 69.27s69.271-31.075 69.271-69.271-31.075-69.27-69.271-69.27z“]},Wf={prefix:”fas“,iconName:”question-circle“,icon:[512,512,,”f059“,”M504 256c0 136.997-111.043 248-248 248S8 392.997 8 256C8 119.083 119.043 8 256 8s248 111.083 248 248zM262.655 90c-54.497 0-89.255 22.957-116.549 63.758-3.536 5.286-2.353 12.415 2.715 16.258l34.699 26.31c5.205 3.947 12.621 3.008 16.665-2.122 17.864-22.658 30.113-35.797 57.303-35.797 20.429 0 45.698 13.148 45.698 32.958 0 14.976-12.363 22.667-32.534 33.976C247.128 238.528 216 254.941 216 296v4c0 6.627 5.373 12 12 12h56c6.627 0 12-5.373 12-12v-1.333c0-28.462 83.186-29.647 83.186-106.667 0-58.002-60.165-102-116.531-102zM256 338c-25.365 0-46 20.635-46 46 0 25.364 20.635 46 46 46s46-20.636 46-46c0-25.365-20.635-46-46-46z“]},Zf={prefix:”fas“,iconName:”quidditch“,icon:[640,512,,”f458“,”M256.5 216.8L343.2 326s-16.6 102.4-76.6 150.1C206.7 523.8 0 510.2 0 510.2s3.8-23.1 11-55.4l94.6-112.2c4-4.7-.9-11.6-6.6-9.5l-60.4 22.1c14.4-41.7 32.7-80 54.6-97.5 59.9-47.8 163.3-40.9 163.3-40.9zm238 135c-44 0-79.8 35.8-79.8 79.9 0 44.1 35.7 79.9 79.8 79.9 44.1 0 79.8-35.8 79.8-79.9 0-44.2-35.8-79.9-79.8-79.9zM636.5 31L616.7 6c-5.5-6.9-15.5-8-22.4-2.6L361.8 181.3l-34.1-43c-5.1-6.4-15.1-5.2-18.6 2.2l-25.3 54.6 86.7 109.2 58.8-12.4c8-1.7 11.4-11.2 6.3-17.6l-34.1-42.9L634 53.5c6.9-5.5 8-15.6 2.5-22.5z“]},$f={prefix:”fas“,iconName:”quote-left“,icon:[512,512,,”f10d“,”M464 256h-80v-64c0-35.3 28.7-64 64-64h8c13.3 0 24-10.7 24-24V56c0-13.3-10.7-24-24-24h-8c-88.4 0-160 71.6-160 160v240c0 26.5 21.5 48 48 48h128c26.5 0 48-21.5 48-48V304c0-26.5-21.5-48-48-48zm-288 0H96v-64c0-35.3 28.7-64 64-64h8c13.3 0 24-10.7 24-24V56c0-13.3-10.7-24-24-24h-8C71.6 32 0 103.6 0 192v240c0 26.5 21.5 48 48 48h128c26.5 0 48-21.5 48-48V304c0-26.5-21.5-48-48-48z“]},Jf={prefix:”fas“,iconName:”quote-right“,icon:[512,512,,”f10e“,”M464 32H336c-26.5 0-48 21.5-48 48v128c0 26.5 21.5 48 48 48h80v64c0 35.3-28.7 64-64 64h-8c-13.3 0-24 10.7-24 24v48c0 13.3 10.7 24 24 24h8c88.4 0 160-71.6 160-160V80c0-26.5-21.5-48-48-48zm-288 0H48C21.5 32 0 53.5 0 80v128c0 26.5 21.5 48 48 48h80v64c0 35.3-28.7 64-64 64h-8c-13.3 0-24 10.7-24 24v48c0 13.3 10.7 24 24 24h8c88.4 0 160-71.6 160-160V80c0-26.5-21.5-48-48-48z“]},Kf={prefix:”fas“,iconName:”quran“,icon:[448,512,,”f687“,”M448 358.4V25.6c0-16-9.6-25.6-25.6-25.6H96C41.6 0 0 41.6 0 96v320c0 54.4 41.6 96 96 96h326.4c12.8 0 25.6-9.6 25.6-25.6v-16c0-6.4-3.2-12.8-9.6-19.2-3.2-16-3.2-60.8 0-73.6 6.4-3.2 9.6-9.6 9.6-19.2zM301.08 145.82c.6-1.21 1.76-1.82 2.92-1.82s2.32.61 2.92 1.82l11.18 22.65 25 3.63c2.67.39 3.74 3.67 1.81 5.56l-18.09 17.63 4.27 24.89c.36 2.11-1.31 3.82-3.21 3.82-.5 0-1.02-.12-1.52-.38L304 211.87l-22.36 11.75c-.5.26-1.02.38-1.52.38-1.9 0-3.57-1.71-3.21-3.82l4.27-24.89-18.09-17.63c-1.94-1.89-.87-5.17 1.81-5.56l24.99-3.63 11.19-22.65zm-57.89-69.01c13.67 0 27.26 2.49 40.38 7.41a6.775 6.775 0 1 1-2.38 13.12c-.67 0-3.09-.21-4.13-.21-52.31 0-94.86 42.55-94.86 94.86 0 52.3 42.55 94.86 94.86 94.86 1.03 0 3.48-.21 4.13-.21 3.93 0 6.8 3.14 6.8 6.78 0 2.98-1.94 5.51-4.62 6.42-13.07 4.87-26.59 7.34-40.19 7.34C179.67 307.19 128 255.51 128 192c0-63.52 51.67-115.19 115.19-115.19zM380.8 448H96c-19.2 0-32-12.8-32-32s16-32 32-32h284.8v64z“]},Qf={prefix:”fas“,iconName:”radiation“,icon:[496,512,,”f7b9“,”M328.2 255.8h151.6c9.1 0 16.8-7.7 16.2-16.8-5.1-75.8-44.4-142.2-102.5-184.2-7.4-5.3-17.9-2.9-22.7 4.8L290.4 188c22.6 14.3 37.8 39.2 37.8 67.8zm-37.8 67.7c-12.3 7.7-26.8 12.4-42.4 12.4-15.6 0-30-4.7-42.4-12.4L125.2 452c-4.8 7.7-2.4 18.1 5.6 22.4C165.7 493.2 205.6 504 248 504s82.3-10.8 117.2-29.6c8-4.3 10.4-14.8 5.6-22.4l-80.4-128.5zM248 303.8c26.5 0 48-21.5 48-48s-21.5-48-48-48-48 21.5-48 48 21.5 48 48 48zm-231.8-48h151.6c0-28.6 15.2-53.5 37.8-67.7L125.2 59.7c-4.8-7.7-15.3-10.2-22.7-4.8C44.4 96.9 5.1 163.3 0 239.1c-.6 9 7.1 16.7 16.2 16.7z“]},Yf={prefix:”fas“,iconName:”radiation-alt“,icon:[496,512,,”f7ba“,”M312 256h79.1c9.2 0 16.9-7.7 16-16.8-4.6-43.6-27-81.8-59.5-107.8-7.6-6.1-18.8-4.5-24 3.8L281.9 202c18 11.2 30.1 31.2 30.1 54zm-97.8 54.1L172.4 377c-4.9 7.8-2.4 18.4 5.8 22.5 21.1 10.4 44.7 16.5 69.8 16.5s48.7-6.1 69.9-16.5c8.2-4.1 10.6-14.7 5.8-22.5l-41.8-66.9c-9.8 6.2-21.4 9.9-33.8 9.9s-24.1-3.7-33.9-9.9zM104.9 256H184c0-22.8 12.1-42.8 30.2-54.1l-41.7-66.8c-5.2-8.3-16.4-9.9-24-3.8-32.6 26-54.9 64.2-59.5 107.8-1.1 9.2 6.7 16.9 15.9 16.9zM248 504c137 0 248-111 248-248S385 8 248 8 0 119 0 256s111 248 248 248zm0-432c101.5 0 184 82.5 184 184s-82.5 184-184 184S64 357.5 64 256 146.5 72 248 72zm0 216c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32z“]},Xf={prefix:”fas“,iconName:”rainbow“,icon:[576,512,,”f75b“,”M268.3 32.7C115.4 42.9 0 176.9 0 330.2V464c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V320C64 186.8 180.9 80.3 317.5 97.9 430.4 112.4 512 214 512 327.8V464c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V320c0-165.3-140-298.6-307.7-287.3zm-5.6 96.9C166 142 96 229.1 96 326.7V464c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V320c0-74.8 64.5-134.8 140.8-127.4 66.5 6.5 115.2 66.2 115.2 133.1V464c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V320c0-114.2-100.2-205.4-217.3-190.4zm6.2 96.3c-45.6 8.9-76.9 51.5-76.9 97.9V464c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V320c0-17.6 14.3-32 32-32s32 14.4 32 32v144c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V320c0-59.2-53.8-106-115.1-94.1z“]},eh={prefix:”fas“,iconName:”random“,icon:[512,512,,”f074“,”M504.971 359.029c9.373 9.373 9.373 24.569 0 33.941l-80 79.984c-15.01 15.01-40.971 4.49-40.971-16.971V416h-58.785a12.004 12.004 0 0 1-8.773-3.812l-70.556-75.596 53.333-57.143L352 336h32v-39.981c0-21.438 25.943-31.998 40.971-16.971l80 79.981zM12 176h84l52.781 56.551 53.333-57.143-70.556-75.596A11.999 11.999 0 0 0 122.785 96H12c-6.627 0-12 5.373-12 12v56c0 6.627 5.373 12 12 12zm372 0v39.984c0 21.46 25.961 31.98 40.971 16.971l80-79.984c9.373-9.373 9.373-24.569 0-33.941l-80-79.981C409.943 24.021 384 34.582 384 56.019V96h-58.785a12.004 12.004 0 0 0-8.773 3.812L96 336H12c-6.627 0-12 5.373-12 12v56c0 6.627 5.373 12 12 12h110.785c3.326 0 6.503-1.381 8.773-3.812L352 176h32z“]},th={prefix:”fas“,iconName:”receipt“,icon:[384,512,,”f543“,”M358.4 3.2L320 48 265.6 3.2a15.9 15.9 0 0 0-19.2 0L192 48 137.6 3.2a15.9 15.9 0 0 0-19.2 0L64 48 25.6 3.2C15-4.7 0 2.8 0 16v480c0 13.2 15 20.7 25.6 12.8L64 464l54.4 44.8a15.9 15.9 0 0 0 19.2 0L192 464l54.4 44.8a15.9 15.9 0 0 0 19.2 0L320 464l38.4 44.8c10.5 7.9 25.6.4 25.6-12.8V16c0-13.2-15-20.7-25.6-12.8zM320 360c0 4.4-3.6 8-8 8H72c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h240c4.4 0 8 3.6 8 8v16zm0-96c0 4.4-3.6 8-8 8H72c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h240c4.4 0 8 3.6 8 8v16zm0-96c0 4.4-3.6 8-8 8H72c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h240c4.4 0 8 3.6 8 8v16z“]},nh={prefix:”fas“,iconName:”record-vinyl“,icon:[512,512,,”f8d9“,”M256 152a104 104 0 1 0 104 104 104 104 0 0 0-104-104zm0 128a24 24 0 1 1 24-24 24 24 0 0 1-24 24zm0-272C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm0 376a128 128 0 1 1 128-128 128 128 0 0 1-128 128z“]},rh={prefix:”fas“,iconName:”recycle“,icon:[512,512,,”f1b8“,”M184.561 261.903c3.232 13.997-12.123 24.635-24.068 17.168l-40.736-25.455-50.867 81.402C55.606 356.273 70.96 384 96.012 384H148c6.627 0 12 5.373 12 12v40c0 6.627-5.373 12-12 12H96.115c-75.334 0-121.302-83.048-81.408-146.88l50.822-81.388-40.725-25.448c-12.081-7.547-8.966-25.961 4.879-29.158l110.237-25.45c8.611-1.988 17.201 3.381 19.189 11.99l25.452 110.237zm98.561-182.915l41.289 66.076-40.74 25.457c-12.051 7.528-9 25.953 4.879 29.158l110.237 25.45c8.672 1.999 17.215-3.438 19.189-11.99l25.45-110.237c3.197-13.844-11.99-24.719-24.068-17.168l-40.687 25.424-41.263-66.082c-37.521-60.033-125.209-60.171-162.816 0l-17.963 28.766c-3.51 5.62-1.8 13.021 3.82 16.533l33.919 21.195c5.62 3.512 13.024 1.803 16.536-3.817l17.961-28.743c12.712-20.341 41.973-19.676 54.257-.022zM497.288 301.12l-27.515-44.065c-3.511-5.623-10.916-7.334-16.538-3.821l-33.861 21.159c-5.62 3.512-7.33 10.915-3.818 16.536l27.564 44.112c13.257 21.211-2.057 48.96-27.136 48.96H320V336.02c0-14.213-17.242-21.383-27.313-11.313l-80 79.981c-6.249 6.248-6.249 16.379 0 22.627l80 79.989C302.689 517.308 320 510.3 320 495.989V448h95.88c75.274 0 121.335-82.997 81.408-146.88z“]},ih={prefix:”fas“,iconName:”redo“,icon:[512,512,,”f01e“,”M500.33 0h-47.41a12 12 0 0 0-12 12.57l4 82.76A247.42 247.42 0 0 0 256 8C119.34 8 7.9 119.53 8 256.19 8.1 393.07 119.1 504 256 504a247.1 247.1 0 0 0 166.18-63.91 12 12 0 0 0 .48-17.43l-34-34a12 12 0 0 0-16.38-.55A176 176 0 1 1 402.1 157.8l-101.53-4.87a12 12 0 0 0-12.57 12v47.41a12 12 0 0 0 12 12h200.33a12 12 0 0 0 12-12V12a12 12 0 0 0-12-12z“]},ah={prefix:”fas“,iconName:”redo-alt“,icon:[512,512,,”f2f9“,”M256.455 8c66.269.119 126.437 26.233 170.859 68.685l35.715-35.715C478.149 25.851 504 36.559 504 57.941V192c0 13.255-10.745 24-24 24H345.941c-21.382 0-32.09-25.851-16.971-40.971l41.75-41.75c-30.864-28.899-70.801-44.907-113.23-45.273-92.398-.798-170.283 73.977-169.484 169.442C88.764 348.009 162.184 424 256 424c41.127 0 79.997-14.678 110.629-41.556 4.743-4.161 11.906-3.908 16.368.553l39.662 39.662c4.872 4.872 4.631 12.815-.482 17.433C378.202 479.813 319.926 504 256 504 119.034 504 8.001 392.967 8 256.002 7.999 119.193 119.646 7.755 256.455 8z“]},oh={prefix:”fas“,iconName:”registered“,icon:[512,512,,”f25d“,”M285.363 207.475c0 18.6-9.831 28.431-28.431 28.431h-29.876v-56.14h23.378c28.668 0 34.929 8.773 34.929 27.709zM504 256c0 136.967-111.033 248-248 248S8 392.967 8 256 119.033 8 256 8s248 111.033 248 248zM363.411 360.414c-46.729-84.825-43.299-78.636-44.702-80.98 23.432-15.172 37.945-42.979 37.945-74.486 0-54.244-31.5-89.252-105.498-89.252h-70.667c-13.255 0-24 10.745-24 24V372c0 13.255 10.745 24 24 24h22.567c13.255 0 24-10.745 24-24v-71.663h25.556l44.129 82.937a24.001 24.001 0 0 0 21.188 12.727h24.464c18.261-.001 29.829-19.591 21.018-35.587z“]},ch={prefix:”fas“,iconName:”remove-format“,icon:[640,512,,”f87d“,”M336 416h-11.17l9.26-27.77L267 336.4 240.49 416H208a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h128a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm297.82 42.1L377 259.59 426.17 112H544v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16H176a16 16 0 0 0-16 16v43.9L45.46 3.38A16 16 0 0 0 23 6.19L3.37 31.46a16 16 0 0 0 2.81 22.45l588.36 454.72a16 16 0 0 0 22.46-2.81l19.64-25.27a16 16 0 0 0-2.82-22.45zM309.91 207.76L224 141.36V112h117.83z“]},sh={prefix:”fas“,iconName:”reply“,icon:[512,512,,”f3e5“,”M8.309 189.836L184.313 37.851C199.719 24.546 224 35.347 224 56.015v80.053c160.629 1.839 288 34.032 288 186.258 0 61.441-39.581 122.309-83.333 154.132-13.653 9.931-33.111-2.533-28.077-18.631 45.344-145.012-21.507-183.51-176.59-185.742V360c0 20.7-24.3 31.453-39.687 18.164l-176.004-152c-11.071-9.562-11.086-26.753 0-36.328z“]},uh={prefix:”fas“,iconName:”reply-all“,icon:[576,512,,”f122“,”M136.309 189.836L312.313 37.851C327.72 24.546 352 35.348 352 56.015v82.763c129.182 10.231 224 52.212 224 183.548 0 61.441-39.582 122.309-83.333 154.132-13.653 9.931-33.111-2.533-28.077-18.631 38.512-123.162-3.922-169.482-112.59-182.015v84.175c0 20.701-24.3 31.453-39.687 18.164L136.309 226.164c-11.071-9.561-11.086-26.753 0-36.328zm-128 36.328L184.313 378.15C199.7 391.439 224 380.687 224 359.986v-15.818l-108.606-93.785A55.96 55.96 0 0 1 96 207.998a55.953 55.953 0 0 1 19.393-42.38L224 71.832V56.015c0-20.667-24.28-31.469-39.687-18.164L8.309 189.836c-11.086 9.575-11.071 26.767 0 36.328z“]},lh={prefix:”fas“,iconName:”republican“,icon:[640,512,,”f75e“,”M544 192c0-88.4-71.6-160-160-160H160C71.6 32 0 103.6 0 192v64h544v-64zm-367.7-21.6l-19.8 19.3 4.7 27.3c.8 4.9-4.3 8.6-8.7 6.3L128 210.4l-24.5 12.9c-4.3 2.3-9.5-1.4-8.7-6.3l4.7-27.3-19.8-19.3c-3.6-3.5-1.6-9.5 3.3-10.2l27.4-4 12.2-24.8c2.2-4.5 8.6-4.4 10.7 0l12.2 24.8 27.4 4c5 .7 6.9 6.7 3.4 10.2zm144 0l-19.8 19.3 4.7 27.3c.8 4.9-4.3 8.6-8.7 6.3L272 210.4l-24.5 12.9c-4.3 2.3-9.5-1.4-8.7-6.3l4.7-27.3-19.8-19.3c-3.6-3.5-1.6-9.5 3.3-10.2l27.4-4 12.2-24.8c2.2-4.5 8.6-4.4 10.7 0l12.2 24.8 27.4 4c5 .7 6.9 6.7 3.4 10.2zm144 0l-19.8 19.3 4.7 27.3c.8 4.9-4.3 8.6-8.7 6.3L416 210.4l-24.5 12.9c-4.3 2.3-9.5-1.4-8.7-6.3l4.7-27.3-19.8-19.3c-3.6-3.5-1.6-9.5 3.3-10.2l27.4-4 12.2-24.8c2.2-4.5 8.6-4.4 10.7 0l12.2 24.8 27.4 4c5 .7 6.9 6.7 3.4 10.2zM624 320h-32c-8.8 0-16 7.2-16 16v64c0 8.8-7.2 16-16 16s-16-7.2-16-16V288H0v176c0 8.8 7.2 16 16 16h96c8.8 0 16-7.2 16-16v-80h192v80c0 8.8 7.2 16 16 16h96c8.8 0 16-7.2 16-16V352h32v43.3c0 41.8 30 80.1 71.6 84.3 47.8 4.9 88.4-32.7 88.4-79.6v-64c0-8.8-7.2-16-16-16z“]},fh={prefix:”fas“,iconName:”restroom“,icon:[640,512,,”f7bd“,”M128 128c35.3 0 64-28.7 64-64S163.3 0 128 0 64 28.7 64 64s28.7 64 64 64zm384 0c35.3 0 64-28.7 64-64S547.3 0 512 0s-64 28.7-64 64 28.7 64 64 64zm127.3 226.5l-45.6-185.8c-3.3-13.5-15.5-23-29.8-24.2-15 9.7-32.8 15.5-52 15.5-19.2 0-37-5.8-52-15.5-14.3 1.2-26.5 10.7-29.8 24.2l-45.6 185.8C381 369.6 393 384 409.2 384H464v104c0 13.3 10.7 24 24 24h48c13.3 0 24-10.7 24-24V384h54.8c16.2 0 28.2-14.4 24.5-29.5zM336 0h-32c-8.8 0-16 7.2-16 16v480c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V16c0-8.8-7.2-16-16-16zM180.1 144.4c-15 9.8-32.9 15.6-52.1 15.6-19.2 0-37.1-5.8-52.1-15.6C51.3 146.5 32 166.9 32 192v136c0 13.3 10.7 24 24 24h8v136c0 13.3 10.7 24 24 24h80c13.3 0 24-10.7 24-24V352h8c13.3 0 24-10.7 24-24V192c0-25.1-19.3-45.5-43.9-47.6z“]},hh={prefix:”fas“,iconName:”retweet“,icon:[640,512,,”f079“,”M629.657 343.598L528.971 444.284c-9.373 9.372-24.568 9.372-33.941 0L394.343 343.598c-9.373-9.373-9.373-24.569 0-33.941l10.823-10.823c9.562-9.562 25.133-9.34 34.419.492L480 342.118V160H292.451a24.005 24.005 0 0 1-16.971-7.029l-16-16C244.361 121.851 255.069 96 276.451 96H520c13.255 0 24 10.745 24 24v222.118l40.416-42.792c9.285-9.831 24.856-10.054 34.419-.492l10.823 10.823c9.372 9.372 9.372 24.569-.001 33.941zm-265.138 15.431A23.999 23.999 0 0 0 347.548 352H160V169.881l40.416 42.792c9.286 9.831 24.856 10.054 34.419.491l10.822-10.822c9.373-9.373 9.373-24.569 0-33.941L144.971 67.716c-9.373-9.373-24.569-9.373-33.941 0L10.343 168.402c-9.373 9.373-9.373 24.569 0 33.941l10.822 10.822c9.562 9.562 25.133 9.34 34.419-.491L96 169.881V392c0 13.255 10.745 24 24 24h243.549c21.382 0 32.09-25.851 16.971-40.971l-16.001-16z“]},dh={prefix:”fas“,iconName:”ribbon“,icon:[448,512,,”f4d6“,”M6.1 444.3c-9.6 10.8-7.5 27.6 4.5 35.7l68.8 27.9c9.9 6.7 23.3 5 31.3-3.8l91.8-101.9-79.2-87.9-117.2 130zm435.8 0s-292-324.6-295.4-330.1c15.4-8.4 40.2-17.9 77.5-17.9s62.1 9.5 77.5 17.9c-3.3 5.6-56 64.6-56 64.6l79.1 87.7 34.2-38c28.7-31.9 33.3-78.6 11.4-115.5l-43.7-73.5c-4.3-7.2-9.9-13.3-16.8-18-40.7-27.6-127.4-29.7-171.4 0-6.9 4.7-12.5 10.8-16.8 18l-43.6 73.2c-1.5 2.5-37.1 62.2 11.5 116L337.5 504c8 8.9 21.4 10.5 31.3 3.8l68.8-27.9c11.9-8 14-24.8 4.3-35.6z“]},ph={prefix:”fas“,iconName:”ring“,icon:[512,512,,”f70b“,”M256 64C110.06 64 0 125.91 0 208v98.13C0 384.48 114.62 448 256 448s256-63.52 256-141.87V208c0-82.09-110.06-144-256-144zm0 64c106.04 0 192 35.82 192 80 0 9.26-3.97 18.12-10.91 26.39C392.15 208.21 328.23 192 256 192s-136.15 16.21-181.09 42.39C67.97 226.12 64 217.26 64 208c0-44.18 85.96-80 192-80zM120.43 264.64C155.04 249.93 201.64 240 256 240s100.96 9.93 135.57 24.64C356.84 279.07 308.93 288 256 288s-100.84-8.93-135.57-23.36z“]},mh={prefix:”fas“,iconName:”road“,icon:[576,512,,”f018“,”M573.19 402.67l-139.79-320C428.43 71.29 417.6 64 405.68 64h-97.59l2.45 23.16c.5 4.72-3.21 8.84-7.96 8.84h-29.16c-4.75 0-8.46-4.12-7.96-8.84L267.91 64h-97.59c-11.93 0-22.76 7.29-27.73 18.67L2.8 402.67C-6.45 423.86 8.31 448 30.54 448h196.84l10.31-97.68c.86-8.14 7.72-14.32 15.91-14.32h68.8c8.19 0 15.05 6.18 15.91 14.32L348.62 448h196.84c22.23 0 36.99-24.14 27.73-45.33zM260.4 135.16a8 8 0 0 1 7.96-7.16h39.29c4.09 0 7.53 3.09 7.96 7.16l4.6 43.58c.75 7.09-4.81 13.26-11.93 13.26h-40.54c-7.13 0-12.68-6.17-11.93-13.26l4.59-43.58zM315.64 304h-55.29c-9.5 0-16.91-8.23-15.91-17.68l5.07-48c.86-8.14 7.72-14.32 15.91-14.32h45.15c8.19 0 15.05 6.18 15.91 14.32l5.07 48c1 9.45-6.41 17.68-15.91 17.68z“]},vh={prefix:”fas“,iconName:”robot“,icon:[640,512,,”f544“,”M32,224H64V416H32A31.96166,31.96166,0,0,1,0,384V256A31.96166,31.96166,0,0,1,32,224Zm512-48V448a64.06328,64.06328,0,0,1-64,64H160a64.06328,64.06328,0,0,1-64-64V176a79.974,79.974,0,0,1,80-80H288V32a32,32,0,0,1,64,0V96H464A79.974,79.974,0,0,1,544,176ZM264,256a40,40,0,1,0-40,40A39.997,39.997,0,0,0,264,256Zm-8,128H192v32h64Zm96,0H288v32h64ZM456,256a40,40,0,1,0-40,40A39.997,39.997,0,0,0,456,256Zm-8,128H384v32h64ZM640,256V384a31.96166,31.96166,0,0,1-32,32H576V224h32A31.96166,31.96166,0,0,1,640,256Z“]},gh={prefix:”fas“,iconName:”rocket“,icon:[512,512,,”f135“,”M505.12019,19.09375c-1.18945-5.53125-6.65819-11-12.207-12.1875C460.716,0,435.507,0,410.40747,0,307.17523,0,245.26909,55.20312,199.05238,128H94.83772c-16.34763.01562-35.55658,11.875-42.88664,26.48438L2.51562,253.29688A28.4,28.4,0,0,0,0,264a24.00867,24.00867,0,0,0,24.00582,24H127.81618l-22.47457,22.46875c-11.36521,11.36133-12.99607,32.25781,0,45.25L156.24582,406.625c11.15623,11.1875,32.15619,13.15625,45.27726,0l22.47457-22.46875V488a24.00867,24.00867,0,0,0,24.00581,24,28.55934,28.55934,0,0,0,10.707-2.51562l98.72834-49.39063c14.62888-7.29687,26.50776-26.5,26.50776-42.85937V312.79688c72.59753-46.3125,128.03493-108.40626,128.03493-211.09376C512.07526,76.5,512.07526,51.29688,505.12019,19.09375ZM384.04033,168A40,40,0,1,1,424.05,128,40.02322,40.02322,0,0,1,384.04033,168Z“]},yh={prefix:”fas“,iconName:”route“,icon:[512,512,,”f4d7“,”M416 320h-96c-17.6 0-32-14.4-32-32s14.4-32 32-32h96s96-107 96-160-43-96-96-96-96 43-96 96c0 25.5 22.2 63.4 45.3 96H320c-52.9 0-96 43.1-96 96s43.1 96 96 96h96c17.6 0 32 14.4 32 32s-14.4 32-32 32H185.5c-16 24.8-33.8 47.7-47.3 64H416c52.9 0 96-43.1 96-96s-43.1-96-96-96zm0-256c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zM96 256c-53 0-96 43-96 96s96 160 96 160 96-107 96-160-43-96-96-96zm0 128c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z“]},bh={prefix:”fas“,iconName:”rss“,icon:[448,512,,”f09e“,”M128.081 415.959c0 35.369-28.672 64.041-64.041 64.041S0 451.328 0 415.959s28.672-64.041 64.041-64.041 64.04 28.673 64.04 64.041zm175.66 47.25c-8.354-154.6-132.185-278.587-286.95-286.95C7.656 175.765 0 183.105 0 192.253v48.069c0 8.415 6.49 15.472 14.887 16.018 111.832 7.284 201.473 96.702 208.772 208.772.547 8.397 7.604 14.887 16.018 14.887h48.069c9.149.001 16.489-7.655 15.995-16.79zm144.249.288C439.596 229.677 251.465 40.445 16.503 32.01 7.473 31.686 0 38.981 0 48.016v48.068c0 8.625 6.835 15.645 15.453 15.999 191.179 7.839 344.627 161.316 352.465 352.465.353 8.618 7.373 15.453 15.999 15.453h48.068c9.034-.001 16.329-7.474 16.005-16.504z“]},wh={prefix:”fas“,iconName:”rss-square“,icon:[448,512,,”f143“,”M400 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48V80c0-26.51-21.49-48-48-48zM112 416c-26.51 0-48-21.49-48-48s21.49-48 48-48 48 21.49 48 48-21.49 48-48 48zm157.533 0h-34.335c-6.011 0-11.051-4.636-11.442-10.634-5.214-80.05-69.243-143.92-149.123-149.123-5.997-.39-10.633-5.431-10.633-11.441v-34.335c0-6.535 5.468-11.777 11.994-11.425 110.546 5.974 198.997 94.536 204.964 204.964.352 6.526-4.89 11.994-11.425 11.994zm103.027 0h-34.334c-6.161 0-11.175-4.882-11.427-11.038-5.598-136.535-115.204-246.161-251.76-251.76C68.882 152.949 64 147.935 64 141.774V107.44c0-6.454 5.338-11.664 11.787-11.432 167.83 6.025 302.21 141.191 308.205 308.205.232 6.449-4.978 11.787-11.432 11.787z“]},xh={prefix:”fas“,iconName:”ruble-sign“,icon:[384,512,,”f158“,”M239.36 320C324.48 320 384 260.542 384 175.071S324.48 32 239.36 32H76c-6.627 0-12 5.373-12 12v206.632H12c-6.627 0-12 5.373-12 12V308c0 6.627 5.373 12 12 12h52v32H12c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h52v52c0 6.627 5.373 12 12 12h58.56c6.627 0 12-5.373 12-12v-52H308c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12H146.56v-32h92.8zm-92.8-219.252h78.72c46.72 0 74.88 29.11 74.88 74.323 0 45.832-28.16 75.561-76.16 75.561h-77.44V100.748z“]},Sh={prefix:”fas“,iconName:”ruler“,icon:[640,512,,”f545“,”M635.7 167.2L556.1 31.7c-8.8-15-28.3-20.1-43.5-11.5l-69 39.1L503.3 161c2.2 3.8.9 8.5-2.9 10.7l-13.8 7.8c-3.8 2.2-8.7.9-10.9-2.9L416 75l-55.2 31.3 27.9 47.4c2.2 3.8.9 8.5-2.9 10.7l-13.8 7.8c-3.8 2.2-8.7.9-10.9-2.9L333.2 122 278 153.3 337.8 255c2.2 3.7.9 8.5-2.9 10.7l-13.8 7.8c-3.8 2.2-8.7.9-10.9-2.9l-59.7-101.7-55.2 31.3 27.9 47.4c2.2 3.8.9 8.5-2.9 10.7l-13.8 7.8c-3.8 2.2-8.7.9-10.9-2.9l-27.9-47.5-55.2 31.3 59.7 101.7c2.2 3.7.9 8.5-2.9 10.7l-13.8 7.8c-3.8 2.2-8.7.9-10.9-2.9L84.9 262.9l-69 39.1C.7 310.7-4.6 329.8 4.2 344.8l79.6 135.6c8.8 15 28.3 20.1 43.5 11.5L624.1 210c15.2-8.6 20.4-27.8 11.6-42.8z“]},kh={prefix:”fas“,iconName:”ruler-combined“,icon:[512,512,,”f546“,”M160 288h-56c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h56v-64h-56c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h56V96h-56c-4.42 0-8-3.58-8-8V72c0-4.42 3.58-8 8-8h56V32c0-17.67-14.33-32-32-32H32C14.33 0 0 14.33 0 32v448c0 2.77.91 5.24 1.57 7.8L160 329.38V288zm320 64h-32v56c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-56h-64v56c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-56h-64v56c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-56h-41.37L24.2 510.43c2.56.66 5.04 1.57 7.8 1.57h448c17.67 0 32-14.33 32-32v-96c0-17.67-14.33-32-32-32z“]},_h={prefix:”fas“,iconName:”ruler-horizontal“,icon:[576,512,,”f547“,”M544 128h-48v88c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-88h-64v88c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-88h-64v88c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-88h-64v88c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-88h-64v88c0 4.42-3.58 8-8 8H88c-4.42 0-8-3.58-8-8v-88H32c-17.67 0-32 14.33-32 32v192c0 17.67 14.33 32 32 32h512c17.67 0 32-14.33 32-32V160c0-17.67-14.33-32-32-32z“]},zh={prefix:”fas“,iconName:”ruler-vertical“,icon:[256,512,,”f548“,”M168 416c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h88v-64h-88c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h88v-64h-88c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h88v-64h-88c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h88V32c0-17.67-14.33-32-32-32H32C14.33 0 0 14.33 0 32v448c0 17.67 14.33 32 32 32h192c17.67 0 32-14.33 32-32v-64h-88z“]},Ch={prefix:”fas“,iconName:”running“,icon:[416,512,,”f70c“,”M272 96c26.51 0 48-21.49 48-48S298.51 0 272 0s-48 21.49-48 48 21.49 48 48 48zM113.69 317.47l-14.8 34.52H32c-17.67 0-32 14.33-32 32s14.33 32 32 32h77.45c19.25 0 36.58-11.44 44.11-29.09l8.79-20.52-10.67-6.3c-17.32-10.23-30.06-25.37-37.99-42.61zM384 223.99h-44.03l-26.06-53.25c-12.5-25.55-35.45-44.23-61.78-50.94l-71.08-21.14c-28.3-6.8-57.77-.55-80.84 17.14l-39.67 30.41c-14.03 10.75-16.69 30.83-5.92 44.86s30.84 16.66 44.86 5.92l39.69-30.41c7.67-5.89 17.44-8 25.27-6.14l14.7 4.37-37.46 87.39c-12.62 29.48-1.31 64.01 26.3 80.31l84.98 50.17-27.47 87.73c-5.28 16.86 4.11 34.81 20.97 40.09 3.19 1 6.41 1.48 9.58 1.48 13.61 0 26.23-8.77 30.52-22.45l31.64-101.06c5.91-20.77-2.89-43.08-21.64-54.39l-61.24-36.14 31.31-78.28 20.27 41.43c8 16.34 24.92 26.89 43.11 26.89H384c17.67 0 32-14.33 32-32s-14.33-31.99-32-31.99z“]},Mh={prefix:”fas“,iconName:”rupee-sign“,icon:[320,512,,”f156“,”M308 96c6.627 0 12-5.373 12-12V44c0-6.627-5.373-12-12-12H12C5.373 32 0 37.373 0 44v44.748c0 6.627 5.373 12 12 12h85.28c27.308 0 48.261 9.958 60.97 27.252H12c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h158.757c-6.217 36.086-32.961 58.632-74.757 58.632H12c-6.627 0-12 5.373-12 12v53.012c0 3.349 1.4 6.546 3.861 8.818l165.052 152.356a12.001 12.001 0 0 0 8.139 3.182h82.562c10.924 0 16.166-13.408 8.139-20.818L116.871 319.906c76.499-2.34 131.144-53.395 138.318-127.906H308c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-58.69c-3.486-11.541-8.28-22.246-14.252-32H308z“]},Oh={prefix:”fas“,iconName:”sad-cry“,icon:[496,512,,”f5b3“,”M248 8C111 8 0 119 0 256c0 90.1 48.2 168.7 120 212.1V288c0-8.8 7.2-16 16-16s16 7.2 16 16v196.7c29.5 12.4 62 19.3 96 19.3s66.5-6.9 96-19.3V288c0-8.8 7.2-16 16-16s16 7.2 16 16v180.1C447.8 424.7 496 346 496 256 496 119 385 8 248 8zm-65.5 216.5c-14.8-13.2-46.2-13.2-61 0L112 233c-3.8 3.3-9.3 4-13.7 1.6-4.4-2.4-6.9-7.4-6.1-12.4 4-25.2 34.2-42.1 59.9-42.1S208 197 212 222.2c.8 5-1.7 10-6.1 12.4-5.8 3.1-11.2.7-13.7-1.6l-9.7-8.5zM248 416c-26.5 0-48-28.7-48-64s21.5-64 48-64 48 28.7 48 64-21.5 64-48 64zm149.8-181.5c-5.8 3.1-11.2.7-13.7-1.6l-9.5-8.5c-14.8-13.2-46.2-13.2-61 0L304 233c-3.8 3.3-9.3 4-13.7 1.6-4.4-2.4-6.9-7.4-6.1-12.4 4-25.2 34.2-42.1 59.9-42.1S400 197 404 222.2c.6 4.9-1.8 9.9-6.2 12.3z“]},Th={prefix:”fas“,iconName:”sad-tear“,icon:[496,512,,”f5b4“,”M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm80 168c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zM152 416c-26.5 0-48-21-48-47 0-20 28.5-60.4 41.6-77.8 3.2-4.3 9.6-4.3 12.8 0C171.5 308.6 200 349 200 369c0 26-21.5 47-48 47zm16-176c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm170.2 154.2C315.8 367.4 282.9 352 248 352c-21.2 0-21.2-32 0-32 44.4 0 86.3 19.6 114.7 53.8 13.8 16.4-11.2 36.5-24.5 20.4z“]},Eh={prefix:”fas“,iconName:”satellite“,icon:[512,512,,”f7bf“,”M502.60969,310.04206l-96.70393,96.71625a31.88151,31.88151,0,0,1-45.00765,0L280.572,326.34115l-9.89231,9.90759a190.56343,190.56343,0,0,1-5.40716,168.52287c-4.50077,8.50115-16.39342,9.59505-23.20707,2.79725L134.54715,400.05428l-17.7999,17.79929c.70324,2.60972,1.60965,5.00067,1.60965,7.79793a32.00544,32.00544,0,1,1-32.00544-32.00434c2.79735,0,5.18838.90637,7.7982,1.60959l17.7999-17.79929L4.43129,269.94287c-6.798-6.81342-5.70409-18.6119,2.79735-23.20627a190.58161,190.58161,0,0,1,168.52864-5.407l9.79854-9.79821-80.31053-80.41716a32.002,32.002,0,0,1,0-45.09987L201.96474,9.29814A31.62639,31.62639,0,0,1,224.46868,0a31.99951,31.99951,0,0,1,22.59759,9.29814l80.32615,80.30777,47.805-47.89713a33.6075,33.6075,0,0,1,47.50808,0l47.50807,47.50645a33.63308,33.63308,0,0,1,0,47.50644l-47.805,47.89713L502.71908,265.036A31.78938,31.78938,0,0,1,502.60969,310.04206ZM219.56159,197.433l73.82505-73.82252-68.918-68.9-73.80942,73.80689Zm237.74352,90.106-68.90233-68.9156-73.825,73.82252,68.918,68.9Z“]},Lh={prefix:”fas“,iconName:”satellite-dish“,icon:[512,512,,”f7c0“,”M305.44954,462.59c7.39157,7.29792,6.18829,20.09661-3.00038,25.00356-77.713,41.80281-176.72559,29.9105-242.34331-35.7082C-5.49624,386.28227-17.404,287.362,24.41381,209.554c4.89125-9.095,17.68975-10.29834,25.00318-3.00043L166.22872,323.36708l27.39411-27.39452c-.68759-2.60974-1.594-5.00071-1.594-7.81361a32.00407,32.00407,0,1,1,32.00407,32.00455c-2.79723,0-5.20378-.89075-7.79786-1.594l-27.40974,27.41015ZM511.9758,303.06732a16.10336,16.10336,0,0,1-16.002,17.00242H463.86031a15.96956,15.96956,0,0,1-15.89265-15.00213C440.46671,175.5492,336.45348,70.53427,207.03078,63.53328a15.84486,15.84486,0,0,1-15.00191-15.90852V16.02652A16.09389,16.09389,0,0,1,209.031.02425C372.25491,8.61922,503.47472,139.841,511.9758,303.06732Zm-96.01221-.29692a16.21093,16.21093,0,0,1-16.11142,17.29934H367.645a16.06862,16.06862,0,0,1-15.89265-14.70522c-6.90712-77.01094-68.118-138.91037-144.92467-145.22376a15.94,15.94,0,0,1-14.79876-15.89289V112.13393a16.134,16.134,0,0,1,17.29908-16.096C319.45132,104.5391,407.55627,192.64538,415.96359,302.7704Z“]},Ah={prefix:”fas“,iconName:”save“,icon:[448,512,,”f0c7“,”M433.941 129.941l-83.882-83.882A48 48 0 0 0 316.118 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48V163.882a48 48 0 0 0-14.059-33.941zM224 416c-35.346 0-64-28.654-64-64 0-35.346 28.654-64 64-64s64 28.654 64 64c0 35.346-28.654 64-64 64zm96-304.52V212c0 6.627-5.373 12-12 12H76c-6.627 0-12-5.373-12-12V108c0-6.627 5.373-12 12-12h228.52c3.183 0 6.235 1.264 8.485 3.515l3.48 3.48A11.996 11.996 0 0 1 320 111.48z“]},Rh={prefix:”fas“,iconName:”school“,icon:[640,512,,”f549“,”M0 224v272c0 8.84 7.16 16 16 16h80V192H32c-17.67 0-32 14.33-32 32zm360-48h-24v-40c0-4.42-3.58-8-8-8h-16c-4.42 0-8 3.58-8 8v64c0 4.42 3.58 8 8 8h48c4.42 0 8-3.58 8-8v-16c0-4.42-3.58-8-8-8zm137.75-63.96l-160-106.67a32.02 32.02 0 0 0-35.5 0l-160 106.67A32.002 32.002 0 0 0 128 138.66V512h128V368c0-8.84 7.16-16 16-16h96c8.84 0 16 7.16 16 16v144h128V138.67c0-10.7-5.35-20.7-14.25-26.63zM320 256c-44.18 0-80-35.82-80-80s35.82-80 80-80 80 35.82 80 80-35.82 80-80 80zm288-64h-64v320h80c8.84 0 16-7.16 16-16V224c0-17.67-14.33-32-32-32z“]},Nh={prefix:”fas“,iconName:”screwdriver“,icon:[512,512,,”f54a“,”M448 0L320 96v62.06l-83.03 83.03c6.79 4.25 13.27 9.06 19.07 14.87 5.8 5.8 10.62 12.28 14.87 19.07L353.94 192H416l96-128-64-64zM128 278.59L10.92 395.67c-14.55 14.55-14.55 38.15 0 52.71l52.7 52.7c14.56 14.56 38.15 14.56 52.71 0L233.41 384c29.11-29.11 29.11-76.3 0-105.41s-76.3-29.11-105.41 0z“]},Hh={prefix:”fas“,iconName:”scroll“,icon:[640,512,,”f70e“,”M48 0C21.53 0 0 21.53 0 48v64c0 8.84 7.16 16 16 16h80V48C96 21.53 74.47 0 48 0zm208 412.57V352h288V96c0-52.94-43.06-96-96-96H111.59C121.74 13.41 128 29.92 128 48v368c0 38.87 34.65 69.65 74.75 63.12C234.22 474 256 444.46 256 412.57zM288 384v32c0 52.93-43.06 96-96 96h336c61.86 0 112-50.14 112-112 0-8.84-7.16-16-16-16H288z“]},Ph={prefix:”fas“,iconName:”sd-card“,icon:[384,512,,”f7c2“,”M320 0H128L0 128v320c0 35.3 28.7 64 64 64h256c35.3 0 64-28.7 64-64V64c0-35.3-28.7-64-64-64zM160 160h-48V64h48v96zm80 0h-48V64h48v96zm80 0h-48V64h48v96z“]},jh={prefix:”fas“,iconName:”search“,icon:[512,512,,”f002“,”M505 442.7L405.3 343c-4.5-4.5-10.6-7-17-7H372c27.6-35.3 44-79.7 44-128C416 93.1 322.9 0 208 0S0 93.1 0 208s93.1 208 208 208c48.3 0 92.7-16.4 128-44v16.3c0 6.4 2.5 12.5 7 17l99.7 99.7c9.4 9.4 24.6 9.4 33.9 0l28.3-28.3c9.4-9.4 9.4-24.6.1-34zM208 336c-70.7 0-128-57.2-128-128 0-70.7 57.2-128 128-128 70.7 0 128 57.2 128 128 0 70.7-57.2 128-128 128z“]},Vh={prefix:”fas“,iconName:”search-dollar“,icon:[512,512,,”f688“,”M505.04 442.66l-99.71-99.69c-4.5-4.5-10.6-7-17-7h-16.3c27.6-35.3 44-79.69 44-127.99C416.03 93.09 322.92 0 208.02 0S0 93.09 0 207.98s93.11 207.98 208.02 207.98c48.3 0 92.71-16.4 128.01-44v16.3c0 6.4 2.5 12.5 7 17l99.71 99.69c9.4 9.4 24.6 9.4 33.9 0l28.3-28.3c9.4-9.4 9.4-24.59.1-33.99zm-297.02-90.7c-79.54 0-144-64.34-144-143.98 0-79.53 64.35-143.98 144-143.98 79.54 0 144 64.34 144 143.98 0 79.53-64.35 143.98-144 143.98zm27.11-152.54l-45.01-13.5c-5.16-1.55-8.77-6.78-8.77-12.73 0-7.27 5.3-13.19 11.8-13.19h28.11c4.56 0 8.96 1.29 12.82 3.72 3.24 2.03 7.36 1.91 10.13-.73l11.75-11.21c3.53-3.37 3.33-9.21-.57-12.14-9.1-6.83-20.08-10.77-31.37-11.35V112c0-4.42-3.58-8-8-8h-16c-4.42 0-8 3.58-8 8v16.12c-23.63.63-42.68 20.55-42.68 45.07 0 19.97 12.99 37.81 31.58 43.39l45.01 13.5c5.16 1.55 8.77 6.78 8.77 12.73 0 7.27-5.3 13.19-11.8 13.19h-28.1c-4.56 0-8.96-1.29-12.82-3.72-3.24-2.03-7.36-1.91-10.13.73l-11.75 11.21c-3.53 3.37-3.33 9.21.57 12.14 9.1 6.83 20.08 10.77 31.37 11.35V304c0 4.42 3.58 8 8 8h16c4.42 0 8-3.58 8-8v-16.12c23.63-.63 42.68-20.54 42.68-45.07 0-19.97-12.99-37.81-31.59-43.39z“]},Dh={prefix:”fas“,iconName:”search-location“,icon:[512,512,,”f689“,”M505.04 442.66l-99.71-99.69c-4.5-4.5-10.6-7-17-7h-16.3c27.6-35.3 44-79.69 44-127.99C416.03 93.09 322.92 0 208.02 0S0 93.09 0 207.98s93.11 207.98 208.02 207.98c48.3 0 92.71-16.4 128.01-44v16.3c0 6.4 2.5 12.5 7 17l99.71 99.69c9.4 9.4 24.6 9.4 33.9 0l28.3-28.3c9.4-9.4 9.4-24.59.1-33.99zm-297.02-90.7c-79.54 0-144-64.34-144-143.98 0-79.53 64.35-143.98 144-143.98 79.54 0 144 64.34 144 143.98 0 79.53-64.35 143.98-144 143.98zm.02-239.96c-40.78 0-73.84 33.05-73.84 73.83 0 32.96 48.26 93.05 66.75 114.86a9.24 9.24 0 0 0 14.18 0c18.49-21.81 66.75-81.89 66.75-114.86 0-40.78-33.06-73.83-73.84-73.83zm0 96c-13.26 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24z“]},Ih={prefix:”fas“,iconName:”search-minus“,icon:[512,512,,”f010“,”M304 192v32c0 6.6-5.4 12-12 12H124c-6.6 0-12-5.4-12-12v-32c0-6.6 5.4-12 12-12h168c6.6 0 12 5.4 12 12zm201 284.7L476.7 505c-9.4 9.4-24.6 9.4-33.9 0L343 405.3c-4.5-4.5-7-10.6-7-17V372c-35.3 27.6-79.7 44-128 44C93.1 416 0 322.9 0 208S93.1 0 208 0s208 93.1 208 208c0 48.3-16.4 92.7-44 128h16.3c6.4 0 12.5 2.5 17 7l99.7 99.7c9.3 9.4 9.3 24.6 0 34zM344 208c0-75.2-60.8-136-136-136S72 132.8 72 208s60.8 136 136 136 136-60.8 136-136z“]},Fh={prefix:”fas“,iconName:”search-plus“,icon:[512,512,,”f00e“,”M304 192v32c0 6.6-5.4 12-12 12h-56v56c0 6.6-5.4 12-12 12h-32c-6.6 0-12-5.4-12-12v-56h-56c-6.6 0-12-5.4-12-12v-32c0-6.6 5.4-12 12-12h56v-56c0-6.6 5.4-12 12-12h32c6.6 0 12 5.4 12 12v56h56c6.6 0 12 5.4 12 12zm201 284.7L476.7 505c-9.4 9.4-24.6 9.4-33.9 0L343 405.3c-4.5-4.5-7-10.6-7-17V372c-35.3 27.6-79.7 44-128 44C93.1 416 0 322.9 0 208S93.1 0 208 0s208 93.1 208 208c0 48.3-16.4 92.7-44 128h16.3c6.4 0 12.5 2.5 17 7l99.7 99.7c9.3 9.4 9.3 24.6 0 34zM344 208c0-75.2-60.8-136-136-136S72 132.8 72 208s60.8 136 136 136 136-60.8 136-136z“]},Bh={prefix:”fas“,iconName:”seedling“,icon:[512,512,,”f4d8“,”M64 96H0c0 123.7 100.3 224 224 224v144c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V320C288 196.3 187.7 96 64 96zm384-64c-84.2 0-157.4 46.5-195.7 115.2 27.7 30.2 48.2 66.9 59 107.6C424 243.1 512 147.9 512 32h-64z“]},Uh={prefix:”fas“,iconName:”server“,icon:[512,512,,”f233“,”M480 160H32c-17.673 0-32-14.327-32-32V64c0-17.673 14.327-32 32-32h448c17.673 0 32 14.327 32 32v64c0 17.673-14.327 32-32 32zm-48-88c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24zm-64 0c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24zm112 248H32c-17.673 0-32-14.327-32-32v-64c0-17.673 14.327-32 32-32h448c17.673 0 32 14.327 32 32v64c0 17.673-14.327 32-32 32zm-48-88c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24zm-64 0c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24zm112 248H32c-17.673 0-32-14.327-32-32v-64c0-17.673 14.327-32 32-32h448c17.673 0 32 14.327 32 32v64c0 17.673-14.327 32-32 32zm-48-88c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24zm-64 0c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24z“]},qh={prefix:”fas“,iconName:”shapes“,icon:[512,512,,”f61f“,”M128,256A128,128,0,1,0,256,384,128,128,0,0,0,128,256Zm379-54.86L400.07,18.29a37.26,37.26,0,0,0-64.14,0L229,201.14C214.76,225.52,232.58,256,261.09,256H474.91C503.42,256,521.24,225.52,507,201.14ZM480,288H320a32,32,0,0,0-32,32V480a32,32,0,0,0,32,32H480a32,32,0,0,0,32-32V320A32,32,0,0,0,480,288Z“]},Gh={prefix:”fas“,iconName:”share“,icon:[512,512,,”f064“,”M503.691 189.836L327.687 37.851C312.281 24.546 288 35.347 288 56.015v80.053C127.371 137.907 0 170.1 0 322.326c0 61.441 39.581 122.309 83.333 154.132 13.653 9.931 33.111-2.533 28.077-18.631C66.066 312.814 132.917 274.316 288 272.085V360c0 20.7 24.3 31.453 39.687 18.164l176.004-152c11.071-9.562 11.086-26.753 0-36.328z“]},Wh={prefix:”fas“,iconName:”share-alt“,icon:[448,512,,”f1e0“,”M352 320c-22.608 0-43.387 7.819-59.79 20.895l-102.486-64.054a96.551 96.551 0 0 0 0-41.683l102.486-64.054C308.613 184.181 329.392 192 352 192c53.019 0 96-42.981 96-96S405.019 0 352 0s-96 42.981-96 96c0 7.158.79 14.13 2.276 20.841L155.79 180.895C139.387 167.819 118.608 160 96 160c-53.019 0-96 42.981-96 96s42.981 96 96 96c22.608 0 43.387-7.819 59.79-20.895l102.486 64.054A96.301 96.301 0 0 0 256 416c0 53.019 42.981 96 96 96s96-42.981 96-96-42.981-96-96-96z“]},Zh={prefix:”fas“,iconName:”share-alt-square“,icon:[448,512,,”f1e1“,”M448 80v352c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V80c0-26.51 21.49-48 48-48h352c26.51 0 48 21.49 48 48zM304 296c-14.562 0-27.823 5.561-37.783 14.671l-67.958-40.775a56.339 56.339 0 0 0 0-27.793l67.958-40.775C276.177 210.439 289.438 216 304 216c30.928 0 56-25.072 56-56s-25.072-56-56-56-56 25.072-56 56c0 4.797.605 9.453 1.74 13.897l-67.958 40.775C171.823 205.561 158.562 200 144 200c-30.928 0-56 25.072-56 56s25.072 56 56 56c14.562 0 27.823-5.561 37.783-14.671l67.958 40.775a56.088 56.088 0 0 0-1.74 13.897c0 30.928 25.072 56 56 56s56-25.072 56-56C360 321.072 334.928 296 304 296z“]},$h={prefix:”fas“,iconName:”share-square“,icon:[576,512,,”f14d“,”M568.482 177.448L424.479 313.433C409.3 327.768 384 317.14 384 295.985v-71.963c-144.575.97-205.566 35.113-164.775 171.353 4.483 14.973-12.846 26.567-25.006 17.33C155.252 383.105 120 326.488 120 269.339c0-143.937 117.599-172.5 264-173.312V24.012c0-21.174 25.317-31.768 40.479-17.448l144.003 135.988c10.02 9.463 10.028 25.425 0 34.896zM384 379.128V448H64V128h50.916a11.99 11.99 0 0 0 8.648-3.693c14.953-15.568 32.237-27.89 51.014-37.676C185.708 80.83 181.584 64 169.033 64H48C21.49 64 0 85.49 0 112v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48v-88.806c0-8.288-8.197-14.066-16.011-11.302a71.83 71.83 0 0 1-34.189 3.377c-7.27-1.046-13.8 4.514-13.8 11.859z“]},Jh={prefix:”fas“,iconName:”shekel-sign“,icon:[448,512,,”f20b“,”M248 168v168c0 8.84 7.16 16 16 16h48c8.84 0 16-7.16 16-16V168c0-75.11-60.89-136-136-136H24C10.75 32 0 42.74 0 56v408c0 8.84 7.16 16 16 16h48c8.84 0 16-7.16 16-16V112h112c30.93 0 56 25.07 56 56zM432 32h-48c-8.84 0-16 7.16-16 16v296c0 30.93-25.07 56-56 56H200V176c0-8.84-7.16-16-16-16h-48c-8.84 0-16 7.16-16 16v280c0 13.25 10.75 24 24 24h168c75.11 0 136-60.89 136-136V48c0-8.84-7.16-16-16-16z“]},Kh={prefix:”fas“,iconName:”shield-alt“,icon:[512,512,,”f3ed“,”M466.5 83.7l-192-80a48.15 48.15 0 0 0-36.9 0l-192 80C27.7 91.1 16 108.6 16 128c0 198.5 114.5 335.7 221.5 380.3 11.8 4.9 25.1 4.9 36.9 0C360.1 472.6 496 349.3 496 128c0-19.4-11.7-36.9-29.5-44.3zM256.1 446.3l-.1-381 175.9 73.3c-3.3 151.4-82.1 261.1-175.8 307.7z“]},Qh={prefix:”fas“,iconName:”shield-virus“,icon:[512,512,,”e06c“,”M224,192a16,16,0,1,0,16,16A16,16,0,0,0,224,192ZM466.5,83.68l-192-80A57.4,57.4,0,0,0,256.05,0a57.4,57.4,0,0,0-18.46,3.67l-192,80A47.93,47.93,0,0,0,16,128C16,326.5,130.5,463.72,237.5,508.32a48.09,48.09,0,0,0,36.91,0C360.09,472.61,496,349.3,496,128A48,48,0,0,0,466.5,83.68ZM384,256H371.88c-28.51,0-42.79,34.47-22.63,54.63l8.58,8.57a16,16,0,1,1-22.63,22.63l-8.57-8.58C306.47,313.09,272,327.37,272,355.88V368a16,16,0,0,1-32,0V355.88c0-28.51-34.47-42.79-54.63-22.63l-8.57,8.58a16,16,0,0,1-22.63-22.63l8.58-8.57c20.16-20.16,5.88-54.63-22.63-54.63H128a16,16,0,0,1,0-32h12.12c28.51,0,42.79-34.47,22.63-54.63l-8.58-8.57a16,16,0,0,1,22.63-22.63l8.57,8.58c20.16,20.16,54.63,5.88,54.63-22.63V112a16,16,0,0,1,32,0v12.12c0,28.51,34.47,42.79,54.63,22.63l8.57-8.58a16,16,0,0,1,22.63,22.63l-8.58,8.57C329.09,189.53,343.37,224,371.88,224H384a16,16,0,0,1,0,32Zm-96,0a16,16,0,1,0,16,16A16,16,0,0,0,288,256Z“]},Yh={prefix:”fas“,iconName:”ship“,icon:[640,512,,”f21a“,”M496.616 372.639l70.012-70.012c16.899-16.9 9.942-45.771-12.836-53.092L512 236.102V96c0-17.673-14.327-32-32-32h-64V24c0-13.255-10.745-24-24-24H248c-13.255 0-24 10.745-24 24v40h-64c-17.673 0-32 14.327-32 32v140.102l-41.792 13.433c-22.753 7.313-29.754 36.173-12.836 53.092l70.012 70.012C125.828 416.287 85.587 448 24 448c-13.255 0-24 10.745-24 24v16c0 13.255 10.745 24 24 24 61.023 0 107.499-20.61 143.258-59.396C181.677 487.432 216.021 512 256 512h128c39.979 0 74.323-24.568 88.742-59.396C508.495 491.384 554.968 512 616 512c13.255 0 24-10.745 24-24v-16c0-13.255-10.745-24-24-24-60.817 0-101.542-31.001-119.384-75.361zM192 128h256v87.531l-118.208-37.995a31.995 31.995 0 0 0-19.584 0L192 215.531V128z“]},Xh={prefix:”fas“,iconName:”shipping-fast“,icon:[640,512,,”f48b“,”M624 352h-16V243.9c0-12.7-5.1-24.9-14.1-33.9L494 110.1c-9-9-21.2-14.1-33.9-14.1H416V48c0-26.5-21.5-48-48-48H112C85.5 0 64 21.5 64 48v48H8c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8h272c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H40c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8h208c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H8c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8h208c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H64v128c0 53 43 96 96 96s96-43 96-96h128c0 53 43 96 96 96s96-43 96-96h48c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zM160 464c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm320 0c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm80-208H416V144h44.1l99.9 99.9V256z“]},ed={prefix:”fas“,iconName:”shoe-prints“,icon:[640,512,,”f54b“,”M192 160h32V32h-32c-35.35 0-64 28.65-64 64s28.65 64 64 64zM0 416c0 35.35 28.65 64 64 64h32V352H64c-35.35 0-64 28.65-64 64zm337.46-128c-34.91 0-76.16 13.12-104.73 32-24.79 16.38-44.52 32-104.73 32v128l57.53 15.97c26.21 7.28 53.01 13.12 80.31 15.05 32.69 2.31 65.6.67 97.58-6.2C472.9 481.3 512 429.22 512 384c0-64-84.18-96-174.54-96zM491.42 7.19C459.44.32 426.53-1.33 393.84.99c-27.3 1.93-54.1 7.77-80.31 15.04L256 32v128c60.2 0 79.94 15.62 104.73 32 28.57 18.88 69.82 32 104.73 32C555.82 224 640 192 640 128c0-45.22-39.1-97.3-148.58-120.81z“]},td={prefix:”fas“,iconName:”shopping-bag“,icon:[448,512,,”f290“,”M352 160v-32C352 57.42 294.579 0 224 0 153.42 0 96 57.42 96 128v32H0v272c0 44.183 35.817 80 80 80h288c44.183 0 80-35.817 80-80V160h-96zm-192-32c0-35.29 28.71-64 64-64s64 28.71 64 64v32H160v-32zm160 120c-13.255 0-24-10.745-24-24s10.745-24 24-24 24 10.745 24 24-10.745 24-24 24zm-192 0c-13.255 0-24-10.745-24-24s10.745-24 24-24 24 10.745 24 24-10.745 24-24 24z“]},nd={prefix:”fas“,iconName:”shopping-basket“,icon:[576,512,,”f291“,”M576 216v16c0 13.255-10.745 24-24 24h-8l-26.113 182.788C514.509 462.435 494.257 480 470.37 480H105.63c-23.887 0-44.139-17.565-47.518-41.212L32 256h-8c-13.255 0-24-10.745-24-24v-16c0-13.255 10.745-24 24-24h67.341l106.78-146.821c10.395-14.292 30.407-17.453 44.701-7.058 14.293 10.395 17.453 30.408 7.058 44.701L170.477 192h235.046L326.12 82.821c-10.395-14.292-7.234-34.306 7.059-44.701 14.291-10.395 34.306-7.235 44.701 7.058L484.659 192H552c13.255 0 24 10.745 24 24zM312 392V280c0-13.255-10.745-24-24-24s-24 10.745-24 24v112c0 13.255 10.745 24 24 24s24-10.745 24-24zm112 0V280c0-13.255-10.745-24-24-24s-24 10.745-24 24v112c0 13.255 10.745 24 24 24s24-10.745 24-24zm-224 0V280c0-13.255-10.745-24-24-24s-24 10.745-24 24v112c0 13.255 10.745 24 24 24s24-10.745 24-24z“]},rd={prefix:”fas“,iconName:”shopping-cart“,icon:[576,512,,”f07a“,”M528.12 301.319l47.273-208C578.806 78.301 567.391 64 551.99 64H159.208l-9.166-44.81C147.758 8.021 137.93 0 126.529 0H24C10.745 0 0 10.745 0 24v16c0 13.255 10.745 24 24 24h69.883l70.248 343.435C147.325 417.1 136 435.222 136 456c0 30.928 25.072 56 56 56s56-25.072 56-56c0-15.674-6.447-29.835-16.824-40h209.647C430.447 426.165 424 440.326 424 456c0 30.928 25.072 56 56 56s56-25.072 56-56c0-22.172-12.888-41.332-31.579-50.405l5.517-24.276c3.413-15.018-8.002-29.319-23.403-29.319H218.117l-6.545-32h293.145c11.206 0 20.92-7.754 23.403-18.681z“]},id={prefix:”fas“,iconName:”shower“,icon:[512,512,,”f2cc“,”M304,320a16,16,0,1,0,16,16A16,16,0,0,0,304,320Zm32-96a16,16,0,1,0,16,16A16,16,0,0,0,336,224Zm32,64a16,16,0,1,0-16-16A16,16,0,0,0,368,288Zm-32,32a16,16,0,1,0-16-16A16,16,0,0,0,336,320Zm-32-64a16,16,0,1,0,16,16A16,16,0,0,0,304,256Zm128-32a16,16,0,1,0-16-16A16,16,0,0,0,432,224Zm-48,16a16,16,0,1,0,16-16A16,16,0,0,0,384,240Zm-16-48a16,16,0,1,0,16,16A16,16,0,0,0,368,192Zm96,32a16,16,0,1,0,16,16A16,16,0,0,0,464,224Zm32-32a16,16,0,1,0,16,16A16,16,0,0,0,496,192Zm-64,64a16,16,0,1,0,16,16A16,16,0,0,0,432,256Zm-32,32a16,16,0,1,0,16,16A16,16,0,0,0,400,288Zm-64,64a16,16,0,1,0,16,16A16,16,0,0,0,336,352Zm-32,32a16,16,0,1,0,16,16A16,16,0,0,0,304,384Zm64-64a16,16,0,1,0,16,16A16,16,0,0,0,368,320Zm21.65-218.35-11.3-11.31a16,16,0,0,0-22.63,0L350.05,96A111.19,111.19,0,0,0,272,64c-19.24,0-37.08,5.3-52.9,13.85l-10-10A121.72,121.72,0,0,0,123.44,32C55.49,31.5,0,92.91,0,160.85V464a16,16,0,0,0,16,16H48a16,16,0,0,0,16-16V158.4c0-30.15,21-58.2,51-61.93a58.38,58.38,0,0,1,48.93,16.67l10,10C165.3,138.92,160,156.76,160,176a111.23,111.23,0,0,0,32,78.05l-5.66,5.67a16,16,0,0,0,0,22.62l11.3,11.31a16,16,0,0,0,22.63,0L389.65,124.28A16,16,0,0,0,389.65,101.65Z“]},ad={prefix:”fas“,iconName:”shuttle-van“,icon:[640,512,,”f5b6“,”M628.88 210.65L494.39 49.27A48.01 48.01 0 0 0 457.52 32H32C14.33 32 0 46.33 0 64v288c0 17.67 14.33 32 32 32h32c0 53.02 42.98 96 96 96s96-42.98 96-96h128c0 53.02 42.98 96 96 96s96-42.98 96-96h32c17.67 0 32-14.33 32-32V241.38c0-11.23-3.94-22.1-11.12-30.73zM64 192V96h96v96H64zm96 240c-26.51 0-48-21.49-48-48s21.49-48 48-48 48 21.49 48 48-21.49 48-48 48zm160-240h-96V96h96v96zm160 240c-26.51 0-48-21.49-48-48s21.49-48 48-48 48 21.49 48 48-21.49 48-48 48zm-96-240V96h66.02l80 96H384z“]},od={prefix:”fas“,iconName:”sign“,icon:[512,512,,”f4d9“,”M496 64H128V16c0-8.8-7.2-16-16-16H80c-8.8 0-16 7.2-16 16v48H16C7.2 64 0 71.2 0 80v32c0 8.8 7.2 16 16 16h48v368c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V128h368c8.8 0 16-7.2 16-16V80c0-8.8-7.2-16-16-16zM160 384h320V160H160v224z“]},cd={prefix:”fas“,iconName:”sign-in-alt“,icon:[512,512,,”f2f6“,”M416 448h-84c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h84c17.7 0 32-14.3 32-32V160c0-17.7-14.3-32-32-32h-84c-6.6 0-12-5.4-12-12V76c0-6.6 5.4-12 12-12h84c53 0 96 43 96 96v192c0 53-43 96-96 96zm-47-201L201 79c-15-15-41-4.5-41 17v96H24c-13.3 0-24 10.7-24 24v96c0 13.3 10.7 24 24 24h136v96c0 21.5 26 32 41 17l168-168c9.3-9.4 9.3-24.6 0-34z“]},sd={prefix:”fas“,iconName:”sign-language“,icon:[448,512,,”f2a7“,”M91.434 483.987c-.307-16.018 13.109-29.129 29.13-29.129h62.293v-5.714H56.993c-16.021 0-29.437-13.111-29.13-29.129C28.16 404.491 40.835 392 56.428 392h126.429v-5.714H29.136c-16.021 0-29.437-13.111-29.13-29.129.297-15.522 12.973-28.013 28.566-28.013h154.286v-5.714H57.707c-16.021 0-29.437-13.111-29.13-29.129.297-15.522 12.973-28.013 28.566-28.013h168.566l-31.085-22.606c-12.762-9.281-15.583-27.149-6.302-39.912 9.281-12.761 27.15-15.582 39.912-6.302l123.361 89.715a34.287 34.287 0 0 1 14.12 27.728v141.136c0 15.91-10.946 29.73-26.433 33.374l-80.471 18.934a137.16 137.16 0 0 1-31.411 3.646H120c-15.593-.001-28.269-12.492-28.566-28.014zm73.249-225.701h36.423l-11.187-8.136c-18.579-13.511-20.313-40.887-3.17-56.536l-13.004-16.7c-9.843-12.641-28.43-15.171-40.88-5.088-12.065 9.771-14.133 27.447-4.553 39.75l36.371 46.71zm283.298-2.103l-5.003-152.452c-.518-15.771-13.722-28.136-29.493-27.619-15.773.518-28.137 13.722-27.619 29.493l1.262 38.415L283.565 11.019c-9.58-12.303-27.223-14.63-39.653-5.328-12.827 9.599-14.929 28.24-5.086 40.881l76.889 98.745-4.509 3.511-94.79-121.734c-9.58-12.303-27.223-14.63-39.653-5.328-12.827 9.599-14.929 28.24-5.086 40.881l94.443 121.288-4.509 3.511-77.675-99.754c-9.58-12.303-27.223-14.63-39.653-5.328-12.827 9.599-14.929 28.24-5.086 40.881l52.053 66.849c12.497-8.257 29.055-8.285 41.69.904l123.36 89.714c10.904 7.93 17.415 20.715 17.415 34.198v16.999l61.064-47.549a34.285 34.285 0 0 0 13.202-28.177z“]},ud={prefix:”fas“,iconName:”sign-out-alt“,icon:[512,512,,”f2f5“,”M497 273L329 441c-15 15-41 4.5-41-17v-96H152c-13.3 0-24-10.7-24-24v-96c0-13.3 10.7-24 24-24h136V88c0-21.4 25.9-32 41-17l168 168c9.3 9.4 9.3 24.6 0 34zM192 436v-40c0-6.6-5.4-12-12-12H96c-17.7 0-32-14.3-32-32V160c0-17.7 14.3-32 32-32h84c6.6 0 12-5.4 12-12V76c0-6.6-5.4-12-12-12H96c-53 0-96 43-96 96v192c0 53 43 96 96 96h84c6.6 0 12-5.4 12-12z“]},ld={prefix:”fas“,iconName:”signal“,icon:[640,512,,”f012“,”M216 288h-48c-8.84 0-16 7.16-16 16v192c0 8.84 7.16 16 16 16h48c8.84 0 16-7.16 16-16V304c0-8.84-7.16-16-16-16zM88 384H40c-8.84 0-16 7.16-16 16v96c0 8.84 7.16 16 16 16h48c8.84 0 16-7.16 16-16v-96c0-8.84-7.16-16-16-16zm256-192h-48c-8.84 0-16 7.16-16 16v288c0 8.84 7.16 16 16 16h48c8.84 0 16-7.16 16-16V208c0-8.84-7.16-16-16-16zm128-96h-48c-8.84 0-16 7.16-16 16v384c0 8.84 7.16 16 16 16h48c8.84 0 16-7.16 16-16V112c0-8.84-7.16-16-16-16zM600 0h-48c-8.84 0-16 7.16-16 16v480c0 8.84 7.16 16 16 16h48c8.84 0 16-7.16 16-16V16c0-8.84-7.16-16-16-16z“]},fd={prefix:”fas“,iconName:”signature“,icon:[640,512,,”f5b7“,”M623.2 192c-51.8 3.5-125.7 54.7-163.1 71.5-29.1 13.1-54.2 24.4-76.1 24.4-22.6 0-26-16.2-21.3-51.9 1.1-8 11.7-79.2-42.7-76.1-25.1 1.5-64.3 24.8-169.5 126L192 182.2c30.4-75.9-53.2-151.5-129.7-102.8L7.4 116.3C0 121-2.2 130.9 2.5 138.4l17.2 27c4.7 7.5 14.6 9.7 22.1 4.9l58-38.9c18.4-11.7 40.7 7.2 32.7 27.1L34.3 404.1C27.5 421 37 448 64 448c8.3 0 16.5-3.2 22.6-9.4 42.2-42.2 154.7-150.7 211.2-195.8-2.2 28.5-2.1 58.9 20.6 83.8 15.3 16.8 37.3 25.3 65.5 25.3 35.6 0 68-14.6 102.3-30 33-14.8 99-62.6 138.4-65.8 8.5-.7 15.2-7.3 15.2-15.8v-32.1c.2-9.1-7.5-16.8-16.6-16.2z“]},hd={prefix:”fas“,iconName:”sim-card“,icon:[384,512,,”f7c4“,”M0 64v384c0 35.3 28.7 64 64 64h256c35.3 0 64-28.7 64-64V128L256 0H64C28.7 0 0 28.7 0 64zm224 192h-64v-64h64v64zm96 0h-64v-64h32c17.7 0 32 14.3 32 32v32zm-64 128h64v32c0 17.7-14.3 32-32 32h-32v-64zm-96 0h64v64h-64v-64zm-96 0h64v64H96c-17.7 0-32-14.3-32-32v-32zm0-96h256v64H64v-64zm0-64c0-17.7 14.3-32 32-32h32v64H64v-32z“]},dd={prefix:”fas“,iconName:”sink“,icon:[512,512,,”e06d“,”M32,416a96,96,0,0,0,96,96H384a96,96,0,0,0,96-96V384H32ZM496,288H400V256h64a16,16,0,0,0,16-16V224a16,16,0,0,0-16-16H384a32,32,0,0,0-32,32v48H288V96a32,32,0,0,1,64,0v16a16,16,0,0,0,16,16h32a16,16,0,0,0,16-16V96A96.16,96.16,0,0,0,300.87,1.86C255.29,10.71,224,53.36,224,99.79V288H160V240a32,32,0,0,0-32-32H48a16,16,0,0,0-16,16v16a16,16,0,0,0,16,16h64v32H16A16,16,0,0,0,0,304v32a16,16,0,0,0,16,16H496a16,16,0,0,0,16-16V304A16,16,0,0,0,496,288Z“]},pd={prefix:”fas“,iconName:”sitemap“,icon:[640,512,,”f0e8“,”M128 352H32c-17.67 0-32 14.33-32 32v96c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32v-96c0-17.67-14.33-32-32-32zm-24-80h192v48h48v-48h192v48h48v-57.59c0-21.17-17.23-38.41-38.41-38.41H344v-64h40c17.67 0 32-14.33 32-32V32c0-17.67-14.33-32-32-32H256c-17.67 0-32 14.33-32 32v96c0 17.67 14.33 32 32 32h40v64H94.41C73.23 224 56 241.23 56 262.41V320h48v-48zm264 80h-96c-17.67 0-32 14.33-32 32v96c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32v-96c0-17.67-14.33-32-32-32zm240 0h-96c-17.67 0-32 14.33-32 32v96c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32v-96c0-17.67-14.33-32-32-32z“]},md={prefix:”fas“,iconName:”skating“,icon:[448,512,,”f7c5“,”M400 0c-26.5 0-48 21.5-48 48s21.5 48 48 48 48-21.5 48-48-21.5-48-48-48zm0 448c-8.8 0-16 7.2-16 16s-7.2 16-16 16h-96c-8.8 0-16 7.2-16 16s7.2 16 16 16h96c26.5 0 48-21.5 48-48 0-8.8-7.2-16-16-16zm-282.2 8.6c-6.2 6.2-16.4 6.3-22.6 0l-67.9-67.9c-6.2-6.2-16.4-6.2-22.6 0s-6.2 16.4 0 22.6l67.9 67.9c9.4 9.4 21.7 14 34 14s24.6-4.7 33.9-14c6.2-6.2 6.2-16.4 0-22.6s-16.4-6.3-22.7 0zm56.1-179.8l-93.7 93.7c-12.5 12.5-12.5 32.8 0 45.2 6.2 6.2 14.4 9.4 22.6 9.4s16.4-3.1 22.6-9.4l91.9-91.9-30.2-30.2c-5-5-9.4-10.7-13.2-16.8zM128 160h105.5l-20.1 17.2c-13.5 11.5-21.6 28.4-22.3 46.1-.7 17.8 6.1 35.2 18.7 47.7l78.2 78.2V432c0 17.7 14.3 32 32 32s32-14.3 32-32v-89.4c0-12.6-5.1-25-14.1-33.9l-61-61c.5-.4 1.2-.6 1.7-1.1l82.3-82.3c11.5-11.5 14.9-28.6 8.7-43.6-6.2-15-20.7-24.7-37-24.7H128c-17.7 0-32 14.3-32 32s14.3 32 32 32z“]},vd={prefix:”fas“,iconName:”skiing“,icon:[512,512,,”f7c9“,”M432 96c26.5 0 48-21.5 48-48S458.5 0 432 0s-48 21.5-48 48 21.5 48 48 48zm73 356.1c-9.4-9.4-24.6-9.4-33.9 0-12.1 12.1-30.5 15.4-45.1 8.7l-135.8-70.2 49.2-73.8c12.7-19 10.2-44.5-6-60.6L293 215.7l-107-53.1c-2.9 19.9 3.4 40 17.7 54.4l75.1 75.2-45.9 68.8L35 258.7c-11.7-6-26.2-1.5-32.3 10.3-6.1 11.8-1.5 26.3 10.3 32.3l391.9 202.5c11.9 5.5 24.5 8.1 37.1 8.1 23.2 0 46-9 63-26 9.3-9.3 9.3-24.5 0-33.8zM120 91.6l-11.5 22.5c14.4 7.3 31.2 4.9 42.8-4.8l47.2 23.4c-.1.1-.1.2-.2.3l114.5 56.8 32.4-13 6.4 19.1c4 12.1 12.6 22 24 27.7l58.1 29c15.9 7.9 35 1.5 42.9-14.3 7.9-15.8 1.5-35-14.3-42.9l-52.1-26.1-17.1-51.2c-8.1-24.2-40.9-56.6-84.5-39.2l-81.2 32.5-62.5-31c.3-14.5-7.2-28.6-20.9-35.6l-11.1 21.7h-.2l-34.4-7c-1.8-.4-3.7.2-5 1.7-1.9 2.2-1.7 5.5.5 7.4l26.2 23z“]},gd={prefix:”fas“,iconName:”skiing-nordic“,icon:[576,512,,”f7ca“,”M336 96c26.5 0 48-21.5 48-48S362.5 0 336 0s-48 21.5-48 48 21.5 48 48 48zm216 320c-13.2 0-24 10.7-24 24 0 13.2-10.8 24-24 24h-69.5L460 285.6c11.7-4.7 20.1-16.2 20.1-29.6 0-17.7-14.3-32-32-32h-44L378 170.8c-12.5-25.5-35.5-44.2-61.8-50.9L245 98.7c-28.3-6.8-57.8-.5-80.8 17.1l-39.7 30.4c-14 10.7-16.7 30.8-5.9 44.9.7.9 1.7 1.3 2.4 2.1L66.9 464H24c-13.2 0-24 10.7-24 24s10.8 24 24 24h480c39.7 0 72-32.3 72-72 0-13.2-10.8-24-24-24zm-260.5 48h-96.9l43.1-91-22-13c-12.1-7.2-21.9-16.9-29.5-27.8L123.7 464H99.5l52.3-261.4c4.1-1 8.1-2.9 11.7-5.6l39.7-30.4c7.7-5.9 17.4-8 25.3-6.1l14.7 4.4-37.5 87.4c-12.6 29.5-1.3 64 26.3 80.3l85 50.2-25.5 81.2zm110.6 0h-43.6l23.6-75.5c5.9-20.8-2.9-43.1-21.6-54.4L299.3 298l31.3-78.3 20.3 41.4c8 16.3 24.9 26.9 43.1 26.9h33.3l-25.2 176z“]},yd={prefix:”fas“,iconName:”skull“,icon:[512,512,,”f54c“,”M256 0C114.6 0 0 100.3 0 224c0 70.1 36.9 132.6 94.5 173.7 9.6 6.9 15.2 18.1 13.5 29.9l-9.4 66.2c-1.4 9.6 6 18.2 15.7 18.2H192v-56c0-4.4 3.6-8 8-8h16c4.4 0 8 3.6 8 8v56h64v-56c0-4.4 3.6-8 8-8h16c4.4 0 8 3.6 8 8v56h77.7c9.7 0 17.1-8.6 15.7-18.2l-9.4-66.2c-1.7-11.7 3.8-23 13.5-29.9C475.1 356.6 512 294.1 512 224 512 100.3 397.4 0 256 0zm-96 320c-35.3 0-64-28.7-64-64s28.7-64 64-64 64 28.7 64 64-28.7 64-64 64zm192 0c-35.3 0-64-28.7-64-64s28.7-64 64-64 64 28.7 64 64-28.7 64-64 64z“]},bd={prefix:”fas“,iconName:”skull-crossbones“,icon:[448,512,,”f714“,”M439.15 453.06L297.17 384l141.99-69.06c7.9-3.95 11.11-13.56 7.15-21.46L432 264.85c-3.95-7.9-13.56-11.11-21.47-7.16L224 348.41 37.47 257.69c-7.9-3.95-17.51-.75-21.47 7.16L1.69 293.48c-3.95 7.9-.75 17.51 7.15 21.46L150.83 384 8.85 453.06c-7.9 3.95-11.11 13.56-7.15 21.47l14.31 28.63c3.95 7.9 13.56 11.11 21.47 7.15L224 419.59l186.53 90.72c7.9 3.95 17.51.75 21.47-7.15l14.31-28.63c3.95-7.91.74-17.52-7.16-21.47zM150 237.28l-5.48 25.87c-2.67 12.62 5.42 24.85 16.45 24.85h126.08c11.03 0 19.12-12.23 16.45-24.85l-5.5-25.87c41.78-22.41 70-62.75 70-109.28C368 57.31 303.53 0 224 0S80 57.31 80 128c0 46.53 28.22 86.87 70 109.28zM280 112c17.65 0 32 14.35 32 32s-14.35 32-32 32-32-14.35-32-32 14.35-32 32-32zm-112 0c17.65 0 32 14.35 32 32s-14.35 32-32 32-32-14.35-32-32 14.35-32 32-32z“]},wd={prefix:”fas“,iconName:”slash“,icon:[640,512,,”f715“,”M594.53 508.63L6.18 53.9c-6.97-5.42-8.23-15.47-2.81-22.45L23.01 6.18C28.43-.8 38.49-2.06 45.47 3.37L633.82 458.1c6.97 5.42 8.23 15.47 2.81 22.45l-19.64 25.27c-5.42 6.98-15.48 8.23-22.46 2.81z“]},xd={prefix:”fas“,iconName:”sleigh“,icon:[640,512,,”f7cc“,”M612.7 350.7l-9.3-7.4c-6.9-5.5-17-4.4-22.5 2.5l-10 12.5c-5.5 6.9-4.4 17 2.5 22.5l9.3 7.4c5.9 4.7 9.2 11.7 9.2 19.2 0 13.6-11 24.6-24.6 24.6H48c-8.8 0-16 7.2-16 16v16c0 8.8 7.2 16 16 16h516c39 0 73.7-29.3 75.9-68.3 1.4-23.8-8.7-46.3-27.2-61zM32 224c0 59.6 40.9 109.2 96 123.5V400h64v-48h192v48h64v-48c53 0 96-43 96-96v-96c17.7 0 32-14.3 32-32s-14.3-32-32-32h-96v64c0 35.3-28.7 64-64 64h-20.7c-65.8 0-125.9-37.2-155.3-96-29.4-58.8-89.6-96-155.3-96H32C14.3 32 0 46.3 0 64s14.3 32 32 32v128z“]},Sd={prefix:”fas“,iconName:”sliders-h“,icon:[512,512,,”f1de“,”M496 384H160v-16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v16H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h80v16c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-16h336c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zm0-160h-80v-16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v16H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h336v16c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-16h80c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zm0-160H288V48c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v16H16C7.2 64 0 71.2 0 80v32c0 8.8 7.2 16 16 16h208v16c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-16h208c8.8 0 16-7.2 16-16V80c0-8.8-7.2-16-16-16z“]},kd={prefix:”fas“,iconName:”smile“,icon:[496,512,,”f118“,”M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm80 168c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm-160 0c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm194.8 170.2C334.3 380.4 292.5 400 248 400s-86.3-19.6-114.8-53.8c-13.6-16.3 11-36.7 24.6-20.5 22.4 26.9 55.2 42.2 90.2 42.2s67.8-15.4 90.2-42.2c13.4-16.2 38.1 4.2 24.6 20.5z“]},_d={prefix:”fas“,iconName:”smile-beam“,icon:[496,512,,”f5b8“,”M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM112 223.4c3.3-42.1 32.2-71.4 56-71.4s52.7 29.3 56 71.4c.7 8.6-10.8 11.9-14.9 4.5l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.3 7.4-15.8 4-15.1-4.5zm250.8 122.8C334.3 380.4 292.5 400 248 400s-86.3-19.6-114.8-53.8c-13.5-16.3 11-36.7 24.6-20.5 22.4 26.9 55.2 42.2 90.2 42.2s67.8-15.4 90.2-42.2c13.6-16.2 38.1 4.3 24.6 20.5zm6.2-118.3l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.1 7.3-15.6 4-14.9-4.5 3.3-42.1 32.2-71.4 56-71.4s52.7 29.3 56 71.4c.6 8.6-11 11.9-15.1 4.5z“]},zd={prefix:”fas“,iconName:”smile-wink“,icon:[496,512,,”f4da“,”M0 256c0 137 111 248 248 248s248-111 248-248S385 8 248 8 0 119 0 256zm200-48c0 17.7-14.3 32-32 32s-32-14.3-32-32 14.3-32 32-32 32 14.3 32 32zm158.5 16.5c-14.8-13.2-46.2-13.2-61 0L288 233c-8.3 7.4-21.6.4-19.8-10.8 4-25.2 34.2-42.1 59.9-42.1S384 197 388 222.2c1.7 11.1-11.4 18.3-19.8 10.8l-9.7-8.5zM157.8 325.8C180.2 352.7 213 368 248 368s67.8-15.4 90.2-42.2c13.6-16.2 38.1 4.2 24.6 20.5C334.3 380.4 292.5 400 248 400s-86.3-19.6-114.8-53.8c-13.5-16.3 11.2-36.7 24.6-20.4z“]},Cd={prefix:”fas“,iconName:”smog“,icon:[640,512,,”f75f“,”M624 368H80c-8.8 0-16 7.2-16 16v16c0 8.8 7.2 16 16 16h544c8.8 0 16-7.2 16-16v-16c0-8.8-7.2-16-16-16zm-480 96H16c-8.8 0-16 7.2-16 16v16c0 8.8 7.2 16 16 16h128c8.8 0 16-7.2 16-16v-16c0-8.8-7.2-16-16-16zm416 0H224c-8.8 0-16 7.2-16 16v16c0 8.8 7.2 16 16 16h336c8.8 0 16-7.2 16-16v-16c0-8.8-7.2-16-16-16zM144 288h156.1c22.5 19.7 51.6 32 83.9 32s61.3-12.3 83.9-32H528c61.9 0 112-50.1 112-112S589.9 64 528 64c-18 0-34.7 4.6-49.7 12.1C454 31 406.8 0 352 0c-41 0-77.8 17.3-104 44.8C221.8 17.3 185 0 144 0 64.5 0 0 64.5 0 144s64.5 144 144 144z“]},Md={prefix:”fas“,iconName:”smoking“,icon:[640,512,,”f48d“,”M632 352h-48c-4.4 0-8 3.6-8 8v144c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V360c0-4.4-3.6-8-8-8zM553.3 87.1c-5.7-3.8-9.3-10-9.3-16.8V8c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v62.3c0 22 10.2 43.4 28.6 55.4 42.2 27.3 67.4 73.8 67.4 124V280c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8v-30.3c0-65.5-32.4-126.2-86.7-162.6zM432 352H48c-26.5 0-48 21.5-48 48v64c0 26.5 21.5 48 48 48h384c8.8 0 16-7.2 16-16V368c0-8.8-7.2-16-16-16zm-32 112H224v-64h176v64zm87.7-322.4C463.8 125 448 99.3 448 70.3V8c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v66.4c0 43.7 24.6 81.6 60.3 106.7 22.4 15.7 35.7 41.2 35.7 68.6V280c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8v-30.3c0-43.3-21-83.4-56.3-108.1zM536 352h-48c-4.4 0-8 3.6-8 8v144c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V360c0-4.4-3.6-8-8-8z“]},Od={prefix:”fas“,iconName:”smoking-ban“,icon:[512,512,,”f54d“,”M96 304c0 8.8 7.2 16 16 16h117.5l-96-96H112c-8.8 0-16 7.2-16 16v64zM256 0C114.6 0 0 114.6 0 256s114.6 256 256 256 256-114.6 256-256S397.4 0 256 0zm0 448c-105.9 0-192-86.1-192-192 0-41.4 13.3-79.7 35.7-111.1l267.4 267.4C335.7 434.7 297.4 448 256 448zm45.2-192H384v32h-50.8l-32-32zm111.1 111.1L365.2 320H400c8.8 0 16-7.2 16-16v-64c0-8.8-7.2-16-16-16H269.2L144.9 99.7C176.3 77.3 214.6 64 256 64c105.9 0 192 86.1 192 192 0 41.4-13.3 79.7-35.7 111.1zM320.6 128c-15.6 0-28.6-11.2-31.4-25.9-.7-3.6-4-6.1-7.7-6.1h-16.2c-5 0-8.7 4.5-8 9.4 4.6 30.9 31.2 54.6 63.3 54.6 15.6 0 28.6 11.2 31.4 25.9.7 3.6 4 6.1 7.7 6.1h16.2c5 0 8.7-4.5 8-9.4-4.6-30.9-31.2-54.6-63.3-54.6z“]},Td={prefix:”fas“,iconName:”sms“,icon:[512,512,,”f7cd“,”M256 32C114.6 32 0 125.1 0 240c0 49.6 21.4 95 57 130.7C44.5 421.1 2.7 466 2.2 466.5c-2.2 2.3-2.8 5.7-1.5 8.7 1.3 3 4.1 4.8 7.3 4.8 66.3 0 116-31.8 140.6-51.4 32.7 12.3 69 19.4 107.4 19.4 141.4 0 256-93.1 256-208S397.4 32 256 32zM128.2 304H116c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h12.3c6 0 10.4-3.5 10.4-6.6 0-1.3-.8-2.7-2.1-3.8l-21.9-18.8c-8.5-7.2-13.3-17.5-13.3-28.1 0-21.3 19-38.6 42.4-38.6H156c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8h-12.3c-6 0-10.4 3.5-10.4 6.6 0 1.3.8 2.7 2.1 3.8l21.9 18.8c8.5 7.2 13.3 17.5 13.3 28.1.1 21.3-19 38.6-42.4 38.6zm191.8-8c0 4.4-3.6 8-8 8h-16c-4.4 0-8-3.6-8-8v-68.2l-24.8 55.8c-2.9 5.9-11.4 5.9-14.3 0L224 227.8V296c0 4.4-3.6 8-8 8h-16c-4.4 0-8-3.6-8-8V192c0-8.8 7.2-16 16-16h16c6.1 0 11.6 3.4 14.3 8.8l17.7 35.4 17.7-35.4c2.7-5.4 8.3-8.8 14.3-8.8h16c8.8 0 16 7.2 16 16v104zm48.3 8H356c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h12.3c6 0 10.4-3.5 10.4-6.6 0-1.3-.8-2.7-2.1-3.8l-21.9-18.8c-8.5-7.2-13.3-17.5-13.3-28.1 0-21.3 19-38.6 42.4-38.6H396c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8h-12.3c-6 0-10.4 3.5-10.4 6.6 0 1.3.8 2.7 2.1 3.8l21.9 18.8c8.5 7.2 13.3 17.5 13.3 28.1.1 21.3-18.9 38.6-42.3 38.6z“]},Ed={prefix:”fas“,iconName:”snowboarding“,icon:[512,512,,”f7ce“,”M432 96c26.5 0 48-21.5 48-48S458.5 0 432 0s-48 21.5-48 48 21.5 48 48 48zm28.8 153.6c5.8 4.3 12.5 6.4 19.2 6.4 9.7 0 19.3-4.4 25.6-12.8 10.6-14.1 7.8-34.2-6.4-44.8l-111.4-83.5c-13.8-10.3-29.1-18.4-45.4-23.8l-63.7-21.2-26.1-52.1C244.7 2 225.5-4.4 209.7 3.5c-15.8 7.9-22.2 27.1-14.3 42.9l29.1 58.1c5.7 11.4 15.6 19.9 27.7 24l16.4 5.5-41.2 20.6c-21.8 10.9-35.4 32.8-35.4 57.2v53.1l-74.1 24.7c-16.8 5.6-25.8 23.7-20.2 40.5 1.7 5.2 4.9 9.4 8.7 12.9l-38.7-14.1c-9.7-3.5-17.4-10.6-21.8-20-5.6-12-19.9-17.2-31.9-11.6s-17.2 19.9-11.6 31.9c9.8 21 27.1 36.9 48.9 44.8l364.8 132.7c9.7 3.5 19.7 5.3 29.7 5.3 12.5 0 24.9-2.7 36.5-8.2 12-5.6 17.2-19.9 11.6-31.9S474 454.7 462 460.3c-9.3 4.4-19.8 4.8-29.5 1.3l-90.8-33.1c8.7-4.1 15.6-11.8 17.8-21.9l21.9-102c3.9-18.2-3.2-37.2-18.1-48.4l-52-39 66-30.5 83.5 62.9zm-144.4 51.7l-19.7 92c-1.5 7.1-.1 13.9 2.8 20l-169.4-61.6c2.7-.2 5.4-.4 8-1.3l85-28.4c19.6-6.5 32.8-24.8 32.8-45.5V256l60.5 45.3z“]},Ld={prefix:”fas“,iconName:”snowflake“,icon:[448,512,,”f2dc“,”M440.3 345.2l-33.8-19.5 26-7c8.2-2.2 13.1-10.7 10.9-18.9l-4-14.9c-2.2-8.2-10.7-13.1-18.9-10.9l-70.8 19-63.9-37 63.8-36.9 70.8 19c8.2 2.2 16.7-2.7 18.9-10.9l4-14.9c2.2-8.2-2.7-16.7-10.9-18.9l-26-7 33.8-19.5c7.4-4.3 9.9-13.7 5.7-21.1L430.4 119c-4.3-7.4-13.7-9.9-21.1-5.7l-33.8 19.5 7-26c2.2-8.2-2.7-16.7-10.9-18.9l-14.9-4c-8.2-2.2-16.7 2.7-18.9 10.9l-19 70.8-62.8 36.2v-77.5l53.7-53.7c6.2-6.2 6.2-16.4 0-22.6l-11.3-11.3c-6.2-6.2-16.4-6.2-22.6 0L256 56.4V16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v40.4l-19.7-19.7c-6.2-6.2-16.4-6.2-22.6 0L138.3 48c-6.3 6.2-6.3 16.4 0 22.6l53.7 53.7v77.5l-62.8-36.2-19-70.8c-2.2-8.2-10.7-13.1-18.9-10.9l-14.9 4c-8.2 2.2-13.1 10.7-10.9 18.9l7 26-33.8-19.5c-7.4-4.3-16.8-1.7-21.1 5.7L2.1 145.7c-4.3 7.4-1.7 16.8 5.7 21.1l33.8 19.5-26 7c-8.3 2.2-13.2 10.7-11 19l4 14.9c2.2 8.2 10.7 13.1 18.9 10.9l70.8-19 63.8 36.9-63.8 36.9-70.8-19c-8.2-2.2-16.7 2.7-18.9 10.9l-4 14.9c-2.2 8.2 2.7 16.7 10.9 18.9l26 7-33.8 19.6c-7.4 4.3-9.9 13.7-5.7 21.1l15.5 26.8c4.3 7.4 13.7 9.9 21.1 5.7l33.8-19.5-7 26c-2.2 8.2 2.7 16.7 10.9 18.9l14.9 4c8.2 2.2 16.7-2.7 18.9-10.9l19-70.8 62.8-36.2v77.5l-53.7 53.7c-6.3 6.2-6.3 16.4 0 22.6l11.3 11.3c6.2 6.2 16.4 6.2 22.6 0l19.7-19.7V496c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-40.4l19.7 19.7c6.2 6.2 16.4 6.2 22.6 0l11.3-11.3c6.2-6.2 6.2-16.4 0-22.6L256 387.7v-77.5l62.8 36.2 19 70.8c2.2 8.2 10.7 13.1 18.9 10.9l14.9-4c8.2-2.2 13.1-10.7 10.9-18.9l-7-26 33.8 19.5c7.4 4.3 16.8 1.7 21.1-5.7l15.5-26.8c4.3-7.3 1.8-16.8-5.6-21z“]},Ad={prefix:”fas“,iconName:”snowman“,icon:[512,512,,”f7d0“,”M510.9 152.3l-5.9-14.5c-3.3-8-12.6-11.9-20.8-8.7L456 140.6v-29c0-8.6-7.2-15.6-16-15.6h-16c-8.8 0-16 7-16 15.6v46.9c0 .5.3 1 .3 1.5l-56.4 23c-5.9-10-13.3-18.9-22-26.6 13.6-16.6 22-37.4 22-60.5 0-53-43-96-96-96s-96 43-96 96c0 23.1 8.5 43.9 22 60.5-8.7 7.7-16 16.6-22 26.6l-56.4-23c.1-.5.3-1 .3-1.5v-46.9C104 103 96.8 96 88 96H72c-8.8 0-16 7-16 15.6v29l-28.1-11.5c-8.2-3.2-17.5.7-20.8 8.7l-5.9 14.5c-3.3 8 .7 17.1 8.9 20.3l135.2 55.2c-.4 4-1.2 8-1.2 12.2 0 10.1 1.7 19.6 4.2 28.9C120.9 296.4 104 334.2 104 376c0 54 28.4 100.9 70.8 127.8 9.3 5.9 20.3 8.2 31.3 8.2h99.2c13.3 0 26.3-4.1 37.2-11.7 46.5-32.3 74.4-89.4 62.9-152.6-5.5-30.2-20.5-57.6-41.6-79 2.5-9.2 4.2-18.7 4.2-28.7 0-4.2-.8-8.1-1.2-12.2L502 172.6c8.1-3.1 12.1-12.2 8.9-20.3zM224 96c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm32 272c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm0-64c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm0-64c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm0-88s-16-23.2-16-32 7.2-16 16-16 16 7.2 16 16-16 32-16 32zm32-56c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16z“]},Rd={prefix:”fas“,iconName:”snowplow“,icon:[640,512,,”f7d2“,”M120 376c-13.3 0-24 10.7-24 24s10.7 24 24 24 24-10.7 24-24-10.7-24-24-24zm80 0c-13.3 0-24 10.7-24 24s10.7 24 24 24 24-10.7 24-24-10.7-24-24-24zm80 0c-13.3 0-24 10.7-24 24s10.7 24 24 24 24-10.7 24-24-10.7-24-24-24zm80 0c-13.3 0-24 10.7-24 24s10.7 24 24 24 24-10.7 24-24-10.7-24-24-24zm238.6 49.4c-14.5-14.5-22.6-34.1-22.6-54.6V269.2c0-20.5 8.1-40.1 22.6-54.6l36.7-36.7c6.2-6.2 6.2-16.4 0-22.6l-22.6-22.6c-6.2-6.2-16.4-6.2-22.6 0l-36.7 36.7c-26.5 26.5-41.4 62.4-41.4 99.9V288h-64v-50.9c0-8.7-1.8-17.2-5.2-25.2L364.5 29.1C356.9 11.4 339.6 0 320.3 0H176c-26.5 0-48 21.5-48 48v112h-16c-26.5 0-48 21.5-48 48v91.2C26.3 317.2 0 355.4 0 400c0 61.9 50.1 112 112 112h256c61.9 0 112-50.1 112-112 0-17.3-4.2-33.4-11.2-48H512v18.7c0 37.5 14.9 73.4 41.4 99.9l36.7 36.7c6.2 6.2 16.4 6.2 22.6 0l22.6-22.6c6.2-6.2 6.2-16.4 0-22.6l-36.7-36.7zM192 64h117.8l68.6 160H256l-64-64V64zm176 384H112c-26.5 0-48-21.5-48-48s21.5-48 48-48h256c26.5 0 48 21.5 48 48s-21.5 48-48 48z“]},Nd={prefix:”fas“,iconName:”soap“,icon:[512,512,,”e06e“,”M416,192a95.42,95.42,0,0,1-30.94,70.21A95.8,95.8,0,0,1,352,448H160a96,96,0,0,1,0-192h88.91A95.3,95.3,0,0,1,224,192H96A96,96,0,0,0,0,288V416a96,96,0,0,0,96,96H416a96,96,0,0,0,96-96V288A96,96,0,0,0,416,192Zm-96,64a64,64,0,1,0-64-64A64,64,0,0,0,320,256ZM208,96a48,48,0,1,0-48-48A48,48,0,0,0,208,96ZM384,64a32,32,0,1,0-32-32A32,32,0,0,0,384,64ZM160,288a64,64,0,0,0,0,128H352a64,64,0,0,0,0-128Z“]},Hd={prefix:”fas“,iconName:”socks“,icon:[512,512,,”f696“,”M214.66 311.01L288 256V96H128v176l-86.65 64.61c-39.4 29.56-53.86 84.42-29.21 127.06C30.39 495.25 63.27 512 96.08 512c20.03 0 40.25-6.25 57.52-19.2l21.86-16.39c-29.85-55.38-13.54-125.84 39.2-165.4zM288 32c0-11.05 3.07-21.3 8.02-30.38C293.4.92 290.85 0 288 0H160c-17.67 0-32 14.33-32 32v32h160V32zM480 0H352c-17.67 0-32 14.33-32 32v32h192V32c0-17.67-14.33-32-32-32zM320 272l-86.13 64.61c-39.4 29.56-53.86 84.42-29.21 127.06 18.25 31.58 50.61 48.33 83.42 48.33 20.03 0 40.25-6.25 57.52-19.2l115.2-86.4A127.997 127.997 0 0 0 512 304V96H320v176z“]},Pd={prefix:”fas“,iconName:”solar-panel“,icon:[640,512,,”f5ba“,”M431.98 448.01l-47.97.05V416h-128v32.21l-47.98.05c-8.82.01-15.97 7.16-15.98 15.99l-.05 31.73c-.01 8.85 7.17 16.03 16.02 16.02l223.96-.26c8.82-.01 15.97-7.16 15.98-15.98l.04-31.73c.01-8.85-7.17-16.03-16.02-16.02zM585.2 26.74C582.58 11.31 568.99 0 553.06 0H86.93C71 0 57.41 11.31 54.79 26.74-3.32 369.16.04 348.08.03 352c-.03 17.32 14.29 32 32.6 32h574.74c18.23 0 32.51-14.56 32.59-31.79.02-4.08 3.35 16.95-54.76-325.47zM259.83 64h120.33l9.77 96H250.06l9.77-96zm-75.17 256H71.09L90.1 208h105.97l-11.41 112zm16.29-160H98.24l16.29-96h96.19l-9.77 96zm32.82 160l11.4-112h149.65l11.4 112H233.77zm195.5-256h96.19l16.29 96H439.04l-9.77-96zm26.06 256l-11.4-112H549.9l19.01 112H455.33z“]},jd={prefix:”fas“,iconName:”sort“,icon:[320,512,,”f0dc“,”M41 288h238c21.4 0 32.1 25.9 17 41L177 448c-9.4 9.4-24.6 9.4-33.9 0L24 329c-15.1-15.1-4.4-41 17-41zm255-105L177 64c-9.4-9.4-24.6-9.4-33.9 0L24 183c-15.1 15.1-4.4 41 17 41h238c21.4 0 32.1-25.9 17-41z“]},Vd={prefix:”fas“,iconName:”sort-alpha-down“,icon:[448,512,,”f15d“,”M176 352h-48V48a16 16 0 0 0-16-16H80a16 16 0 0 0-16 16v304H16c-14.19 0-21.36 17.24-11.29 27.31l80 96a16 16 0 0 0 22.62 0l80-96C197.35 369.26 190.22 352 176 352zm240-64H288a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h56l-61.26 70.45A32 32 0 0 0 272 446.37V464a16 16 0 0 0 16 16h128a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16h-56l61.26-70.45A32 32 0 0 0 432 321.63V304a16 16 0 0 0-16-16zm31.06-85.38l-59.27-160A16 16 0 0 0 372.72 32h-41.44a16 16 0 0 0-15.07 10.62l-59.27 160A16 16 0 0 0 272 224h24.83a16 16 0 0 0 15.23-11.08l4.42-12.92h71l4.41 12.92A16 16 0 0 0 407.16 224H432a16 16 0 0 0 15.06-21.38zM335.61 144L352 96l16.39 48z“]},Dd={prefix:”fas“,iconName:”sort-alpha-down-alt“,icon:[448,512,,”f881“,”M176 352h-48V48a16 16 0 0 0-16-16H80a16 16 0 0 0-16 16v304H16c-14.19 0-21.36 17.24-11.29 27.31l80 96a16 16 0 0 0 22.62 0l80-96C197.35 369.26 190.22 352 176 352zm112-128h128a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16h-56l61.26-70.45A32 32 0 0 0 432 65.63V48a16 16 0 0 0-16-16H288a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h56l-61.26 70.45A32 32 0 0 0 272 190.37V208a16 16 0 0 0 16 16zm159.06 234.62l-59.27-160A16 16 0 0 0 372.72 288h-41.44a16 16 0 0 0-15.07 10.62l-59.27 160A16 16 0 0 0 272 480h24.83a16 16 0 0 0 15.23-11.08l4.42-12.92h71l4.41 12.92A16 16 0 0 0 407.16 480H432a16 16 0 0 0 15.06-21.38zM335.61 400L352 352l16.39 48z“]},Id={prefix:”fas“,iconName:”sort-alpha-up“,icon:[448,512,,”f15e“,”M16 160h48v304a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V160h48c14.21 0 21.38-17.24 11.31-27.31l-80-96a16 16 0 0 0-22.62 0l-80 96C-5.35 142.74 1.78 160 16 160zm400 128H288a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h56l-61.26 70.45A32 32 0 0 0 272 446.37V464a16 16 0 0 0 16 16h128a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16h-56l61.26-70.45A32 32 0 0 0 432 321.63V304a16 16 0 0 0-16-16zm31.06-85.38l-59.27-160A16 16 0 0 0 372.72 32h-41.44a16 16 0 0 0-15.07 10.62l-59.27 160A16 16 0 0 0 272 224h24.83a16 16 0 0 0 15.23-11.08l4.42-12.92h71l4.41 12.92A16 16 0 0 0 407.16 224H432a16 16 0 0 0 15.06-21.38zM335.61 144L352 96l16.39 48z“]},Fd={prefix:”fas“,iconName:”sort-alpha-up-alt“,icon:[448,512,,”f882“,”M16 160h48v304a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V160h48c14.21 0 21.38-17.24 11.31-27.31l-80-96a16 16 0 0 0-22.62 0l-80 96C-5.35 142.74 1.78 160 16 160zm272 64h128a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16h-56l61.26-70.45A32 32 0 0 0 432 65.63V48a16 16 0 0 0-16-16H288a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h56l-61.26 70.45A32 32 0 0 0 272 190.37V208a16 16 0 0 0 16 16zm159.06 234.62l-59.27-160A16 16 0 0 0 372.72 288h-41.44a16 16 0 0 0-15.07 10.62l-59.27 160A16 16 0 0 0 272 480h24.83a16 16 0 0 0 15.23-11.08l4.42-12.92h71l4.41 12.92A16 16 0 0 0 407.16 480H432a16 16 0 0 0 15.06-21.38zM335.61 400L352 352l16.39 48z“]},Bd={prefix:”fas“,iconName:”sort-amount-down“,icon:[512,512,,”f160“,”M304 416h-64a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h64a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm-128-64h-48V48a16 16 0 0 0-16-16H80a16 16 0 0 0-16 16v304H16c-14.19 0-21.37 17.24-11.29 27.31l80 96a16 16 0 0 0 22.62 0l80-96C197.35 369.26 190.22 352 176 352zm256-192H240a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h192a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm-64 128H240a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h128a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM496 32H240a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h256a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16z“]},Ud={prefix:”fas“,iconName:”sort-amount-down-alt“,icon:[512,512,,”f884“,”M240 96h64a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16h-64a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16zm0 128h128a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16H240a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16zm256 192H240a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h256a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm-256-64h192a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16H240a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16zm-64 0h-48V48a16 16 0 0 0-16-16H80a16 16 0 0 0-16 16v304H16c-14.19 0-21.37 17.24-11.29 27.31l80 96a16 16 0 0 0 22.62 0l80-96C197.35 369.26 190.22 352 176 352z“]},qd={prefix:”fas“,iconName:”sort-amount-up“,icon:[512,512,,”f161“,”M304 416h-64a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h64a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h48v304a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V160h48c14.21 0 21.38-17.24 11.31-27.31l-80-96a16 16 0 0 0-22.62 0l-80 96C-5.35 142.74 1.77 160 16 160zm416 0H240a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h192a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm-64 128H240a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h128a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM496 32H240a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h256a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16z“]},Gd={prefix:”fas“,iconName:”sort-amount-up-alt“,icon:[512,512,,”f885“,”M240 96h64a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16h-64a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16zm0 128h128a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16H240a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16zm256 192H240a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h256a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm-256-64h192a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16H240a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16zM16 160h48v304a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V160h48c14.21 0 21.39-17.24 11.31-27.31l-80-96a16 16 0 0 0-22.62 0l-80 96C-5.35 142.74 1.78 160 16 160z“]},Wd={prefix:”fas“,iconName:”sort-down“,icon:[320,512,,”f0dd“,”M41 288h238c21.4 0 32.1 25.9 17 41L177 448c-9.4 9.4-24.6 9.4-33.9 0L24 329c-15.1-15.1-4.4-41 17-41z“]},Zd={prefix:”fas“,iconName:”sort-numeric-down“,icon:[448,512,,”f162“,”M304 96h16v64h-16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h96a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16h-16V48a16 16 0 0 0-16-16h-48a16 16 0 0 0-14.29 8.83l-16 32A16 16 0 0 0 304 96zm26.15 162.91a79 79 0 0 0-55 54.17c-14.25 51.05 21.21 97.77 68.85 102.53a84.07 84.07 0 0 1-20.85 12.91c-7.57 3.4-10.8 12.47-8.18 20.34l9.9 20c2.87 8.63 12.53 13.49 20.9 9.91 58-24.76 86.25-61.61 86.25-132V336c-.02-51.21-48.4-91.34-101.85-77.09zM352 356a20 20 0 1 1 20-20 20 20 0 0 1-20 20zm-176-4h-48V48a16 16 0 0 0-16-16H80a16 16 0 0 0-16 16v304H16c-14.19 0-21.36 17.24-11.29 27.31l80 96a16 16 0 0 0 22.62 0l80-96C197.35 369.26 190.22 352 176 352z“]},$d={prefix:”fas“,iconName:”sort-numeric-down-alt“,icon:[448,512,,”f886“,”M176 352h-48V48a16 16 0 0 0-16-16H80a16 16 0 0 0-16 16v304H16c-14.19 0-21.36 17.24-11.29 27.31l80 96a16 16 0 0 0 22.62 0l80-96C197.35 369.26 190.22 352 176 352zm224 64h-16V304a16 16 0 0 0-16-16h-48a16 16 0 0 0-14.29 8.83l-16 32A16 16 0 0 0 304 352h16v64h-16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h96a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM330.17 34.91a79 79 0 0 0-55 54.17c-14.27 51.05 21.19 97.77 68.83 102.53a84.07 84.07 0 0 1-20.85 12.91c-7.57 3.4-10.8 12.47-8.18 20.34l9.9 20c2.87 8.63 12.53 13.49 20.9 9.91 58-24.77 86.25-61.61 86.25-132V112c-.02-51.21-48.4-91.34-101.85-77.09zM352 132a20 20 0 1 1 20-20 20 20 0 0 1-20 20z“]},Jd={prefix:”fas“,iconName:”sort-numeric-up“,icon:[448,512,,”f163“,”M330.17 258.91a79 79 0 0 0-55 54.17c-14.27 51.05 21.19 97.77 68.83 102.53a84.07 84.07 0 0 1-20.85 12.91c-7.57 3.4-10.8 12.47-8.18 20.34l9.9 20c2.87 8.63 12.53 13.49 20.9 9.91 58-24.76 86.25-61.61 86.25-132V336c-.02-51.21-48.4-91.34-101.85-77.09zM352 356a20 20 0 1 1 20-20 20 20 0 0 1-20 20zM304 96h16v64h-16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h96a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16h-16V48a16 16 0 0 0-16-16h-48a16 16 0 0 0-14.29 8.83l-16 32A16 16 0 0 0 304 96zM107.31 36.69a16 16 0 0 0-22.62 0l-80 96C-5.35 142.74 1.78 160 16 160h48v304a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V160h48c14.21 0 21.38-17.24 11.31-27.31z“]},Kd={prefix:”fas“,iconName:”sort-numeric-up-alt“,icon:[448,512,,”f887“,”M107.31 36.69a16 16 0 0 0-22.62 0l-80 96C-5.35 142.74 1.78 160 16 160h48v304a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V160h48c14.21 0 21.38-17.24 11.31-27.31zM400 416h-16V304a16 16 0 0 0-16-16h-48a16 16 0 0 0-14.29 8.83l-16 32A16 16 0 0 0 304 352h16v64h-16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h96a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM330.17 34.91a79 79 0 0 0-55 54.17c-14.27 51.05 21.19 97.77 68.83 102.53a84.07 84.07 0 0 1-20.85 12.91c-7.57 3.4-10.8 12.47-8.18 20.34l9.9 20c2.87 8.63 12.53 13.49 20.9 9.91 58-24.77 86.25-61.61 86.25-132V112c-.02-51.21-48.4-91.34-101.85-77.09zM352 132a20 20 0 1 1 20-20 20 20 0 0 1-20 20z“]},Qd={prefix:”fas“,iconName:”sort-up“,icon:[320,512,,”f0de“,”M279 224H41c-21.4 0-32.1-25.9-17-41L143 64c9.4-9.4 24.6-9.4 33.9 0l119 119c15.2 15.1 4.5 41-16.9 41z“]},Yd={prefix:”fas“,iconName:”spa“,icon:[576,512,,”f5bb“,”M568.25 192c-29.04.13-135.01 6.16-213.84 83-33.12 29.63-53.36 63.3-66.41 94.86-13.05-31.56-33.29-65.23-66.41-94.86-78.83-76.84-184.8-82.87-213.84-83-4.41-.02-7.79 3.4-7.75 7.82.23 27.92 7.14 126.14 88.77 199.3C172.79 480.94 256 480 288 480s115.19.95 199.23-80.88c81.64-73.17 88.54-171.38 88.77-199.3.04-4.42-3.34-7.84-7.75-7.82zM287.98 302.6c12.82-18.85 27.6-35.78 44.09-50.52 19.09-18.61 39.58-33.3 60.26-45.18-16.44-70.5-51.72-133.05-96.73-172.22-4.11-3.58-11.02-3.58-15.14 0-44.99 39.14-80.27 101.63-96.74 172.07 20.37 11.7 40.5 26.14 59.22 44.39a282.768 282.768 0 0 1 45.04 51.46z“]},Xd={prefix:”fas“,iconName:”space-shuttle“,icon:[640,512,,”f197“,”M592.604 208.244C559.735 192.836 515.777 184 472 184H186.327c-4.952-6.555-10.585-11.978-16.72-16H376C229.157 137.747 219.403 32 96.003 32H96v128H80V32c-26.51 0-48 28.654-48 64v64c-23.197 0-32 10.032-32 24v40c0 13.983 8.819 24 32 24v16c-23.197 0-32 10.032-32 24v40c0 13.983 8.819 24 32 24v64c0 35.346 21.49 64 48 64V352h16v128h.003c123.4 0 133.154-105.747 279.997-136H169.606c6.135-4.022 11.768-9.445 16.72-16H472c43.777 0 87.735-8.836 120.604-24.244C622.282 289.845 640 271.992 640 256s-17.718-33.845-47.396-47.756zM488 296a8 8 0 0 1-8-8v-64a8 8 0 0 1 8-8c31.909 0 31.942 80 0 80z“]},ep={prefix:”fas“,iconName:”spell-check“,icon:[576,512,,”f891“,”M272 256h91.36c43.2 0 82-32.2 84.51-75.34a79.82 79.82 0 0 0-25.26-63.07 79.81 79.81 0 0 0 9.06-44.91C427.9 30.57 389.3 0 347 0h-75a16 16 0 0 0-16 16v224a16 16 0 0 0 16 16zm40-200h40a24 24 0 0 1 0 48h-40zm0 96h56a24 24 0 0 1 0 48h-56zM155.12 22.25A32 32 0 0 0 124.64 0H99.36a32 32 0 0 0-30.48 22.25L.59 235.73A16 16 0 0 0 16 256h24.93a16 16 0 0 0 15.42-11.73L68.29 208h87.42l11.94 36.27A16 16 0 0 0 183.07 256H208a16 16 0 0 0 15.42-20.27zM89.37 144L112 75.3l22.63 68.7zm482 132.48l-45.21-45.3a15.88 15.88 0 0 0-22.59 0l-151.5 151.5-55.41-55.5a15.88 15.88 0 0 0-22.59 0l-45.3 45.3a16 16 0 0 0 0 22.59l112 112.21a15.89 15.89 0 0 0 22.6 0l208-208.21a16 16 0 0 0-.02-22.59z“]},tp={prefix:”fas“,iconName:”spider“,icon:[576,512,,”f717“,”M151.17 167.35L177.1 176h4.67l5.22-26.12c.72-3.58 1.8-7.58 3.21-11.79l-20.29-40.58 23.8-71.39c2.79-8.38-1.73-17.44-10.12-20.24L168.42.82c-8.38-2.8-17.45 1.73-20.24 10.12l-25.89 77.68a32.04 32.04 0 0 0 1.73 24.43l27.15 54.3zm422.14 182.03l-52.75-79.12a32.002 32.002 0 0 0-26.62-14.25H416l68.99-24.36a32.03 32.03 0 0 0 16.51-12.61l53.6-80.41c4.9-7.35 2.91-17.29-4.44-22.19l-13.31-8.88c-7.35-4.9-17.29-2.91-22.19 4.44l-50.56 75.83L404.1 208H368l-10.37-51.85C355.44 145.18 340.26 96 288 96c-52.26 0-67.44 49.18-69.63 60.15L208 208h-36.1l-60.49-20.17L60.84 112c-4.9-7.35-14.83-9.34-22.19-4.44l-13.31 8.88c-7.35 4.9-9.34 14.83-4.44 22.19l53.6 80.41a32.03 32.03 0 0 0 16.51 12.61L160 256H82.06a32.02 32.02 0 0 0-26.63 14.25L2.69 349.38c-4.9 7.35-2.92 17.29 4.44 22.19l13.31 8.88c7.35 4.9 17.29 2.91 22.19-4.44l48-72h47.06l-60.83 97.33A31.988 31.988 0 0 0 72 418.3V496c0 8.84 7.16 16 16 16h16c8.84 0 16-7.16 16-16v-73.11l74.08-118.53c-1.01 14.05-2.08 28.11-2.08 42.21C192 399.64 232.76 448 288 448s96-48.36 96-101.43c0-14.1-1.08-28.16-2.08-42.21L456 422.89V496c0 8.84 7.16 16 16 16h16c8.84 0 16-7.16 16-16v-77.71c0-6-1.69-11.88-4.86-16.96L438.31 304h47.06l48 72c4.9 7.35 14.84 9.34 22.19 4.44l13.31-8.88c7.36-4.9 9.34-14.83 4.44-22.18zM406.09 97.51l-20.29 40.58c1.41 4.21 2.49 8.21 3.21 11.79l5.22 26.12h4.67l25.93-8.65 27.15-54.3a31.995 31.995 0 0 0 1.73-24.43l-25.89-77.68C425.03 2.56 415.96-1.98 407.58.82l-15.17 5.06c-8.38 2.8-12.91 11.86-10.12 20.24l23.8 71.39z“]},np={prefix:”fas“,iconName:”spinner“,icon:[512,512,,”f110“,”M304 48c0 26.51-21.49 48-48 48s-48-21.49-48-48 21.49-48 48-48 48 21.49 48 48zm-48 368c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48zm208-208c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48zM96 256c0-26.51-21.49-48-48-48S0 229.49 0 256s21.49 48 48 48 48-21.49 48-48zm12.922 99.078c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48c0-26.509-21.491-48-48-48zm294.156 0c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48c0-26.509-21.49-48-48-48zM108.922 60.922c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.491-48-48-48z“]},rp={prefix:”fas“,iconName:”splotch“,icon:[512,512,,”f5bc“,”M472.29 195.89l-67.06-22.95c-19.28-6.6-33.54-20.92-38.14-38.3L351.1 74.19c-11.58-43.77-76.57-57.13-109.98-22.62l-46.14 47.67c-13.26 13.71-33.54 20.93-54.2 19.31l-71.88-5.62c-52.05-4.07-86.93 44.88-59.03 82.83l38.54 52.42c11.08 15.07 12.82 33.86 4.64 50.24L24.62 355.4c-20.59 41.25 22.84 84.87 73.49 73.81l69.96-15.28c20.11-4.39 41.45 0 57.07 11.73l54.32 40.83c39.32 29.56 101.04 7.57 104.45-37.22l4.7-61.86c1.35-17.79 12.8-33.86 30.63-42.99l62-31.74c44.88-22.96 39.59-80.17-8.95-96.79z“]},ip={prefix:”fas“,iconName:”spray-can“,icon:[512,512,,”f5bd“,”M224 32c0-17.67-14.33-32-32-32h-64c-17.67 0-32 14.33-32 32v96h128V32zm256 96c-17.67 0-32 14.33-32 32s14.33 32 32 32 32-14.33 32-32-14.33-32-32-32zm-256 32H96c-53.02 0-96 42.98-96 96v224c0 17.67 14.33 32 32 32h256c17.67 0 32-14.33 32-32V256c0-53.02-42.98-96-96-96zm-64 256c-44.18 0-80-35.82-80-80s35.82-80 80-80 80 35.82 80 80-35.82 80-80 80zM480 96c17.67 0 32-14.33 32-32s-14.33-32-32-32-32 14.33-32 32 14.33 32 32 32zm-96 32c-17.67 0-32 14.33-32 32s14.33 32 32 32 32-14.33 32-32-14.33-32-32-32zm-96-96c-17.67 0-32 14.33-32 32s14.33 32 32 32 32-14.33 32-32-14.33-32-32-32zm96 0c-17.67 0-32 14.33-32 32s14.33 32 32 32 32-14.33 32-32-14.33-32-32-32zm96 192c-17.67 0-32 14.33-32 32s14.33 32 32 32 32-14.33 32-32-14.33-32-32-32z“]},ap={prefix:”fas“,iconName:”square“,icon:[448,512,,”f0c8“,”M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48z“]},op={prefix:”fas“,iconName:”square-full“,icon:[512,512,,”f45c“,”M512 512H0V0h512v512z“]},cp={prefix:”fas“,iconName:”square-root-alt“,icon:[576,512,,”f698“,”M571.31 251.31l-22.62-22.62c-6.25-6.25-16.38-6.25-22.63 0L480 274.75l-46.06-46.06c-6.25-6.25-16.38-6.25-22.63 0l-22.62 22.62c-6.25 6.25-6.25 16.38 0 22.63L434.75 320l-46.06 46.06c-6.25 6.25-6.25 16.38 0 22.63l22.62 22.62c6.25 6.25 16.38 6.25 22.63 0L480 365.25l46.06 46.06c6.25 6.25 16.38 6.25 22.63 0l22.62-22.62c6.25-6.25 6.25-16.38 0-22.63L525.25 320l46.06-46.06c6.25-6.25 6.25-16.38 0-22.63zM552 0H307.65c-14.54 0-27.26 9.8-30.95 23.87l-84.79 322.8-58.41-106.1A32.008 32.008 0 0 0 105.47 224H24c-13.25 0-24 10.74-24 24v48c0 13.25 10.75 24 24 24h43.62l88.88 163.73C168.99 503.5 186.3 512 204.94 512c17.27 0 44.44-9 54.28-41.48L357.03 96H552c13.25 0 24-10.75 24-24V24c0-13.26-10.75-24-24-24z“]},sp={prefix:”fas“,iconName:”stamp“,icon:[512,512,,”f5bf“,”M32 512h448v-64H32v64zm384-256h-66.56c-16.26 0-29.44-13.18-29.44-29.44v-9.46c0-27.37 8.88-53.41 21.46-77.72 9.11-17.61 12.9-38.39 9.05-60.42-6.77-38.78-38.47-70.7-77.26-77.45C212.62-9.04 160 37.33 160 96c0 14.16 3.12 27.54 8.69 39.58C182.02 164.43 192 194.7 192 226.49v.07c0 16.26-13.18 29.44-29.44 29.44H96c-53.02 0-96 42.98-96 96v32c0 17.67 14.33 32 32 32h448c17.67 0 32-14.33 32-32v-32c0-53.02-42.98-96-96-96z“]},up={prefix:”fas“,iconName:”star“,icon:[576,512,,”f005“,”M259.3 17.8L194 150.2 47.9 171.5c-26.2 3.8-36.7 36.1-17.7 54.6l105.7 103-25 145.5c-4.5 26.3 23.2 46 46.4 33.7L288 439.6l130.7 68.7c23.2 12.2 50.9-7.4 46.4-33.7l-25-145.5 105.7-103c19-18.5 8.5-50.8-17.7-54.6L382 150.2 316.7 17.8c-11.7-23.6-45.6-23.9-57.4 0z“]},lp={prefix:”fas“,iconName:”star-and-crescent“,icon:[512,512,,”f699“,”M340.47 466.36c-1.45 0-6.89.46-9.18.46-116.25 0-210.82-94.57-210.82-210.82S215.04 45.18 331.29 45.18c2.32 0 7.7.46 9.18.46 7.13 0 13.33-5.03 14.75-12.07 1.46-7.25-2.55-14.49-9.47-17.09C316.58 5.54 286.39 0 256 0 114.84 0 0 114.84 0 256s114.84 256 256 256c30.23 0 60.28-5.49 89.32-16.32 5.96-2.02 10.28-7.64 10.28-14.26 0-8.09-6.39-15.06-15.13-15.06zm162.99-252.5l-76.38-11.1-34.16-69.21c-1.83-3.7-5.38-5.55-8.93-5.55s-7.1 1.85-8.93 5.55l-34.16 69.21-76.38 11.1c-8.17 1.18-11.43 11.22-5.52 16.99l55.27 53.87-13.05 76.07c-1.11 6.44 4.01 11.66 9.81 11.66 1.53 0 3.11-.36 4.64-1.17L384 335.37l68.31 35.91c1.53.8 3.11 1.17 4.64 1.17 5.8 0 10.92-5.23 9.81-11.66l-13.05-76.07 55.27-53.87c5.91-5.77 2.65-15.81-5.52-16.99z“]},fp={prefix:”fas“,iconName:”star-half“,icon:[576,512,,”f089“,”M288 0c-11.4 0-22.8 5.9-28.7 17.8L194 150.2 47.9 171.4c-26.2 3.8-36.7 36.1-17.7 54.6l105.7 103-25 145.5c-4.5 26.1 23 46 46.4 33.7L288 439.6V0z“]},hp={prefix:”fas“,iconName:”star-half-alt“,icon:[536,512,,”f5c0“,”M508.55 171.51L362.18 150.2 296.77 17.81C290.89 5.98 279.42 0 267.95 0c-11.4 0-22.79 5.9-28.69 17.81l-65.43 132.38-146.38 21.29c-26.25 3.8-36.77 36.09-17.74 54.59l105.89 103-25.06 145.48C86.98 495.33 103.57 512 122.15 512c4.93 0 10-1.17 14.87-3.75l130.95-68.68 130.94 68.7c4.86 2.55 9.92 3.71 14.83 3.71 18.6 0 35.22-16.61 31.66-37.4l-25.03-145.49 105.91-102.98c19.04-18.5 8.52-50.8-17.73-54.6zm-121.74 123.2l-18.12 17.62 4.28 24.88 19.52 113.45-102.13-53.59-22.38-11.74.03-317.19 51.03 103.29 11.18 22.63 25.01 3.64 114.23 16.63-82.65 80.38z“]},dp={prefix:”fas“,iconName:”star-of-david“,icon:[464,512,,”f69a“,”M405.68 256l53.21-89.39C473.3 142.4 455.48 112 426.88 112H319.96l-55.95-93.98C256.86 6.01 244.43 0 232 0s-24.86 6.01-32.01 18.02L144.04 112H37.11c-28.6 0-46.42 30.4-32.01 54.61L58.32 256 5.1 345.39C-9.31 369.6 8.51 400 37.11 400h106.93l55.95 93.98C207.14 505.99 219.57 512 232 512s24.86-6.01 32.01-18.02L319.96 400h106.93c28.6 0 46.42-30.4 32.01-54.61L405.68 256zm-12.78-88l-19.8 33.26L353.3 168h39.6zm-52.39 88l-52.39 88H175.88l-52.39-88 52.38-88h112.25l52.39 88zM232 73.72L254.79 112h-45.57L232 73.72zM71.1 168h39.6l-19.8 33.26L71.1 168zm0 176l19.8-33.26L110.7 344H71.1zM232 438.28L209.21 400h45.57L232 438.28zM353.29 344l19.8-33.26L392.9 344h-39.61z“]},pp={prefix:”fas“,iconName:”star-of-life“,icon:[480,512,,”f621“,”M471.99 334.43L336.06 256l135.93-78.43c7.66-4.42 10.28-14.2 5.86-21.86l-32.02-55.43c-4.42-7.65-14.21-10.28-21.87-5.86l-135.93 78.43V16c0-8.84-7.17-16-16.01-16h-64.04c-8.84 0-16.01 7.16-16.01 16v156.86L56.04 94.43c-7.66-4.42-17.45-1.79-21.87 5.86L2.15 155.71c-4.42 7.65-1.8 17.44 5.86 21.86L143.94 256 8.01 334.43c-7.66 4.42-10.28 14.21-5.86 21.86l32.02 55.43c4.42 7.65 14.21 10.27 21.87 5.86l135.93-78.43V496c0 8.84 7.17 16 16.01 16h64.04c8.84 0 16.01-7.16 16.01-16V339.14l135.93 78.43c7.66 4.42 17.45 1.8 21.87-5.86l32.02-55.43c4.42-7.65 1.8-17.43-5.86-21.85z“]},mp={prefix:”fas“,iconName:”step-backward“,icon:[448,512,,”f048“,”M64 468V44c0-6.6 5.4-12 12-12h48c6.6 0 12 5.4 12 12v176.4l195.5-181C352.1 22.3 384 36.6 384 64v384c0 27.4-31.9 41.7-52.5 24.6L136 292.7V468c0 6.6-5.4 12-12 12H76c-6.6 0-12-5.4-12-12z“]},vp={prefix:”fas“,iconName:”step-forward“,icon:[448,512,,”f051“,”M384 44v424c0 6.6-5.4 12-12 12h-48c-6.6 0-12-5.4-12-12V291.6l-195.5 181C95.9 489.7 64 475.4 64 448V64c0-27.4 31.9-41.7 52.5-24.6L312 219.3V44c0-6.6 5.4-12 12-12h48c6.6 0 12 5.4 12 12z“]},gp={prefix:”fas“,iconName:”stethoscope“,icon:[512,512,,”f0f1“,”M447.1 112c-34.2.5-62.3 28.4-63 62.6-.5 24.3 12.5 45.6 32 56.8V344c0 57.3-50.2 104-112 104-60 0-109.2-44.1-111.9-99.2C265 333.8 320 269.2 320 192V36.6c0-11.4-8.1-21.3-19.3-23.5L237.8.5c-13-2.6-25.6 5.8-28.2 18.8L206.4 35c-2.6 13 5.8 25.6 18.8 28.2l30.7 6.1v121.4c0 52.9-42.2 96.7-95.1 97.2-53.4.5-96.9-42.7-96.9-96V69.4l30.7-6.1c13-2.6 21.4-15.2 18.8-28.2l-3.1-15.7C107.7 6.4 95.1-2 82.1.6L19.3 13C8.1 15.3 0 25.1 0 36.6V192c0 77.3 55.1 142 128.1 156.8C130.7 439.2 208.6 512 304 512c97 0 176-75.4 176-168V231.4c19.1-11.1 32-31.7 32-55.4 0-35.7-29.2-64.5-64.9-64zm.9 80c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16z“]},yp={prefix:”fas“,iconName:”sticky-note“,icon:[448,512,,”f249“,”M312 320h136V56c0-13.3-10.7-24-24-24H24C10.7 32 0 42.7 0 56v400c0 13.3 10.7 24 24 24h264V344c0-13.2 10.8-24 24-24zm129 55l-98 98c-4.5 4.5-10.6 7-17 7h-6V352h128v6.1c0 6.3-2.5 12.4-7 16.9z“]},bp={prefix:”fas“,iconName:”stop“,icon:[448,512,,”f04d“,”M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48z“]},wp={prefix:”fas“,iconName:”stop-circle“,icon:[512,512,,”f28d“,”M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm96 328c0 8.8-7.2 16-16 16H176c-8.8 0-16-7.2-16-16V176c0-8.8 7.2-16 16-16h160c8.8 0 16 7.2 16 16v160z“]},xp={prefix:”fas“,iconName:”stopwatch“,icon:[448,512,,”f2f2“,”M432 304c0 114.9-93.1 208-208 208S16 418.9 16 304c0-104 76.3-190.2 176-205.5V64h-28c-6.6 0-12-5.4-12-12V12c0-6.6 5.4-12 12-12h120c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12h-28v34.5c37.5 5.8 71.7 21.6 99.7 44.6l27.5-27.5c4.7-4.7 12.3-4.7 17 0l28.3 28.3c4.7 4.7 4.7 12.3 0 17l-29.4 29.4-.6.6C419.7 223.3 432 262.2 432 304zm-176 36V188.5c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12V340c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12z“]},Sp={prefix:”fas“,iconName:”stopwatch-20“,icon:[448,512,,”e06f“,”M398.5,190.91l.59-.61,26.59-26.58a16,16,0,0,0,0-22.63L403,118.41a16,16,0,0,0-22.63,0l-24.68,24.68A206.68,206.68,0,0,0,256,98.5V64h32a16,16,0,0,0,16-16V16A16,16,0,0,0,288,0H160a16.05,16.05,0,0,0-16,16V48a16.05,16.05,0,0,0,16,16h32V98.5A207.92,207.92,0,0,0,16.09,297.57C12.64,411.5,106.76,510.22,220.72,512,337.13,513.77,432,420,432,304A206,206,0,0,0,398.5,190.91ZM204.37,377.55a8.2,8.2,0,0,1,8.32,8.07v22.31a8.2,8.2,0,0,1-8.32,8.07H121.52a16.46,16.46,0,0,1-16.61-17.62c2.78-35.22,14.67-57.41,38.45-91.37,20.42-29.19,27.1-37.32,27.1-62.34,0-16.92-1.79-24.27-12.21-24.27-9.39,0-12.69,7.4-12.69,22.68v5.23a8.2,8.2,0,0,1-8.33,8.07h-24.9a8.2,8.2,0,0,1-8.33-8.07v-4.07c0-27.3,8.48-60.24,56.43-60.24,43,0,55.57,25.85,55.57,61,0,35.58-12.44,51.21-34.35,81.31-11.56,15-24.61,35.57-26.41,51.2ZM344,352.32c0,35.16-12.3,63.68-57.23,63.68C243.19,416,232,386.48,232,352.55V247.22c0-40.73,19.58-63.22,56.2-63.22C325,184,344,206.64,344,245.3ZM287.87,221.73c-9.41,0-13.23,7.5-13.23,20V357.68c0,13.11,3.59,20.59,13.23,20.59s13-8,13-21.27V241.06C300.89,229.79,297.88,221.73,287.87,221.73Z“]},kp={prefix:”fas“,iconName:”store“,icon:[616,512,,”f54e“,”M602 118.6L537.1 15C531.3 5.7 521 0 510 0H106C95 0 84.7 5.7 78.9 15L14 118.6c-33.5 53.5-3.8 127.9 58.8 136.4 4.5.6 9.1.9 13.7.9 29.6 0 55.8-13 73.8-33.1 18 20.1 44.3 33.1 73.8 33.1 29.6 0 55.8-13 73.8-33.1 18 20.1 44.3 33.1 73.8 33.1 29.6 0 55.8-13 73.8-33.1 18.1 20.1 44.3 33.1 73.8 33.1 4.7 0 9.2-.3 13.7-.9 62.8-8.4 92.6-82.8 59-136.4zM529.5 288c-10 0-19.9-1.5-29.5-3.8V384H116v-99.8c-9.6 2.2-19.5 3.8-29.5 3.8-6 0-12.1-.4-18-1.2-5.6-.8-11.1-2.1-16.4-3.6V480c0 17.7 14.3 32 32 32h448c17.7 0 32-14.3 32-32V283.2c-5.4 1.6-10.8 2.9-16.4 3.6-6.1.8-12.1 1.2-18.2 1.2z“]},_p={prefix:”fas“,iconName:”store-alt“,icon:[640,512,,”f54f“,”M320 384H128V224H64v256c0 17.7 14.3 32 32 32h256c17.7 0 32-14.3 32-32V224h-64v160zm314.6-241.8l-85.3-128c-6-8.9-16-14.2-26.7-14.2H117.4c-10.7 0-20.7 5.3-26.6 14.2l-85.3 128c-14.2 21.3 1 49.8 26.6 49.8H608c25.5 0 40.7-28.5 26.6-49.8zM512 496c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V224h-64v272z“]},zp={prefix:”fas“,iconName:”store-alt-slash“,icon:[640,512,,”e070“,”M17.89,123.62,5.51,142.2c-14.2,21.3,1,49.8,26.59,49.8h74.26ZM576,413.42V224H512V364L384,265V224H330.92l-41.4-32H608c25.5,0,40.7-28.5,26.59-49.8l-85.29-128A32.18,32.18,0,0,0,522.6,0H117.42A31.87,31.87,0,0,0,90.81,14.2l-10.66,16L45.46,3.38A16,16,0,0,0,23,6.19L3.37,31.46A16,16,0,0,0,6.18,53.91L594.53,508.63A16,16,0,0,0,617,505.81l19.64-25.26a16,16,0,0,0-2.81-22.45ZM320,384H128V224H64V480a32,32,0,0,0,32,32H352a32,32,0,0,0,32-32V406.59l-64-49.47Z“]},Cp={prefix:”fas“,iconName:”store-slash“,icon:[640,512,,”e071“,”M121.51,384V284.2a119.43,119.43,0,0,1-28,3.8,123.46,123.46,0,0,1-17.1-1.2,114.88,114.88,0,0,1-15.58-3.6V480c0,17.7,13.59,32,30.4,32H505.75L348.42,384Zm-28-128.09c25.1,0,47.29-10.72,64-27.24L24,120.05c-30.52,53.39-2.45,126.53,56.49,135A95.68,95.68,0,0,0,93.48,255.91ZM602.13,458.09,547.2,413.41V283.2a93.5,93.5,0,0,1-15.57,3.6,127.31,127.31,0,0,1-17.29,1.2,114.89,114.89,0,0,1-28-3.8v79.68L348.52,251.77a88.06,88.06,0,0,0,25.41,4.14c28.11,0,53-13,70.11-33.11,17.19,20.11,42.08,33.11,70.11,33.11a94.31,94.31,0,0,0,13-.91c59.66-8.41,88-82.8,56.06-136.4L521.55,15A30.1,30.1,0,0,0,495.81,0H112A30.11,30.11,0,0,0,86.27,15L76.88,30.78,43.19,3.38A14.68,14.68,0,0,0,21.86,6.19L3.2,31.45A16.58,16.58,0,0,0,5.87,53.91L564.81,508.63a14.69,14.69,0,0,0,21.33-2.82l18.66-25.26A16.58,16.58,0,0,0,602.13,458.09Z“]},Mp={prefix:”fas“,iconName:”stream“,icon:[512,512,,”f550“,”M16 128h416c8.84 0 16-7.16 16-16V48c0-8.84-7.16-16-16-16H16C7.16 32 0 39.16 0 48v64c0 8.84 7.16 16 16 16zm480 80H80c-8.84 0-16 7.16-16 16v64c0 8.84 7.16 16 16 16h416c8.84 0 16-7.16 16-16v-64c0-8.84-7.16-16-16-16zm-64 176H16c-8.84 0-16 7.16-16 16v64c0 8.84 7.16 16 16 16h416c8.84 0 16-7.16 16-16v-64c0-8.84-7.16-16-16-16z“]},Op={prefix:”fas“,iconName:”street-view“,icon:[512,512,,”f21d“,”M367.9 329.76c-4.62 5.3-9.78 10.1-15.9 13.65v22.94c66.52 9.34 112 28.05 112 49.65 0 30.93-93.12 56-208 56S48 446.93 48 416c0-21.6 45.48-40.3 112-49.65v-22.94c-6.12-3.55-11.28-8.35-15.9-13.65C58.87 345.34 0 378.05 0 416c0 53.02 114.62 96 256 96s256-42.98 256-96c0-37.95-58.87-70.66-144.1-86.24zM256 128c35.35 0 64-28.65 64-64S291.35 0 256 0s-64 28.65-64 64 28.65 64 64 64zm-64 192v96c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-96c17.67 0 32-14.33 32-32v-96c0-26.51-21.49-48-48-48h-11.8c-11.07 5.03-23.26 8-36.2 8s-25.13-2.97-36.2-8H208c-26.51 0-48 21.49-48 48v96c0 17.67 14.33 32 32 32z“]},Tp={prefix:”fas“,iconName:”strikethrough“,icon:[512,512,,”f0cc“,”M496 224H293.9l-87.17-26.83A43.55 43.55 0 0 1 219.55 112h66.79A49.89 49.89 0 0 1 331 139.58a16 16 0 0 0 21.46 7.15l42.94-21.47a16 16 0 0 0 7.16-21.46l-.53-1A128 128 0 0 0 287.51 32h-68a123.68 123.68 0 0 0-123 135.64c2 20.89 10.1 39.83 21.78 56.36H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h480a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm-180.24 96A43 43 0 0 1 336 356.45 43.59 43.59 0 0 1 292.45 400h-66.79A49.89 49.89 0 0 1 181 372.42a16 16 0 0 0-21.46-7.15l-42.94 21.47a16 16 0 0 0-7.16 21.46l.53 1A128 128 0 0 0 224.49 480h68a123.68 123.68 0 0 0 123-135.64 114.25 114.25 0 0 0-5.34-24.36z“]},Ep={prefix:”fas“,iconName:”stroopwafel“,icon:[512,512,,”f551“,”M188.12 210.74L142.86 256l45.25 45.25L233.37 256l-45.25-45.26zm113.13-22.62L256 142.86l-45.25 45.25L256 233.37l45.25-45.25zm-90.5 135.76L256 369.14l45.26-45.26L256 278.63l-45.25 45.25zM256 0C114.62 0 0 114.62 0 256s114.62 256 256 256 256-114.62 256-256S397.38 0 256 0zm186.68 295.6l-11.31 11.31c-3.12 3.12-8.19 3.12-11.31 0l-28.29-28.29-45.25 45.25 33.94 33.94 16.97-16.97c3.12-3.12 8.19-3.12 11.31 0l11.31 11.31c3.12 3.12 3.12 8.19 0 11.31l-16.97 16.97 16.97 16.97c3.12 3.12 3.12 8.19 0 11.31l-11.31 11.31c-3.12 3.12-8.19 3.12-11.31 0l-16.97-16.97-16.97 16.97c-3.12 3.12-8.19 3.12-11.31 0l-11.31-11.31c-3.12-3.12-3.12-8.19 0-11.31l16.97-16.97-33.94-33.94-45.26 45.26 28.29 28.29c3.12 3.12 3.12 8.19 0 11.31l-11.31 11.31c-3.12 3.12-8.19 3.12-11.31 0L256 414.39l-28.29 28.29c-3.12 3.12-8.19 3.12-11.31 0l-11.31-11.31c-3.12-3.12-3.12-8.19 0-11.31l28.29-28.29-45.25-45.26-33.94 33.94 16.97 16.97c3.12 3.12 3.12 8.19 0 11.31l-11.31 11.31c-3.12 3.12-8.19 3.12-11.31 0l-16.97-16.97-16.97 16.97c-3.12 3.12-8.19 3.12-11.31 0l-11.31-11.31c-3.12-3.12-3.12-8.19 0-11.31l16.97-16.97-16.97-16.97c-3.12-3.12-3.12-8.19 0-11.31l11.31-11.31c3.12-3.12 8.19-3.12 11.31 0l16.97 16.97 33.94-33.94-45.25-45.25-28.29 28.29c-3.12 3.12-8.19 3.12-11.31 0L69.32 295.6c-3.12-3.12-3.12-8.19 0-11.31L97.61 256l-28.29-28.29c-3.12-3.12-3.12-8.19 0-11.31l11.31-11.31c3.12-3.12 8.19-3.12 11.31 0l28.29 28.29 45.25-45.26-33.94-33.94-16.97 16.97c-3.12 3.12-8.19 3.12-11.31 0l-11.31-11.31c-3.12-3.12-3.12-8.19 0-11.31l16.97-16.97-16.97-16.97c-3.12-3.12-3.12-8.19 0-11.31l11.31-11.31c3.12-3.12 8.19-3.12 11.31 0l16.97 16.97 16.97-16.97c3.12-3.12 8.19-3.12 11.31 0l11.31 11.31c3.12 3.12 3.12 8.19 0 11.31l-16.97 16.97 33.94 33.94 45.26-45.25-28.29-28.29c-3.12-3.12-3.12-8.19 0-11.31l11.31-11.31c3.12-3.12 8.19-3.12 11.31 0L256 97.61l28.29-28.29c3.12-3.12 8.19-3.12 11.31 0l11.31 11.31c3.12 3.12 3.12 8.19 0 11.31l-28.29 28.29 45.26 45.25 33.94-33.94-16.97-16.97c-3.12-3.12-3.12-8.19 0-11.31l11.31-11.31c3.12-3.12 8.19-3.12 11.31 0l16.97 16.97 16.97-16.97c3.12-3.12 8.19-3.12 11.31 0l11.31 11.31c3.12 3.12 3.12 8.19 0 11.31l-16.97 16.97 16.97 16.97c3.12 3.12 3.12 8.19 0 11.31l-11.31 11.31c-3.12 3.12-8.19 3.12-11.31 0l-16.97-16.97-33.94 33.94 45.25 45.26 28.29-28.29c3.12-3.12 8.19-3.12 11.31 0l11.31 11.31c3.12 3.12 3.12 8.19 0 11.31L414.39 256l28.29 28.28a8.015 8.015 0 0 1 0 11.32zM278.63 256l45.26 45.25L369.14 256l-45.25-45.26L278.63 256z“]},Lp={prefix:”fas“,iconName:”subscript“,icon:[512,512,,”f12c“,”M496 448h-16V304a16 16 0 0 0-16-16h-48a16 16 0 0 0-14.29 8.83l-16 32A16 16 0 0 0 400 352h16v96h-16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h96a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM336 64h-67a16 16 0 0 0-13.14 6.87l-79.9 115-79.9-115A16 16 0 0 0 83 64H16A16 16 0 0 0 0 80v48a16 16 0 0 0 16 16h33.48l77.81 112-77.81 112H16a16 16 0 0 0-16 16v48a16 16 0 0 0 16 16h67a16 16 0 0 0 13.14-6.87l79.9-115 79.9 115A16 16 0 0 0 269 448h67a16 16 0 0 0 16-16v-48a16 16 0 0 0-16-16h-33.48l-77.81-112 77.81-112H336a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16z“]},Ap={prefix:”fas“,iconName:”subway“,icon:[448,512,,”f239“,”M448 96v256c0 51.815-61.624 96-130.022 96l62.98 49.721C386.905 502.417 383.562 512 376 512H72c-7.578 0-10.892-9.594-4.957-14.279L130.022 448C61.82 448 0 403.954 0 352V96C0 42.981 64 0 128 0h192c65 0 128 42.981 128 96zM200 232V120c0-13.255-10.745-24-24-24H72c-13.255 0-24 10.745-24 24v112c0 13.255 10.745 24 24 24h104c13.255 0 24-10.745 24-24zm200 0V120c0-13.255-10.745-24-24-24H272c-13.255 0-24 10.745-24 24v112c0 13.255 10.745 24 24 24h104c13.255 0 24-10.745 24-24zm-48 56c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48zm-256 0c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48z“]},Rp={prefix:”fas“,iconName:”suitcase“,icon:[512,512,,”f0f2“,”M128 480h256V80c0-26.5-21.5-48-48-48H176c-26.5 0-48 21.5-48 48v400zm64-384h128v32H192V96zm320 80v256c0 26.5-21.5 48-48 48h-48V128h48c26.5 0 48 21.5 48 48zM96 480H48c-26.5 0-48-21.5-48-48V176c0-26.5 21.5-48 48-48h48v352z“]},Np={prefix:”fas“,iconName:”suitcase-rolling“,icon:[384,512,,”f5c1“,”M336 160H48c-26.51 0-48 21.49-48 48v224c0 26.51 21.49 48 48 48h16v16c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-16h128v16c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-16h16c26.51 0 48-21.49 48-48V208c0-26.51-21.49-48-48-48zm-16 216c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h240c4.42 0 8 3.58 8 8v16zm0-96c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h240c4.42 0 8 3.58 8 8v16zM144 48h96v80h48V48c0-26.51-21.49-48-48-48h-96c-26.51 0-48 21.49-48 48v80h48V48z“]},Hp={prefix:”fas“,iconName:”sun“,icon:[512,512,,”f185“,”M256 160c-52.9 0-96 43.1-96 96s43.1 96 96 96 96-43.1 96-96-43.1-96-96-96zm246.4 80.5l-94.7-47.3 33.5-100.4c4.5-13.6-8.4-26.5-21.9-21.9l-100.4 33.5-47.4-94.8c-6.4-12.8-24.6-12.8-31 0l-47.3 94.7L92.7 70.8c-13.6-4.5-26.5 8.4-21.9 21.9l33.5 100.4-94.7 47.4c-12.8 6.4-12.8 24.6 0 31l94.7 47.3-33.5 100.5c-4.5 13.6 8.4 26.5 21.9 21.9l100.4-33.5 47.3 94.7c6.4 12.8 24.6 12.8 31 0l47.3-94.7 100.4 33.5c13.6 4.5 26.5-8.4 21.9-21.9l-33.5-100.4 94.7-47.3c13-6.5 13-24.7.2-31.1zm-155.9 106c-49.9 49.9-131.1 49.9-181 0-49.9-49.9-49.9-131.1 0-181 49.9-49.9 131.1-49.9 181 0 49.9 49.9 49.9 131.1 0 181z“]},Pp={prefix:”fas“,iconName:”superscript“,icon:[512,512,,”f12b“,”M496 160h-16V16a16 16 0 0 0-16-16h-48a16 16 0 0 0-14.29 8.83l-16 32A16 16 0 0 0 400 64h16v96h-16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h96a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM336 64h-67a16 16 0 0 0-13.14 6.87l-79.9 115-79.9-115A16 16 0 0 0 83 64H16A16 16 0 0 0 0 80v48a16 16 0 0 0 16 16h33.48l77.81 112-77.81 112H16a16 16 0 0 0-16 16v48a16 16 0 0 0 16 16h67a16 16 0 0 0 13.14-6.87l79.9-115 79.9 115A16 16 0 0 0 269 448h67a16 16 0 0 0 16-16v-48a16 16 0 0 0-16-16h-33.48l-77.81-112 77.81-112H336a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16z“]},jp={prefix:”fas“,iconName:”surprise“,icon:[496,512,,”f5c2“,”M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM136 208c0-17.7 14.3-32 32-32s32 14.3 32 32-14.3 32-32 32-32-14.3-32-32zm112 208c-35.3 0-64-28.7-64-64s28.7-64 64-64 64 28.7 64 64-28.7 64-64 64zm80-176c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z“]},Vp={prefix:”fas“,iconName:”swatchbook“,icon:[512,512,,”f5c3“,”M434.66,167.71h0L344.5,77.36a31.83,31.83,0,0,0-45-.07h0l-.07.07L224,152.88V424L434.66,212.9A32,32,0,0,0,434.66,167.71ZM480,320H373.09L186.68,506.51c-2.06,2.07-4.5,3.58-6.68,5.49H480a32,32,0,0,0,32-32V352A32,32,0,0,0,480,320ZM192,32A32,32,0,0,0,160,0H32A32,32,0,0,0,0,32V416a96,96,0,0,0,192,0ZM96,440a24,24,0,1,1,24-24A24,24,0,0,1,96,440Zm32-184H64V192h64Zm0-128H64V64h64Z“]},Dp={prefix:”fas“,iconName:”swimmer“,icon:[640,512,,”f5c4“,”M189.61 310.58c3.54 3.26 15.27 9.42 34.39 9.42s30.86-6.16 34.39-9.42c16.02-14.77 34.5-22.58 53.46-22.58h16.3c18.96 0 37.45 7.81 53.46 22.58 3.54 3.26 15.27 9.42 34.39 9.42s30.86-6.16 34.39-9.42c14.86-13.71 31.88-21.12 49.39-22.16l-112.84-80.6 18-12.86c3.64-2.58 8.28-3.52 12.62-2.61l100.35 21.53c25.91 5.53 51.44-10.97 57-36.88 5.55-25.92-10.95-51.44-36.88-57L437.68 98.47c-30.73-6.58-63.02.12-88.56 18.38l-80.02 57.17c-10.38 7.39-19.36 16.44-26.72 26.94L173.75 299c5.47 3.23 10.82 6.93 15.86 11.58zM624 352h-16c-26.04 0-45.8-8.42-56.09-17.9-8.9-8.21-19.66-14.1-31.77-14.1h-16.3c-12.11 0-22.87 5.89-31.77 14.1C461.8 343.58 442.04 352 416 352s-45.8-8.42-56.09-17.9c-8.9-8.21-19.66-14.1-31.77-14.1h-16.3c-12.11 0-22.87 5.89-31.77 14.1C269.8 343.58 250.04 352 224 352s-45.8-8.42-56.09-17.9c-8.9-8.21-19.66-14.1-31.77-14.1h-16.3c-12.11 0-22.87 5.89-31.77 14.1C77.8 343.58 58.04 352 32 352H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h16c38.62 0 72.72-12.19 96-31.84 23.28 19.66 57.38 31.84 96 31.84s72.72-12.19 96-31.84c23.28 19.66 57.38 31.84 96 31.84s72.72-12.19 96-31.84c23.28 19.66 57.38 31.84 96 31.84h16c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zm-512-96c44.18 0 80-35.82 80-80s-35.82-80-80-80-80 35.82-80 80 35.82 80 80 80z“]},Ip={prefix:”fas“,iconName:”swimming-pool“,icon:[640,512,,”f5c5“,”M624 416h-16c-26.04 0-45.8-8.42-56.09-17.9-8.9-8.21-19.66-14.1-31.77-14.1h-16.3c-12.11 0-22.87 5.89-31.77 14.1C461.8 407.58 442.04 416 416 416s-45.8-8.42-56.09-17.9c-8.9-8.21-19.66-14.1-31.77-14.1h-16.3c-12.11 0-22.87 5.89-31.77 14.1C269.8 407.58 250.04 416 224 416s-45.8-8.42-56.09-17.9c-8.9-8.21-19.66-14.1-31.77-14.1h-16.3c-12.11 0-22.87 5.89-31.77 14.1C77.8 407.58 58.04 416 32 416H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h16c38.62 0 72.72-12.19 96-31.84 23.28 19.66 57.38 31.84 96 31.84s72.72-12.19 96-31.84c23.28 19.66 57.38 31.84 96 31.84s72.72-12.19 96-31.84c23.28 19.66 57.38 31.84 96 31.84h16c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zm-400-32v-96h192v96c19.12 0 30.86-6.16 34.39-9.42 9.17-8.46 19.2-14.34 29.61-18.07V128c0-17.64 14.36-32 32-32s32 14.36 32 32v16c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-16c0-52.94-43.06-96-96-96s-96 43.06-96 96v96H224v-96c0-17.64 14.36-32 32-32s32 14.36 32 32v16c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-16c0-52.94-43.06-96-96-96s-96 43.06-96 96v228.5c10.41 3.73 20.44 9.62 29.61 18.07 3.53 3.27 15.27 9.43 34.39 9.43z“]},Fp={prefix:”fas“,iconName:”synagogue“,icon:[640,512,,”f69b“,”M70 196.51L6.67 268.29A26.643 26.643 0 0 0 0 285.93V512h128V239.58l-38-43.07c-5.31-6.01-14.69-6.01-20 0zm563.33 71.78L570 196.51c-5.31-6.02-14.69-6.02-20 0l-38 43.07V512h128V285.93c0-6.5-2.37-12.77-6.67-17.64zM339.99 7.01c-11.69-9.35-28.29-9.35-39.98 0l-128 102.4A32.005 32.005 0 0 0 160 134.4V512h96v-92.57c0-31.88 21.78-61.43 53.25-66.55C349.34 346.35 384 377.13 384 416v96h96V134.4c0-9.72-4.42-18.92-12.01-24.99l-128-102.4zm52.07 215.55c1.98 3.15-.29 7.24-4 7.24h-38.94L324 269.79c-1.85 2.95-6.15 2.95-8 0l-25.12-39.98h-38.94c-3.72 0-5.98-4.09-4-7.24l19.2-30.56-19.2-30.56c-1.98-3.15.29-7.24 4-7.24h38.94l25.12-40c1.85-2.95 6.15-2.95 8 0l25.12 39.98h38.95c3.71 0 5.98 4.09 4 7.24L372.87 192l19.19 30.56z“]},Bp={prefix:”fas“,iconName:”sync“,icon:[512,512,,”f021“,”M440.65 12.57l4 82.77A247.16 247.16 0 0 0 255.83 8C134.73 8 33.91 94.92 12.29 209.82A12 12 0 0 0 24.09 224h49.05a12 12 0 0 0 11.67-9.26 175.91 175.91 0 0 1 317-56.94l-101.46-4.86a12 12 0 0 0-12.57 12v47.41a12 12 0 0 0 12 12H500a12 12 0 0 0 12-12V12a12 12 0 0 0-12-12h-47.37a12 12 0 0 0-11.98 12.57zM255.83 432a175.61 175.61 0 0 1-146-77.8l101.8 4.87a12 12 0 0 0 12.57-12v-47.4a12 12 0 0 0-12-12H12a12 12 0 0 0-12 12V500a12 12 0 0 0 12 12h47.35a12 12 0 0 0 12-12.6l-4.15-82.57A247.17 247.17 0 0 0 255.83 504c121.11 0 221.93-86.92 243.55-201.82a12 12 0 0 0-11.8-14.18h-49.05a12 12 0 0 0-11.67 9.26A175.86 175.86 0 0 1 255.83 432z“]},Up={prefix:”fas“,iconName:”sync-alt“,icon:[512,512,,”f2f1“,”M370.72 133.28C339.458 104.008 298.888 87.962 255.848 88c-77.458.068-144.328 53.178-162.791 126.85-1.344 5.363-6.122 9.15-11.651 9.15H24.103c-7.498 0-13.194-6.807-11.807-14.176C33.933 94.924 134.813 8 256 8c66.448 0 126.791 26.136 171.315 68.685L463.03 40.97C478.149 25.851 504 36.559 504 57.941V192c0 13.255-10.745 24-24 24H345.941c-21.382 0-32.09-25.851-16.971-40.971l41.75-41.749zM32 296h134.059c21.382 0 32.09 25.851 16.971 40.971l-41.75 41.75c31.262 29.273 71.835 45.319 114.876 45.28 77.418-.07 144.315-53.144 162.787-126.849 1.344-5.363 6.122-9.15 11.651-9.15h57.304c7.498 0 13.194 6.807 11.807 14.176C478.067 417.076 377.187 504 256 504c-66.448 0-126.791-26.136-171.315-68.685L48.97 471.03C33.851 486.149 8 475.441 8 454.059V320c0-13.255 10.745-24 24-24z“]},qp={prefix:”fas“,iconName:”syringe“,icon:[512,512,,”f48e“,”M201.5 174.8l55.7 55.8c3.1 3.1 3.1 8.2 0 11.3l-11.3 11.3c-3.1 3.1-8.2 3.1-11.3 0l-55.7-55.8-45.3 45.3 55.8 55.8c3.1 3.1 3.1 8.2 0 11.3l-11.3 11.3c-3.1 3.1-8.2 3.1-11.3 0L111 265.2l-26.4 26.4c-17.3 17.3-25.6 41.1-23 65.4l7.1 63.6L2.3 487c-3.1 3.1-3.1 8.2 0 11.3l11.3 11.3c3.1 3.1 8.2 3.1 11.3 0l66.3-66.3 63.6 7.1c23.9 2.6 47.9-5.4 65.4-23l181.9-181.9-135.7-135.7-64.9 65zm308.2-93.3L430.5 2.3c-3.1-3.1-8.2-3.1-11.3 0l-11.3 11.3c-3.1 3.1-3.1 8.2 0 11.3l28.3 28.3-45.3 45.3-56.6-56.6-17-17c-3.1-3.1-8.2-3.1-11.3 0l-33.9 33.9c-3.1 3.1-3.1 8.2 0 11.3l17 17L424.8 223l17 17c3.1 3.1 8.2 3.1 11.3 0l33.9-34c3.1-3.1 3.1-8.2 0-11.3l-73.5-73.5 45.3-45.3 28.3 28.3c3.1 3.1 8.2 3.1 11.3 0l11.3-11.3c3.1-3.2 3.1-8.2 0-11.4z“]},Gp={prefix:”fas“,iconName:”table“,icon:[512,512,,”f0ce“,”M464 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V80c0-26.51-21.49-48-48-48zM224 416H64v-96h160v96zm0-160H64v-96h160v96zm224 160H288v-96h160v96zm0-160H288v-96h160v96z“]},Wp={prefix:”fas“,iconName:”table-tennis“,icon:[512,512,,”f45d“,”M496.2 296.5C527.7 218.7 512 126.2 449 63.1 365.1-21 229-21 145.1 63.1l-56 56.1 211.5 211.5c46.1-62.1 131.5-77.4 195.6-34.2zm-217.9 79.7L57.9 155.9c-27.3 45.3-21.7 105 17.3 144.1l34.5 34.6L6.7 424c-8.6 7.5-9.1 20.7-1 28.8l53.4 53.5c8 8.1 21.2 7.6 28.7-1L177.1 402l35.7 35.7c19.7 19.7 44.6 30.5 70.3 33.3-7.1-17-11-35.6-11-55.1-.1-13.8 2.5-27 6.2-39.7zM416 320c-53 0-96 43-96 96s43 96 96 96 96-43 96-96-43-96-96-96z“]},Zp={prefix:”fas“,iconName:”tablet“,icon:[448,512,,”f10a“,”M400 0H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zM224 480c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z“]},$p={prefix:”fas“,iconName:”tablet-alt“,icon:[448,512,,”f3fa“,”M400 0H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zM224 480c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm176-108c0 6.6-5.4 12-12 12H60c-6.6 0-12-5.4-12-12V60c0-6.6 5.4-12 12-12h328c6.6 0 12 5.4 12 12v312z“]},Jp={prefix:”fas“,iconName:”tablets“,icon:[640,512,,”f490“,”M160 192C78.9 192 12.5 250.5.1 326.7c-.8 4.8 3.3 9.3 8.3 9.3h303.3c5 0 9.1-4.5 8.3-9.3C307.5 250.5 241.1 192 160 192zm151.6 176H8.4c-5 0-9.1 4.5-8.3 9.3C12.5 453.5 78.9 512 160 512s147.5-58.5 159.9-134.7c.8-4.8-3.3-9.3-8.3-9.3zM593.4 46.6c-56.5-56.5-144.2-61.4-206.9-16-4 2.9-4.3 8.9-.8 12.3L597 254.3c3.5 3.5 9.5 3.2 12.3-.8 45.5-62.7 40.6-150.4-15.9-206.9zM363 65.7c-3.5-3.5-9.5-3.2-12.3.8-45.4 62.7-40.5 150.4 15.9 206.9 56.5 56.5 144.2 61.4 206.9 15.9 4-2.9 4.3-8.9.8-12.3L363 65.7z“]},Kp={prefix:”fas“,iconName:”tachometer-alt“,icon:[576,512,,”f3fd“,”M288 32C128.94 32 0 160.94 0 320c0 52.8 14.25 102.26 39.06 144.8 5.61 9.62 16.3 15.2 27.44 15.2h443c11.14 0 21.83-5.58 27.44-15.2C561.75 422.26 576 372.8 576 320c0-159.06-128.94-288-288-288zm0 64c14.71 0 26.58 10.13 30.32 23.65-1.11 2.26-2.64 4.23-3.45 6.67l-9.22 27.67c-5.13 3.49-10.97 6.01-17.64 6.01-17.67 0-32-14.33-32-32S270.33 96 288 96zM96 384c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm48-160c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm246.77-72.41l-61.33 184C343.13 347.33 352 364.54 352 384c0 11.72-3.38 22.55-8.88 32H232.88c-5.5-9.45-8.88-20.28-8.88-32 0-33.94 26.5-61.43 59.9-63.59l61.34-184.01c4.17-12.56 17.73-19.45 30.36-15.17 12.57 4.19 19.35 17.79 15.17 30.36zm14.66 57.2l15.52-46.55c3.47-1.29 7.13-2.23 11.05-2.23 17.67 0 32 14.33 32 32s-14.33 32-32 32c-11.38-.01-20.89-6.28-26.57-15.22zM480 384c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z“]},Qp={prefix:”fas“,iconName:”tag“,icon:[512,512,,”f02b“,”M0 252.118V48C0 21.49 21.49 0 48 0h204.118a48 48 0 0 1 33.941 14.059l211.882 211.882c18.745 18.745 18.745 49.137 0 67.882L293.823 497.941c-18.745 18.745-49.137 18.745-67.882 0L14.059 286.059A48 48 0 0 1 0 252.118zM112 64c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48z“]},Yp={prefix:”fas“,iconName:”tags“,icon:[640,512,,”f02c“,”M497.941 225.941L286.059 14.059A48 48 0 0 0 252.118 0H48C21.49 0 0 21.49 0 48v204.118a48 48 0 0 0 14.059 33.941l211.882 211.882c18.744 18.745 49.136 18.746 67.882 0l204.118-204.118c18.745-18.745 18.745-49.137 0-67.882zM112 160c-26.51 0-48-21.49-48-48s21.49-48 48-48 48 21.49 48 48-21.49 48-48 48zm513.941 133.823L421.823 497.941c-18.745 18.745-49.137 18.745-67.882 0l-.36-.36L527.64 323.522c16.999-16.999 26.36-39.6 26.36-63.64s-9.362-46.641-26.36-63.64L331.397 0h48.721a48 48 0 0 1 33.941 14.059l211.882 211.882c18.745 18.745 18.745 49.137 0 67.882z“]},Xp={prefix:”fas“,iconName:”tape“,icon:[640,512,,”f4db“,”M224 192c-35.3 0-64 28.7-64 64s28.7 64 64 64 64-28.7 64-64-28.7-64-64-64zm400 224H380.6c41.5-40.7 67.4-97.3 67.4-160 0-123.7-100.3-224-224-224S0 132.3 0 256s100.3 224 224 224h400c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zm-400-64c-53 0-96-43-96-96s43-96 96-96 96 43 96 96-43 96-96 96z“]},em={prefix:”fas“,iconName:”tasks“,icon:[512,512,,”f0ae“,”M139.61 35.5a12 12 0 0 0-17 0L58.93 98.81l-22.7-22.12a12 12 0 0 0-17 0L3.53 92.41a12 12 0 0 0 0 17l47.59 47.4a12.78 12.78 0 0 0 17.61 0l15.59-15.62L156.52 69a12.09 12.09 0 0 0 .09-17zm0 159.19a12 12 0 0 0-17 0l-63.68 63.72-22.7-22.1a12 12 0 0 0-17 0L3.53 252a12 12 0 0 0 0 17L51 316.5a12.77 12.77 0 0 0 17.6 0l15.7-15.69 72.2-72.22a12 12 0 0 0 .09-16.9zM64 368c-26.49 0-48.59 21.5-48.59 48S37.53 464 64 464a48 48 0 0 0 0-96zm432 16H208a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h288a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-320H208a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h288a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 160H208a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h288a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16z“]},tm={prefix:”fas“,iconName:”taxi“,icon:[512,512,,”f1ba“,”M462 241.64l-22-84.84c-9.6-35.2-41.6-60.8-76.8-60.8H352V64c0-17.67-14.33-32-32-32H192c-17.67 0-32 14.33-32 32v32h-11.2c-35.2 0-67.2 25.6-76.8 60.8l-22 84.84C21.41 248.04 0 273.47 0 304v48c0 23.63 12.95 44.04 32 55.12V448c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-32h256v32c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-40.88c19.05-11.09 32-31.5 32-55.12v-48c0-30.53-21.41-55.96-50-62.36zM96 352c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm20.55-112l17.2-66.36c2.23-8.16 9.59-13.64 15.06-13.64h214.4c5.47 0 12.83 5.48 14.85 12.86L395.45 240h-278.9zM416 352c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z“]},nm={prefix:”fas“,iconName:”teeth“,icon:[640,512,,”f62e“,”M544 0H96C42.98 0 0 42.98 0 96v320c0 53.02 42.98 96 96 96h448c53.02 0 96-42.98 96-96V96c0-53.02-42.98-96-96-96zM160 368c0 26.51-21.49 48-48 48s-48-21.49-48-48v-64c0-8.84 7.16-16 16-16h64c8.84 0 16 7.16 16 16v64zm0-128c0 8.84-7.16 16-16 16H80c-8.84 0-16-7.16-16-16v-64c0-26.51 21.49-48 48-48s48 21.49 48 48v64zm144 120c0 30.93-25.07 56-56 56s-56-25.07-56-56v-56c0-8.84 7.16-16 16-16h80c8.84 0 16 7.16 16 16v56zm0-120c0 8.84-7.16 16-16 16h-80c-8.84 0-16-7.16-16-16v-88c0-30.93 25.07-56 56-56s56 25.07 56 56v88zm144 120c0 30.93-25.07 56-56 56s-56-25.07-56-56v-56c0-8.84 7.16-16 16-16h80c8.84 0 16 7.16 16 16v56zm0-120c0 8.84-7.16 16-16 16h-80c-8.84 0-16-7.16-16-16v-88c0-30.93 25.07-56 56-56s56 25.07 56 56v88zm128 128c0 26.51-21.49 48-48 48s-48-21.49-48-48v-64c0-8.84 7.16-16 16-16h64c8.84 0 16 7.16 16 16v64zm0-128c0 8.84-7.16 16-16 16h-64c-8.84 0-16-7.16-16-16v-64c0-26.51 21.49-48 48-48s48 21.49 48 48v64z“]},rm={prefix:”fas“,iconName:”teeth-open“,icon:[640,512,,”f62f“,”M544 0H96C42.98 0 0 42.98 0 96v64c0 35.35 28.66 64 64 64h512c35.34 0 64-28.65 64-64V96c0-53.02-42.98-96-96-96zM160 176c0 8.84-7.16 16-16 16H80c-8.84 0-16-7.16-16-16v-32c0-26.51 21.49-48 48-48s48 21.49 48 48v32zm144 0c0 8.84-7.16 16-16 16h-80c-8.84 0-16-7.16-16-16v-56c0-30.93 25.07-56 56-56s56 25.07 56 56v56zm144 0c0 8.84-7.16 16-16 16h-80c-8.84 0-16-7.16-16-16v-56c0-30.93 25.07-56 56-56s56 25.07 56 56v56zm128 0c0 8.84-7.16 16-16 16h-64c-8.84 0-16-7.16-16-16v-32c0-26.51 21.49-48 48-48s48 21.49 48 48v32zm0 144H64c-35.34 0-64 28.65-64 64v32c0 53.02 42.98 96 96 96h448c53.02 0 96-42.98 96-96v-32c0-35.35-28.66-64-64-64zm-416 80c0 26.51-21.49 48-48 48s-48-21.49-48-48v-32c0-8.84 7.16-16 16-16h64c8.84 0 16 7.16 16 16v32zm144-8c0 30.93-25.07 56-56 56s-56-25.07-56-56v-24c0-8.84 7.16-16 16-16h80c8.84 0 16 7.16 16 16v24zm144 0c0 30.93-25.07 56-56 56s-56-25.07-56-56v-24c0-8.84 7.16-16 16-16h80c8.84 0 16 7.16 16 16v24zm128 8c0 26.51-21.49 48-48 48s-48-21.49-48-48v-32c0-8.84 7.16-16 16-16h64c8.84 0 16 7.16 16 16v32z“]},im={prefix:”fas“,iconName:”temperature-high“,icon:[512,512,,”f769“,”M416 0c-52.9 0-96 43.1-96 96s43.1 96 96 96 96-43.1 96-96-43.1-96-96-96zm0 128c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm-160-16C256 50.1 205.9 0 144 0S32 50.1 32 112v166.5C12.3 303.2 0 334 0 368c0 79.5 64.5 144 144 144s144-64.5 144-144c0-34-12.3-64.9-32-89.5V112zM144 448c-44.1 0-80-35.9-80-80 0-25.5 12.2-48.9 32-63.8V112c0-26.5 21.5-48 48-48s48 21.5 48 48v192.2c19.8 14.8 32 38.3 32 63.8 0 44.1-35.9 80-80 80zm16-125.1V112c0-8.8-7.2-16-16-16s-16 7.2-16 16v210.9c-18.6 6.6-32 24.2-32 45.1 0 26.5 21.5 48 48 48s48-21.5 48-48c0-20.9-13.4-38.5-32-45.1z“]},am={prefix:”fas“,iconName:”temperature-low“,icon:[512,512,,”f76b“,”M416 0c-52.9 0-96 43.1-96 96s43.1 96 96 96 96-43.1 96-96-43.1-96-96-96zm0 128c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm-160-16C256 50.1 205.9 0 144 0S32 50.1 32 112v166.5C12.3 303.2 0 334 0 368c0 79.5 64.5 144 144 144s144-64.5 144-144c0-34-12.3-64.9-32-89.5V112zM144 448c-44.1 0-80-35.9-80-80 0-25.5 12.2-48.9 32-63.8V112c0-26.5 21.5-48 48-48s48 21.5 48 48v192.2c19.8 14.8 32 38.3 32 63.8 0 44.1-35.9 80-80 80zm16-125.1V304c0-8.8-7.2-16-16-16s-16 7.2-16 16v18.9c-18.6 6.6-32 24.2-32 45.1 0 26.5 21.5 48 48 48s48-21.5 48-48c0-20.9-13.4-38.5-32-45.1z“]},om={prefix:”fas“,iconName:”tenge“,icon:[384,512,,”f7d7“,”M372 160H12c-6.6 0-12 5.4-12 12v56c0 6.6 5.4 12 12 12h140v228c0 6.6 5.4 12 12 12h56c6.6 0 12-5.4 12-12V240h140c6.6 0 12-5.4 12-12v-56c0-6.6-5.4-12-12-12zm0-128H12C5.4 32 0 37.4 0 44v56c0 6.6 5.4 12 12 12h360c6.6 0 12-5.4 12-12V44c0-6.6-5.4-12-12-12z“]},cm={prefix:”fas“,iconName:”terminal“,icon:[640,512,,”f120“,”M257.981 272.971L63.638 467.314c-9.373 9.373-24.569 9.373-33.941 0L7.029 444.647c-9.357-9.357-9.375-24.522-.04-33.901L161.011 256 6.99 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L257.981 239.03c9.373 9.372 9.373 24.568 0 33.941zM640 456v-32c0-13.255-10.745-24-24-24H312c-13.255 0-24 10.745-24 24v32c0 13.255 10.745 24 24 24h304c13.255 0 24-10.745 24-24z“]},sm={prefix:”fas“,iconName:”text-height“,icon:[576,512,,”f034“,”M304 32H16A16 16 0 0 0 0 48v96a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32h56v304H80a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h160a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16h-40V112h56v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16zm256 336h-48V144h48c14.31 0 21.33-17.31 11.31-27.31l-80-80a16 16 0 0 0-22.62 0l-80 80C379.36 126 384.36 144 400 144h48v224h-48c-14.31 0-21.32 17.31-11.31 27.31l80 80a16 16 0 0 0 22.62 0l80-80C580.64 386 575.64 368 560 368z“]},um={prefix:”fas“,iconName:”text-width“,icon:[448,512,,”f035“,”M432 32H16A16 16 0 0 0 0 48v80a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-16h120v112h-24a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h128a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16h-24V112h120v16a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16zm-68.69 260.69C354 283.36 336 288.36 336 304v48H112v-48c0-14.31-17.31-21.32-27.31-11.31l-80 80a16 16 0 0 0 0 22.62l80 80C94 484.64 112 479.64 112 464v-48h224v48c0 14.31 17.31 21.33 27.31 11.31l80-80a16 16 0 0 0 0-22.62z“]},lm={prefix:”fas“,iconName:”th“,icon:[512,512,,”f00a“,”M149.333 56v80c0 13.255-10.745 24-24 24H24c-13.255 0-24-10.745-24-24V56c0-13.255 10.745-24 24-24h101.333c13.255 0 24 10.745 24 24zm181.334 240v-80c0-13.255-10.745-24-24-24H205.333c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24h101.333c13.256 0 24.001-10.745 24.001-24zm32-240v80c0 13.255 10.745 24 24 24H488c13.255 0 24-10.745 24-24V56c0-13.255-10.745-24-24-24H386.667c-13.255 0-24 10.745-24 24zm-32 80V56c0-13.255-10.745-24-24-24H205.333c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24h101.333c13.256 0 24.001-10.745 24.001-24zm-205.334 56H24c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24h101.333c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24zM0 376v80c0 13.255 10.745 24 24 24h101.333c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H24c-13.255 0-24 10.745-24 24zm386.667-56H488c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H386.667c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24zm0 160H488c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H386.667c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24zM181.333 376v80c0 13.255 10.745 24 24 24h101.333c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H205.333c-13.255 0-24 10.745-24 24z“]},fm={prefix:”fas“,iconName:”th-large“,icon:[512,512,,”f009“,”M296 32h192c13.255 0 24 10.745 24 24v160c0 13.255-10.745 24-24 24H296c-13.255 0-24-10.745-24-24V56c0-13.255 10.745-24 24-24zm-80 0H24C10.745 32 0 42.745 0 56v160c0 13.255 10.745 24 24 24h192c13.255 0 24-10.745 24-24V56c0-13.255-10.745-24-24-24zM0 296v160c0 13.255 10.745 24 24 24h192c13.255 0 24-10.745 24-24V296c0-13.255-10.745-24-24-24H24c-13.255 0-24 10.745-24 24zm296 184h192c13.255 0 24-10.745 24-24V296c0-13.255-10.745-24-24-24H296c-13.255 0-24 10.745-24 24v160c0 13.255 10.745 24 24 24z“]},hm={prefix:”fas“,iconName:”th-list“,icon:[512,512,,”f00b“,”M149.333 216v80c0 13.255-10.745 24-24 24H24c-13.255 0-24-10.745-24-24v-80c0-13.255 10.745-24 24-24h101.333c13.255 0 24 10.745 24 24zM0 376v80c0 13.255 10.745 24 24 24h101.333c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H24c-13.255 0-24 10.745-24 24zM125.333 32H24C10.745 32 0 42.745 0 56v80c0 13.255 10.745 24 24 24h101.333c13.255 0 24-10.745 24-24V56c0-13.255-10.745-24-24-24zm80 448H488c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H205.333c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24zm-24-424v80c0 13.255 10.745 24 24 24H488c13.255 0 24-10.745 24-24V56c0-13.255-10.745-24-24-24H205.333c-13.255 0-24 10.745-24 24zm24 264H488c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H205.333c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24z“]},dm={prefix:”fas“,iconName:”theater-masks“,icon:[640,512,,”f630“,”M206.86 245.15c-35.88 10.45-59.95 41.2-57.53 74.1 11.4-12.72 28.81-23.7 49.9-30.92l7.63-43.18zM95.81 295L64.08 115.49c-.29-1.62.28-2.62.24-2.65 57.76-32.06 123.12-49.01 189.01-49.01 1.61 0 3.23.17 4.85.19 13.95-13.47 31.73-22.83 51.59-26 18.89-3.02 38.05-4.55 57.18-5.32-9.99-13.95-24.48-24.23-41.77-27C301.27 1.89 277.24 0 253.32 0 176.66 0 101.02 19.42 33.2 57.06 9.03 70.48-3.92 98.48 1.05 126.58l31.73 179.51c14.23 80.52 136.33 142.08 204.45 142.08 3.59 0 6.75-.46 10.01-.8-13.52-17.08-28.94-40.48-39.5-67.58-47.61-12.98-106.06-51.62-111.93-84.79zm97.55-137.46c-.73-4.12-2.23-7.87-4.07-11.4-8.25 8.91-20.67 15.75-35.32 18.32-14.65 2.58-28.67.4-39.48-5.17-.52 3.94-.64 7.98.09 12.1 3.84 21.7 24.58 36.19 46.34 32.37 21.75-3.82 36.28-24.52 32.44-46.22zM606.8 120.9c-88.98-49.38-191.43-67.41-291.98-51.35-27.31 4.36-49.08 26.26-54.04 54.36l-31.73 179.51c-15.39 87.05 95.28 196.27 158.31 207.35 63.03 11.09 204.47-53.79 219.86-140.84l31.73-179.51c4.97-28.11-7.98-56.11-32.15-69.52zm-273.24 96.8c3.84-21.7 24.58-36.19 46.34-32.36 21.76 3.83 36.28 24.52 32.45 46.22-.73 4.12-2.23 7.87-4.07 11.4-8.25-8.91-20.67-15.75-35.32-18.32-14.65-2.58-28.67-.4-39.48 5.17-.53-3.95-.65-7.99.08-12.11zm70.47 198.76c-55.68-9.79-93.52-59.27-89.04-112.9 20.6 25.54 56.21 46.17 99.49 53.78 43.28 7.61 83.82.37 111.93-16.6-14.18 51.94-66.71 85.51-122.38 75.72zm130.3-151.34c-8.25-8.91-20.68-15.75-35.33-18.32-14.65-2.58-28.67-.4-39.48 5.17-.52-3.94-.64-7.98.09-12.1 3.84-21.7 24.58-36.19 46.34-32.37 21.75 3.83 36.28 24.52 32.45 46.22-.73 4.13-2.23 7.88-4.07 11.4z“]},pm={prefix:”fas“,iconName:”thermometer“,icon:[512,512,,”f491“,”M476.8 20.4c-37.5-30.7-95.5-26.3-131.9 10.2l-45.7 46 50.5 50.5c3.1 3.1 3.1 8.2 0 11.3l-11.3 11.3c-3.1 3.1-8.2 3.1-11.3 0l-50.4-50.5-45.1 45.4 50.3 50.4c3.1 3.1 3.1 8.2 0 11.3l-11.3 11.3c-3.1 3.1-8.2 3.1-11.3 0L209 167.4l-45.1 45.4L214 263c3.1 3.1 3.1 8.2 0 11.3l-11.3 11.3c-3.1 3.1-8.2 3.1-11.3 0l-50.1-50.2L96 281.1V382L7 471c-9.4 9.4-9.4 24.6 0 33.9 9.4 9.4 24.6 9.4 33.9 0l89-89h99.9L484 162.6c34.9-34.9 42.2-101.5-7.2-142.2z“]},mm={prefix:”fas“,iconName:”thermometer-empty“,icon:[256,512,,”f2cb“,”M192 384c0 35.346-28.654 64-64 64s-64-28.654-64-64c0-35.346 28.654-64 64-64s64 28.654 64 64zm32-84.653c19.912 22.563 32 52.194 32 84.653 0 70.696-57.303 128-128 128-.299 0-.609-.001-.909-.003C56.789 511.509-.357 453.636.002 383.333.166 351.135 12.225 321.755 32 299.347V96c0-53.019 42.981-96 96-96s96 42.981 96 96v203.347zM208 384c0-34.339-19.37-52.19-32-66.502V96c0-26.467-21.533-48-48-48S80 69.533 80 96v221.498c-12.732 14.428-31.825 32.1-31.999 66.08-.224 43.876 35.563 80.116 79.423 80.42L128 464c44.112 0 80-35.888 80-80z“]},vm={prefix:”fas“,iconName:”thermometer-full“,icon:[256,512,,”f2c7“,”M224 96c0-53.019-42.981-96-96-96S32 42.981 32 96v203.347C12.225 321.756.166 351.136.002 383.333c-.359 70.303 56.787 128.176 127.089 128.664.299.002.61.003.909.003 70.698 0 128-57.304 128-128 0-32.459-12.088-62.09-32-84.653V96zm-96 368l-.576-.002c-43.86-.304-79.647-36.544-79.423-80.42.173-33.98 19.266-51.652 31.999-66.08V96c0-26.467 21.533-48 48-48s48 21.533 48 48v221.498c12.63 14.312 32 32.164 32 66.502 0 44.112-35.888 80-80 80zm64-80c0 35.346-28.654 64-64 64s-64-28.654-64-64c0-23.685 12.876-44.349 32-55.417V96c0-17.673 14.327-32 32-32s32 14.327 32 32v232.583c19.124 11.068 32 31.732 32 55.417z“]},gm={prefix:”fas“,iconName:”thermometer-half“,icon:[256,512,,”f2c9“,”M192 384c0 35.346-28.654 64-64 64s-64-28.654-64-64c0-23.685 12.876-44.349 32-55.417V224c0-17.673 14.327-32 32-32s32 14.327 32 32v104.583c19.124 11.068 32 31.732 32 55.417zm32-84.653c19.912 22.563 32 52.194 32 84.653 0 70.696-57.303 128-128 128-.299 0-.609-.001-.909-.003C56.789 511.509-.357 453.636.002 383.333.166 351.135 12.225 321.755 32 299.347V96c0-53.019 42.981-96 96-96s96 42.981 96 96v203.347zM208 384c0-34.339-19.37-52.19-32-66.502V96c0-26.467-21.533-48-48-48S80 69.533 80 96v221.498c-12.732 14.428-31.825 32.1-31.999 66.08-.224 43.876 35.563 80.116 79.423 80.42L128 464c44.112 0 80-35.888 80-80z“]},ym={prefix:”fas“,iconName:”thermometer-quarter“,icon:[256,512,,”f2ca“,”M192 384c0 35.346-28.654 64-64 64s-64-28.654-64-64c0-23.685 12.876-44.349 32-55.417V288c0-17.673 14.327-32 32-32s32 14.327 32 32v40.583c19.124 11.068 32 31.732 32 55.417zm32-84.653c19.912 22.563 32 52.194 32 84.653 0 70.696-57.303 128-128 128-.299 0-.609-.001-.909-.003C56.789 511.509-.357 453.636.002 383.333.166 351.135 12.225 321.755 32 299.347V96c0-53.019 42.981-96 96-96s96 42.981 96 96v203.347zM208 384c0-34.339-19.37-52.19-32-66.502V96c0-26.467-21.533-48-48-48S80 69.533 80 96v221.498c-12.732 14.428-31.825 32.1-31.999 66.08-.224 43.876 35.563 80.116 79.423 80.42L128 464c44.112 0 80-35.888 80-80z“]},bm={prefix:”fas“,iconName:”thermometer-three-quarters“,icon:[256,512,,”f2c8“,”M192 384c0 35.346-28.654 64-64 64-35.346 0-64-28.654-64-64 0-23.685 12.876-44.349 32-55.417V160c0-17.673 14.327-32 32-32s32 14.327 32 32v168.583c19.124 11.068 32 31.732 32 55.417zm32-84.653c19.912 22.563 32 52.194 32 84.653 0 70.696-57.303 128-128 128-.299 0-.609-.001-.909-.003C56.789 511.509-.357 453.636.002 383.333.166 351.135 12.225 321.755 32 299.347V96c0-53.019 42.981-96 96-96s96 42.981 96 96v203.347zM208 384c0-34.339-19.37-52.19-32-66.502V96c0-26.467-21.533-48-48-48S80 69.533 80 96v221.498c-12.732 14.428-31.825 32.1-31.999 66.08-.224 43.876 35.563 80.116 79.423 80.42L128 464c44.112 0 80-35.888 80-80z“]},wm={prefix:”fas“,iconName:”thumbs-down“,icon:[512,512,,”f165“,”M0 56v240c0 13.255 10.745 24 24 24h80c13.255 0 24-10.745 24-24V56c0-13.255-10.745-24-24-24H24C10.745 32 0 42.745 0 56zm40 200c0-13.255 10.745-24 24-24s24 10.745 24 24-10.745 24-24 24-24-10.745-24-24zm272 256c-20.183 0-29.485-39.293-33.931-57.795-5.206-21.666-10.589-44.07-25.393-58.902-32.469-32.524-49.503-73.967-89.117-113.111a11.98 11.98 0 0 1-3.558-8.521V59.901c0-6.541 5.243-11.878 11.783-11.998 15.831-.29 36.694-9.079 52.651-16.178C256.189 17.598 295.709.017 343.995 0h2.844c42.777 0 93.363.413 113.774 29.737 8.392 12.057 10.446 27.034 6.148 44.632 16.312 17.053 25.063 48.863 16.382 74.757 17.544 23.432 19.143 56.132 9.308 79.469l.11.11c11.893 11.949 19.523 31.259 19.439 49.197-.156 30.352-26.157 58.098-59.553 58.098H350.723C358.03 364.34 384 388.132 384 430.548 384 504 336 512 312 512z“]},xm={prefix:”fas“,iconName:”thumbs-up“,icon:[512,512,,”f164“,”M104 224H24c-13.255 0-24 10.745-24 24v240c0 13.255 10.745 24 24 24h80c13.255 0 24-10.745 24-24V248c0-13.255-10.745-24-24-24zM64 472c-13.255 0-24-10.745-24-24s10.745-24 24-24 24 10.745 24 24-10.745 24-24 24zM384 81.452c0 42.416-25.97 66.208-33.277 94.548h101.723c33.397 0 59.397 27.746 59.553 58.098.084 17.938-7.546 37.249-19.439 49.197l-.11.11c9.836 23.337 8.237 56.037-9.308 79.469 8.681 25.895-.069 57.704-16.382 74.757 4.298 17.598 2.244 32.575-6.148 44.632C440.202 511.587 389.616 512 346.839 512l-2.845-.001c-48.287-.017-87.806-17.598-119.56-31.725-15.957-7.099-36.821-15.887-52.651-16.178-6.54-.12-11.783-5.457-11.783-11.998v-213.77c0-3.2 1.282-6.271 3.558-8.521 39.614-39.144 56.648-80.587 89.117-113.111 14.804-14.832 20.188-37.236 25.393-58.902C282.515 39.293 291.817 0 312 0c24 0 72 8 72 81.452z“]},Sm={prefix:”fas“,iconName:”thumbtack“,icon:[384,512,,”f08d“,”M298.028 214.267L285.793 96H328c13.255 0 24-10.745 24-24V24c0-13.255-10.745-24-24-24H56C42.745 0 32 10.745 32 24v48c0 13.255 10.745 24 24 24h42.207L85.972 214.267C37.465 236.82 0 277.261 0 328c0 13.255 10.745 24 24 24h136v104.007c0 1.242.289 2.467.845 3.578l24 48c2.941 5.882 11.364 5.893 14.311 0l24-48a8.008 8.008 0 0 0 .845-3.578V352h136c13.255 0 24-10.745 24-24-.001-51.183-37.983-91.42-85.973-113.733z“]},km={prefix:”fas“,iconName:”ticket-alt“,icon:[576,512,,”f3ff“,”M128 160h320v192H128V160zm400 96c0 26.51 21.49 48 48 48v96c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48v-96c26.51 0 48-21.49 48-48s-21.49-48-48-48v-96c0-26.51 21.49-48 48-48h480c26.51 0 48 21.49 48 48v96c-26.51 0-48 21.49-48 48zm-48-104c0-13.255-10.745-24-24-24H120c-13.255 0-24 10.745-24 24v208c0 13.255 10.745 24 24 24h336c13.255 0 24-10.745 24-24V152z“]},_m={prefix:”fas“,iconName:”times“,icon:[352,512,,”f00d“,”M242.72 256l100.07-100.07c12.28-12.28 12.28-32.19 0-44.48l-22.24-22.24c-12.28-12.28-32.19-12.28-44.48 0L176 189.28 75.93 89.21c-12.28-12.28-32.19-12.28-44.48 0L9.21 111.45c-12.28 12.28-12.28 32.19 0 44.48L109.28 256 9.21 356.07c-12.28 12.28-12.28 32.19 0 44.48l22.24 22.24c12.28 12.28 32.2 12.28 44.48 0L176 322.72l100.07 100.07c12.28 12.28 32.2 12.28 44.48 0l22.24-22.24c12.28-12.28 12.28-32.19 0-44.48L242.72 256z“]},zm={prefix:”fas“,iconName:”times-circle“,icon:[512,512,,”f057“,”M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm121.6 313.1c4.7 4.7 4.7 12.3 0 17L338 377.6c-4.7 4.7-12.3 4.7-17 0L256 312l-65.1 65.6c-4.7 4.7-12.3 4.7-17 0L134.4 338c-4.7-4.7-4.7-12.3 0-17l65.6-65-65.6-65.1c-4.7-4.7-4.7-12.3 0-17l39.6-39.6c4.7-4.7 12.3-4.7 17 0l65 65.7 65.1-65.6c4.7-4.7 12.3-4.7 17 0l39.6 39.6c4.7 4.7 4.7 12.3 0 17L312 256l65.6 65.1z“]},Cm={prefix:”fas“,iconName:”tint“,icon:[352,512,,”f043“,”M205.22 22.09c-7.94-28.78-49.44-30.12-58.44 0C100.01 179.85 0 222.72 0 333.91 0 432.35 78.72 512 176 512s176-79.65 176-178.09c0-111.75-99.79-153.34-146.78-311.82zM176 448c-61.75 0-112-50.25-112-112 0-8.84 7.16-16 16-16s16 7.16 16 16c0 44.11 35.89 80 80 80 8.84 0 16 7.16 16 16s-7.16 16-16 16z“]},Mm={prefix:”fas“,iconName:”tint-slash“,icon:[640,512,,”f5c7“,”M633.82 458.1L494.97 350.78c.52-5.57 1.03-11.16 1.03-16.87 0-111.76-99.79-153.34-146.78-311.82-7.94-28.78-49.44-30.12-58.44 0-15.52 52.34-36.87 91.96-58.49 125.68L45.47 3.37C38.49-2.05 28.43-.8 23.01 6.18L3.37 31.45C-2.05 38.42-.8 48.47 6.18 53.9l588.36 454.73c6.98 5.43 17.03 4.17 22.46-2.81l19.64-25.27c5.41-6.97 4.16-17.02-2.82-22.45zM144 333.91C144 432.35 222.72 512 320 512c44.71 0 85.37-16.96 116.4-44.7L162.72 255.78c-11.41 23.5-18.72 48.35-18.72 78.13z“]},Om={prefix:”fas“,iconName:”tired“,icon:[496,512,,”f5c8“,”M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm33.8 189.7l80-48c11.6-6.9 24 7.7 15.4 18L343.6 208l33.6 40.3c8.7 10.4-3.9 24.8-15.4 18l-80-48c-7.7-4.7-7.7-15.9 0-20.6zm-163-30c-8.6-10.3 3.8-24.9 15.4-18l80 48c7.8 4.7 7.8 15.9 0 20.6l-80 48c-11.5 6.8-24-7.6-15.4-18l33.6-40.3-33.6-40.3zM248 288c51.9 0 115.3 43.8 123.2 106.7 1.7 13.6-8 24.6-17.7 20.4-25.9-11.1-64.4-17.4-105.5-17.4s-79.6 6.3-105.5 17.4c-9.8 4.2-19.4-7-17.7-20.4C132.7 331.8 196.1 288 248 288z“]},Tm={prefix:”fas“,iconName:”toggle-off“,icon:[576,512,,”f204“,”M384 64H192C85.961 64 0 149.961 0 256s85.961 192 192 192h192c106.039 0 192-85.961 192-192S490.039 64 384 64zM64 256c0-70.741 57.249-128 128-128 70.741 0 128 57.249 128 128 0 70.741-57.249 128-128 128-70.741 0-128-57.249-128-128zm320 128h-48.905c65.217-72.858 65.236-183.12 0-256H384c70.741 0 128 57.249 128 128 0 70.74-57.249 128-128 128z“]},Em={prefix:”fas“,iconName:”toggle-on“,icon:[576,512,,”f205“,”M384 64H192C86 64 0 150 0 256s86 192 192 192h192c106 0 192-86 192-192S490 64 384 64zm0 320c-70.8 0-128-57.3-128-128 0-70.8 57.3-128 128-128 70.8 0 128 57.3 128 128 0 70.8-57.3 128-128 128z“]},Lm={prefix:”fas“,iconName:”toilet“,icon:[384,512,,”f7d8“,”M368 48c8.8 0 16-7.2 16-16V16c0-8.8-7.2-16-16-16H16C7.2 0 0 7.2 0 16v16c0 8.8 7.2 16 16 16h16v156.7C11.8 214.8 0 226.9 0 240c0 67.2 34.6 126.2 86.8 160.5l-21.4 70.2C59.1 491.2 74.5 512 96 512h192c21.5 0 36.9-20.8 30.6-41.3l-21.4-70.2C349.4 366.2 384 307.2 384 240c0-13.1-11.8-25.2-32-35.3V48h16zM80 72c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H88c-4.4 0-8-3.6-8-8V72zm112 200c-77.1 0-139.6-14.3-139.6-32s62.5-32 139.6-32 139.6 14.3 139.6 32-62.5 32-139.6 32z“]},Am={prefix:”fas“,iconName:”toilet-paper“,icon:[576,512,,”f71e“,”M128 0C74.98 0 32 85.96 32 192v172.07c0 41.12-9.8 62.77-31.17 126.87C-2.62 501.3 5.09 512 16.01 512h280.92c13.77 0 26-8.81 30.36-21.88 12.83-38.48 24.71-72.4 24.71-126.05V192c0-83.6 23.67-153.52 60.44-192H128zM96 224c-8.84 0-16-7.16-16-16s7.16-16 16-16 16 7.16 16 16-7.16 16-16 16zm64 0c-8.84 0-16-7.16-16-16s7.16-16 16-16 16 7.16 16 16-7.16 16-16 16zm64 0c-8.84 0-16-7.16-16-16s7.16-16 16-16 16 7.16 16 16-7.16 16-16 16zm64 0c-8.84 0-16-7.16-16-16s7.16-16 16-16 16 7.16 16 16-7.16 16-16 16zM480 0c-53.02 0-96 85.96-96 192s42.98 192 96 192 96-85.96 96-192S533.02 0 480 0zm0 256c-17.67 0-32-28.65-32-64s14.33-64 32-64 32 28.65 32 64-14.33 64-32 64z“]},Rm={prefix:”fas“,iconName:”toilet-paper-slash“,icon:[640,512,,”e072“,”M64,192V364.13c0,41.12-9.75,62.75-31.12,126.87A16,16,0,0,0,48,512H328.86a31.87,31.87,0,0,0,30.38-21.87c9.31-27.83,18-53.35,22.18-85.55l-316-244.25C64.53,170.66,64,181.19,64,192ZM633.82,458.09l-102-78.81C575.28,360.91,608,284.32,608,192,608,86,565,0,512,0s-96,86-96,192c0,42,7,80.4,18.43,112L384,265V192c0-83.62,23.63-153.5,60.5-192H160c-23.33,0-44.63,16.83-61.26,44.53L45.46,3.38A16,16,0,0,0,23,6.19L3.37,31.45A16,16,0,0,0,6.18,53.91L594.54,508.63A16,16,0,0,0,617,505.81l19.64-25.26A16,16,0,0,0,633.82,458.09ZM512,256c-17.63,0-32-28.62-32-64s14.37-64,32-64,32,28.63,32,64S529.62,256,512,256Z“]},Nm={prefix:”fas“,iconName:”toolbox“,icon:[512,512,,”f552“,”M502.63 214.63l-45.25-45.25c-6-6-14.14-9.37-22.63-9.37H384V80c0-26.51-21.49-48-48-48H176c-26.51 0-48 21.49-48 48v80H77.25c-8.49 0-16.62 3.37-22.63 9.37L9.37 214.63c-6 6-9.37 14.14-9.37 22.63V320h128v-16c0-8.84 7.16-16 16-16h32c8.84 0 16 7.16 16 16v16h128v-16c0-8.84 7.16-16 16-16h32c8.84 0 16 7.16 16 16v16h128v-82.75c0-8.48-3.37-16.62-9.37-22.62zM320 160H192V96h128v64zm64 208c0 8.84-7.16 16-16 16h-32c-8.84 0-16-7.16-16-16v-16H192v16c0 8.84-7.16 16-16 16h-32c-8.84 0-16-7.16-16-16v-16H0v96c0 17.67 14.33 32 32 32h448c17.67 0 32-14.33 32-32v-96H384v16z“]},Hm={prefix:”fas“,iconName:”tools“,icon:[512,512,,”f7d9“,”M501.1 395.7L384 278.6c-23.1-23.1-57.6-27.6-85.4-13.9L192 158.1V96L64 0 0 64l96 128h62.1l106.6 106.6c-13.6 27.8-9.2 62.3 13.9 85.4l117.1 117.1c14.6 14.6 38.2 14.6 52.7 0l52.7-52.7c14.5-14.6 14.5-38.2 0-52.7zM331.7 225c28.3 0 54.9 11 74.9 31l19.4 19.4c15.8-6.9 30.8-16.5 43.8-29.5 37.1-37.1 49.7-89.3 37.9-136.7-2.2-9-13.5-12.1-20.1-5.5l-74.4 74.4-67.9-11.3L334 98.9l74.4-74.4c6.6-6.6 3.4-17.9-5.7-20.2-47.4-11.7-99.6.9-136.6 37.9-28.5 28.5-41.9 66.1-41.2 103.6l82.1 82.1c8.1-1.9 16.5-2.9 24.7-2.9zm-103.9 82l-56.7-56.7L18.7 402.8c-25 25-25 65.5 0 90.5s65.5 25 90.5 0l123.6-123.6c-7.6-19.9-9.9-41.6-5-62.7zM64 472c-13.2 0-24-10.8-24-24 0-13.3 10.7-24 24-24s24 10.7 24 24c0 13.2-10.7 24-24 24z“]},Pm={prefix:”fas“,iconName:”tooth“,icon:[448,512,,”f5c9“,”M443.98 96.25c-11.01-45.22-47.11-82.06-92.01-93.72-32.19-8.36-63 5.1-89.14 24.33-3.25 2.39-6.96 3.73-10.5 5.48l28.32 18.21c7.42 4.77 9.58 14.67 4.8 22.11-4.46 6.95-14.27 9.86-22.11 4.8L162.83 12.84c-20.7-10.85-43.38-16.4-66.81-10.31-44.9 11.67-81 48.5-92.01 93.72-10.13 41.62-.42 80.81 21.5 110.43 23.36 31.57 32.68 68.66 36.29 107.35 4.4 47.16 10.33 94.16 20.94 140.32l7.8 33.95c3.19 13.87 15.49 23.7 29.67 23.7 13.97 0 26.15-9.55 29.54-23.16l34.47-138.42c4.56-18.32 20.96-31.16 39.76-31.16s35.2 12.85 39.76 31.16l34.47 138.42c3.39 13.61 15.57 23.16 29.54 23.16 14.18 0 26.48-9.83 29.67-23.7l7.8-33.95c10.61-46.15 16.53-93.16 20.94-140.32 3.61-38.7 12.93-75.78 36.29-107.35 21.95-29.61 31.66-68.8 21.53-110.43z“]},jm={prefix:”fas“,iconName:”torah“,icon:[640,512,,”f6a0“,”M320.05 366.48l17.72-29.64h-35.46zm99.21-166H382.4l18.46 30.82zM48 0C21.49 0 0 14.33 0 32v448c0 17.67 21.49 32 48 32s48-14.33 48-32V32C96 14.33 74.51 0 48 0zm172.74 311.5h36.85l-18.46-30.82zm161.71 0h36.86l-18.45-30.8zM128 464h384V48H128zm66.77-278.13a21.22 21.22 0 0 1 18.48-10.71h59.45l29.13-48.71a21.13 21.13 0 0 1 18.22-10.37A20.76 20.76 0 0 1 338 126.29l29.25 48.86h59.52a21.12 21.12 0 0 1 18.1 32L415.63 256 445 305a20.69 20.69 0 0 1 .24 21.12 21.25 21.25 0 0 1-18.48 10.72h-59.47l-29.13 48.7a21.13 21.13 0 0 1-18.16 10.4 20.79 20.79 0 0 1-18-10.22l-29.25-48.88h-59.5a21.11 21.11 0 0 1-18.1-32L224.36 256 195 207a20.7 20.7 0 0 1-.23-21.13zM592 0c-26.51 0-48 14.33-48 32v448c0 17.67 21.49 32 48 32s48-14.33 48-32V32c0-17.67-21.49-32-48-32zM320 145.53l-17.78 29.62h35.46zm-62.45 55h-36.81l18.44 30.8zm29.58 111h65.79L386.09 256l-33.23-55.52h-65.79L253.9 256z“]},Vm={prefix:”fas“,iconName:”torii-gate“,icon:[512,512,,”f6a1“,”M376.45 32h-240.9A303.17 303.17 0 0 1 0 0v96c0 17.67 14.33 32 32 32h32v64H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h48v240c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16V256h256v240c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16V256h48c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16h-48v-64h32c17.67 0 32-14.33 32-32V0a303.17 303.17 0 0 1-135.55 32zM128 128h96v64h-96v-64zm256 64h-96v-64h96v64z“]},Dm={prefix:”fas“,iconName:”tractor“,icon:[640,512,,”f722“,”M528 336c-48.6 0-88 39.4-88 88s39.4 88 88 88 88-39.4 88-88-39.4-88-88-88zm0 112c-13.23 0-24-10.77-24-24s10.77-24 24-24 24 10.77 24 24-10.77 24-24 24zm80-288h-64v-40.2c0-14.12 4.7-27.76 13.15-38.84 4.42-5.8 3.55-14.06-1.32-19.49L534.2 37.3c-6.66-7.45-18.32-6.92-24.7.78C490.58 60.9 480 89.81 480 119.8V160H377.67L321.58 29.14A47.914 47.914 0 0 0 277.45 0H144c-26.47 0-48 21.53-48 48v146.52c-8.63-6.73-20.96-6.46-28.89 1.47L36 227.1c-8.59 8.59-8.59 22.52 0 31.11l5.06 5.06c-4.99 9.26-8.96 18.82-11.91 28.72H22c-12.15 0-22 9.85-22 22v44c0 12.15 9.85 22 22 22h7.14c2.96 9.91 6.92 19.46 11.91 28.73l-5.06 5.06c-8.59 8.59-8.59 22.52 0 31.11L67.1 476c8.59 8.59 22.52 8.59 31.11 0l5.06-5.06c9.26 4.99 18.82 8.96 28.72 11.91V490c0 12.15 9.85 22 22 22h44c12.15 0 22-9.85 22-22v-7.14c9.9-2.95 19.46-6.92 28.72-11.91l5.06 5.06c8.59 8.59 22.52 8.59 31.11 0l31.11-31.11c8.59-8.59 8.59-22.52 0-31.11l-5.06-5.06c4.99-9.26 8.96-18.82 11.91-28.72H330c12.15 0 22-9.85 22-22v-6h80.54c21.91-28.99 56.32-48 95.46-48 18.64 0 36.07 4.61 51.8 12.2l50.82-50.82c6-6 9.37-14.14 9.37-22.63V192c.01-17.67-14.32-32-31.99-32zM176 416c-44.18 0-80-35.82-80-80s35.82-80 80-80 80 35.82 80 80-35.82 80-80 80zm22-256h-38V64h106.89l41.15 96H198z“]},Im={prefix:”fas“,iconName:”trademark“,icon:[640,512,,”f25c“,”M260.6 96H12c-6.6 0-12 5.4-12 12v43.1c0 6.6 5.4 12 12 12h85.1V404c0 6.6 5.4 12 12 12h54.3c6.6 0 12-5.4 12-12V163.1h85.1c6.6 0 12-5.4 12-12V108c.1-6.6-5.3-12-11.9-12zM640 403l-24-296c-.5-6.2-5.7-11-12-11h-65.4c-5.1 0-9.7 3.3-11.3 8.1l-43.8 127.1c-7.2 20.6-16.1 52.8-16.1 52.8h-.9s-8.9-32.2-16.1-52.8l-43.8-127.1c-1.7-4.8-6.2-8.1-11.3-8.1h-65.4c-6.2 0-11.4 4.8-12 11l-24.4 296c-.6 7 4.9 13 12 13H360c6.3 0 11.5-4.9 12-11.2l9.1-132.9c1.8-24.2 0-53.7 0-53.7h.9s10.7 33.6 17.9 53.7l30.7 84.7c1.7 4.7 6.2 7.9 11.3 7.9h50.3c5.1 0 9.6-3.2 11.3-7.9l30.7-84.7c7.2-20.1 17.9-53.7 17.9-53.7h.9s-1.8 29.5 0 53.7l9.1 132.9c.4 6.3 5.7 11.2 12 11.2H628c7 0 12.5-6 12-13z“]},Fm={prefix:”fas“,iconName:”traffic-light“,icon:[384,512,,”f637“,”M384 192h-64v-37.88c37.2-13.22 64-48.38 64-90.12h-64V32c0-17.67-14.33-32-32-32H96C78.33 0 64 14.33 64 32v32H0c0 41.74 26.8 76.9 64 90.12V192H0c0 41.74 26.8 76.9 64 90.12V320H0c0 42.84 28.25 78.69 66.99 91.05C79.42 468.72 130.6 512 192 512s112.58-43.28 125.01-100.95C355.75 398.69 384 362.84 384 320h-64v-37.88c37.2-13.22 64-48.38 64-90.12zM192 416c-26.51 0-48-21.49-48-48s21.49-48 48-48 48 21.49 48 48-21.49 48-48 48zm0-128c-26.51 0-48-21.49-48-48s21.49-48 48-48 48 21.49 48 48-21.49 48-48 48zm0-128c-26.51 0-48-21.49-48-48s21.49-48 48-48 48 21.49 48 48-21.49 48-48 48z“]},Bm={prefix:”fas“,iconName:”trailer“,icon:[640,512,,”e041“,”M624,320H544V80a16,16,0,0,0-16-16H16A16,16,0,0,0,0,80V368a16,16,0,0,0,16,16H65.61c7.83-54.21,54-96,110.39-96s102.56,41.79,110.39,96H624a16,16,0,0,0,16-16V336A16,16,0,0,0,624,320ZM96,243.68a176.29,176.29,0,0,0-32,20.71V136a8,8,0,0,1,8-8H88a8,8,0,0,1,8,8Zm96-18.54c-5.31-.49-10.57-1.14-16-1.14s-10.69.65-16,1.14V136a8,8,0,0,1,8-8h16a8,8,0,0,1,8,8Zm96,39.25a176.29,176.29,0,0,0-32-20.71V136a8,8,0,0,1,8-8h16a8,8,0,0,1,8,8ZM384,320H352V136a8,8,0,0,1,8-8h16a8,8,0,0,1,8,8Zm96,0H448V136a8,8,0,0,1,8-8h16a8,8,0,0,1,8,8Zm-304,0a80,80,0,1,0,80,80A80,80,0,0,0,176,320Zm0,112a32,32,0,1,1,32-32A32,32,0,0,1,176,432Z“]},Um={prefix:”fas“,iconName:”train“,icon:[448,512,,”f238“,”M448 96v256c0 51.815-61.624 96-130.022 96l62.98 49.721C386.905 502.417 383.562 512 376 512H72c-7.578 0-10.892-9.594-4.957-14.279L130.022 448C61.82 448 0 403.954 0 352V96C0 42.981 64 0 128 0h192c65 0 128 42.981 128 96zm-48 136V120c0-13.255-10.745-24-24-24H72c-13.255 0-24 10.745-24 24v112c0 13.255 10.745 24 24 24h304c13.255 0 24-10.745 24-24zm-176 64c-30.928 0-56 25.072-56 56s25.072 56 56 56 56-25.072 56-56-25.072-56-56-56z“]},qm={prefix:”fas“,iconName:”tram“,icon:[512,512,,”f7da“,”M288 64c17.7 0 32-14.3 32-32S305.7 0 288 0s-32 14.3-32 32 14.3 32 32 32zm223.5-12.1c-2.3-8.6-11-13.6-19.6-11.3l-480 128c-8.5 2.3-13.6 11-11.3 19.6C2.5 195.3 8.9 200 16 200c1.4 0 2.8-.2 4.1-.5L240 140.8V224H64c-17.7 0-32 14.3-32 32v224c0 17.7 14.3 32 32 32h384c17.7 0 32-14.3 32-32V256c0-17.7-14.3-32-32-32H272v-91.7l228.1-60.8c8.6-2.3 13.6-11.1 11.4-19.6zM176 384H80v-96h96v96zm160-96h96v96h-96v-96zm-32 0v96h-96v-96h96zM192 96c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32z“]},Gm={prefix:”fas“,iconName:”transgender“,icon:[384,512,,”f224“,”M372 0h-79c-10.7 0-16 12.9-8.5 20.5l16.9 16.9-80.7 80.7C198.5 104.1 172.2 96 144 96 64.5 96 0 160.5 0 240c0 68.5 47.9 125.9 112 140.4V408H76c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h36v28c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-28h36c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-36v-27.6c64.1-14.6 112-71.9 112-140.4 0-28.2-8.1-54.5-22.1-76.7l80.7-80.7 16.9 16.9c7.6 7.6 20.5 2.2 20.5-8.5V12c0-6.6-5.4-12-12-12zM144 320c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80z“]},Wm={prefix:”fas“,iconName:”transgender-alt“,icon:[480,512,,”f225“,”M468 0h-79c-10.7 0-16 12.9-8.5 20.5l16.9 16.9-80.7 80.7C294.5 104.1 268.2 96 240 96c-28.2 0-54.5 8.1-76.7 22.1l-16.5-16.5 19.8-19.8c4.7-4.7 4.7-12.3 0-17l-28.3-28.3c-4.7-4.7-12.3-4.7-17 0l-19.8 19.8-19-19 16.9-16.9C107.1 12.9 101.7 0 91 0H12C5.4 0 0 5.4 0 12v79c0 10.7 12.9 16 20.5 8.5l16.9-16.9 19 19-19.8 19.8c-4.7 4.7-4.7 12.3 0 17l28.3 28.3c4.7 4.7 12.3 4.7 17 0l19.8-19.8 16.5 16.5C104.1 185.5 96 211.8 96 240c0 68.5 47.9 125.9 112 140.4V408h-36c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h36v28c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-28h36c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-36v-27.6c64.1-14.6 112-71.9 112-140.4 0-28.2-8.1-54.5-22.1-76.7l80.7-80.7 16.9 16.9c7.6 7.6 20.5 2.2 20.5-8.5V12c0-6.6-5.4-12-12-12zM240 320c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80z“]},Zm={prefix:”fas“,iconName:”trash“,icon:[448,512,,”f1f8“,”M432 32H312l-9.4-18.7A24 24 0 0 0 281.1 0H166.8a23.72 23.72 0 0 0-21.4 13.3L136 32H16A16 16 0 0 0 0 48v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16zM53.2 467a48 48 0 0 0 47.9 45h245.8a48 48 0 0 0 47.9-45L416 128H32z“]},$m={prefix:”fas“,iconName:”trash-alt“,icon:[448,512,,”f2ed“,”M32 464a48 48 0 0 0 48 48h288a48 48 0 0 0 48-48V128H32zm272-256a16 16 0 0 1 32 0v224a16 16 0 0 1-32 0zm-96 0a16 16 0 0 1 32 0v224a16 16 0 0 1-32 0zm-96 0a16 16 0 0 1 32 0v224a16 16 0 0 1-32 0zM432 32H312l-9.4-18.7A24 24 0 0 0 281.1 0H166.8a23.72 23.72 0 0 0-21.4 13.3L136 32H16A16 16 0 0 0 0 48v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16z“]},Jm={prefix:”fas“,iconName:”trash-restore“,icon:[448,512,,”f829“,”M53.2 467a48 48 0 0 0 47.9 45h245.8a48 48 0 0 0 47.9-45L416 128H32zm70.11-175.8l89.38-94.26a15.41 15.41 0 0 1 22.62 0l89.38 94.26c10.08 10.62 2.94 28.8-11.32 28.8H256v112a16 16 0 0 1-16 16h-32a16 16 0 0 1-16-16V320h-57.37c-14.26 0-21.4-18.18-11.32-28.8zM432 32H312l-9.4-18.7A24 24 0 0 0 281.1 0H166.8a23.72 23.72 0 0 0-21.4 13.3L136 32H16A16 16 0 0 0 0 48v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16z“]},Km={prefix:”fas“,iconName:”trash-restore-alt“,icon:[448,512,,”f82a“,”M32 464a48 48 0 0 0 48 48h288a48 48 0 0 0 48-48V128H32zm91.31-172.8l89.38-94.26a15.41 15.41 0 0 1 22.62 0l89.38 94.26c10.08 10.62 2.94 28.8-11.32 28.8H256v112a16 16 0 0 1-16 16h-32a16 16 0 0 1-16-16V320h-57.37c-14.26 0-21.4-18.18-11.32-28.8zM432 32H312l-9.4-18.7A24 24 0 0 0 281.1 0H166.8a23.72 23.72 0 0 0-21.4 13.3L136 32H16A16 16 0 0 0 0 48v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16z“]},Qm={prefix:”fas“,iconName:”tree“,icon:[384,512,,”f1bb“,”M378.31 378.49L298.42 288h30.63c9.01 0 16.98-5 20.78-13.06 3.8-8.04 2.55-17.26-3.28-24.05L268.42 160h28.89c9.1 0 17.3-5.35 20.86-13.61 3.52-8.13 1.86-17.59-4.24-24.08L203.66 4.83c-6.03-6.45-17.28-6.45-23.32 0L70.06 122.31c-6.1 6.49-7.75 15.95-4.24 24.08C69.38 154.65 77.59 160 86.69 160h28.89l-78.14 90.91c-5.81 6.78-7.06 15.99-3.27 24.04C37.97 283 45.93 288 54.95 288h30.63L5.69 378.49c-6 6.79-7.36 16.09-3.56 24.26 3.75 8.05 12 13.25 21.01 13.25H160v24.45l-30.29 48.4c-5.32 10.64 2.42 23.16 14.31 23.16h95.96c11.89 0 19.63-12.52 14.31-23.16L224 440.45V416h136.86c9.01 0 17.26-5.2 21.01-13.25 3.8-8.17 2.44-17.47-3.56-24.26z“]},Ym={prefix:”fas“,iconName:”trophy“,icon:[576,512,,”f091“,”M552 64H448V24c0-13.3-10.7-24-24-24H152c-13.3 0-24 10.7-24 24v40H24C10.7 64 0 74.7 0 88v56c0 35.7 22.5 72.4 61.9 100.7 31.5 22.7 69.8 37.1 110 41.7C203.3 338.5 240 360 240 360v72h-48c-35.3 0-64 20.7-64 56v12c0 6.6 5.4 12 12 12h296c6.6 0 12-5.4 12-12v-12c0-35.3-28.7-56-64-56h-48v-72s36.7-21.5 68.1-73.6c40.3-4.6 78.6-19 110-41.7 39.3-28.3 61.9-65 61.9-100.7V88c0-13.3-10.7-24-24-24zM99.3 192.8C74.9 175.2 64 155.6 64 144v-16h64.2c1 32.6 5.8 61.2 12.8 86.2-15.1-5.2-29.2-12.4-41.7-21.4zM512 144c0 16.1-17.7 36.1-35.3 48.8-12.5 9-26.7 16.2-41.8 21.4 7-25 11.8-53.6 12.8-86.2H512v16z“]},Xm={prefix:”fas“,iconName:”truck“,icon:[640,512,,”f0d1“,”M624 352h-16V243.9c0-12.7-5.1-24.9-14.1-33.9L494 110.1c-9-9-21.2-14.1-33.9-14.1H416V48c0-26.5-21.5-48-48-48H48C21.5 0 0 21.5 0 48v320c0 26.5 21.5 48 48 48h16c0 53 43 96 96 96s96-43 96-96h128c0 53 43 96 96 96s96-43 96-96h48c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zM160 464c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm320 0c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm80-208H416V144h44.1l99.9 99.9V256z“]},ev={prefix:”fas“,iconName:”truck-loading“,icon:[640,512,,”f4de“,”M50.2 375.6c2.3 8.5 11.1 13.6 19.6 11.3l216.4-58c8.5-2.3 13.6-11.1 11.3-19.6l-49.7-185.5c-2.3-8.5-11.1-13.6-19.6-11.3L151 133.3l24.8 92.7-61.8 16.5-24.8-92.7-77.3 20.7C3.4 172.8-1.7 181.6.6 190.1l49.6 185.5zM384 0c-17.7 0-32 14.3-32 32v323.6L5.9 450c-4.3 1.2-6.8 5.6-5.6 9.8l12.6 46.3c1.2 4.3 5.6 6.8 9.8 5.6l393.7-107.4C418.8 464.1 467.6 512 528 512c61.9 0 112-50.1 112-112V0H384zm144 448c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48z“]},tv={prefix:”fas“,iconName:”truck-monster“,icon:[640,512,,”f63b“,”M624 224h-16v-64c0-17.67-14.33-32-32-32h-73.6L419.22 24.02A64.025 64.025 0 0 0 369.24 0H256c-17.67 0-32 14.33-32 32v96H48c-8.84 0-16 7.16-16 16v80H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h16.72c29.21-38.65 75.1-64 127.28-64s98.07 25.35 127.28 64h65.45c29.21-38.65 75.1-64 127.28-64s98.07 25.35 127.28 64H624c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zm-336-96V64h81.24l51.2 64H288zm304 224h-5.2c-2.2-7.33-5.07-14.28-8.65-20.89l3.67-3.67c6.25-6.25 6.25-16.38 0-22.63l-22.63-22.63c-6.25-6.25-16.38-6.25-22.63 0l-3.67 3.67A110.85 110.85 0 0 0 512 277.2V272c0-8.84-7.16-16-16-16h-32c-8.84 0-16 7.16-16 16v5.2c-7.33 2.2-14.28 5.07-20.89 8.65l-3.67-3.67c-6.25-6.25-16.38-6.25-22.63 0l-22.63 22.63c-6.25 6.25-6.25 16.38 0 22.63l3.67 3.67A110.85 110.85 0 0 0 373.2 352H368c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h5.2c2.2 7.33 5.07 14.28 8.65 20.89l-3.67 3.67c-6.25 6.25-6.25 16.38 0 22.63l22.63 22.63c6.25 6.25 16.38 6.25 22.63 0l3.67-3.67c6.61 3.57 13.57 6.45 20.9 8.65v5.2c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-5.2c7.33-2.2 14.28-5.07 20.9-8.65l3.67 3.67c6.25 6.25 16.38 6.25 22.63 0l22.63-22.63c6.25-6.25 6.25-16.38 0-22.63l-3.67-3.67a110.85 110.85 0 0 0 8.65-20.89h5.2c8.84 0 16-7.16 16-16v-32c-.02-8.84-7.18-16-16.02-16zm-112 80c-26.51 0-48-21.49-48-48s21.49-48 48-48 48 21.49 48 48-21.49 48-48 48zm-208-80h-5.2c-2.2-7.33-5.07-14.28-8.65-20.89l3.67-3.67c6.25-6.25 6.25-16.38 0-22.63l-22.63-22.63c-6.25-6.25-16.38-6.25-22.63 0l-3.67 3.67A110.85 110.85 0 0 0 192 277.2V272c0-8.84-7.16-16-16-16h-32c-8.84 0-16 7.16-16 16v5.2c-7.33 2.2-14.28 5.07-20.89 8.65l-3.67-3.67c-6.25-6.25-16.38-6.25-22.63 0L58.18 304.8c-6.25 6.25-6.25 16.38 0 22.63l3.67 3.67a110.85 110.85 0 0 0-8.65 20.89H48c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h5.2c2.2 7.33 5.07 14.28 8.65 20.89l-3.67 3.67c-6.25 6.25-6.25 16.38 0 22.63l22.63 22.63c6.25 6.25 16.38 6.25 22.63 0l3.67-3.67c6.61 3.57 13.57 6.45 20.9 8.65v5.2c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-5.2c7.33-2.2 14.28-5.07 20.9-8.65l3.67 3.67c6.25 6.25 16.38 6.25 22.63 0l22.63-22.63c6.25-6.25 6.25-16.38 0-22.63l-3.67-3.67a110.85 110.85 0 0 0 8.65-20.89h5.2c8.84 0 16-7.16 16-16v-32C288 359.16 280.84 352 272 352zm-112 80c-26.51 0-48-21.49-48-48s21.49-48 48-48 48 21.49 48 48-21.49 48-48 48z“]},nv={prefix:”fas“,iconName:”truck-moving“,icon:[640,512,,”f4df“,”M621.3 237.3l-58.5-58.5c-12-12-28.3-18.7-45.3-18.7H480V64c0-17.7-14.3-32-32-32H32C14.3 32 0 46.3 0 64v336c0 44.2 35.8 80 80 80 26.3 0 49.4-12.9 64-32.4 14.6 19.6 37.7 32.4 64 32.4 44.2 0 80-35.8 80-80 0-5.5-.6-10.8-1.6-16h163.2c-1.1 5.2-1.6 10.5-1.6 16 0 44.2 35.8 80 80 80s80-35.8 80-80c0-5.5-.6-10.8-1.6-16H624c8.8 0 16-7.2 16-16v-85.5c0-17-6.7-33.2-18.7-45.2zM80 432c-17.6 0-32-14.4-32-32s14.4-32 32-32 32 14.4 32 32-14.4 32-32 32zm128 0c-17.6 0-32-14.4-32-32s14.4-32 32-32 32 14.4 32 32-14.4 32-32 32zm272-224h37.5c4.3 0 8.3 1.7 11.3 4.7l43.3 43.3H480v-48zm48 224c-17.6 0-32-14.4-32-32s14.4-32 32-32 32 14.4 32 32-14.4 32-32 32z“]},rv={prefix:”fas“,iconName:”truck-pickup“,icon:[640,512,,”f63c“,”M624 288h-16v-64c0-17.67-14.33-32-32-32h-48L419.22 56.02A64.025 64.025 0 0 0 369.24 32H256c-17.67 0-32 14.33-32 32v128H64c-17.67 0-32 14.33-32 32v64H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h49.61c-.76 5.27-1.61 10.52-1.61 16 0 61.86 50.14 112 112 112s112-50.14 112-112c0-5.48-.85-10.73-1.61-16h67.23c-.76 5.27-1.61 10.52-1.61 16 0 61.86 50.14 112 112 112s112-50.14 112-112c0-5.48-.85-10.73-1.61-16H624c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zM288 96h81.24l76.8 96H288V96zM176 416c-26.47 0-48-21.53-48-48s21.53-48 48-48 48 21.53 48 48-21.53 48-48 48zm288 0c-26.47 0-48-21.53-48-48s21.53-48 48-48 48 21.53 48 48-21.53 48-48 48z“]},iv={prefix:”fas“,iconName:”tshirt“,icon:[640,512,,”f553“,”M631.2 96.5L436.5 0C416.4 27.8 371.9 47.2 320 47.2S223.6 27.8 203.5 0L8.8 96.5c-7.9 4-11.1 13.6-7.2 21.5l57.2 114.5c4 7.9 13.6 11.1 21.5 7.2l56.6-27.7c10.6-5.2 23 2.5 23 14.4V480c0 17.7 14.3 32 32 32h256c17.7 0 32-14.3 32-32V226.3c0-11.8 12.4-19.6 23-14.4l56.6 27.7c7.9 4 17.5.8 21.5-7.2L638.3 118c4-7.9.8-17.6-7.1-21.5z“]},av={prefix:”fas“,iconName:”tty“,icon:[512,512,,”f1e4“,”M5.37 103.822c138.532-138.532 362.936-138.326 501.262 0 6.078 6.078 7.074 15.496 2.583 22.681l-43.214 69.138a18.332 18.332 0 0 1-22.356 7.305l-86.422-34.569a18.335 18.335 0 0 1-11.434-18.846L351.741 90c-62.145-22.454-130.636-21.986-191.483 0l5.953 59.532a18.331 18.331 0 0 1-11.434 18.846l-86.423 34.568a18.334 18.334 0 0 1-22.356-7.305L2.787 126.502a18.333 18.333 0 0 1 2.583-22.68zM96 308v-40c0-6.627-5.373-12-12-12H44c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm-336 96v-40c0-6.627-5.373-12-12-12H92c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zM96 500v-40c0-6.627-5.373-12-12-12H44c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm288 0v-40c0-6.627-5.373-12-12-12H140c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h232c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12z“]},ov={prefix:”fas“,iconName:”tv“,icon:[640,512,,”f26c“,”M592 0H48A48 48 0 0 0 0 48v320a48 48 0 0 0 48 48h240v32H112a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16H352v-32h240a48 48 0 0 0 48-48V48a48 48 0 0 0-48-48zm-16 352H64V64h512z“]},cv={prefix:”fas“,iconName:”umbrella“,icon:[576,512,,”f0e9“,”M575.7 280.8C547.1 144.5 437.3 62.6 320 49.9V32c0-17.7-14.3-32-32-32s-32 14.3-32 32v17.9C138.3 62.6 29.5 144.5.3 280.8c-2.2 10.1 8.5 21.3 18.7 11.4 52-55 107.7-52.4 158.6 37 5.3 9.5 14.9 8.6 19.7 0 20.2-35.4 44.9-73.2 90.7-73.2 58.5 0 88.2 68.8 90.7 73.2 4.8 8.6 14.4 9.5 19.7 0 51-89.5 107.1-91.4 158.6-37 10.3 10 20.9-1.3 18.7-11.4zM256 301.7V432c0 8.8-7.2 16-16 16-7.8 0-13.2-5.3-15.1-10.7-5.9-16.7-24.1-25.4-40.8-19.5-16.7 5.9-25.4 24.2-19.5 40.8 11.2 31.9 41.6 53.3 75.4 53.3 44.1 0 80-35.9 80-80V301.6c-9.1-7.9-19.8-13.6-32-13.6-12.3.1-22.4 4.8-32 13.7z“]},sv={prefix:”fas“,iconName:”umbrella-beach“,icon:[640,512,,”f5ca“,”M115.38 136.9l102.11 37.18c35.19-81.54 86.21-144.29 139-173.7-95.88-4.89-188.78 36.96-248.53 111.8-6.69 8.4-2.66 21.05 7.42 24.72zm132.25 48.16l238.48 86.83c35.76-121.38 18.7-231.66-42.63-253.98-7.4-2.7-15.13-4-23.09-4-58.02.01-128.27 69.17-172.76 171.15zM521.48 60.5c6.22 16.3 10.83 34.6 13.2 55.19 5.74 49.89-1.42 108.23-18.95 166.98l102.62 37.36c10.09 3.67 21.31-3.43 21.57-14.17 2.32-95.69-41.91-187.44-118.44-245.36zM560 447.98H321.06L386 269.5l-60.14-21.9-72.9 200.37H16c-8.84 0-16 7.16-16 16.01v32.01C0 504.83 7.16 512 16 512h544c8.84 0 16-7.17 16-16.01v-32.01c0-8.84-7.16-16-16-16z“]},uv={prefix:”fas“,iconName:”underline“,icon:[448,512,,”f0cd“,”M32 64h32v160c0 88.22 71.78 160 160 160s160-71.78 160-160V64h32a16 16 0 0 0 16-16V16a16 16 0 0 0-16-16H272a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32v160a80 80 0 0 1-160 0V64h32a16 16 0 0 0 16-16V16a16 16 0 0 0-16-16H32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16zm400 384H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16z“]},lv={prefix:”fas“,iconName:”undo“,icon:[512,512,,”f0e2“,”M212.333 224.333H12c-6.627 0-12-5.373-12-12V12C0 5.373 5.373 0 12 0h48c6.627 0 12 5.373 12 12v78.112C117.773 39.279 184.26 7.47 258.175 8.007c136.906.994 246.448 111.623 246.157 248.532C504.041 393.258 393.12 504 256.333 504c-64.089 0-122.496-24.313-166.51-64.215-5.099-4.622-5.334-12.554-.467-17.42l33.967-33.967c4.474-4.474 11.662-4.717 16.401-.525C170.76 415.336 211.58 432 256.333 432c97.268 0 176-78.716 176-176 0-97.267-78.716-176-176-176-58.496 0-110.28 28.476-142.274 72.333h98.274c6.627 0 12 5.373 12 12v48c0 6.627-5.373 12-12 12z“]},fv={prefix:”fas“,iconName:”undo-alt“,icon:[512,512,,”f2ea“,”M255.545 8c-66.269.119-126.438 26.233-170.86 68.685L48.971 40.971C33.851 25.851 8 36.559 8 57.941V192c0 13.255 10.745 24 24 24h134.059c21.382 0 32.09-25.851 16.971-40.971l-41.75-41.75c30.864-28.899 70.801-44.907 113.23-45.273 92.398-.798 170.283 73.977 169.484 169.442C423.236 348.009 349.816 424 256 424c-41.127 0-79.997-14.678-110.63-41.556-4.743-4.161-11.906-3.908-16.368.553L89.34 422.659c-4.872 4.872-4.631 12.815.482 17.433C133.798 479.813 192.074 504 256 504c136.966 0 247.999-111.033 248-247.998C504.001 119.193 392.354 7.755 255.545 8z“]},hv={prefix:”fas“,iconName:”universal-access“,icon:[512,512,,”f29a“,”M256 48c114.953 0 208 93.029 208 208 0 114.953-93.029 208-208 208-114.953 0-208-93.029-208-208 0-114.953 93.029-208 208-208m0-40C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 8zm0 56C149.961 64 64 149.961 64 256s85.961 192 192 192 192-85.961 192-192S362.039 64 256 64zm0 44c19.882 0 36 16.118 36 36s-16.118 36-36 36-36-16.118-36-36 16.118-36 36-36zm117.741 98.023c-28.712 6.779-55.511 12.748-82.14 15.807.851 101.023 12.306 123.052 25.037 155.621 3.617 9.26-.957 19.698-10.217 23.315-9.261 3.617-19.699-.957-23.316-10.217-8.705-22.308-17.086-40.636-22.261-78.549h-9.686c-5.167 37.851-13.534 56.208-22.262 78.549-3.615 9.255-14.05 13.836-23.315 10.217-9.26-3.617-13.834-14.056-10.217-23.315 12.713-32.541 24.185-54.541 25.037-155.621-26.629-3.058-53.428-9.027-82.141-15.807-8.6-2.031-13.926-10.648-11.895-19.249s10.647-13.926 19.249-11.895c96.686 22.829 124.283 22.783 220.775 0 8.599-2.03 17.218 3.294 19.249 11.895 2.029 8.601-3.297 17.219-11.897 19.249z“]},dv={prefix:”fas“,iconName:”university“,icon:[512,512,,”f19c“,”M496 128v16a8 8 0 0 1-8 8h-24v12c0 6.627-5.373 12-12 12H60c-6.627 0-12-5.373-12-12v-12H24a8 8 0 0 1-8-8v-16a8 8 0 0 1 4.941-7.392l232-88a7.996 7.996 0 0 1 6.118 0l232 88A8 8 0 0 1 496 128zm-24 304H40c-13.255 0-24 10.745-24 24v16a8 8 0 0 0 8 8h464a8 8 0 0 0 8-8v-16c0-13.255-10.745-24-24-24zM96 192v192H60c-6.627 0-12 5.373-12 12v20h416v-20c0-6.627-5.373-12-12-12h-36V192h-64v192h-64V192h-64v192h-64V192H96z“]},pv={prefix:”fas“,iconName:”unlink“,icon:[512,512,,”f127“,”M304.083 405.907c4.686 4.686 4.686 12.284 0 16.971l-44.674 44.674c-59.263 59.262-155.693 59.266-214.961 0-59.264-59.265-59.264-155.696 0-214.96l44.675-44.675c4.686-4.686 12.284-4.686 16.971 0l39.598 39.598c4.686 4.686 4.686 12.284 0 16.971l-44.675 44.674c-28.072 28.073-28.072 73.75 0 101.823 28.072 28.072 73.75 28.073 101.824 0l44.674-44.674c4.686-4.686 12.284-4.686 16.971 0l39.597 39.598zm-56.568-260.216c4.686 4.686 12.284 4.686 16.971 0l44.674-44.674c28.072-28.075 73.75-28.073 101.824 0 28.072 28.073 28.072 73.75 0 101.823l-44.675 44.674c-4.686 4.686-4.686 12.284 0 16.971l39.598 39.598c4.686 4.686 12.284 4.686 16.971 0l44.675-44.675c59.265-59.265 59.265-155.695 0-214.96-59.266-59.264-155.695-59.264-214.961 0l-44.674 44.674c-4.686 4.686-4.686 12.284 0 16.971l39.597 39.598zm234.828 359.28l22.627-22.627c9.373-9.373 9.373-24.569 0-33.941L63.598 7.029c-9.373-9.373-24.569-9.373-33.941 0L7.029 29.657c-9.373 9.373-9.373 24.569 0 33.941l441.373 441.373c9.373 9.372 24.569 9.372 33.941 0z“]},mv={prefix:”fas“,iconName:”unlock“,icon:[448,512,,”f09c“,”M400 256H152V152.9c0-39.6 31.7-72.5 71.3-72.9 40-.4 72.7 32.1 72.7 72v16c0 13.3 10.7 24 24 24h32c13.3 0 24-10.7 24-24v-16C376 68 307.5-.3 223.5 0 139.5.3 72 69.5 72 153.5V256H48c-26.5 0-48 21.5-48 48v160c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V304c0-26.5-21.5-48-48-48z“]},vv={prefix:”fas“,iconName:”unlock-alt“,icon:[448,512,,”f13e“,”M400 256H152V152.9c0-39.6 31.7-72.5 71.3-72.9 40-.4 72.7 32.1 72.7 72v16c0 13.3 10.7 24 24 24h32c13.3 0 24-10.7 24-24v-16C376 68 307.5-.3 223.5 0 139.5.3 72 69.5 72 153.5V256H48c-26.5 0-48 21.5-48 48v160c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V304c0-26.5-21.5-48-48-48zM264 408c0 22.1-17.9 40-40 40s-40-17.9-40-40v-48c0-22.1 17.9-40 40-40s40 17.9 40 40v48z“]},gv={prefix:”fas“,iconName:”upload“,icon:[512,512,,”f093“,”M296 384h-80c-13.3 0-24-10.7-24-24V192h-87.7c-17.8 0-26.7-21.5-14.1-34.1L242.3 5.7c7.5-7.5 19.8-7.5 27.3 0l152.2 152.2c12.6 12.6 3.7 34.1-14.1 34.1H320v168c0 13.3-10.7 24-24 24zm216-8v112c0 13.3-10.7 24-24 24H24c-13.3 0-24-10.7-24-24V376c0-13.3 10.7-24 24-24h136v8c0 30.9 25.1 56 56 56h80c30.9 0 56-25.1 56-56v-8h136c13.3 0 24 10.7 24 24zm-124 88c0-11-9-20-20-20s-20 9-20 20 9 20 20 20 20-9 20-20zm64 0c0-11-9-20-20-20s-20 9-20 20 9 20 20 20 20-9 20-20z“]},yv={prefix:”fas“,iconName:”user“,icon:[448,512,,”f007“,”M224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm89.6 32h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-41.6c0-74.2-60.2-134.4-134.4-134.4z“]},bv={prefix:”fas“,iconName:”user-alt“,icon:[512,512,,”f406“,”M256 288c79.5 0 144-64.5 144-144S335.5 0 256 0 112 64.5 112 144s64.5 144 144 144zm128 32h-55.1c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16H128C57.3 320 0 377.3 0 448v16c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48v-16c0-70.7-57.3-128-128-128z“]},wv={prefix:”fas“,iconName:”user-alt-slash“,icon:[640,512,,”f4fa“,”M633.8 458.1L389.6 269.3C433.8 244.7 464 198.1 464 144 464 64.5 399.5 0 320 0c-67.1 0-123 46.1-139 108.2L45.5 3.4C38.5-2 28.5-.8 23 6.2L3.4 31.4c-5.4 7-4.2 17 2.8 22.4l588.4 454.7c7 5.4 17 4.2 22.5-2.8l19.6-25.3c5.4-6.8 4.1-16.9-2.9-22.3zM198.4 320C124.2 320 64 380.2 64 454.4v9.6c0 26.5 21.5 48 48 48h382.2L245.8 320h-47.4z“]},xv={prefix:”fas“,iconName:”user-astronaut“,icon:[448,512,,”f4fb“,”M64 224h13.5c24.7 56.5 80.9 96 146.5 96s121.8-39.5 146.5-96H384c8.8 0 16-7.2 16-16v-96c0-8.8-7.2-16-16-16h-13.5C345.8 39.5 289.6 0 224 0S102.2 39.5 77.5 96H64c-8.8 0-16 7.2-16 16v96c0 8.8 7.2 16 16 16zm40-88c0-22.1 21.5-40 48-40h144c26.5 0 48 17.9 48 40v24c0 53-43 96-96 96h-48c-53 0-96-43-96-96v-24zm72 72l12-36 36-12-36-12-12-36-12 36-36 12 36 12 12 36zm151.6 113.4C297.7 340.7 262.2 352 224 352s-73.7-11.3-103.6-30.6C52.9 328.5 0 385 0 454.4v9.6c0 26.5 21.5 48 48 48h80v-64c0-17.7 14.3-32 32-32h128c17.7 0 32 14.3 32 32v64h80c26.5 0 48-21.5 48-48v-9.6c0-69.4-52.9-125.9-120.4-133zM272 448c-8.8 0-16 7.2-16 16s7.2 16 16 16 16-7.2 16-16-7.2-16-16-16zm-96 0c-8.8 0-16 7.2-16 16v48h32v-48c0-8.8-7.2-16-16-16z“]},Sv={prefix:”fas“,iconName:”user-check“,icon:[640,512,,”f4fc“,”M224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm89.6 32h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-41.6c0-74.2-60.2-134.4-134.4-134.4zm323-128.4l-27.8-28.1c-4.6-4.7-12.1-4.7-16.8-.1l-104.8 104-45.5-45.8c-4.6-4.7-12.1-4.7-16.8-.1l-28.1 27.9c-4.7 4.6-4.7 12.1-.1 16.8l81.7 82.3c4.6 4.7 12.1 4.7 16.8.1l141.3-140.2c4.6-4.7 4.7-12.2.1-16.8z“]},kv={prefix:”fas“,iconName:”user-circle“,icon:[496,512,,”f2bd“,”M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 96c48.6 0 88 39.4 88 88s-39.4 88-88 88-88-39.4-88-88 39.4-88 88-88zm0 344c-58.7 0-111.3-26.6-146.5-68.2 18.8-35.4 55.6-59.8 98.5-59.8 2.4 0 4.8.4 7.1 1.1 13 4.2 26.6 6.9 40.9 6.9 14.3 0 28-2.7 40.9-6.9 2.3-.7 4.7-1.1 7.1-1.1 42.9 0 79.7 24.4 98.5 59.8C359.3 421.4 306.7 448 248 448z“]},_v={prefix:”fas“,iconName:”user-clock“,icon:[640,512,,”f4fd“,”M496 224c-79.6 0-144 64.4-144 144s64.4 144 144 144 144-64.4 144-144-64.4-144-144-144zm64 150.3c0 5.3-4.4 9.7-9.7 9.7h-60.6c-5.3 0-9.7-4.4-9.7-9.7v-76.6c0-5.3 4.4-9.7 9.7-9.7h12.6c5.3 0 9.7 4.4 9.7 9.7V352h38.3c5.3 0 9.7 4.4 9.7 9.7v12.6zM320 368c0-27.8 6.7-54.1 18.2-77.5-8-1.5-16.2-2.5-24.6-2.5h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h347.1c-45.3-31.9-75.1-84.5-75.1-144zm-96-112c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128z“]},zv={prefix:”fas“,iconName:”user-cog“,icon:[640,512,,”f4fe“,”M610.5 373.3c2.6-14.1 2.6-28.5 0-42.6l25.8-14.9c3-1.7 4.3-5.2 3.3-8.5-6.7-21.6-18.2-41.2-33.2-57.4-2.3-2.5-6-3.1-9-1.4l-25.8 14.9c-10.9-9.3-23.4-16.5-36.9-21.3v-29.8c0-3.4-2.4-6.4-5.7-7.1-22.3-5-45-4.8-66.2 0-3.3.7-5.7 3.7-5.7 7.1v29.8c-13.5 4.8-26 12-36.9 21.3l-25.8-14.9c-2.9-1.7-6.7-1.1-9 1.4-15 16.2-26.5 35.8-33.2 57.4-1 3.3.4 6.8 3.3 8.5l25.8 14.9c-2.6 14.1-2.6 28.5 0 42.6l-25.8 14.9c-3 1.7-4.3 5.2-3.3 8.5 6.7 21.6 18.2 41.1 33.2 57.4 2.3 2.5 6 3.1 9 1.4l25.8-14.9c10.9 9.3 23.4 16.5 36.9 21.3v29.8c0 3.4 2.4 6.4 5.7 7.1 22.3 5 45 4.8 66.2 0 3.3-.7 5.7-3.7 5.7-7.1v-29.8c13.5-4.8 26-12 36.9-21.3l25.8 14.9c2.9 1.7 6.7 1.1 9-1.4 15-16.2 26.5-35.8 33.2-57.4 1-3.3-.4-6.8-3.3-8.5l-25.8-14.9zM496 400.5c-26.8 0-48.5-21.8-48.5-48.5s21.8-48.5 48.5-48.5 48.5 21.8 48.5 48.5-21.7 48.5-48.5 48.5zM224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm201.2 226.5c-2.3-1.2-4.6-2.6-6.8-3.9l-7.9 4.6c-6 3.4-12.8 5.3-19.6 5.3-10.9 0-21.4-4.6-28.9-12.6-18.3-19.8-32.3-43.9-40.2-69.6-5.5-17.7 1.9-36.4 17.9-45.7l7.9-4.6c-.1-2.6-.1-5.2 0-7.8l-7.9-4.6c-16-9.2-23.4-28-17.9-45.7.9-2.9 2.2-5.8 3.2-8.7-3.8-.3-7.5-1.2-11.4-1.2h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h352c10.1 0 19.5-3.2 27.2-8.5-1.2-3.8-2-7.7-2-11.8v-9.2z“]},Cv={prefix:”fas“,iconName:”user-edit“,icon:[640,512,,”f4ff“,”M224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm89.6 32h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h274.9c-2.4-6.8-3.4-14-2.6-21.3l6.8-60.9 1.2-11.1 7.9-7.9 77.3-77.3c-24.5-27.7-60-45.5-99.9-45.5zm45.3 145.3l-6.8 61c-1.1 10.2 7.5 18.8 17.6 17.6l60.9-6.8 137.9-137.9-71.7-71.7-137.9 137.8zM633 268.9L595.1 231c-9.3-9.3-24.5-9.3-33.8 0l-37.8 37.8-4.1 4.1 71.8 71.7 41.8-41.8c9.3-9.4 9.3-24.5 0-33.9z“]},Mv={prefix:”fas“,iconName:”user-friends“,icon:[640,512,,”f500“,”M192 256c61.9 0 112-50.1 112-112S253.9 32 192 32 80 82.1 80 144s50.1 112 112 112zm76.8 32h-8.3c-20.8 10-43.9 16-68.5 16s-47.6-6-68.5-16h-8.3C51.6 288 0 339.6 0 403.2V432c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48v-28.8c0-63.6-51.6-115.2-115.2-115.2zM480 256c53 0 96-43 96-96s-43-96-96-96-96 43-96 96 43 96 96 96zm48 32h-3.8c-13.9 4.8-28.6 8-44.2 8s-30.3-3.2-44.2-8H432c-20.4 0-39.2 5.9-55.7 15.4 24.4 26.3 39.7 61.2 39.7 99.8v38.4c0 2.2-.5 4.3-.6 6.4H592c26.5 0 48-21.5 48-48 0-61.9-50.1-112-112-112z“]},Ov={prefix:”fas“,iconName:”user-graduate“,icon:[448,512,,”f501“,”M319.4 320.6L224 416l-95.4-95.4C57.1 323.7 0 382.2 0 454.4v9.6c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-9.6c0-72.2-57.1-130.7-128.6-133.8zM13.6 79.8l6.4 1.5v58.4c-7 4.2-12 11.5-12 20.3 0 8.4 4.6 15.4 11.1 19.7L3.5 242c-1.7 6.9 2.1 14 7.6 14h41.8c5.5 0 9.3-7.1 7.6-14l-15.6-62.3C51.4 175.4 56 168.4 56 160c0-8.8-5-16.1-12-20.3V87.1l66 15.9c-8.6 17.2-14 36.4-14 57 0 70.7 57.3 128 128 128s128-57.3 128-128c0-20.6-5.3-39.8-14-57l96.3-23.2c18.2-4.4 18.2-27.1 0-31.5l-190.4-46c-13-3.1-26.7-3.1-39.7 0L13.6 48.2c-18.1 4.4-18.1 27.2 0 31.6z“]},Tv={prefix:”fas“,iconName:”user-injured“,icon:[448,512,,”f728“,”M277.37 11.98C261.08 4.47 243.11 0 224 0c-53.69 0-99.5 33.13-118.51 80h81.19l90.69-68.02zM342.51 80c-7.9-19.47-20.67-36.2-36.49-49.52L239.99 80h102.52zM224 256c70.69 0 128-57.31 128-128 0-5.48-.95-10.7-1.61-16H97.61c-.67 5.3-1.61 10.52-1.61 16 0 70.69 57.31 128 128 128zM80 299.7V512h128.26l-98.45-221.52A132.835 132.835 0 0 0 80 299.7zM0 464c0 26.51 21.49 48 48 48V320.24C18.88 344.89 0 381.26 0 422.4V464zm256-48h-55.38l42.67 96H256c26.47 0 48-21.53 48-48s-21.53-48-48-48zm57.6-128h-16.71c-22.24 10.18-46.88 16-72.89 16s-50.65-5.82-72.89-16h-7.37l42.67 96H256c44.11 0 80 35.89 80 80 0 18.08-6.26 34.59-16.41 48H400c26.51 0 48-21.49 48-48v-41.6c0-74.23-60.17-134.4-134.4-134.4z“]},Ev={prefix:”fas“,iconName:”user-lock“,icon:[640,512,,”f502“,”M224 256A128 128 0 1 0 96 128a128 128 0 0 0 128 128zm96 64a63.08 63.08 0 0 1 8.1-30.5c-4.8-.5-9.5-1.5-14.5-1.5h-16.7a174.08 174.08 0 0 1-145.8 0h-16.7A134.43 134.43 0 0 0 0 422.4V464a48 48 0 0 0 48 48h280.9a63.54 63.54 0 0 1-8.9-32zm288-32h-32v-80a80 80 0 0 0-160 0v80h-32a32 32 0 0 0-32 32v160a32 32 0 0 0 32 32h224a32 32 0 0 0 32-32V320a32 32 0 0 0-32-32zM496 432a32 32 0 1 1 32-32 32 32 0 0 1-32 32zm32-144h-64v-80a32 32 0 0 1 64 0z“]},Lv={prefix:”fas“,iconName:”user-md“,icon:[448,512,,”f0f0“,”M224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zM104 424c0 13.3 10.7 24 24 24s24-10.7 24-24-10.7-24-24-24-24 10.7-24 24zm216-135.4v49c36.5 7.4 64 39.8 64 78.4v41.7c0 7.6-5.4 14.2-12.9 15.7l-32.2 6.4c-4.3.9-8.5-1.9-9.4-6.3l-3.1-15.7c-.9-4.3 1.9-8.6 6.3-9.4l19.3-3.9V416c0-62.8-96-65.1-96 1.9v26.7l19.3 3.9c4.3.9 7.1 5.1 6.3 9.4l-3.1 15.7c-.9 4.3-5.1 7.1-9.4 6.3l-31.2-4.2c-7.9-1.1-13.8-7.8-13.8-15.9V416c0-38.6 27.5-70.9 64-78.4v-45.2c-2.2.7-4.4 1.1-6.6 1.9-18 6.3-37.3 9.8-57.4 9.8s-39.4-3.5-57.4-9.8c-7.4-2.6-14.9-4.2-22.6-5.2v81.6c23.1 6.9 40 28.1 40 53.4 0 30.9-25.1 56-56 56s-56-25.1-56-56c0-25.3 16.9-46.5 40-53.4v-80.4C48.5 301 0 355.8 0 422.4v44.8C0 491.9 20.1 512 44.8 512h358.4c24.7 0 44.8-20.1 44.8-44.8v-44.8c0-72-56.8-130.3-128-133.8z“]},Av={prefix:”fas“,iconName:”user-minus“,icon:[640,512,,”f503“,”M624 208H432c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h192c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zm-400 48c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm89.6 32h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-41.6c0-74.2-60.2-134.4-134.4-134.4z“]},Rv={prefix:”fas“,iconName:”user-ninja“,icon:[448,512,,”f504“,”M325.4 289.2L224 390.6 122.6 289.2C54 295.3 0 352.2 0 422.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-41.6c0-70.2-54-127.1-122.6-133.2zM32 192c27.3 0 51.8-11.5 69.2-29.7 15.1 53.9 64 93.7 122.8 93.7 70.7 0 128-57.3 128-128S294.7 0 224 0c-50.4 0-93.6 29.4-114.5 71.8C92.1 47.8 64 32 32 32c0 33.4 17.1 62.8 43.1 80-26 17.2-43.1 46.6-43.1 80zm144-96h96c17.7 0 32 14.3 32 32H144c0-17.7 14.3-32 32-32z“]},Nv={prefix:”fas“,iconName:”user-nurse“,icon:[448,512,,”f82f“,”M319.41,320,224,415.39,128.59,320C57.1,323.1,0,381.6,0,453.79A58.21,58.21,0,0,0,58.21,512H389.79A58.21,58.21,0,0,0,448,453.79C448,381.6,390.9,323.1,319.41,320ZM224,304A128,128,0,0,0,352,176V65.82a32,32,0,0,0-20.76-30L246.47,4.07a64,64,0,0,0-44.94,0L116.76,35.86A32,32,0,0,0,96,65.82V176A128,128,0,0,0,224,304ZM184,71.67a5,5,0,0,1,5-5h21.67V45a5,5,0,0,1,5-5h16.66a5,5,0,0,1,5,5V66.67H259a5,5,0,0,1,5,5V88.33a5,5,0,0,1-5,5H237.33V115a5,5,0,0,1-5,5H215.67a5,5,0,0,1-5-5V93.33H189a5,5,0,0,1-5-5ZM144,160H304v16a80,80,0,0,1-160,0Z“]},Hv={prefix:”fas“,iconName:”user-plus“,icon:[640,512,,”f234“,”M624 208h-64v-64c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v64h-64c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h64v64c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-64h64c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zm-400 48c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm89.6 32h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-41.6c0-74.2-60.2-134.4-134.4-134.4z“]},Pv={prefix:”fas“,iconName:”user-secret“,icon:[448,512,,”f21b“,”M383.9 308.3l23.9-62.6c4-10.5-3.7-21.7-15-21.7h-58.5c11-18.9 17.8-40.6 17.8-64v-.3c39.2-7.8 64-19.1 64-31.7 0-13.3-27.3-25.1-70.1-33-9.2-32.8-27-65.8-40.6-82.8-9.5-11.9-25.9-15.6-39.5-8.8l-27.6 13.8c-9 4.5-19.6 4.5-28.6 0L182.1 3.4c-13.6-6.8-30-3.1-39.5 8.8-13.5 17-31.4 50-40.6 82.8-42.7 7.9-70 19.7-70 33 0 12.6 24.8 23.9 64 31.7v.3c0 23.4 6.8 45.1 17.8 64H56.3c-11.5 0-19.2 11.7-14.7 22.3l25.8 60.2C27.3 329.8 0 372.7 0 422.4v44.8C0 491.9 20.1 512 44.8 512h358.4c24.7 0 44.8-20.1 44.8-44.8v-44.8c0-48.4-25.8-90.4-64.1-114.1zM176 480l-41.6-192 49.6 32 24 40-32 120zm96 0l-32-120 24-40 49.6-32L272 480zm41.7-298.5c-3.9 11.9-7 24.6-16.5 33.4-10.1 9.3-48 22.4-64-25-2.8-8.4-15.4-8.4-18.3 0-17 50.2-56 32.4-64 25-9.5-8.8-12.7-21.5-16.5-33.4-.8-2.5-6.3-5.7-6.3-5.8v-10.8c28.3 3.6 61 5.8 96 5.8s67.7-2.1 96-5.8v10.8c-.1.1-5.6 3.2-6.4 5.8z“]},jv={prefix:”fas“,iconName:”user-shield“,icon:[640,512,,”f505“,”M622.3 271.1l-115.2-45c-4.1-1.6-12.6-3.7-22.2 0l-115.2 45c-10.7 4.2-17.7 14-17.7 24.9 0 111.6 68.7 188.8 132.9 213.9 9.6 3.7 18 1.6 22.2 0C558.4 489.9 640 420.5 640 296c0-10.9-7-20.7-17.7-24.9zM496 462.4V273.3l95.5 37.3c-5.6 87.1-60.9 135.4-95.5 151.8zM224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm96 40c0-2.5.8-4.8 1.1-7.2-2.5-.1-4.9-.8-7.5-.8h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h352c6.8 0 13.3-1.5 19.2-4-54-42.9-99.2-116.7-99.2-212z“]},Vv={prefix:”fas“,iconName:”user-slash“,icon:[640,512,,”f506“,”M633.8 458.1L362.3 248.3C412.1 230.7 448 183.8 448 128 448 57.3 390.7 0 320 0c-67.1 0-121.5 51.8-126.9 117.4L45.5 3.4C38.5-2 28.5-.8 23 6.2L3.4 31.4c-5.4 7-4.2 17 2.8 22.4l588.4 454.7c7 5.4 17 4.2 22.5-2.8l19.6-25.3c5.4-6.8 4.1-16.9-2.9-22.3zM96 422.4V464c0 26.5 21.5 48 48 48h350.2L207.4 290.3C144.2 301.3 96 356 96 422.4z“]},Dv={prefix:”fas“,iconName:”user-tag“,icon:[640,512,,”f507“,”M630.6 364.9l-90.3-90.2c-12-12-28.3-18.7-45.3-18.7h-79.3c-17.7 0-32 14.3-32 32v79.2c0 17 6.7 33.2 18.7 45.2l90.3 90.2c12.5 12.5 32.8 12.5 45.3 0l92.5-92.5c12.6-12.5 12.6-32.7.1-45.2zm-182.8-21c-13.3 0-24-10.7-24-24s10.7-24 24-24 24 10.7 24 24c0 13.2-10.7 24-24 24zm-223.8-88c70.7 0 128-57.3 128-128C352 57.3 294.7 0 224 0S96 57.3 96 128c0 70.6 57.3 127.9 128 127.9zm127.8 111.2V294c-12.2-3.6-24.9-6.2-38.2-6.2h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 287.9 0 348.1 0 422.3v41.6c0 26.5 21.5 48 48 48h352c15.5 0 29.1-7.5 37.9-18.9l-58-58c-18.1-18.1-28.1-42.2-28.1-67.9z“]},Iv={prefix:”fas“,iconName:”user-tie“,icon:[448,512,,”f508“,”M224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm95.8 32.6L272 480l-32-136 32-56h-96l32 56-32 136-47.8-191.4C56.9 292 0 350.3 0 422.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-41.6c0-72.1-56.9-130.4-128.2-133.8z“]},Fv={prefix:”fas“,iconName:”user-times“,icon:[640,512,,”f235“,”M589.6 240l45.6-45.6c6.3-6.3 6.3-16.5 0-22.8l-22.8-22.8c-6.3-6.3-16.5-6.3-22.8 0L544 194.4l-45.6-45.6c-6.3-6.3-16.5-6.3-22.8 0l-22.8 22.8c-6.3 6.3-6.3 16.5 0 22.8l45.6 45.6-45.6 45.6c-6.3 6.3-6.3 16.5 0 22.8l22.8 22.8c6.3 6.3 16.5 6.3 22.8 0l45.6-45.6 45.6 45.6c6.3 6.3 16.5 6.3 22.8 0l22.8-22.8c6.3-6.3 6.3-16.5 0-22.8L589.6 240zM224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm89.6 32h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-41.6c0-74.2-60.2-134.4-134.4-134.4z“]},Bv={prefix:”fas“,iconName:”users“,icon:[640,512,,”f0c0“,”M96 224c35.3 0 64-28.7 64-64s-28.7-64-64-64-64 28.7-64 64 28.7 64 64 64zm448 0c35.3 0 64-28.7 64-64s-28.7-64-64-64-64 28.7-64 64 28.7 64 64 64zm32 32h-64c-17.6 0-33.5 7.1-45.1 18.6 40.3 22.1 68.9 62 75.1 109.4h66c17.7 0 32-14.3 32-32v-32c0-35.3-28.7-64-64-64zm-256 0c61.9 0 112-50.1 112-112S381.9 32 320 32 208 82.1 208 144s50.1 112 112 112zm76.8 32h-8.3c-20.8 10-43.9 16-68.5 16s-47.6-6-68.5-16h-8.3C179.6 288 128 339.6 128 403.2V432c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48v-28.8c0-63.6-51.6-115.2-115.2-115.2zm-223.7-13.4C161.5 263.1 145.6 256 128 256H64c-35.3 0-64 28.7-64 64v32c0 17.7 14.3 32 32 32h65.9c6.3-47.4 34.9-87.3 75.2-109.4z“]},Uv={prefix:”fas“,iconName:”users-cog“,icon:[640,512,,”f509“,”M610.5 341.3c2.6-14.1 2.6-28.5 0-42.6l25.8-14.9c3-1.7 4.3-5.2 3.3-8.5-6.7-21.6-18.2-41.2-33.2-57.4-2.3-2.5-6-3.1-9-1.4l-25.8 14.9c-10.9-9.3-23.4-16.5-36.9-21.3v-29.8c0-3.4-2.4-6.4-5.7-7.1-22.3-5-45-4.8-66.2 0-3.3.7-5.7 3.7-5.7 7.1v29.8c-13.5 4.8-26 12-36.9 21.3l-25.8-14.9c-2.9-1.7-6.7-1.1-9 1.4-15 16.2-26.5 35.8-33.2 57.4-1 3.3.4 6.8 3.3 8.5l25.8 14.9c-2.6 14.1-2.6 28.5 0 42.6l-25.8 14.9c-3 1.7-4.3 5.2-3.3 8.5 6.7 21.6 18.2 41.1 33.2 57.4 2.3 2.5 6 3.1 9 1.4l25.8-14.9c10.9 9.3 23.4 16.5 36.9 21.3v29.8c0 3.4 2.4 6.4 5.7 7.1 22.3 5 45 4.8 66.2 0 3.3-.7 5.7-3.7 5.7-7.1v-29.8c13.5-4.8 26-12 36.9-21.3l25.8 14.9c2.9 1.7 6.7 1.1 9-1.4 15-16.2 26.5-35.8 33.2-57.4 1-3.3-.4-6.8-3.3-8.5l-25.8-14.9zM496 368.5c-26.8 0-48.5-21.8-48.5-48.5s21.8-48.5 48.5-48.5 48.5 21.8 48.5 48.5-21.7 48.5-48.5 48.5zM96 224c35.3 0 64-28.7 64-64s-28.7-64-64-64-64 28.7-64 64 28.7 64 64 64zm224 32c1.9 0 3.7-.5 5.6-.6 8.3-21.7 20.5-42.1 36.3-59.2 7.4-8 17.9-12.6 28.9-12.6 6.9 0 13.7 1.8 19.6 5.3l7.9 4.6c.8-.5 1.6-.9 2.4-1.4 7-14.6 11.2-30.8 11.2-48 0-61.9-50.1-112-112-112S208 82.1 208 144c0 61.9 50.1 112 112 112zm105.2 194.5c-2.3-1.2-4.6-2.6-6.8-3.9-8.2 4.8-15.3 9.8-27.5 9.8-10.9 0-21.4-4.6-28.9-12.6-18.3-19.8-32.3-43.9-40.2-69.6-10.7-34.5 24.9-49.7 25.8-50.3-.1-2.6-.1-5.2 0-7.8l-7.9-4.6c-3.8-2.2-7-5-9.8-8.1-3.3.2-6.5.6-9.8.6-24.6 0-47.6-6-68.5-16h-8.3C179.6 288 128 339.6 128 403.2V432c0 26.5 21.5 48 48 48h255.4c-3.7-6-6.2-12.8-6.2-20.3v-9.2zM173.1 274.6C161.5 263.1 145.6 256 128 256H64c-35.3 0-64 28.7-64 64v32c0 17.7 14.3 32 32 32h65.9c6.3-47.4 34.9-87.3 75.2-109.4z“]},qv={prefix:”fas“,iconName:”users-slash“,icon:[640,512,,”e073“,”M132.65,212.32,36.21,137.78A63.4,63.4,0,0,0,32,160a63.84,63.84,0,0,0,100.65,52.32Zm40.44,62.28A63.79,63.79,0,0,0,128,256H64A64.06,64.06,0,0,0,0,320v32a32,32,0,0,0,32,32H97.91A146.62,146.62,0,0,1,173.09,274.6ZM544,224a64,64,0,1,0-64-64A64.06,64.06,0,0,0,544,224ZM500.56,355.11a114.24,114.24,0,0,0-84.47-65.28L361,247.23c41.46-16.3,71-55.92,71-103.23A111.93,111.93,0,0,0,320,32c-57.14,0-103.69,42.83-110.6,98.08L45.46,3.38A16,16,0,0,0,23,6.19L3.37,31.46A16,16,0,0,0,6.18,53.91L594.53,508.63A16,16,0,0,0,617,505.82l19.64-25.27a16,16,0,0,0-2.81-22.45ZM128,403.21V432a48,48,0,0,0,48,48H464a47.45,47.45,0,0,0,12.57-1.87L232,289.13C173.74,294.83,128,343.42,128,403.21ZM576,256H512a63.79,63.79,0,0,0-45.09,18.6A146.29,146.29,0,0,1,542,384h66a32,32,0,0,0,32-32V320A64.06,64.06,0,0,0,576,256Z“]},Gv={prefix:”fas“,iconName:”utensil-spoon“,icon:[512,512,,”f2e5“,”M480.1 31.9c-55-55.1-164.9-34.5-227.8 28.5-49.3 49.3-55.1 110-28.8 160.4L9 413.2c-11.6 10.5-12.1 28.5-1 39.5L59.3 504c11 11 29.1 10.5 39.5-1.1l192.4-214.4c50.4 26.3 111.1 20.5 160.4-28.8 63-62.9 83.6-172.8 28.5-227.8z“]},Wv={prefix:”fas“,iconName:”utensils“,icon:[416,512,,”f2e7“,”M207.9 15.2c.8 4.7 16.1 94.5 16.1 128.8 0 52.3-27.8 89.6-68.9 104.6L168 486.7c.7 13.7-10.2 25.3-24 25.3H80c-13.7 0-24.7-11.5-24-25.3l12.9-238.1C27.7 233.6 0 196.2 0 144 0 109.6 15.3 19.9 16.1 15.2 19.3-5.1 61.4-5.4 64 16.3v141.2c1.3 3.4 15.1 3.2 16 0 1.4-25.3 7.9-139.2 8-141.8 3.3-20.8 44.7-20.8 47.9 0 .2 2.7 6.6 116.5 8 141.8.9 3.2 14.8 3.4 16 0V16.3c2.6-21.6 44.8-21.4 48-1.1zm119.2 285.7l-15 185.1c-1.2 14 9.9 26 23.9 26h56c13.3 0 24-10.7 24-24V24c0-13.2-10.7-24-24-24-82.5 0-221.4 178.5-64.9 300.9z“]},Zv={prefix:”fas“,iconName:”vector-square“,icon:[512,512,,”f5cb“,”M512 128V32c0-17.67-14.33-32-32-32h-96c-17.67 0-32 14.33-32 32H160c0-17.67-14.33-32-32-32H32C14.33 0 0 14.33 0 32v96c0 17.67 14.33 32 32 32v192c-17.67 0-32 14.33-32 32v96c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32h192c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32v-96c0-17.67-14.33-32-32-32V160c17.67 0 32-14.33 32-32zm-96-64h32v32h-32V64zM64 64h32v32H64V64zm32 384H64v-32h32v32zm352 0h-32v-32h32v32zm-32-96h-32c-17.67 0-32 14.33-32 32v32H160v-32c0-17.67-14.33-32-32-32H96V160h32c17.67 0 32-14.33 32-32V96h192v32c0 17.67 14.33 32 32 32h32v192z“]},$v={prefix:”fas“,iconName:”venus“,icon:[288,512,,”f221“,”M288 176c0-79.5-64.5-144-144-144S0 96.5 0 176c0 68.5 47.9 125.9 112 140.4V368H76c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h36v36c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-36h36c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-36v-51.6c64.1-14.5 112-71.9 112-140.4zm-224 0c0-44.1 35.9-80 80-80s80 35.9 80 80-35.9 80-80 80-80-35.9-80-80z“]},Jv={prefix:”fas“,iconName:”venus-double“,icon:[512,512,,”f226“,”M288 176c0-79.5-64.5-144-144-144S0 96.5 0 176c0 68.5 47.9 125.9 112 140.4V368H76c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h36v36c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-36h36c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-36v-51.6c64.1-14.5 112-71.9 112-140.4zm-224 0c0-44.1 35.9-80 80-80s80 35.9 80 80-35.9 80-80 80-80-35.9-80-80zm336 140.4V368h36c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12h-36v36c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-36h-36c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h36v-51.6c-21.2-4.8-40.6-14.3-57.2-27.3 14-16.7 25-36 32.1-57.1 14.5 14.8 34.7 24 57.1 24 44.1 0 80-35.9 80-80s-35.9-80-80-80c-22.3 0-42.6 9.2-57.1 24-7.1-21.1-18-40.4-32.1-57.1C303.4 43.6 334.3 32 368 32c79.5 0 144 64.5 144 144 0 68.5-47.9 125.9-112 140.4z“]},Kv={prefix:”fas“,iconName:”venus-mars“,icon:[576,512,,”f228“,”M564 0h-79c-10.7 0-16 12.9-8.5 20.5l16.9 16.9-48.7 48.7C422.5 72.1 396.2 64 368 64c-33.7 0-64.6 11.6-89.2 30.9 14 16.7 25 36 32.1 57.1 14.5-14.8 34.7-24 57.1-24 44.1 0 80 35.9 80 80s-35.9 80-80 80c-22.3 0-42.6-9.2-57.1-24-7.1 21.1-18 40.4-32.1 57.1 24.5 19.4 55.5 30.9 89.2 30.9 79.5 0 144-64.5 144-144 0-28.2-8.1-54.5-22.1-76.7l48.7-48.7 16.9 16.9c2.4 2.4 5.4 3.5 8.4 3.5 6.2 0 12.1-4.8 12.1-12V12c0-6.6-5.4-12-12-12zM144 64C64.5 64 0 128.5 0 208c0 68.5 47.9 125.9 112 140.4V400H76c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h36v36c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-36h36c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-36v-51.6c64.1-14.6 112-71.9 112-140.4 0-79.5-64.5-144-144-144zm0 224c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80z“]},Qv={prefix:”fas“,iconName:”vial“,icon:[480,512,,”f492“,”M477.7 186.1L309.5 18.3c-3.1-3.1-8.2-3.1-11.3 0l-34 33.9c-3.1 3.1-3.1 8.2 0 11.3l11.2 11.1L33 316.5c-38.8 38.7-45.1 102-9.4 143.5 20.6 24 49.5 36 78.4 35.9 26.4 0 52.8-10 72.9-30.1l246.3-245.7 11.2 11.1c3.1 3.1 8.2 3.1 11.3 0l34-33.9c3.1-3 3.1-8.1 0-11.2zM318 256H161l148-147.7 78.5 78.3L318 256z“]},Yv={prefix:”fas“,iconName:”vials“,icon:[640,512,,”f493“,”M72 64h24v240c0 44.1 35.9 80 80 80s80-35.9 80-80V64h24c4.4 0 8-3.6 8-8V8c0-4.4-3.6-8-8-8H72c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8zm72 0h64v96h-64V64zm480 384H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h608c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zM360 64h24v240c0 44.1 35.9 80 80 80s80-35.9 80-80V64h24c4.4 0 8-3.6 8-8V8c0-4.4-3.6-8-8-8H360c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8zm72 0h64v96h-64V64z“]},Xv={prefix:”fas“,iconName:”video“,icon:[576,512,,”f03d“,”M336.2 64H47.8C21.4 64 0 85.4 0 111.8v288.4C0 426.6 21.4 448 47.8 448h288.4c26.4 0 47.8-21.4 47.8-47.8V111.8c0-26.4-21.4-47.8-47.8-47.8zm189.4 37.7L416 177.3v157.4l109.6 75.5c21.2 14.6 50.4-.3 50.4-25.8V127.5c0-25.4-29.1-40.4-50.4-25.8z“]},eg={prefix:”fas“,iconName:”video-slash“,icon:[640,512,,”f4e2“,”M633.8 458.1l-55-42.5c15.4-1.4 29.2-13.7 29.2-31.1v-257c0-25.5-29.1-40.4-50.4-25.8L448 177.3v137.2l-32-24.7v-178c0-26.4-21.4-47.8-47.8-47.8H123.9L45.5 3.4C38.5-2 28.5-.8 23 6.2L3.4 31.4c-5.4 7-4.2 17 2.8 22.4L42.7 82 416 370.6l178.5 138c7 5.4 17 4.2 22.5-2.8l19.6-25.3c5.5-6.9 4.2-17-2.8-22.4zM32 400.2c0 26.4 21.4 47.8 47.8 47.8h288.4c11.2 0 21.4-4 29.6-10.5L32 154.7v245.5z“]},tg={prefix:”fas“,iconName:”vihara“,icon:[640,512,,”f6a7“,”M632.88 400.71L544 352v-64l55.16-17.69c11.79-5.9 11.79-22.72 0-28.62L480 192v-64l27.31-16.3c7.72-7.72 5.61-20.74-4.16-25.62L320 0 136.85 86.07c-9.77 4.88-11.88 17.9-4.16 25.62L160 128v64L40.84 241.69c-11.79 5.9-11.79 22.72 0 28.62L96 288v64L7.12 400.71c-5.42 3.62-7.7 9.63-7 15.29.62 5.01 3.57 9.75 8.72 12.33L64 448v48c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-48h160v48c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-48h160v48c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-48l55.15-19.67c5.16-2.58 8.1-7.32 8.72-12.33.71-5.67-1.57-11.68-6.99-15.29zM224 128h192v64H224v-64zm-64 224v-64h320v64H160z“]},ng={prefix:”fas“,iconName:”virus“,icon:[512,512,,”e074“,”M483.55,227.55H462c-50.68,0-76.07-61.27-40.23-97.11L437,115.19A28.44,28.44,0,0,0,396.8,75L381.56,90.22c-35.84,35.83-97.11,10.45-97.11-40.23V28.44a28.45,28.45,0,0,0-56.9,0V50c0,50.68-61.27,76.06-97.11,40.23L115.2,75A28.44,28.44,0,0,0,75,115.19l15.25,15.25c35.84,35.84,10.45,97.11-40.23,97.11H28.45a28.45,28.45,0,1,0,0,56.89H50c50.68,0,76.07,61.28,40.23,97.12L75,396.8A28.45,28.45,0,0,0,115.2,437l15.24-15.25c35.84-35.84,97.11-10.45,97.11,40.23v21.54a28.45,28.45,0,0,0,56.9,0V462c0-50.68,61.27-76.07,97.11-40.23L396.8,437A28.45,28.45,0,0,0,437,396.8l-15.25-15.24c-35.84-35.84-10.45-97.12,40.23-97.12h21.54a28.45,28.45,0,1,0,0-56.89ZM224,272a48,48,0,1,1,48-48A48,48,0,0,1,224,272Zm80,56a24,24,0,1,1,24-24A24,24,0,0,1,304,328Z“]},rg={prefix:”fas“,iconName:”virus-slash“,icon:[640,512,,”e075“,”M114,227.6H92.4C76.7,227.6,64,240.3,64,256s12.7,28.4,28.4,28.4H114c50.7,0,76.1,61.3,40.2,97.1L139,396.8 c-11.5,10.7-12.2,28.7-1.6,40.2s28.7,12.2,40.2,1.6c0.5-0.5,1.1-1,1.6-1.6l15.2-15.2c35.8-35.8,97.1-10.5,97.1,40.2v21.5 c0,15.7,12.8,28.4,28.5,28.4c15.7,0,28.4-12.7,28.4-28.4V462c0-26.6,17-45.9,38.2-53.4l-244.5-189 C133.7,224.7,123.9,227.5,114,227.6z M617,505.8l19.6-25.3c5.4-7,4.2-17-2.8-22.5L470.6,332c4.2-25.4,24.9-47.5,55.4-47.5h21.5 c15.7,0,28.4-12.7,28.4-28.4s-12.7-28.4-28.4-28.4H526c-50.7,0-76.1-61.3-40.2-97.1l15.2-15.3c10.7-11.5,10-29.5-1.6-40.2 c-10.9-10.1-27.7-10.1-38.6,0l-15.2,15.2c-35.8,35.8-97.1,10.5-97.1-40.2V28.5C348.4,12.7,335.7,0,320,0 c-15.7,0-28.4,12.7-28.4,28.4V50c0,50.7-61.3,76.1-97.1,40.2L179.2,75c-11.1-11.1-29.4-10.6-40.5,0.5L45.5,3.4 c-7-5.4-17-4.2-22.5,2.8L3.4,31.5c-5.4,7-4.2,17,2.8,22.5l588.4,454.7C601.5,514.1,611.6,512.8,617,505.8z M335.4,227.5l-62.9-48.6 c4.9-1.8,10.2-2.8,15.4-2.9c26.5,0,48,21.5,48,48C336,225.2,335.5,226.3,335.4,227.5z“]},ig={prefix:”fas“,iconName:”viruses“,icon:[640,512,,”e076“,”M624,352H611.88c-28.51,0-42.79-34.47-22.63-54.63l8.58-8.57a16,16,0,1,0-22.63-22.63l-8.57,8.58C546.47,294.91,512,280.63,512,252.12V240a16,16,0,0,0-32,0v12.12c0,28.51-34.47,42.79-54.63,22.63l-8.57-8.58a16,16,0,0,0-22.63,22.63l8.58,8.57c20.16,20.16,5.88,54.63-22.63,54.63H368a16,16,0,0,0,0,32h12.12c28.51,0,42.79,34.47,22.63,54.63l-8.58,8.57a16,16,0,1,0,22.63,22.63l8.57-8.58c20.16-20.16,54.63-5.88,54.63,22.63V496a16,16,0,0,0,32,0V483.88c0-28.51,34.47-42.79,54.63-22.63l8.57,8.58a16,16,0,1,0,22.63-22.63l-8.58-8.57C569.09,418.47,583.37,384,611.88,384H624a16,16,0,0,0,0-32ZM480,384a32,32,0,1,1,32-32A32,32,0,0,1,480,384ZM346.51,213.33h16.16a21.33,21.33,0,0,0,0-42.66H346.51c-38,0-57.05-46-30.17-72.84l11.43-11.44A21.33,21.33,0,0,0,297.6,56.23L286.17,67.66c-26.88,26.88-72.84,7.85-72.84-30.17V21.33a21.33,21.33,0,0,0-42.66,0V37.49c0,38-46,57.05-72.84,30.17L86.4,56.23A21.33,21.33,0,0,0,56.23,86.39L67.66,97.83c26.88,26.88,7.85,72.84-30.17,72.84H21.33a21.33,21.33,0,0,0,0,42.66H37.49c38,0,57.05,46,30.17,72.84L56.23,297.6A21.33,21.33,0,1,0,86.4,327.77l11.43-11.43c26.88-26.88,72.84-7.85,72.84,30.17v16.16a21.33,21.33,0,0,0,42.66,0V346.51c0-38,46-57.05,72.84-30.17l11.43,11.43a21.33,21.33,0,0,0,30.17-30.17l-11.43-11.43C289.46,259.29,308.49,213.33,346.51,213.33ZM160,192a32,32,0,1,1,32-32A32,32,0,0,1,160,192Zm80,32a16,16,0,1,1,16-16A16,16,0,0,1,240,224Z“]},ag={prefix:”fas“,iconName:”voicemail“,icon:[640,512,,”f897“,”M496 128a144 144 0 0 0-119.74 224H263.74A144 144 0 1 0 144 416h352a144 144 0 0 0 0-288zM64 272a80 80 0 1 1 80 80 80 80 0 0 1-80-80zm432 80a80 80 0 1 1 80-80 80 80 0 0 1-80 80z“]},og={prefix:”fas“,iconName:”volleyball-ball“,icon:[512,512,,”f45f“,”M231.39 243.48a285.56 285.56 0 0 0-22.7-105.7c-90.8 42.4-157.5 122.4-180.3 216.8a249 249 0 0 0 56.9 81.1 333.87 333.87 0 0 1 146.1-192.2zm-36.9-134.4a284.23 284.23 0 0 0-57.4-70.7c-91 49.8-144.8 152.9-125 262.2 33.4-83.1 98.4-152 182.4-191.5zm187.6 165.1c8.6-99.8-27.3-197.5-97.5-264.4-14.7-1.7-51.6-5.5-98.9 8.5A333.87 333.87 0 0 1 279.19 241a285 285 0 0 0 102.9 33.18zm-124.7 9.5a286.33 286.33 0 0 0-80.2 72.6c82 57.3 184.5 75.1 277.5 47.8a247.15 247.15 0 0 0 42.2-89.9 336.1 336.1 0 0 1-80.9 10.4c-54.6-.1-108.9-14.1-158.6-40.9zm-98.3 99.7c-15.2 26-25.7 54.4-32.1 84.2a247.07 247.07 0 0 0 289-22.1c-112.9 16.1-203.3-24.8-256.9-62.1zm180.3-360.6c55.3 70.4 82.5 161.2 74.6 253.6a286.59 286.59 0 0 0 89.7-14.2c0-2 .3-4 .3-6 0-107.8-68.7-199.1-164.6-233.4z“]},cg={prefix:”fas“,iconName:”volume-down“,icon:[384,512,,”f027“,”M215.03 72.04L126.06 161H24c-13.26 0-24 10.74-24 24v144c0 13.25 10.74 24 24 24h102.06l88.97 88.95c15.03 15.03 40.97 4.47 40.97-16.97V89.02c0-21.47-25.96-31.98-40.97-16.98zm123.2 108.08c-11.58-6.33-26.19-2.16-32.61 9.45-6.39 11.61-2.16 26.2 9.45 32.61C327.98 229.28 336 242.62 336 257c0 14.38-8.02 27.72-20.92 34.81-11.61 6.41-15.84 21-9.45 32.61 6.43 11.66 21.05 15.8 32.61 9.45 28.23-15.55 45.77-45 45.77-76.88s-17.54-61.32-45.78-76.87z“]},sg={prefix:”fas“,iconName:”volume-mute“,icon:[512,512,,”f6a9“,”M215.03 71.05L126.06 160H24c-13.26 0-24 10.74-24 24v144c0 13.25 10.74 24 24 24h102.06l88.97 88.95c15.03 15.03 40.97 4.47 40.97-16.97V88.02c0-21.46-25.96-31.98-40.97-16.97zM461.64 256l45.64-45.64c6.3-6.3 6.3-16.52 0-22.82l-22.82-22.82c-6.3-6.3-16.52-6.3-22.82 0L416 210.36l-45.64-45.64c-6.3-6.3-16.52-6.3-22.82 0l-22.82 22.82c-6.3 6.3-6.3 16.52 0 22.82L370.36 256l-45.63 45.63c-6.3 6.3-6.3 16.52 0 22.82l22.82 22.82c6.3 6.3 16.52 6.3 22.82 0L416 301.64l45.64 45.64c6.3 6.3 16.52 6.3 22.82 0l22.82-22.82c6.3-6.3 6.3-16.52 0-22.82L461.64 256z“]},ug={prefix:”fas“,iconName:”volume-off“,icon:[256,512,,”f026“,”M215 71l-89 89H24a24 24 0 0 0-24 24v144a24 24 0 0 0 24 24h102.06L215 441c15 15 41 4.47 41-17V88c0-21.47-26-32-41-17z“]},lg={prefix:”fas“,iconName:”volume-up“,icon:[576,512,,”f028“,”M215.03 71.05L126.06 160H24c-13.26 0-24 10.74-24 24v144c0 13.25 10.74 24 24 24h102.06l88.97 88.95c15.03 15.03 40.97 4.47 40.97-16.97V88.02c0-21.46-25.96-31.98-40.97-16.97zm233.32-51.08c-11.17-7.33-26.18-4.24-33.51 6.95-7.34 11.17-4.22 26.18 6.95 33.51 66.27 43.49 105.82 116.6 105.82 195.58 0 78.98-39.55 152.09-105.82 195.58-11.17 7.32-14.29 22.34-6.95 33.5 7.04 10.71 21.93 14.56 33.51 6.95C528.27 439.58 576 351.33 576 256S528.27 72.43 448.35 19.97zM480 256c0-63.53-32.06-121.94-85.77-156.24-11.19-7.14-26.03-3.82-33.12 7.46s-3.78 26.21 7.41 33.36C408.27 165.97 432 209.11 432 256s-23.73 90.03-63.48 115.42c-11.19 7.14-14.5 22.07-7.41 33.36 6.51 10.36 21.12 15.14 33.12 7.46C447.94 377.94 480 319.54 480 256zm-141.77-76.87c-11.58-6.33-26.19-2.16-32.61 9.45-6.39 11.61-2.16 26.2 9.45 32.61C327.98 228.28 336 241.63 336 256c0 14.38-8.02 27.72-20.92 34.81-11.61 6.41-15.84 21-9.45 32.61 6.43 11.66 21.05 15.8 32.61 9.45 28.23-15.55 45.77-45 45.77-76.88s-17.54-61.32-45.78-76.86z“]},fg={prefix:”fas“,iconName:”vote-yea“,icon:[640,512,,”f772“,”M608 320h-64v64h22.4c5.3 0 9.6 3.6 9.6 8v16c0 4.4-4.3 8-9.6 8H73.6c-5.3 0-9.6-3.6-9.6-8v-16c0-4.4 4.3-8 9.6-8H96v-64H32c-17.7 0-32 14.3-32 32v96c0 17.7 14.3 32 32 32h576c17.7 0 32-14.3 32-32v-96c0-17.7-14.3-32-32-32zm-96 64V64.3c0-17.9-14.5-32.3-32.3-32.3H160.4C142.5 32 128 46.5 128 64.3V384h384zM211.2 202l25.5-25.3c4.2-4.2 11-4.2 15.2.1l41.3 41.6 95.2-94.4c4.2-4.2 11-4.2 15.2.1l25.3 25.5c4.2 4.2 4.2 11-.1 15.2L300.5 292c-4.2 4.2-11 4.2-15.2-.1l-74.1-74.7c-4.3-4.2-4.2-11 0-15.2z“]},hg={prefix:”fas“,iconName:”vr-cardboard“,icon:[640,512,,”f729“,”M608 64H32C14.33 64 0 78.33 0 96v320c0 17.67 14.33 32 32 32h160.22c25.19 0 48.03-14.77 58.36-37.74l27.74-61.64C286.21 331.08 302.35 320 320 320s33.79 11.08 41.68 28.62l27.74 61.64C399.75 433.23 422.6 448 447.78 448H608c17.67 0 32-14.33 32-32V96c0-17.67-14.33-32-32-32zM160 304c-35.35 0-64-28.65-64-64s28.65-64 64-64 64 28.65 64 64-28.65 64-64 64zm320 0c-35.35 0-64-28.65-64-64s28.65-64 64-64 64 28.65 64 64-28.65 64-64 64z“]},dg={prefix:”fas“,iconName:”walking“,icon:[320,512,,”f554“,”M208 96c26.5 0 48-21.5 48-48S234.5 0 208 0s-48 21.5-48 48 21.5 48 48 48zm94.5 149.1l-23.3-11.8-9.7-29.4c-14.7-44.6-55.7-75.8-102.2-75.9-36-.1-55.9 10.1-93.3 25.2-21.6 8.7-39.3 25.2-49.7 46.2L17.6 213c-7.8 15.8-1.5 35 14.2 42.9 15.6 7.9 34.6 1.5 42.5-14.3L81 228c3.5-7 9.3-12.5 16.5-15.4l26.8-10.8-15.2 60.7c-5.2 20.8.4 42.9 14.9 58.8l59.9 65.4c7.2 7.9 12.3 17.4 14.9 27.7l18.3 73.3c4.3 17.1 21.7 27.6 38.8 23.3 17.1-4.3 27.6-21.7 23.3-38.8l-22.2-89c-2.6-10.3-7.7-19.9-14.9-27.7l-45.5-49.7 17.2-68.7 5.5 16.5c5.3 16.1 16.7 29.4 31.7 37l23.3 11.8c15.6 7.9 34.6 1.5 42.5-14.3 7.7-15.7 1.4-35.1-14.3-43zM73.6 385.8c-3.2 8.1-8 15.4-14.2 21.5l-50 50.1c-12.5 12.5-12.5 32.8 0 45.3s32.7 12.5 45.2 0l59.4-59.4c6.1-6.1 10.9-13.4 14.2-21.5l13.5-33.8c-55.3-60.3-38.7-41.8-47.4-53.7l-20.7 51.5z“]},pg={prefix:”fas“,iconName:”wallet“,icon:[512,512,,”f555“,”M461.2 128H80c-8.84 0-16-7.16-16-16s7.16-16 16-16h384c8.84 0 16-7.16 16-16 0-26.51-21.49-48-48-48H64C28.65 32 0 60.65 0 96v320c0 35.35 28.65 64 64 64h397.2c28.02 0 50.8-21.53 50.8-48V176c0-26.47-22.78-48-50.8-48zM416 336c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z“]},mg={prefix:”fas“,iconName:”warehouse“,icon:[640,512,,”f494“,”M504 352H136.4c-4.4 0-8 3.6-8 8l-.1 48c0 4.4 3.6 8 8 8H504c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8zm0 96H136.1c-4.4 0-8 3.6-8 8l-.1 48c0 4.4 3.6 8 8 8h368c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8zm0-192H136.6c-4.4 0-8 3.6-8 8l-.1 48c0 4.4 3.6 8 8 8H504c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8zm106.5-139L338.4 3.7a48.15 48.15 0 0 0-36.9 0L29.5 117C11.7 124.5 0 141.9 0 161.3V504c0 4.4 3.6 8 8 8h80c4.4 0 8-3.6 8-8V256c0-17.6 14.6-32 32.6-32h382.8c18 0 32.6 14.4 32.6 32v248c0 4.4 3.6 8 8 8h80c4.4 0 8-3.6 8-8V161.3c0-19.4-11.7-36.8-29.5-44.3z“]},vg={prefix:”fas“,iconName:”water“,icon:[576,512,,”f773“,”M562.1 383.9c-21.5-2.4-42.1-10.5-57.9-22.9-14.1-11.1-34.2-11.3-48.2 0-37.9 30.4-107.2 30.4-145.7-1.5-13.5-11.2-33-9.1-46.7 1.8-38 30.1-106.9 30-145.2-1.7-13.5-11.2-33.3-8.9-47.1 2-15.5 12.2-36 20.1-57.7 22.4-7.9.8-13.6 7.8-13.6 15.7v32.2c0 9.1 7.6 16.8 16.7 16 28.8-2.5 56.1-11.4 79.4-25.9 56.5 34.6 137 34.1 192 0 56.5 34.6 137 34.1 192 0 23.3 14.2 50.9 23.3 79.1 25.8 9.1.8 16.7-6.9 16.7-16v-31.6c.1-8-5.7-15.4-13.8-16.3zm0-144c-21.5-2.4-42.1-10.5-57.9-22.9-14.1-11.1-34.2-11.3-48.2 0-37.9 30.4-107.2 30.4-145.7-1.5-13.5-11.2-33-9.1-46.7 1.8-38 30.1-106.9 30-145.2-1.7-13.5-11.2-33.3-8.9-47.1 2-15.5 12.2-36 20.1-57.7 22.4-7.9.8-13.6 7.8-13.6 15.7v32.2c0 9.1 7.6 16.8 16.7 16 28.8-2.5 56.1-11.4 79.4-25.9 56.5 34.6 137 34.1 192 0 56.5 34.6 137 34.1 192 0 23.3 14.2 50.9 23.3 79.1 25.8 9.1.8 16.7-6.9 16.7-16v-31.6c.1-8-5.7-15.4-13.8-16.3zm0-144C540.6 93.4 520 85.4 504.2 73 490.1 61.9 470 61.7 456 73c-37.9 30.4-107.2 30.4-145.7-1.5-13.5-11.2-33-9.1-46.7 1.8-38 30.1-106.9 30-145.2-1.7-13.5-11.2-33.3-8.9-47.1 2-15.5 12.2-36 20.1-57.7 22.4-7.9.8-13.6 7.8-13.6 15.7v32.2c0 9.1 7.6 16.8 16.7 16 28.8-2.5 56.1-11.4 79.4-25.9 56.5 34.6 137 34.1 192 0 56.5 34.6 137 34.1 192 0 23.3 14.2 50.9 23.3 79.1 25.8 9.1.8 16.7-6.9 16.7-16v-31.6c.1-8-5.7-15.4-13.8-16.3z“]},gg={prefix:”fas“,iconName:”wave-square“,icon:[640,512,,”f83e“,”M476 480H324a36 36 0 0 1-36-36V96h-96v156a36 36 0 0 1-36 36H16a16 16 0 0 1-16-16v-32a16 16 0 0 1 16-16h112V68a36 36 0 0 1 36-36h152a36 36 0 0 1 36 36v348h96V260a36 36 0 0 1 36-36h140a16 16 0 0 1 16 16v32a16 16 0 0 1-16 16H512v156a36 36 0 0 1-36 36z“]},yg={prefix:”fas“,iconName:”weight“,icon:[512,512,,”f496“,”M448 64h-25.98C438.44 92.28 448 125.01 448 160c0 105.87-86.13 192-192 192S64 265.87 64 160c0-34.99 9.56-67.72 25.98-96H64C28.71 64 0 92.71 0 128v320c0 35.29 28.71 64 64 64h384c35.29 0 64-28.71 64-64V128c0-35.29-28.71-64-64-64zM256 320c88.37 0 160-71.63 160-160S344.37 0 256 0 96 71.63 96 160s71.63 160 160 160zm-.3-151.94l33.58-78.36c3.5-8.17 12.94-11.92 21.03-8.41 8.12 3.48 11.88 12.89 8.41 21l-33.67 78.55C291.73 188 296 197.45 296 208c0 22.09-17.91 40-40 40s-40-17.91-40-40c0-21.98 17.76-39.77 39.7-39.94z“]},bg={prefix:”fas“,iconName:”weight-hanging“,icon:[512,512,,”f5cd“,”M510.28 445.86l-73.03-292.13c-3.8-15.19-16.44-25.72-30.87-25.72h-60.25c3.57-10.05 5.88-20.72 5.88-32 0-53.02-42.98-96-96-96s-96 42.98-96 96c0 11.28 2.3 21.95 5.88 32h-60.25c-14.43 0-27.08 10.54-30.87 25.72L1.72 445.86C-6.61 479.17 16.38 512 48.03 512h415.95c31.64 0 54.63-32.83 46.3-66.14zM256 128c-17.64 0-32-14.36-32-32s14.36-32 32-32 32 14.36 32 32-14.36 32-32 32z“]},wg={prefix:”fas“,iconName:”wheelchair“,icon:[512,512,,”f193“,”M496.101 385.669l14.227 28.663c3.929 7.915.697 17.516-7.218 21.445l-65.465 32.886c-16.049 7.967-35.556 1.194-43.189-15.055L331.679 320H192c-15.925 0-29.426-11.71-31.679-27.475C126.433 55.308 128.38 70.044 128 64c0-36.358 30.318-65.635 67.052-63.929 33.271 1.545 60.048 28.905 60.925 62.201.868 32.933-23.152 60.423-54.608 65.039l4.67 32.69H336c8.837 0 16 7.163 16 16v32c0 8.837-7.163 16-16 16H215.182l4.572 32H352a32 32 0 0 1 28.962 18.392L438.477 396.8l36.178-18.349c7.915-3.929 17.517-.697 21.446 7.218zM311.358 352h-24.506c-7.788 54.204-54.528 96-110.852 96-61.757 0-112-50.243-112-112 0-41.505 22.694-77.809 56.324-97.156-3.712-25.965-6.844-47.86-9.488-66.333C45.956 198.464 0 261.963 0 336c0 97.047 78.953 176 176 176 71.87 0 133.806-43.308 161.11-105.192L311.358 352z“]},xg={prefix:”fas“,iconName:”wifi“,icon:[640,512,,”f1eb“,”M634.91 154.88C457.74-8.99 182.19-8.93 5.09 154.88c-6.66 6.16-6.79 16.59-.35 22.98l34.24 33.97c6.14 6.1 16.02 6.23 22.4.38 145.92-133.68 371.3-133.71 517.25 0 6.38 5.85 16.26 5.71 22.4-.38l34.24-33.97c6.43-6.39 6.3-16.82-.36-22.98zM320 352c-35.35 0-64 28.65-64 64s28.65 64 64 64 64-28.65 64-64-28.65-64-64-64zm202.67-83.59c-115.26-101.93-290.21-101.82-405.34 0-6.9 6.1-7.12 16.69-.57 23.15l34.44 33.99c6 5.92 15.66 6.32 22.05.8 83.95-72.57 209.74-72.41 293.49 0 6.39 5.52 16.05 5.13 22.05-.8l34.44-33.99c6.56-6.46 6.33-17.06-.56-23.15z“]},Sg={prefix:”fas“,iconName:”wind“,icon:[512,512,,”f72e“,”M156.7 256H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h142.2c15.9 0 30.8 10.9 33.4 26.6 3.3 20-12.1 37.4-31.6 37.4-14.1 0-26.1-9.2-30.4-21.9-2.1-6.3-8.6-10.1-15.2-10.1H81.6c-9.8 0-17.7 8.8-15.9 18.4 8.6 44.1 47.6 77.6 94.2 77.6 57.1 0 102.7-50.1 95.2-108.6C249 291 205.4 256 156.7 256zM16 224h336c59.7 0 106.8-54.8 93.8-116.7-7.6-36.2-36.9-65.5-73.1-73.1-55.4-11.6-105.1 24.9-114.9 75.5-1.9 9.6 6.1 18.3 15.8 18.3h32.8c6.7 0 13.1-3.8 15.2-10.1C325.9 105.2 337.9 96 352 96c19.4 0 34.9 17.4 31.6 37.4-2.6 15.7-17.4 26.6-33.4 26.6H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16zm384 32H243.7c19.3 16.6 33.2 38.8 39.8 64H400c26.5 0 48 21.5 48 48s-21.5 48-48 48c-17.9 0-33.3-9.9-41.6-24.4-2.9-5-8.7-7.6-14.5-7.6h-33.8c-10.9 0-19 10.8-15.3 21.1 17.8 50.6 70.5 84.8 129.4 72.3 41.2-8.7 75.1-41.6 84.7-82.7C526 321.5 470.5 256 400 256z“]},kg={prefix:”fas“,iconName:”window-close“,icon:[512,512,,”f410“,”M464 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-83.6 290.5c4.8 4.8 4.8 12.6 0 17.4l-40.5 40.5c-4.8 4.8-12.6 4.8-17.4 0L256 313.3l-66.5 67.1c-4.8 4.8-12.6 4.8-17.4 0l-40.5-40.5c-4.8-4.8-4.8-12.6 0-17.4l67.1-66.5-67.1-66.5c-4.8-4.8-4.8-12.6 0-17.4l40.5-40.5c4.8-4.8 12.6-4.8 17.4 0l66.5 67.1 66.5-67.1c4.8-4.8 12.6-4.8 17.4 0l40.5 40.5c4.8 4.8 4.8 12.6 0 17.4L313.3 256l67.1 66.5z“]},_g={prefix:”fas“,iconName:”window-maximize“,icon:[512,512,,”f2d0“,”M464 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-16 160H64v-84c0-6.6 5.4-12 12-12h360c6.6 0 12 5.4 12 12v84z“]},zg={prefix:”fas“,iconName:”window-minimize“,icon:[512,512,,”f2d1“,”M464 352H48c-26.5 0-48 21.5-48 48v32c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48v-32c0-26.5-21.5-48-48-48z“]},Cg={prefix:”fas“,iconName:”window-restore“,icon:[512,512,,”f2d2“,”M512 48v288c0 26.5-21.5 48-48 48h-48V176c0-44.1-35.9-80-80-80H128V48c0-26.5 21.5-48 48-48h288c26.5 0 48 21.5 48 48zM384 176v288c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V176c0-26.5 21.5-48 48-48h288c26.5 0 48 21.5 48 48zm-68 28c0-6.6-5.4-12-12-12H76c-6.6 0-12 5.4-12 12v52h252v-52z“]},Mg={prefix:”fas“,iconName:”wine-bottle“,icon:[512,512,,”f72f“,”M507.31 72.57L439.43 4.69c-6.25-6.25-16.38-6.25-22.63 0l-22.63 22.63c-6.25 6.25-6.25 16.38 0 22.63l-76.67 76.67c-46.58-19.7-102.4-10.73-140.37 27.23L18.75 312.23c-24.99 24.99-24.99 65.52 0 90.51l90.51 90.51c24.99 24.99 65.52 24.99 90.51 0l158.39-158.39c37.96-37.96 46.93-93.79 27.23-140.37l76.67-76.67c6.25 6.25 16.38 6.25 22.63 0l22.63-22.63c6.24-6.24 6.24-16.37-.01-22.62zM179.22 423.29l-90.51-90.51 122.04-122.04 90.51 90.51-122.04 122.04z“]},Og={prefix:”fas“,iconName:”wine-glass“,icon:[288,512,,”f4e3“,”M216 464h-40V346.81c68.47-15.89 118.05-79.91 111.4-154.16l-15.95-178.1C270.71 6.31 263.9 0 255.74 0H32.26c-8.15 0-14.97 6.31-15.7 14.55L.6 192.66C-6.05 266.91 43.53 330.93 112 346.82V464H72c-22.09 0-40 17.91-40 40 0 4.42 3.58 8 8 8h208c4.42 0 8-3.58 8-8 0-22.09-17.91-40-40-40z“]},Tg={prefix:”fas“,iconName:”wine-glass-alt“,icon:[288,512,,”f5ce“,”M216 464h-40V346.81c68.47-15.89 118.05-79.91 111.4-154.16l-15.95-178.1C270.71 6.31 263.9 0 255.74 0H32.26c-8.15 0-14.97 6.31-15.7 14.55L.6 192.66C-6.05 266.91 43.53 330.93 112 346.82V464H72c-22.09 0-40 17.91-40 40 0 4.42 3.58 8 8 8h208c4.42 0 8-3.58 8-8 0-22.09-17.91-40-40-40zM61.75 48h164.5l7.17 80H54.58l7.17-80z“]},Eg={prefix:”fas“,iconName:”won-sign“,icon:[576,512,,”f159“,”M564 192c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-48l18.6-80.6c1.7-7.5-4-14.7-11.7-14.7h-46.1c-5.7 0-10.6 4-11.7 9.5L450.7 128H340.8l-19.7-86c-1.3-5.5-6.1-9.3-11.7-9.3h-44c-5.6 0-10.4 3.8-11.7 9.3l-20 86H125l-17.5-85.7c-1.1-5.6-6.1-9.6-11.8-9.6H53.6c-7.7 0-13.4 7.1-11.7 14.6L60 128H12c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h62.3l7.2 32H12c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h83.9l40.9 182.6c1.2 5.5 6.1 9.4 11.7 9.4h56.8c5.6 0 10.4-3.9 11.7-9.3L259.3 288h55.1l42.4 182.7c1.3 5.4 6.1 9.3 11.7 9.3h56.8c5.6 0 10.4-3.9 11.7-9.3L479.1 288H564c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-70.1l7.4-32zM183.8 342c-6.2 25.8-6.8 47.2-7.3 47.2h-1.1s-1.7-22-6.8-47.2l-11-54h38.8zm27.5-118h-66.8l-6.5-32h80.8zm62.9 0l2-8.6c1.9-8 3.5-16 4.8-23.4h11.8c1.3 7.4 2.9 15.4 4.8 23.4l2 8.6zm130.9 118c-5.1 25.2-6.8 47.2-6.8 47.2h-1.1c-.6 0-1.1-21.4-7.3-47.2l-12.4-54h39.1zm25.2-118h-67.4l-7.3-32h81.6z“]},Lg={prefix:”fas“,iconName:”wrench“,icon:[512,512,,”f0ad“,”M507.73 109.1c-2.24-9.03-13.54-12.09-20.12-5.51l-74.36 74.36-67.88-11.31-11.31-67.88 74.36-74.36c6.62-6.62 3.43-17.9-5.66-20.16-47.38-11.74-99.55.91-136.58 37.93-39.64 39.64-50.55 97.1-34.05 147.2L18.74 402.76c-24.99 24.99-24.99 65.51 0 90.5 24.99 24.99 65.51 24.99 90.5 0l213.21-213.21c50.12 16.71 107.47 5.68 147.37-34.22 37.07-37.07 49.7-89.32 37.91-136.73zM64 472c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24z“]},Ag={prefix:”fas“,iconName:”x-ray“,icon:[640,512,,”f497“,”M240 384c-8.8 0-16 7.2-16 16s7.2 16 16 16 16-7.2 16-16-7.2-16-16-16zm160 32c8.8 0 16-7.2 16-16s-7.2-16-16-16-16 7.2-16 16 7.2 16 16 16zM624 0H16C7.2 0 0 7.2 0 16v32c0 8.8 7.2 16 16 16h608c8.8 0 16-7.2 16-16V16c0-8.8-7.2-16-16-16zm0 448h-48V96H64v352H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h608c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zM480 248c0 4.4-3.6 8-8 8H336v32h104c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H336v32h64c26.5 0 48 21.5 48 48s-21.5 48-48 48-48-21.5-48-48v-16h-64v16c0 26.5-21.5 48-48 48s-48-21.5-48-48 21.5-48 48-48h64v-32H200c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h104v-32H168c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h136v-32H200c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h104v-24c0-4.4 3.6-8 8-8h16c4.4 0 8 3.6 8 8v24h104c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H336v32h136c4.4 0 8 3.6 8 8v16z“]},Rg={prefix:”fas“,iconName:”yen-sign“,icon:[384,512,,”f157“,”M351.2 32h-65.3c-4.6 0-8.8 2.6-10.8 6.7l-55.4 113.2c-14.5 34.7-27.1 71.9-27.1 71.9h-1.3s-12.6-37.2-27.1-71.9L108.8 38.7c-2-4.1-6.2-6.7-10.8-6.7H32.8c-9.1 0-14.8 9.7-10.6 17.6L102.3 200H44c-6.6 0-12 5.4-12 12v32c0 6.6 5.4 12 12 12h88.2l19.8 37.2V320H44c-6.6 0-12 5.4-12 12v32c0 6.6 5.4 12 12 12h108v92c0 6.6 5.4 12 12 12h56c6.6 0 12-5.4 12-12v-92h108c6.6 0 12-5.4 12-12v-32c0-6.6-5.4-12-12-12H232v-26.8l19.8-37.2H340c6.6 0 12-5.4 12-12v-32c0-6.6-5.4-12-12-12h-58.3l80.1-150.4c4.3-7.9-1.5-17.6-10.6-17.6z“]},Ng={prefix:”fas“,iconName:”yin-yang“,icon:[496,512,,”f6ad“,”M248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm0 376c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm0-128c-53.02 0-96 42.98-96 96s42.98 96 96 96c-106.04 0-192-85.96-192-192S141.96 64 248 64c53.02 0 96 42.98 96 96s-42.98 96-96 96zm0-128c-17.67 0-32 14.33-32 32s14.33 32 32 32 32-14.33 32-32-14.33-32-32-32z“]},Hg={faAd:i,faAddressBook:a,faAddressCard:o,faAdjust:c,faAirFreshener:s,faAlignCenter:u,faAlignJustify:l,faAlignLeft:f,faAlignRight:h,faAllergies:d,faAmbulance:p,faAmericanSignLanguageInterpreting:m,faAnchor:v,faAngleDoubleDown:g,faAngleDoubleLeft:y,faAngleDoubleRight:b,faAngleDoubleUp:w,faAngleDown:x,faAngleLeft:S,faAngleRight:k,faAngleUp:_,faAngry:z,faAnkh:C,faAppleAlt:M,faArchive:O,faArchway:T,faArrowAltCircleDown:E,faArrowAltCircleLeft:L,faArrowAltCircleRight:A,faArrowAltCircleUp:R,faArrowCircleDown:N,faArrowCircleLeft:H,faArrowCircleRight:P,faArrowCircleUp:j,faArrowDown:V,faArrowLeft:D,faArrowRight:I,faArrowUp:F,faArrowsAlt:B,faArrowsAltH:U,faArrowsAltV:q,faAssistiveListeningSystems:G,faAsterisk:W,faAt:Z,faAtlas:$,faAtom:J,faAudioDescription:K,faAward:Q,faBaby:Y,faBabyCarriage:X,faBackspace:ee,faBackward:te,faBacon:ne,faBacteria:re,faBacterium:ie,faBahai:ae,faBalanceScale:oe,faBalanceScaleLeft:ce,faBalanceScaleRight:se,faBan:ue,faBandAid:le,faBarcode:fe,faBars:he,faBaseballBall:de,faBasketballBall:pe,faBath:me,faBatteryEmpty:ve,faBatteryFull:ge,faBatteryHalf:ye,faBatteryQuarter:be,faBatteryThreeQuarters:we,faBed:xe,faBeer:Se,faBell:ke,faBellSlash:_e,faBezierCurve:ze,faBible:Ce,faBicycle:Me,faBiking:Oe,faBinoculars:Te,faBiohazard:Ee,faBirthdayCake:Le,faBlender:Ae,faBlenderPhone:Re,faBlind:Ne,faBlog:He,faBold:Pe,faBolt:je,faBomb:Ve,faBone:De,faBong:Ie,faBook:Fe,faBookDead:Be,faBookMedical:Ue,faBookOpen:qe,faBookReader:Ge,faBookmark:We,faBorderAll:Ze,faBorderNone:$e,faBorderStyle:Je,faBowlingBall:Ke,faBox:Qe,faBoxOpen:Ye,faBoxTissue:Xe,faBoxes:et,faBraille:tt,faBrain:nt,faBreadSlice:rt,faBriefcase:it,faBriefcaseMedical:at,faBroadcastTower:ot,faBroom:ct,faBrush:st,faBug:ut,faBuilding:lt,faBullhorn:ft,faBullseye:ht,faBurn:dt,faBus:pt,faBusAlt:mt,faBusinessTime:vt,faCalculator:gt,faCalendar:yt,faCalendarAlt:bt,faCalendarCheck:wt,faCalendarDay:xt,faCalendarMinus:St,faCalendarPlus:kt,faCalendarTimes:_t,faCalendarWeek:zt,faCamera:Ct,faCameraRetro:Mt,faCampground:Ot,faCandyCane:Tt,faCannabis:Et,faCapsules:Lt,faCar:At,faCarAlt:Rt,faCarBattery:Nt,faCarCrash:Ht,faCarSide:Pt,faCaravan:jt,faCaretDown:Vt,faCaretLeft:Dt,faCaretRight:It,faCaretSquareDown:Ft,faCaretSquareLeft:Bt,faCaretSquareRight:Ut,faCaretSquareUp:qt,faCaretUp:Gt,faCarrot:Wt,faCartArrowDown:Zt,faCartPlus:$t,faCashRegister:Jt,faCat:Kt,faCertificate:Qt,faChair:Yt,faChalkboard:Xt,faChalkboardTeacher:en,faChargingStation:tn,faChartArea:nn,faChartBar:rn,faChartLine:an,faChartPie:on,faCheck:cn,faCheckCircle:sn,faCheckDouble:un,faCheckSquare:ln,faCheese:fn,faChess:hn,faChessBishop:dn,faChessBoard:pn,faChessKing:mn,faChessKnight:vn,faChessPawn:gn,faChessQueen:yn,faChessRook:bn,faChevronCircleDown:wn,faChevronCircleLeft:xn,faChevronCircleRight:Sn,faChevronCircleUp:kn,faChevronDown:_n,faChevronLeft:zn,faChevronRight:Cn,faChevronUp:Mn,faChild:On,faChurch:Tn,faCircle:En,faCircleNotch:Ln,faCity:An,faClinicMedical:Rn,faClipboard:Nn,faClipboardCheck:Hn,faClipboardList:Pn,faClock:jn,faClone:Vn,faClosedCaptioning:Dn,faCloud:In,faCloudDownloadAlt:Fn,faCloudMeatball:Bn,faCloudMoon:Un,faCloudMoonRain:qn,faCloudRain:Gn,faCloudShowersHeavy:Wn,faCloudSun:Zn,faCloudSunRain:$n,faCloudUploadAlt:Jn,faCocktail:Kn,faCode:Qn,faCodeBranch:Yn,faCoffee:Xn,faCog:er,faCogs:tr,faCoins:nr,faColumns:rr,faComment:ir,faCommentAlt:ar,faCommentDollar:or,faCommentDots:cr,faCommentMedical:sr,faCommentSlash:ur,faComments:lr,faCommentsDollar:fr,faCompactDisc:hr,faCompass:dr,faCompress:pr,faCompressAlt:mr,faCompressArrowsAlt:vr,faConciergeBell:gr,faCookie:yr,faCookieBite:br,faCopy:wr,faCopyright:xr,faCouch:Sr,faCreditCard:kr,faCrop:_r,faCropAlt:zr,faCross:Cr,faCrosshairs:Mr,faCrow:Or,faCrown:Tr,faCrutch:Er,faCube:Lr,faCubes:Ar,faCut:Rr,faDatabase:Nr,faDeaf:Hr,faDemocrat:Pr,faDesktop:jr,faDharmachakra:Vr,faDiagnoses:Dr,faDice:Ir,faDiceD20:Fr,faDiceD6:Br,faDiceFive:Ur,faDiceFour:qr,faDiceOne:Gr,faDiceSix:Wr,faDiceThree:Zr,faDiceTwo:$r,faDigitalTachograph:Jr,faDirections:Kr,faDisease:Qr,faDivide:Yr,faDizzy:Xr,faDna:ei,faDog:ti,faDollarSign:ni,faDolly:ri,faDollyFlatbed:ii,faDonate:ai,faDoorClosed:oi,faDoorOpen:ci,faDotCircle:si,faDove:ui,faDownload:li,faDraftingCompass:fi,faDragon:hi,faDrawPolygon:di,faDrum:pi,faDrumSteelpan:mi,faDrumstickBite:vi,faDumbbell:gi,faDumpster:yi,faDumpsterFire:bi,faDungeon:wi,faEdit:xi,faEgg:Si,faEject:ki,faEllipsisH:_i,faEllipsisV:zi,faEnvelope:Ci,faEnvelopeOpen:Mi,faEnvelopeOpenText:Oi,faEnvelopeSquare:Ti,faEquals:Ei,faEraser:Li,faEthernet:Ai,faEuroSign:Ri,faExchangeAlt:Ni,faExclamation:Hi,faExclamationCircle:Pi,faExclamationTriangle:ji,faExpand:Vi,faExpandAlt:Di,faExpandArrowsAlt:Ii,faExternalLinkAlt:Fi,faExternalLinkSquareAlt:Bi,faEye:Ui,faEyeDropper:qi,faEyeSlash:Gi,faFan:Wi,faFastBackward:Zi,faFastForward:$i,faFaucet:Ji,faFax:Ki,faFeather:Qi,faFeatherAlt:Yi,faFemale:Xi,faFighterJet:ea,faFile:ta,faFileAlt:na,faFileArchive:ra,faFileAudio:ia,faFileCode:aa,faFileContract:oa,faFileCsv:ca,faFileDownload:sa,faFileExcel:ua,faFileExport:la,faFileImage:fa,faFileImport:ha,faFileInvoice:da,faFileInvoiceDollar:pa,faFileMedical:ma,faFileMedicalAlt:va,faFilePdf:ga,faFilePowerpoint:ya,faFilePrescription:ba,faFileSignature:wa,faFileUpload:xa,faFileVideo:Sa,faFileWord:ka,faFill:_a,faFillDrip:za,faFilm:Ca,faFilter:Ma,faFingerprint:Oa,faFire:Ta,faFireAlt:Ea,faFireExtinguisher:La,faFirstAid:Aa,faFish:Ra,faFistRaised:Na,faFlag:Ha,faFlagCheckered:Pa,faFlagUsa:ja,faFlask:Va,faFlushed:Da,faFolder:Ia,faFolderMinus:Fa,faFolderOpen:Ba,faFolderPlus:Ua,faFont:qa,faFontAwesomeLogoFull:Ga,faFootballBall:Wa,faForward:Za,faFrog:$a,faFrown:Ja,faFrownOpen:Ka,faFunnelDollar:Qa,faFutbol:Ya,faGamepad:Xa,faGasPump:eo,faGavel:to,faGem:no,faGenderless:ro,faGhost:io,faGift:ao,faGifts:oo,faGlassCheers:co,faGlassMartini:so,faGlassMartiniAlt:uo,faGlassWhiskey:lo,faGlasses:fo,faGlobe:ho,faGlobeAfrica:po,faGlobeAmericas:mo,faGlobeAsia:vo,faGlobeEurope:go,faGolfBall:yo,faGopuram:bo,faGraduationCap:wo,faGreaterThan:xo,faGreaterThanEqual:So,faGrimace:ko,faGrin:_o,faGrinAlt:zo,faGrinBeam:Co,faGrinBeamSweat:Mo,faGrinHearts:Oo,faGrinSquint:To,faGrinSquintTears:Eo,faGrinStars:Lo,faGrinTears:Ao,faGrinTongue:Ro,faGrinTongueSquint:No,faGrinTongueWink:Ho,faGrinWink:Po,faGripHorizontal:jo,faGripLines:Vo,faGripLinesVertical:Do,faGripVertical:Io,faGuitar:Fo,faHSquare:Bo,faHamburger:Uo,faHammer:qo,faHamsa:Go,faHandHolding:Wo,faHandHoldingHeart:Zo,faHandHoldingMedical:$o,faHandHoldingUsd:Jo,faHandHoldingWater:Ko,faHandLizard:Qo,faHandMiddleFinger:Yo,faHandPaper:Xo,faHandPeace:ec,faHandPointDown:tc,faHandPointLeft:nc,faHandPointRight:rc,faHandPointUp:ic,faHandPointer:ac,faHandRock:oc,faHandScissors:cc,faHandSparkles:sc,faHandSpock:uc,faHands:lc,faHandsHelping:fc,faHandsWash:hc,faHandshake:dc,faHandshakeAltSlash:pc,faHandshakeSlash:mc,faHanukiah:vc,faHardHat:gc,faHashtag:yc,faHatCowboy:bc,faHatCowboySide:wc,faHatWizard:xc,faHdd:Sc,faHeadSideCough:kc,faHeadSideCoughSlash:_c,faHeadSideMask:zc,faHeadSideVirus:Cc,faHeading:Mc,faHeadphones:Oc,faHeadphonesAlt:Tc,faHeadset:Ec,faHeart:Lc,faHeartBroken:Ac,faHeartbeat:Rc,faHelicopter:Nc,faHighlighter:Hc,faHiking:Pc,faHippo:jc,faHistory:Vc,faHockeyPuck:Dc,faHollyBerry:Ic,faHome:Fc,faHorse:Bc,faHorseHead:Uc,faHospital:qc,faHospitalAlt:Gc,faHospitalSymbol:Wc,faHospitalUser:Zc,faHotTub:$c,faHotdog:Jc,faHotel:Kc,faHourglass:Qc,faHourglassEnd:Yc,faHourglassHalf:Xc,faHourglassStart:es,faHouseDamage:ts,faHouseUser:ns,faHryvnia:rs,faICursor:is,faIceCream:as,faIcicles:os,faIcons:cs,faIdBadge:ss,faIdCard:us,faIdCardAlt:ls,faIgloo:fs,faImage:hs,faImages:ds,faInbox:ps,faIndent:ms,faIndustry:vs,faInfinity:gs,faInfo:ys,faInfoCircle:bs,faItalic:ws,faJedi:xs,faJoint:Ss,faJournalWhills:ks,faKaaba:_s,faKey:zs,faKeyboard:Cs,faKhanda:Ms,faKiss:Os,faKissBeam:Ts,faKissWinkHeart:Es,faKiwiBird:Ls,faLandmark:As,faLanguage:Rs,faLaptop:Ns,faLaptopCode:Hs,faLaptopHouse:Ps,faLaptopMedical:js,faLaugh:Vs,faLaughBeam:Ds,faLaughSquint:Is,faLaughWink:Fs,faLayerGroup:Bs,faLeaf:Us,faLemon:qs,faLessThan:Gs,faLessThanEqual:Ws,faLevelDownAlt:Zs,faLevelUpAlt:$s,faLifeRing:Js,faLightbulb:Ks,faLink:Qs,faLiraSign:Ys,faList:Xs,faListAlt:eu,faListOl:tu,faListUl:nu,faLocationArrow:ru,faLock:iu,faLockOpen:au,faLongArrowAltDown:ou,faLongArrowAltLeft:cu,faLongArrowAltRight:su,faLongArrowAltUp:uu,faLowVision:lu,faLuggageCart:fu,faLungs:hu,faLungsVirus:du,faMagic:pu,faMagnet:mu,faMailBulk:vu,faMale:gu,faMap:yu,faMapMarked:bu,faMapMarkedAlt:wu,faMapMarker:xu,faMapMarkerAlt:Su,faMapPin:ku,faMapSigns:_u,faMarker:zu,faMars:Cu,faMarsDouble:Mu,faMarsStroke:Ou,faMarsStrokeH:Tu,faMarsStrokeV:Eu,faMask:Lu,faMedal:Au,faMedkit:Ru,faMeh:Nu,faMehBlank:Hu,faMehRollingEyes:Pu,faMemory:ju,faMenorah:Vu,faMercury:Du,faMeteor:Iu,faMicrochip:Fu,faMicrophone:Bu,faMicrophoneAlt:Uu,faMicrophoneAltSlash:qu,faMicrophoneSlash:Gu,faMicroscope:Wu,faMinus:Zu,faMinusCircle:$u,faMinusSquare:Ju,faMitten:Ku,faMobile:Qu,faMobileAlt:Yu,faMoneyBill:Xu,faMoneyBillAlt:el,faMoneyBillWave:tl,faMoneyBillWaveAlt:nl,faMoneyCheck:rl,faMoneyCheckAlt:il,faMonument:al,faMoon:ol,faMortarPestle:cl,faMosque:sl,faMotorcycle:ul,faMountain:ll,faMouse:fl,faMousePointer:hl,faMugHot:dl,faMusic:pl,faNetworkWired:ml,faNeuter:vl,faNewspaper:gl,faNotEqual:yl,faNotesMedical:bl,faObjectGroup:wl,faObjectUngroup:xl,faOilCan:Sl,faOm:kl,faOtter:_l,faOutdent:zl,faPager:Cl,faPaintBrush:Ml,faPaintRoller:Ol,faPalette:Tl,faPallet:El,faPaperPlane:Ll,faPaperclip:Al,faParachuteBox:Rl,faParagraph:Nl,faParking:Hl,faPassport:Pl,faPastafarianism:jl,faPaste:Vl,faPause:Dl,faPauseCircle:Il,faPaw:Fl,faPeace:Bl,faPen:Ul,faPenAlt:ql,faPenFancy:Gl,faPenNib:Wl,faPenSquare:Zl,faPencilAlt:$l,faPencilRuler:Jl,faPeopleArrows:Kl,faPeopleCarry:Ql,faPepperHot:Yl,faPercent:Xl,faPercentage:ef,faPersonBooth:tf,faPhone:nf,faPhoneAlt:rf,faPhoneSlash:af,faPhoneSquare:of,faPhoneSquareAlt:cf,faPhoneVolume:sf,faPhotoVideo:uf,faPiggyBank:lf,faPills:ff,faPizzaSlice:hf,faPlaceOfWorship:df,faPlane:pf,faPlaneArrival:mf,faPlaneDeparture:vf,faPlaneSlash:gf,faPlay:yf,faPlayCircle:bf,faPlug:wf,faPlus:xf,faPlusCircle:Sf,faPlusSquare:kf,faPodcast:_f,faPoll:zf,faPollH:Cf,faPoo:Mf,faPooStorm:Of,faPoop:Tf,faPortrait:Ef,faPoundSign:Lf,faPowerOff:Af,faPray:Rf,faPrayingHands:Nf,faPrescription:Hf,faPrescriptionBottle:Pf,faPrescriptionBottleAlt:jf,faPrint:Vf,faProcedures:Df,faProjectDiagram:If,faPumpMedical:Ff,faPumpSoap:Bf,faPuzzlePiece:Uf,faQrcode:qf,faQuestion:Gf,faQuestionCircle:Wf,faQuidditch:Zf,faQuoteLeft:$f,faQuoteRight:Jf,faQuran:Kf,faRadiation:Qf,faRadiationAlt:Yf,faRainbow:Xf,faRandom:eh,faReceipt:th,faRecordVinyl:nh,faRecycle:rh,faRedo:ih,faRedoAlt:ah,faRegistered:oh,faRemoveFormat:ch,faReply:sh,faReplyAll:uh,faRepublican:lh,faRestroom:fh,faRetweet:hh,faRibbon:dh,faRing:ph,faRoad:mh,faRobot:vh,faRocket:gh,faRoute:yh,faRss:bh,faRssSquare:wh,faRubleSign:xh,faRuler:Sh,faRulerCombined:kh,faRulerHorizontal:_h,faRulerVertical:zh,faRunning:Ch,faRupeeSign:Mh,faSadCry:Oh,faSadTear:Th,faSatellite:Eh,faSatelliteDish:Lh,faSave:Ah,faSchool:Rh,faScrewdriver:Nh,faScroll:Hh,faSdCard:Ph,faSearch:jh,faSearchDollar:Vh,faSearchLocation:Dh,faSearchMinus:Ih,faSearchPlus:Fh,faSeedling:Bh,faServer:Uh,faShapes:qh,faShare:Gh,faShareAlt:Wh,faShareAltSquare:Zh,faShareSquare:$h,faShekelSign:Jh,faShieldAlt:Kh,faShieldVirus:Qh,faShip:Yh,faShippingFast:Xh,faShoePrints:ed,faShoppingBag:td,faShoppingBasket:nd,faShoppingCart:rd,faShower:id,faShuttleVan:ad,faSign:od,faSignInAlt:cd,faSignLanguage:sd,faSignOutAlt:ud,faSignal:ld,faSignature:fd,faSimCard:hd,faSink:dd,faSitemap:pd,faSkating:md,faSkiing:vd,faSkiingNordic:gd,faSkull:yd,faSkullCrossbones:bd,faSlash:wd,faSleigh:xd,faSlidersH:Sd,faSmile:kd,faSmileBeam:_d,faSmileWink:zd,faSmog:Cd,faSmoking:Md,faSmokingBan:Od,faSms:Td,faSnowboarding:Ed,faSnowflake:Ld,faSnowman:Ad,faSnowplow:Rd,faSoap:Nd,faSocks:Hd,faSolarPanel:Pd,faSort:jd,faSortAlphaDown:Vd,faSortAlphaDownAlt:Dd,faSortAlphaUp:Id,faSortAlphaUpAlt:Fd,faSortAmountDown:Bd,faSortAmountDownAlt:Ud,faSortAmountUp:qd,faSortAmountUpAlt:Gd,faSortDown:Wd,faSortNumericDown:Zd,faSortNumericDownAlt:$d,faSortNumericUp:Jd,faSortNumericUpAlt:Kd,faSortUp:Qd,faSpa:Yd,faSpaceShuttle:Xd,faSpellCheck:ep,faSpider:tp,faSpinner:np,faSplotch:rp,faSprayCan:ip,faSquare:ap,faSquareFull:op,faSquareRootAlt:cp,faStamp:sp,faStar:up,faStarAndCrescent:lp,faStarHalf:fp,faStarHalfAlt:hp,faStarOfDavid:dp,faStarOfLife:pp,faStepBackward:mp,faStepForward:vp,faStethoscope:gp,faStickyNote:yp,faStop:bp,faStopCircle:wp,faStopwatch:xp,faStopwatch20:Sp,faStore:kp,faStoreAlt:_p,faStoreAltSlash:zp,faStoreSlash:Cp,faStream:Mp,faStreetView:Op,faStrikethrough:Tp,faStroopwafel:Ep,faSubscript:Lp,faSubway:Ap,faSuitcase:Rp,faSuitcaseRolling:Np,faSun:Hp,faSuperscript:Pp,faSurprise:jp,faSwatchbook:Vp,faSwimmer:Dp,faSwimmingPool:Ip,faSynagogue:Fp,faSync:Bp,faSyncAlt:Up,faSyringe:qp,faTable:Gp,faTableTennis:Wp,faTablet:Zp,faTabletAlt:$p,faTablets:Jp,faTachometerAlt:Kp,faTag:Qp,faTags:Yp,faTape:Xp,faTasks:em,faTaxi:tm,faTeeth:nm,faTeethOpen:rm,faTemperatureHigh:im,faTemperatureLow:am,faTenge:om,faTerminal:cm,faTextHeight:sm,faTextWidth:um,faTh:lm,faThLarge:fm,faThList:hm,faTheaterMasks:dm,faThermometer:pm,faThermometerEmpty:mm,faThermometerFull:vm,faThermometerHalf:gm,faThermometerQuarter:ym,faThermometerThreeQuarters:bm,faThumbsDown:wm,faThumbsUp:xm,faThumbtack:Sm,faTicketAlt:km,faTimes:_m,faTimesCircle:zm,faTint:Cm,faTintSlash:Mm,faTired:Om,faToggleOff:Tm,faToggleOn:Em,faToilet:Lm,faToiletPaper:Am,faToiletPaperSlash:Rm,faToolbox:Nm,faTools:Hm,faTooth:Pm,faTorah:jm,faToriiGate:Vm,faTractor:Dm,faTrademark:Im,faTrafficLight:Fm,faTrailer:Bm,faTrain:Um,faTram:qm,faTransgender:Gm,faTransgenderAlt:Wm,faTrash:Zm,faTrashAlt:$m,faTrashRestore:Jm,faTrashRestoreAlt:Km,faTree:Qm,faTrophy:Ym,faTruck:Xm,faTruckLoading:ev,faTruckMonster:tv,faTruckMoving:nv,faTruckPickup:rv,faTshirt:iv,faTty:av,faTv:ov,faUmbrella:cv,faUmbrellaBeach:sv,faUnderline:uv,faUndo:lv,faUndoAlt:fv,faUniversalAccess:hv,faUniversity:dv,faUnpv,faUnlock:mv,faUnlockAlt:vv,faUpload:gv,faUser:yv,faUserAlt:bv,faUserAltSlash:wv,faUserAstronaut:xv,faUserCheck:Sv,faUserCircle:kv,faUserClock:_v,faUserCog:zv,faUserEdit:Cv,faUserFriends:Mv,faUserGraduate:Ov,faUserInjured:Tv,faUserLock:Ev,faUserMd:Lv,faUserMinus:Av,faUserNinja:Rv,faUserNurse:Nv,faUserPlus:Hv,faUserSecret:Pv,faUserShield:jv,faUserSlash:Vv,faUserTag:Dv,faUserTie:Iv,faUserTimes:Fv,faUsers:Bv,faUsersCog:Uv,faUsersSlash:qv,faUtensilSpoon:Gv,faUtensils:Wv,faVectorSquare:Zv,faVenus:$v,faVenusDouble:Jv,faVenusMars:Kv,faVial:Qv,faVials:Yv,faVideo:Xv,faVideoSlash:eg,faVihara:tg,faVirus:ng,faVirusSlash:rg,faViruses:ig,faVoicemail:ag,faVolleyballBall:og,faVolumeDown:cg,faVolumeMute:sg,faVolumeOff:ug,faVolumeUp:lg,faVoteYea:fg,faVrCardboard:hg,faWalking:dg,faWallet:pg,faWarehouse:mg,faWater:vg,faWaveSquare:gg,faWeight:yg,faWeightHanging:bg,faWheelchair:wg,faWifi:xg,faWind:Sg,faWindowClose:kg,faWindowMaximize:_g,faWindowMinimize:zg,faWindowRestore:Cg,faWineBottle:Mg,faWineGlass:Og,faWineGlassAlt:Tg,faWonSign:Eg,faWrench:Lg,faXRay:Ag,faYenSign:Rg,faYinYang:Ng}},function(e,t,n){”use strict“;n.r(t),n.d(t,”FontAwesomeIcon“,(function(){return b}));var r=n(53),i=n(1),a=n.n(i),o=n(0),c=n.n(o);function s(e){return(s=”function“==typeof Symbol&&”symbol“==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&”function“==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?”symbol“:typeof e})(e)}function u(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function f(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments?arguments:{};t%2?l(Object(n),!0).forEach((function(t){u(e,t,n)})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):l(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function h(e,t){if(null==e)return{};var n,r,i=function(e,t){if(null==e)return{};var n,r,i={},a=Object.keys(e);for(r=0;r,t.indexOf(n)>=0||(i=e);return i}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r,t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i=e)}return i}function d(e){return function(e){if(Array.isArray(e)){for(var t=0,n=new Array(e.length);t=e;return n}}(e)||function(e){if(Symbol.iterator in Object(e)||”[object Arguments]“===Object.prototype.toString.call(e))return Array.from(e)}(e)||function(){throw new TypeError(”Invalid attempt to spread non-iterable instance“)}()}function p(e){return t=e,(t-=0)==t?e:(e=e.replace(/+(.)?/g,(function(e,t){return t?t.toUpperCase():”“}))).substr(0,1).toLowerCase()+e.substr(1);var t}function m(e){return e.split(”;“).map((function(e){return e.trim()})).filter((function(e){return e})).reduce((function(e,t){var n,r=t.indexOf(”:“),i=p(t.slice(0,r)),a=t.slice(r+1).trim();return i.startsWith(”webkit“)?e=a:e=a,e}),{})}var v=!1;try{v=!0}catch(e){}function g(e){return null===e?null:”object“===s(e)&&e.prefix&&e.iconName?e:Array.isArray(e)&&2===e.length?{prefix:e,iconName:e}:”string“==typeof e?{prefix:”fas“,iconName:e}:void 0}function y(e,t){return Array.isArray(t)&&t.length>0||!Array.isArray(t)&&t?u({},e,t):{}}function b(e){var t=e.forwardedRef,n=h(e,),i=n.icon,a=n.mask,o=n.symbol,c=n.className,s=n.title,l=g(i),p=y(”classes“,[].concat(d(function(e){var t,n=e.spin,r=e.pulse,i=e.fixedWidth,a=e.inverse,o=e.border,c=e.listItem,s=e.flip,l=e.size,f=e.rotation,h=e.pull,d=(u(t={”fa-spin“:n,”fa-pulse“:r,”fa-fw“:i,”fa-inverse“:a,”fa-border“:o,”fa-li“:c,”fa-flip-horizontal“:”horizontal“===s||”both“===s,”fa-flip-vertical“:”vertical“===s||”both“===s},”fa-“.concat(l),null!=l),u(t,”fa-rotate-“.concat(f),null!=f&&0!==f),u(t,”fa-pull-“.concat(h),null!=h),u(t,”fa-swap-opacity“,e.swapOpacity),t);return Object.keys(d).map((function(e){return d?e:null})).filter((function(e){return e}))}(n)),d(c.split(” “)))),m=y(”transform“,”string“==typeof n.transform?r.b.transform(n.transform):n.transform),x=y(”mask“,g(a)),S=Object(r.a)(l,f({},p,{},m,{},x,{symbol:o,title:s}));if(!S)return function(){var e;!v&&console&&”function“==typeof console.error&&(e=console).error.apply(e,arguments)}(”Could not find icon“,l),null;var k=S.abstract,_={ref:t};return Object.keys(n).forEach((function(e){b.defaultProps.hasOwnProperty(e)||(_=n)})),w(k,_)}b.displayName=”FontAwesomeIcon“,b.propTypes={border:a.a.bool,className:a.a.string,mask:a.a.oneOfType(),fixedWidth:a.a.bool,inverse:a.a.bool,flip:a.a.oneOf(),icon:a.a.oneOfType(),listItem:a.a.bool,pull:a.a.oneOf(),pulse:a.a.bool,rotation:a.a.oneOf(),size:a.a.oneOf(),spin:a.a.bool,symbol:a.a.oneOfType(),title:a.a.string,transform:a.a.oneOfType(),swapOpacity:a.a.bool},b.defaultProps={border:!1,className:”“,mask:null,fixedWidth:!1,inverse:!1,flip:null,icon:null,listItem:!1,pull:null,pulse:!1,rotation:null,size:null,spin:!1,symbol:!1,title:”“,transform:null,swapOpacity:!1};var w=function e(t,n){var r=arguments.length>2&&void 0!==arguments?arguments:{};if(”string“==typeof n)return n;var i=(n.children||[]).map((function(n){return e(t,n)})),a=Object.keys(n.attributes||{}).reduce((function(e,t){var r=n.attributes;switch(t){case”class“:e.attrs.className=r,delete n.attributes.class;break;case”style“:e.attrs.style=m®;break;default:0===t.indexOf(”aria-“)||0===t.indexOf(”data-“)?e.attrs=r:e.attrs=r}return e}),{attrs:{}}),o=r.style,c=void 0===o?{}:o,s=h(r,);return a.attrs.style=f({},a.attrs.style,{},c),t.apply(void 0,.concat(d(i)))}.bind(null,c.a.createElement)},function(e,t){”function“==typeof Object.create?e.exports=function(e,t){t&&(e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}))}:e.exports=function(e,t){if(t){e.super_=t;var n=function(){};n.prototype=t.prototype,e.prototype=new n,e.prototype.constructor=e}}},function(e,t,n){”use strict“;e.exports=a,a.className=”ReflectionObject“;var r,i=n(3);function a(e,t){if(!i.isString(e))throw TypeError(”name must be a string“);if(t&&!i.isObject(t))throw TypeError(”options must be an object“);this.options=t,this.parsedOptions=null,this.name=e,this.parent=null,this.resolved=!1,this.comment=null,this.filename=null}Object.defineProperties(a.prototype,{root:{get:function(){for(var e=this;null!==e.parent;)e=e.parent;return e}},fullName:{get:function(){for(var e=,t=this.parent;t;)e.unshift(t.name),t=t.parent;return e.join(”.“)}}}),a.prototype.toJSON=function(){throw Error()},a.prototype.onAdd=function(e){this.parent&&this.parent!==e&&this.parent.remove(this),this.parent=e,this.resolved=!1;var t=e.root;t instanceof r&&t._handleAdd(this)},a.prototype.onRemove=function(e){var t=e.root;t instanceof r&&t._handleRemove(this),this.parent=null,this.resolved=!1},a.prototype.resolve=function(){return this.resolved||this.root instanceof r&&(this.resolved=!0),this},a.prototype.getOption=function(e){if(this.options)return this.options},a.prototype.setOption=function(e,t,n){return n&&this.options&&void 0!==this.options||((this.options||(this.options={}))[e]=t),this},a.prototype.setParsedOption=function(e,t,n){this.parsedOptions||(this.parsedOptions=[]);var r=this.parsedOptions;if(n){var a=r.find((function(t){return Object.prototype.hasOwnProperty.call(t,e)}));if(a){var o=a;i.setProperty(o,n,t)}else(a={})[e]=i.setProperty({},n,t),r.push(a)}else{var c={};c=t,r.push©}return this},a.prototype.setOptions=function(e,t){if(e)for(var n=Object.keys(e),r=0;r,e[n],t);return this},a.prototype.toString=function(){var e=this.constructor.className,t=this.fullName;return t.length?e+” “+t:e},a._configure=function(e){r=e}},function(e,t,n){”use strict“;var r=t,i=n(3),a=;function o(e,t){var n=0,r={};for(t|=0;n]=e;return r}r.basic=o(),r.defaults=o(),r.long=o(,7),r.mapKey=o(,2),r.packed=o()},function(e,t,n){”use strict“;var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,”__esModule“,{value:!0});var i=r(n(0));t.default=function(e){var t=e.children,n=e.className,r=void 0===n?”“:n;return i.default.createElement(”span“,{className:r},t)}},function(e,t,n){”use strict“;(function(e){ /*!

              + +
              * The buffer module from node.js, for the browser.
              +*
              +* @author   Feross Aboukhadijeh <http://feross.org>
              +* @license  MIT
              +*/
              + +

              var r=n(94),i=n(95),a=n(55);function o(){return s.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function c(e,t){if(o()<t)throw new RangeError(“Invalid typed array length”);return s.TYPED_ARRAY_SUPPORT?(e=new Uint8Array(t)).__proto__=s.prototype:(null===e&&(e=new s(t)),e.length=t),e}function s(e,t,n){if(!(s.TYPED_ARRAY_SUPPORT||this instanceof s))return new s(e,t,n);if(“number”==typeof e){if(“string”==typeof t)throw new Error(“If encoding is specified then the first argument must be a string”);return f(this,e)}return u(this,e,t,n)}function u(e,t,n,r){if(“number”==typeof t)throw new TypeError('“value” argument must not be a number');return“undefined”!=typeof ArrayBuffer&&t instanceof ArrayBuffer?function(e,t,n,r){if(t.byteLength,n<0||t.byteLength<n)throw new RangeError(“'offset' is out of bounds”);if(t.byteLength<n+(r||0))throw new RangeError(“'length' is out of bounds”);t=void 0===n&&void 0===r?new Uint8Array(t):void 0===r?new Uint8Array(t,n):new Uint8Array(t,n,r);s.TYPED_ARRAY_SUPPORT?(e=t).__proto__=s.prototype:e=h(e,t);return e}(e,t,n,r):“string”==typeof t?function(e,t,n){“string”==typeof n&&“”!==n||(n=“utf8”);if(!s.isEncoding(n))throw new TypeError('“encoding” must be a valid string encoding');var r=0|p(t,n),i=(e=c(e,r)).write(t,n);i!==r&&(e=e.slice(0,i));return e}(e,t,n):function(e,t){if(s.isBuffer(t)){var n=0|d(t.length);return 0===(e=c(e,n)).length||t.copy(e,0,0,n),e}if(t){if(“undefined”!=typeof ArrayBuffer&&t.buffer instanceof ArrayBuffer||“length”in t)return“number”!=typeof t.length||(r=t.length)!=r?c(e,0):h(e,t);if(“Buffer”===t.type&&a(t.data))return h(e,t.data)}var r;throw new TypeError(“First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.”)}(e,t)}function l(e){if(“number”!=typeof e)throw new TypeError('“size” argument must be a number');if(e<0)throw new RangeError('“size” argument must not be negative')}function f(e,t){if(l(t),e=c(e,t<0?0:0|d(t)),!s.TYPED_ARRAY_SUPPORT)for(var n=0;n=0;return e}function h(e,t){var n=t.length<0?0:0|d(t.length);e=c(e,n);for(var r=0;r=255&t;return e}function d(e){if(e>=o())throw new RangeError(“Attempt to allocate Buffer larger than maximum size: 0x”+o().toString(16)+“ bytes”);return 0|e}function p(e,t){if(s.isBuffer(e))return e.length;if(“undefined”!=typeof ArrayBuffer&&“function”==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(e)||e instanceof ArrayBuffer))return e.byteLength;“string”!=typeof e&&(e=“”+e);var n=e.length;if(0===n)return 0;for(var r=!1;;)switch(t){case“ascii”:case“latin1”:case“binary”:return n;case“utf8”:case“utf-8”:case void 0:return I(e).length;case“ucs2”:case“ucs-2”:case“utf16le”:case“utf-16le”:return 2*n;case“hex”:return n>>>1;case“base64”:return F(e).length;default:if®return I(e).length;t=(“”+t).toLowerCase(),r=!0}}function m(e,t,n){var r=!1;if((void 0===t||t<0)&&(t=0),t>this.length)return“”;if((void 0===n||n>this.length)&&(n=this.length),n<=0)return“”;if((n>>>=0)<=(t>>>=0))return“”;for(e||(e=“utf8”);;)switch(e){case“hex”:return T(this,t,n);case“utf8”:case“utf-8”:return C(this,t,n);case“ascii”:return M(this,t,n);case“latin1”:case“binary”:return O(this,t,n);case“base64”:return z(this,t,n);case“ucs2”:case“ucs-2”:case“utf16le”:case“utf-16le”:return E(this,t,n);default:if®throw new TypeError(“Unknown encoding: ”+e);e=(e+“”).toLowerCase(),r=!0}}function v(e,t,n){var r=e;e=e,e=r}function g(e,t,n,r,i){if(0===e.length)return-1;if(“string”==typeof n?(r=n,n=0):n>2147483647?n=2147483647:n<-2147483648&&(n=-2147483648),n=+n,isNaN(n)&&(n=i?0:e.length-1),n<0&&(n=e.length+n),n>=e.length){if(i)return-1;n=e.length-1}else if(n<0){if(!i)return-1;n=0}if(“string”==typeof t&&(t=s.from(t,r)),s.isBuffer(t))return 0===t.length?-1:y(e,t,n,r,i);if(“number”==typeof t)return t&=255,s.TYPED_ARRAY_SUPPORT&&“function”==typeof Uint8Array.prototype.indexOf?i?Uint8Array.prototype.indexOf.call(e,t,n):Uint8Array.prototype.lastIndexOf.call(e,t,n):y(e,,n,r,i);throw new TypeError(“val must be string, number or Buffer”)}function y(e,t,n,r,i){var a,o=1,c=e.length,s=t.length;if(void 0!==r&&(“ucs2”===(r=String®.toLowerCase())||“ucs-2”===r||“utf16le”===r||“utf-16le”===r)){if(e.length<2||t.length<2)return-1;o=2,c/=2,s/=2,n/=2}function u(e,t){return 1===o?e:e.readUInt16BE(t*o)}if(i){var l=-1;for(a=n;a<c;a++)if(u(e,a)===u(t,-1===l?0:a-l)){if(-1===l&&(l=a),a-l+1===s)return l*o}else-1!==l&&(a-=a-l),l=-1}else for(n+s>c&&(n=c-s),a=n;a>=0;a–){for(var f=!0,h=0;h<s;h++)if(u(e,a+h)!==u(t,h)){f=!1;break}if(f)return a}return-1}function b(e,t,n,r){n=Number(n)||0;var i=e.length-n;r?(r=Number®)>i&&(r=i):r=i;var a=t.length;if(a%2!=0)throw new TypeError(“Invalid hex string”);r>a/2&&(r=a/2);for(var o=0;o<r;++o){var c=parseInt(t.substr(2*o,2),16);if(isNaN©)return o;e=c}return o}function w(e,t,n,r){return B(I(t,e.length-n),e,n,r)}function x(e,t,n,r){return B(function(e){for(var t=[],n=0;n<e.length;++n)t.push(255&e.charCodeAt(n));return t}(t),e,n,r)}function S(e,t,n,r){return x(e,t,n,r)}function k(e,t,n,r){return B(F(t),e,n,r)}function _(e,t,n,r){return B(function(e,t){for(var n,r,i,a=[],o=0;o<e.length&&!((t-=2)<0);++o)n=e.charCodeAt(o),r=n>>8,i=n%256,a.push(i),a.push®;return a}(t,e.length-n),e,n,r)}function z(e,t,n){return 0===t&&n===e.length?r.fromByteArray(e):r.fromByteArray(e.slice(t,n))}function C(e,t,n){n=Math.min(e.length,n);for(var r=[],i=t;i<n;){var a,o,c,s,u=e,l=null,f=u>239?4:u>223?3:u>191?2:1;if(i+f<=n)switch(f){case 1:u<128&&(l=u);break;case 2:128==(192&(a=e))&&(s=(31&u)<<6|63&a)>127&&(l=s);break;case 3:a=e,o=e,128==(192&a)&&128==(192&o)&&(s=(15&u)<<12|(63&a)<<6|63&o)>2047&&(s<55296||s>57343)&&(l=s);break;case 4:a=e,o=e,c=e,128==(192&a)&&128==(192&o)&&128==(192&c)&&(s=(15&u)<<18|(63&a)<<12|(63&o)<<6|63&c)>65535&&s<1114112&&(l=s)}null===l?(l=65533,f=1):l>65535&&(l-=65536,r.push(l>>>10&1023|55296),l=56320|1023&l),r.push(l),i+=f}return function(e){var t=e.length;if(t<=4096)return String.fromCharCode.apply(String,e);var n=“”,r=0;for(;r<t;)n+=String.fromCharCode.apply(String,e.slice(r,r+=4096));return n}®}t.Buffer=s,t.SlowBuffer=function(e){+e!=e&&(e=0);return s.alloc(+e)},t.INSPECT_MAX_BYTES=50,s.TYPED_ARRAY_SUPPORT=void 0!==e.TYPED_ARRAY_SUPPORT?e.TYPED_ARRAY_SUPPORT:function(){try{var e=new Uint8Array(1);return e.__proto__={__proto__:Uint8Array.prototype,foo:function(){return 42}},42===e.foo()&&“function”==typeof e.subarray&&0===e.subarray(1,1).byteLength}catch(e){return!1}}(),t.kMaxLength=o(),s.poolSize=8192,s._augment=function(e){return e.__proto__=s.prototype,e},s.from=function(e,t,n){return u(null,e,t,n)},s.TYPED_ARRAY_SUPPORT&&(s.prototype.__proto__=Uint8Array.prototype,s.__proto__=Uint8Array,“undefined”!=typeof Symbol&&Symbol.species&&s===s&&Object.defineProperty(s,Symbol.species,{value:null,configurable:!0})),s.alloc=function(e,t,n){return function(e,t,n,r){return l(t),t<=0?c(e,t):void 0!==n?“string”==typeof r?c(e,t).fill(n,r):c(e,t).fill(n):c(e,t)}(null,e,t,n)},s.allocUnsafe=function(e){return f(null,e)},s.allocUnsafeSlow=function(e){return f(null,e)},s.isBuffer=function(e){return!(null==e||!e._isBuffer)},s.compare=function(e,t){if(!s.isBuffer(e)||!s.isBuffer(t))throw new TypeError(“Arguments must be Buffers”);if(e===t)return 0;for(var n=e.length,r=t.length,i=0,a=Math.min(n,r);i!==t){n=e,r=t;break}return n<r?-1:r<n?1:0},s.isEncoding=function(e){switch(String(e).toLowerCase()){case“hex”:case“utf8”:case“utf-8”:case“ascii”:case“latin1”:case“binary”:case“base64”:case“ucs2”:case“ucs-2”:case“utf16le”:case“utf-16le”:return!0;default:return!1}},s.concat=function(e,t){if(!a(e))throw new TypeError('“list” argument must be an Array of Buffers');if(0===e.length)return s.alloc(0);var n;if(void 0===t)for(t=0,n=0;n.length;var r=s.allocUnsafe(t),i=0;for(n=0;n<e.length;++n){var o=e;if(!s.isBuffer(o))throw new TypeError('“list” argument must be an Array of Buffers');o.copy(r,i),i+=o.length}return r},s.byteLength=p,s.prototype._isBuffer=!0,s.prototype.swap16=function(){var e=this.length;if(e%2!=0)throw new RangeError(“Buffer size must be a multiple of 16-bits”);for(var t=0;t<e;t+=2)v(this,t,t+1);return this},s.prototype.swap32=function(){var e=this.length;if(e%4!=0)throw new RangeError(“Buffer size must be a multiple of 32-bits”);for(var t=0;t<e;t+=4)v(this,t,t+3),v(this,t+1,t+2);return this},s.prototype.swap64=function(){var e=this.length;if(e%8!=0)throw new RangeError(“Buffer size must be a multiple of 64-bits”);for(var t=0;t<e;t+=8)v(this,t,t+7),v(this,t+1,t+6),v(this,t+2,t+5),v(this,t+3,t+4);return this},s.prototype.toString=function(){var e=0|this.length;return 0===e?“”:0===arguments.length?C(this,0,e):m.apply(this,arguments)},s.prototype.equals=function(e){if(!s.isBuffer(e))throw new TypeError(“Argument must be a Buffer”);return this===e||0===s.compare(this,e)},s.prototype.inspect=function(){var e=“”,n=t.INSPECT_MAX_BYTES;return this.length>0&&(e=this.toString(“hex”,0,n).match(/.{2}/g).join(“ ”),this.length>n&&(e+=“ … ”)),“<Buffer ”e“>”},s.prototype.compare=function(e,t,n,r,i){if(!s.isBuffer(e))throw new TypeError(“Argument must be a Buffer”);if(void 0===t&&(t=0),void 0===n&&(n=e?e.length:0),void 0===r&&(r=0),void 0===i&&(i=this.length),t<0||n>e.length||r<0||i>this.length)throw new RangeError(“out of range index”);if(r>=i&&t>=n)return 0;if(r>=i)return-1;if(t>=n)return 1;if(this===e)return 0;for(var a=(i>>>=0)-(r>>>=0),o=(n>>>=0)-(t>>>=0),c=Math.min(a,o),u=this.slice(r,i),l=e.slice(t,n),f=0;f!==l){a=u,o=l;break}return a<o?-1:o<a?1:0},s.prototype.includes=function(e,t,n){return-1!==this.indexOf(e,t,n)},s.prototype.indexOf=function(e,t,n){return g(this,e,t,n,!0)},s.prototype.lastIndexOf=function(e,t,n){return g(this,e,t,n,!1)},s.prototype.write=function(e,t,n,r){if(void 0===t)r=“utf8”,n=this.length,t=0;else if(void 0===n&&“string”==typeof t)r=t,n=this.length,t=0;else{if(!isFinite(t))throw new Error(“Buffer.write(string, encoding, offset[, length]) is no longer supported”);t|=0,isFinite(n)?(n|=0,void 0===r&&(r=“utf8”)):(r=n,n=void 0)}var i=this.length-t;if((void 0===n||n>i)&&(n=i),e.length>0&&(n<0||t<0)||t>this.length)throw new RangeError(“Attempt to write outside buffer bounds”);r||(r=“utf8”);for(var a=!1;;)switch®{case“hex”:return b(this,e,t,n);case“utf8”:case“utf-8”:return w(this,e,t,n);case“ascii”:return x(this,e,t,n);case“latin1”:case“binary”:return S(this,e,t,n);case“base64”:return k(this,e,t,n);case“ucs2”:case“ucs-2”:case“utf16le”:case“utf-16le”:return _(this,e,t,n);default:if(a)throw new TypeError(“Unknown encoding: ”+r);r=(“”+r).toLowerCase(),a=!0}},s.prototype.toJSON=function(){return{type:“Buffer”,data:Array.prototype.slice.call(this._arr||this,0)}};function M(e,t,n){var r=“”;n=Math.min(e.length,n);for(var i=t;i);return r}function O(e,t,n){var r=“”;n=Math.min(e.length,n);for(var i=t;i);return r}function T(e,t,n){var r=e.length;(!t||t<0)&&(t=0),(!n||n<0||n>r)&&(n=r);for(var i=“”,a=t;a);return i}function E(e,t,n){for(var r=e.slice(t,n),i=“”,a=0;a+256*r);return i}function L(e,t,n){if(e%1!=0||e<0)throw new RangeError(“offset is not uint”);if(e+t>n)throw new RangeError(“Trying to access beyond buffer length”)}function A(e,t,n,r,i,a){if(!s.isBuffer(e))throw new TypeError('“buffer” argument must be a Buffer instance');if(t>i||t<a)throw new RangeError('“value” argument is out of bounds');if(n+r>e.length)throw new RangeError(“Index out of range”)}function R(e,t,n,r){t<0&&(t=65535+t+1);for(var i=0,a=Math.min(e.length-n,2);i=(t&255<<8*(r?i:1-i))>>>8*(r?i:1-i)}function N(e,t,n,r){t<0&&(t=4294967295+t+1);for(var i=0,a=Math.min(e.length-n,4);i=t>>>8*(r?i:3-i)&255}function H(e,t,n,r,i,a){if(n+r>e.length)throw new RangeError(“Index out of range”);if(n<0)throw new RangeError(“Index out of range”)}function P(e,t,n,r,a){return a||H(e,0,n,4),i.write(e,t,n,r,23,4),n+4}function j(e,t,n,r,a){return a||H(e,0,n,8),i.write(e,t,n,r,52,8),n+8}s.prototype.slice=function(e,t){var n,r=this.length;if((e=~~e)<0?(e+=r)<0&&(e=0):e>r&&(e=r),(t=void 0===t?r:~~t)<0?(t+=r)<0&&(t=0):t>r&&(t=r),t<e&&(t=e),s.TYPED_ARRAY_SUPPORT)(n=this.subarray(e,t)).__proto__=s.prototype;else{var i=t-e;n=new s(i,void 0);for(var a=0;a=this}return n},s.prototype.readUIntLE=function(e,t,n){e|=0,t|=0,n||L(e,t,this.length);for(var r=this,i=1,a=0;++a*i;return r},s.prototype.readUIntBE=function(e,t,n){e|=0,t|=0,n||L(e,t,this.length);for(var r=this,i=1;t>0&&(i*=256);)r+=this*i;return r},s.prototype.readUInt8=function(e,t){return t||L(e,1,this.length),this},s.prototype.readUInt16LE=function(e,t){return t||L(e,2,this.length),this|this<<8},s.prototype.readUInt16BE=function(e,t){return t||L(e,2,this.length),this<<8|this},s.prototype.readUInt32LE=function(e,t){return t||L(e,4,this.length),(this|this<<8|this<<16)+16777216*this},s.prototype.readUInt32BE=function(e,t){return t||L(e,4,this.length),16777216*this+(this<<16|this<<8|this)},s.prototype.readIntLE=function(e,t,n){e|=0,t|=0,n||L(e,t,this.length);for(var r=this,i=1,a=0;++a*i;return r>=(i*=128)&&(r-=Math.pow(2,8*t)),r},s.prototype.readIntBE=function(e,t,n){e|=0,t|=0,n||L(e,t,this.length);for(var r=t,i=1,a=this;r>0&&(i*=256);)a+=this*i;return a>=(i*=128)&&(a-=Math.pow(2,8*t)),a},s.prototype.readInt8=function(e,t){return t||L(e,1,this.length),128&this?-1*(255-this+1):this},s.prototype.readInt16LE=function(e,t){t||L(e,2,this.length);var n=this|this<<8;return 32768&n?4294901760|n:n},s.prototype.readInt16BE=function(e,t){t||L(e,2,this.length);var n=this|this<<8;return 32768&n?4294901760|n:n},s.prototype.readInt32LE=function(e,t){return t||L(e,4,this.length),this|this<<8|this<<16|this<<24},s.prototype.readInt32BE=function(e,t){return t||L(e,4,this.length),this<<24|this<<16|this<<8|this},s.prototype.readFloatLE=function(e,t){return t||L(e,4,this.length),i.read(this,e,!0,23,4)},s.prototype.readFloatBE=function(e,t){return t||L(e,4,this.length),i.read(this,e,!1,23,4)},s.prototype.readDoubleLE=function(e,t){return t||L(e,8,this.length),i.read(this,e,!0,52,8)},s.prototype.readDoubleBE=function(e,t){return t||L(e,8,this.length),i.read(this,e,!1,52,8)},s.prototype.writeUIntLE=function(e,t,n,r){(e=+e,t|=0,n|=0,r)||A(this,e,t,n,Math.pow(2,8*n)-1,0);var i=1,a=0;for(this=255&e;++a=e/i&255;return t+n},s.prototype.writeUIntBE=function(e,t,n,r){(e=+e,t|=0,n|=0,r)||A(this,e,t,n,Math.pow(2,8*n)-1,0);var i=n-1,a=1;for(this=255&e;–i>=0&&(a*=256);)this=e/a&255;return t+n},s.prototype.writeUInt8=function(e,t,n){return e=+e,t|=0,n||A(this,e,t,1,255,0),s.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),this=255&e,t+1},s.prototype.writeUInt16LE=function(e,t,n){return e=+e,t|=0,n||A(this,e,t,2,65535,0),s.TYPED_ARRAY_SUPPORT?(this=255&e,this=e>>>8):R(this,e,t,!0),t+2},s.prototype.writeUInt16BE=function(e,t,n){return e=+e,t|=0,n||A(this,e,t,2,65535,0),s.TYPED_ARRAY_SUPPORT?(this=e>>>8,this=255&e):R(this,e,t,!1),t+2},s.prototype.writeUInt32LE=function(e,t,n){return e=+e,t|=0,n||A(this,e,t,4,4294967295,0),s.TYPED_ARRAY_SUPPORT?(this=e>>>24,this=e>>>16,this=e>>>8,this=255&e):N(this,e,t,!0),t+4},s.prototype.writeUInt32BE=function(e,t,n){return e=+e,t|=0,n||A(this,e,t,4,4294967295,0),s.TYPED_ARRAY_SUPPORT?(this=e>>>24,this=e>>>16,this=e>>>8,this=255&e):N(this,e,t,!1),t+4},s.prototype.writeIntLE=function(e,t,n,r){if(e=+e,t|=0,!r){var i=Math.pow(2,8*n-1);A(this,e,t,n,i-1,-i)}var a=0,o=1,c=0;for(this=255&e;++a&&(c=1),this=(e/o>>0)-c&255;return t+n},s.prototype.writeIntBE=function(e,t,n,r){if(e=+e,t|=0,!r){var i=Math.pow(2,8*n-1);A(this,e,t,n,i-1,-i)}var a=n-1,o=1,c=0;for(this=255&e;–a>=0&&(o*=256);)e<0&&0===c&&0!==this&&(c=1),this=(e/o>>0)-c&255;return t+n},s.prototype.writeInt8=function(e,t,n){return e=+e,t|=0,n||A(this,e,t,1,127,-128),s.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),e<0&&(e=255+e+1),this=255&e,t+1},s.prototype.writeInt16LE=function(e,t,n){return e=+e,t|=0,n||A(this,e,t,2,32767,-32768),s.TYPED_ARRAY_SUPPORT?(this=255&e,this=e>>>8):R(this,e,t,!0),t+2},s.prototype.writeInt16BE=function(e,t,n){return e=+e,t|=0,n||A(this,e,t,2,32767,-32768),s.TYPED_ARRAY_SUPPORT?(this=e>>>8,this=255&e):R(this,e,t,!1),t+2},s.prototype.writeInt32LE=function(e,t,n){return e=+e,t|=0,n||A(this,e,t,4,2147483647,-2147483648),s.TYPED_ARRAY_SUPPORT?(this=255&e,this=e>>>8,this=e>>>16,this=e>>>24):N(this,e,t,!0),t+4},s.prototype.writeInt32BE=function(e,t,n){return e=+e,t|=0,n||A(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),s.TYPED_ARRAY_SUPPORT?(this=e>>>24,this=e>>>16,this=e>>>8,this=255&e):N(this,e,t,!1),t+4},s.prototype.writeFloatLE=function(e,t,n){return P(this,e,t,!0,n)},s.prototype.writeFloatBE=function(e,t,n){return P(this,e,t,!1,n)},s.prototype.writeDoubleLE=function(e,t,n){return j(this,e,t,!0,n)},s.prototype.writeDoubleBE=function(e,t,n){return j(this,e,t,!1,n)},s.prototype.copy=function(e,t,n,r){if(n||(n=0),r||0===r||(r=this.length),t>=e.length&&(t=e.length),t||(t=0),r>0&&r<n&&(r=n),r===n)return 0;if(0===e.length||0===this.length)return 0;if(t<0)throw new RangeError(“targetStart out of bounds”);if(n<0||n>=this.length)throw new RangeError(“sourceStart out of bounds”);if(r<0)throw new RangeError(“sourceEnd out of bounds”);r>this.length&&(r=this.length),e.length-t<r-n&&(r=e.length-t+n);var i,a=r-n;if(this===e&&n=0;–i)e=this;else if(a<1e3||!s.TYPED_ARRAY_SUPPORT)for(i=0;i=this;else Uint8Array.prototype.set.call(e,this.subarray(n,n+a),t);return a},s.prototype.fill=function(e,t,n,r){if(“string”==typeof e){if(“string”==typeof t?(r=t,t=0,n=this.length):“string”==typeof n&&(r=n,n=this.length),1===e.length){var i=e.charCodeAt(0);i<256&&(e=i)}if(void 0!==r&&“string”!=typeof r)throw new TypeError(“encoding must be a string”);if(“string”==typeof r&&!s.isEncoding®)throw new TypeError(“Unknown encoding: ”+r)}else“number”==typeof e&&(e&=255);if(t<0||this.length<t||this.length<n)throw new RangeError(“Out of range index”);if(n<=t)return this;var a;if(t>>>=0,n=void 0===n?this.length:n>>>0,e||(e=0),“number”==typeof e)for(a=t;a=e;else{var o=s.isBuffer(e)?e:I(new s(e,r).toString()),c=o.length;for(a=0;a=o}return this};var V=//g;function D(e){return e<16?“0”+e.toString(16):e.toString(16)}function I(e,t){var n;t=t||1/0;for(var r=e.length,i=null,a=[],o=0;o<r;++o){if((n=e.charCodeAt(o))>55295&&n<57344){if(!i){if(n>56319){(t-=3)>-1&&a.push(239,191,189);continue}if(o+1===r){(t-=3)>-1&&a.push(239,191,189);continue}i=n;continue}if(n<56320){(t-=3)>-1&&a.push(239,191,189),i=n;continue}n=65536+(i-55296<<10|n-56320)}else i&&(t-=3)>-1&&a.push(239,191,189);if(i=null,n<128){if((t-=1)<0)break;a.push(n)}else if(n<2048){if((t-=2)<0)break;a.push(n>>6|192,63&n|128)}else if(n<65536){if((t-=3)<0)break;a.push(n>>12|224,n>>6&63|128,63&n|128)}else{if(!(n<1114112))throw new Error(“Invalid code point”);if((t-=4)<0)break;a.push(n>>18|240,n>>12&63|128,n>>6&63|128,63&n|128)}}return a}function F(e){return r.toByteArray(function(e){if((e=function(e){return e.trim?e.trim():e.replace(/^s+|s+$/g,“”)}(e).replace(V,“”)).length<2)return“”;for(;e.length%4!=0;)e+=“=”;return e}(e))}function B(e,t,n,r){for(var i=0;i=t.length||i>=e.length);++i)t=e;return i}}).call(this,n(4))},function(e,t,n){(function(e){function n(e){return Object.prototype.toString.call(e)}t.isArray=function(e){return Array.isArray?Array.isArray(e):“[object Array]”===n(e)},t.isBoolean=function(e){return“boolean”==typeof e},t.isNull=function(e){return null===e},t.isNullOrUndefined=function(e){return null==e},t.isNumber=function(e){return“number”==typeof e},t.isString=function(e){return“string”==typeof e},t.isSymbol=function(e){return“symbol”==typeof e},t.isUndefined=function(e){return void 0===e},t.isRegExp=function(e){return“[object RegExp]”===n(e)},t.isObject=function(e){return“object”==typeof e&&null!==e},t.isDate=function(e){return“[object Date]”===n(e)},t.isError=function(e){return“[object Error]”===n(e)||e instanceof Error},t.isFunction=function(e){return“function”==typeof e},t.isPrimitive=function(e){return null===e||“boolean”==typeof e||“number”==typeof e||“string”==typeof e||“symbol”==typeof e||void 0===e},t.isBuffer=e.isBuffer}).call(this,n(19).Buffer)},function(e,t,n){“use strict”;e.exports=l;var r=n(16);((l.prototype=Object.create(r.prototype)).constructor=l).className=“Namespace”;var i,a,o,c=n(11),s=n(3);function u(e,t){if(e&&e.length){for(var n={},r=0;r.name]=e.toJSON(t);return n}}function l(e,t){r.call(this,e,t),this.nested=void 0,this._nestedArray=null}function f(e){return e._nestedArray=null,e}l.fromJSON=function(e,t){return new l(e,t.options).addJSON(t.nested)},l.arrayToJSON=u,l.isReservedId=function(e,t){if(e)for(var n=0;n<e.length;++n)if(“string”!=typeof e&&e[0]<=t&&e[1]>t)return!0;return!1},l.isReservedName=function(e,t){if(e)for(var n=0;n===t)return!0;return!1},Object.defineProperty(l.prototype,“nestedArray”,{get:function(){return this._nestedArray||(this._nestedArray=s.toArray(this.nested))}}),l.prototype.toJSON=function(e){return s.toObject()},l.prototype.addJSON=function(e){if(e)for(var t,n=Object.keys(e),r=0;r],this.add((void 0!==t.fields?i.fromJSON:void 0!==t.values?o.fromJSON:void 0!==t.methods?a.fromJSON:void 0!==t.id?c.fromJSON:l.fromJSON)(n,t));return this},l.prototype.get=function(e){return this.nested&&this.nested||null},l.prototype.getEnum=function(e){if(this.nested&&this.nestedinstanceof o)return this.nested.values;throw Error(“no such enum: ”+e)},l.prototype.add=function(e){if(!(e instanceof c&&void 0!==e.extend||e instanceof i||e instanceof o||e instanceof a||e instanceof l))throw TypeError(“object must be a valid nested object”);if(this.nested){var t=this.get(e.name);if(t){if(!(t instanceof l&&e instanceof l)||t instanceof i||t instanceof a)throw Error(“duplicate name '”e.name“' in ”+this);for(var n=t.nestedArray,r=0;r);this.remove(t),this.nested||(this.nested={}),e.setOptions(t.options,!0)}}else this.nested={};return this.nested=e,e.onAdd(this),f(this)},l.prototype.remove=function(e){if(!(e instanceof r))throw TypeError(“object must be a ReflectionObject”);if(e.parent!==this)throw Error(e+“ is not a member of ”+this);return delete this.nested,Object.keys(this.nested).length||(this.nested=void 0),e.onRemove(this),f(this)},l.prototype.define=function(e,t){if(s.isString(e))e=e.split(“.”);else if(!Array.isArray(e))throw TypeError(“illegal path”);if(e&&e.length&&“”===e)throw Error(“path must be relative”);for(var n=this;e.length>0;){var r=e.shift();if(n.nested&&n.nested){if(!((n=n.nested)instanceof l))throw Error(“path conflicts with non-namespace objects”)}else n.add(n=new l®)}return t&&n.addJSON(t),n},l.prototype.resolveAll=function(){for(var e=this.nestedArray,t=0;tinstanceof l?e.resolveAll():e.resolve();return this.resolve()},l.prototype.lookup=function(e,t,n){if(“boolean”==typeof t?(n=t,t=void 0):t&&!Array.isArray(t)&&(t=),s.isString(e)&&e.length){if(“.”===e)return this.root;e=e.split(“.”)}else if(!e.length)return this;if(“”===e)return this.root.lookup(e.slice(1),t);var r=this.get(e);if®{if(1===e.length){if(!t||t.indexOf(r.constructor)>-1)return r}else if(r instanceof l&&(r=r.lookup(e.slice(1),t,!0)))return r}else for(var i=0;iinstanceof l&&(r=this._nestedArray.lookup(e,t,!0)))return r;return null===this.parent||n?null:this.parent.lookup(e,t)},l.prototype.lookupType=function(e){var t=this.lookup(e,);if(!t)throw Error(“no such type: ”+e);return t},l.prototype.lookupEnum=function(e){var t=this.lookup(e,);if(!t)throw Error(“no such Enum '”e“' in ”+this);return t},l.prototype.lookupTypeOrEnum=function(e){var t=this.lookup(e,);if(!t)throw Error(“no such Type or Enum '”e“' in ”+this);return t},l.prototype.lookupService=function(e){var t=this.lookup(e,);if(!t)throw Error(“no such Service '”e“' in ”+this);return t},l._configure=function(e,t,n){i=e,a=t,o=n}},function(e,t,n){var r,i; /**

              + +
              * elasticlunr - http://weixsong.github.io
              +* Lightweight full-text search engine in Javascript for browser search and offline search. - 0.9.5
              +*
              +* Copyright (C) 2016 Oliver Nightingale
              +* Copyright (C) 2016 Wei Song
              +* MIT Licensed
              +* @license
              +*/!function(){
              + +

              /*!

              + +
              * elasticlunr.js
              +* Copyright (C) 2016 Oliver Nightingale
              +* Copyright (C) 2016 Wei Song
              +*/
              + +

              var a,o,c,s,u,l,f,h,d,p,m,v,g,y,b,w,x,S,k,_,z,C,M,O,T,E=function(e){var t=new E.Index;return t.pipeline.add(E.trimmer,E.stopWordFilter,E.stemmer),e&&e.call(t,t),t};E.version=“0.9.5”,lunr=E, /*!

              + +
              * elasticlunr.utils
              +* Copyright (C) 2016 Oliver Nightingale
              +* Copyright (C) 2016 Wei Song
              +*/
              + +

              E.utils={},E.utils.warn=(a=this,function(e){a.console&&console.warn&&console.warn(e)}),E.utils.toString=function(e){return null==e?“”:e.toString()}, /*!

              + +
              * elasticlunr.EventEmitter
              +* Copyright (C) 2016 Oliver Nightingale
              +* Copyright (C) 2016 Wei Song
              +*/
              + +

              E.EventEmitter=function(){this.events={}},E.EventEmitter.prototype.addListener=function(){var e=Array.prototype.slice.call(arguments),t=e.pop(),n=e;if(“function”!=typeof t)throw new TypeError(“last argument must be a function”);n.forEach((function(e){this.hasHandler(e)||(this.events=[]),this.events.push(t)}),this)},E.EventEmitter.prototype.removeListener=function(e,t){if(this.hasHandler(e)){var n=this.events.indexOf(t);-1!==n&&(this.events.splice(n,1),0==this.events.length&&delete this.events)}},E.EventEmitter.prototype.emit=function(e){if(this.hasHandler(e)){var t=Array.prototype.slice.call(arguments,1);this.events.forEach((function(e){e.apply(void 0,t)}),this)}},E.EventEmitter.prototype.hasHandler=function(e){return e in this.events}, /*!

              + +
              * elasticlunr.tokenizer
              +* Copyright (C) 2016 Oliver Nightingale
              +* Copyright (C) 2016 Wei Song
              +*/
              + +

              E.tokenizer=function(e){if(!arguments.length||null==e)return[];if(Array.isArray(e)){var t=e.filter((function(e){return null!=e}));t=t.map((function(e){return E.utils.toString(e).toLowerCase()}));var n=[];return t.forEach((function(e){var t=e.split(E.tokenizer.seperator);n=n.concat(t)}),this),n}return e.toString().trim().toLowerCase().split(E.tokenizer.seperator)},E.tokenizer.defaultSeperator=/+/,E.tokenizer.seperator=E.tokenizer.defaultSeperator,E.tokenizer.setSeperator=function(e){null!=e&&“object”==typeof e&&(E.tokenizer.seperator=e)},E.tokenizer.resetSeperator=function(){E.tokenizer.seperator=E.tokenizer.defaultSeperator},E.tokenizer.getSeperator=function(){return E.tokenizer.seperator} /*!

              + +
              * elasticlunr.Pipeline
              +* Copyright (C) 2016 Oliver Nightingale
              +* Copyright (C) 2016 Wei Song
              +*/,E.Pipeline=function(){this._queue=[]},E.Pipeline.registeredFunctions={},E.Pipeline.registerFunction=function(e,t){t in E.Pipeline.registeredFunctions&&E.utils.warn("Overwriting existing registered function: "+t),e.label=t,E.Pipeline.registeredFunctions[t]=e},E.Pipeline.getRegisteredFunction=function(e){return e in E.Pipeline.registeredFunctions!=!0?null:E.Pipeline.registeredFunctions[e]},E.Pipeline.warnIfFunctionNotRegistered=function(e){e.label&&e.label in this.registeredFunctions||E.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",e)},E.Pipeline.load=function(e){var t=new E.Pipeline;return e.forEach((function(e){var n=E.Pipeline.getRegisteredFunction(e);if(!n)throw new Error("Cannot load un-registered function: "+e);t.add(n)})),t},E.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach((function(e){E.Pipeline.warnIfFunctionNotRegistered(e),this._queue.push(e)}),this)},E.Pipeline.prototype.after=function(e,t){E.Pipeline.warnIfFunctionNotRegistered(t);var n=this._queue.indexOf(e);if(-1===n)throw new Error("Cannot find existingFn");this._queue.splice(n+1,0,t)},E.Pipeline.prototype.before=function(e,t){E.Pipeline.warnIfFunctionNotRegistered(t);var n=this._queue.indexOf(e);if(-1===n)throw new Error("Cannot find existingFn");this._queue.splice(n,0,t)},E.Pipeline.prototype.remove=function(e){var t=this._queue.indexOf(e);-1!==t&&this._queue.splice(t,1)},E.Pipeline.prototype.run=function(e){for(var t=[],n=e.length,r=this._queue.length,i=0;i<n;i++){for(var a=e[i],o=0;o<r&&null!=(a=this._queue[o](a,i,e));o++);null!=a&&t.push(a)}return t},E.Pipeline.prototype.reset=function(){this._queue=[]},E.Pipeline.prototype.get=function(){return this._queue},E.Pipeline.prototype.toJSON=function(){return this._queue.map((function(e){return E.Pipeline.warnIfFunctionNotRegistered(e),e.label}))},
              + +

              /*!

              + +
              * elasticlunr.Index
              +* Copyright (C) 2016 Oliver Nightingale
              +* Copyright (C) 2016 Wei Song
              +*/
              + +

              E.Index=function(){this._fields=[],this._ref=“id”,this.pipeline=new E.Pipeline,this.documentStore=new E.DocumentStore,this.index={},this.eventEmitter=new E.EventEmitter,this._idfCache={},this.on(“add”,“remove”,“update”,function(){this._idfCache={}}.bind(this))},E.Index.prototype.on=function(){var e=Array.prototype.slice.call(arguments);return this.eventEmitter.addListener.apply(this.eventEmitter,e)},E.Index.prototype.off=function(e,t){return this.eventEmitter.removeListener(e,t)},E.Index.load=function(e){e.version!==E.version&&E.utils.warn(“version mismatch: current ”E.version“ importing ”+e.version);var t=new this;for(var n in t._fields=e.fields,t._ref=e.ref,t.documentStore=E.DocumentStore.load(e.documentStore),t.pipeline=E.Pipeline.load(e.pipeline),t.index={},e.index)t.index=E.InvertedIndex.load(e.index);return t},E.Index.prototype.addField=function(e){return this._fields.push(e),this.index=new E.InvertedIndex,this},E.Index.prototype.setRef=function(e){return this._ref=e,this},E.Index.prototype.saveDocument=function(e){return this.documentStore=new E.DocumentStore(e),this},E.Index.prototype.addDoc=function(e,t){if(e){t=void 0===t||t;var n=e;this.documentStore.addDoc(n,e),this._fields.forEach((function(t){var r=this.pipeline.run(E.tokenizer(e));this.documentStore.addFieldLength(n,t,r.length);var i={};for(var a in r.forEach((function(e){e in i?i+=1:i=1}),this),i){var o=i;o=Math.sqrt(o),this.index.addToken(a,{ref:n,tf:o})}}),this),t&&this.eventEmitter.emit(“add”,e,this)}},E.Index.prototype.removeDocByRef=function(e,t){if(e&&!1!==this.documentStore.isDocStored()&&this.documentStore.hasDoc(e)){var n=this.documentStore.getDoc(e);this.removeDoc(n,!1)}},E.Index.prototype.removeDoc=function(e,t){if(e){t=void 0===t||t;var n=e;this.documentStore.hasDoc(n)&&(this.documentStore.removeDoc(n),this._fields.forEach((function(t){this.pipeline.run(E.tokenizer(e)).forEach((function(e){this.index.removeToken(e,n)}),this)}),this),t&&this.eventEmitter.emit(“remove”,e,this))}},E.Index.prototype.updateDoc=function(e,t){t=void 0===t||t;this.removeDocByRef(e,!1),this.addDoc(e,!1),t&&this.eventEmitter.emit(“update”,e,this)},E.Index.prototype.idf=function(e,t){var n=“@”t“/”+e;if(Object.prototype.hasOwnProperty.call(this._idfCache,n))return this._idfCache;var r=this.index.getDocFreq(e),i=1+Math.log(this.documentStore.length/(r+1));return this._idfCache=i,i},E.Index.prototype.getFields=function(){return this._fields.slice()},E.Index.prototype.search=function(e,t){if(!e)return[];var n=null;null!=t&&(n=JSON.stringify(t));var r=new E.Configuration(n,this.getFields()).get(),i=this.pipeline.run(E.tokenizer(e)),a={};for(var o in r){var c=this.fieldSearch(i,o,r),s=r.boost;for(var u in c)c=c*s;for(var u in c)u in a?a+=c:a=c}var l=[];for(var u in a)l.push({ref:u,score:a});return l.sort((function(e,t){return t.score-e.score})),l},E.Index.prototype.fieldSearch=function(e,t,n){var r=n.bool,i=n.expand,a=n.boost,o=null,c={};if(0!==a)return e.forEach((function(e){var n=;1==i&&(n=this.index.expandToken(e));var a={};n.forEach((function(n){var i=this.index.getDocs(n),s=this.idf(n,t);if(o&&“AND”==r){var u={};for(var l in o)l in i&&(u=i);i=u}for(var l in n==e&&this.fieldSearchStats(c,n,i),i){var f=this.index.getTermFrequency(n,l),h=this.documentStore.getFieldLength(l,t),d=1;0!=h&&(d=1/Math.sqrt(h));var p=1;n!=e&&(p=.15*(1-(n.length-e.length)/n.length));var m=f*s*d*p;l in a?a+=m:a=m}}),this),o=this.mergeScores(o,a,r)}),this),o=this.coordNorm(o,c,e.length)},E.Index.prototype.mergeScores=function(e,t,n){if(!e)return t;if(“AND”==n){var r={};for(var i in t)i in e&&(r=e+t);return r}for(var i in t)i in e?e+=t:e=t;return e},E.Index.prototype.fieldSearchStats=function(e,t,n){for(var r in n)r in e?e.push(t):e=[t]},E.Index.prototype.coordNorm=function(e,t,n){for(var r in e)if(r in t){var i=t.length;e=e*i/n}return e},E.Index.prototype.toJSON=function(){var e={};return this._fields.forEach((function(t){e=this.index.toJSON()}),this),{version:E.version,fields:this._fields,ref:this._ref,documentStore:this.documentStore.toJSON(),index:e,pipeline:this.pipeline.toJSON()}},E.Index.prototype.use=function(e){var t=Array.prototype.slice.call(arguments,1);t.unshift(this),e.apply(this,t)}, /*!

              + +
              * elasticlunr.DocumentStore
              +* Copyright (C) 2016 Wei Song
              +*/
              + +

              E.DocumentStore=function(e){this._save=null==e||e,this.docs={},this.docInfo={},this.length=0},E.DocumentStore.load=function(e){var t=new this;return t.length=e.length,t.docs=e.docs,t.docInfo=e.docInfo,t._save=e.save,t},E.DocumentStore.prototype.isDocStored=function(){return this._save},E.DocumentStore.prototype.addDoc=function(e,t){this.hasDoc(e)||this.length++,!0===this._save?this.docs=function(e){if(null===e||“object”!=typeof e)return e;var t=e.constructor();for(var n in e)e.hasOwnProperty(n)&&(t=e);return t} /*!

              + +
              * elasticlunr.stemmer
              +* Copyright (C) 2016 Oliver Nightingale
              +* Copyright (C) 2016 Wei Song
              +* Includes code from - http://tartarus.org/~martin/PorterStemmer/js.txt
              +*/(t):this.docs[e]=null},E.DocumentStore.prototype.getDoc=function(e){return!1===this.hasDoc(e)?null:this.docs[e]},E.DocumentStore.prototype.hasDoc=function(e){return e in this.docs},E.DocumentStore.prototype.removeDoc=function(e){this.hasDoc(e)&&(delete this.docs[e],delete this.docInfo[e],this.length--)},E.DocumentStore.prototype.addFieldLength=function(e,t,n){null!=e&&0!=this.hasDoc(e)&&(this.docInfo[e]||(this.docInfo[e]={}),this.docInfo[e][t]=n)},E.DocumentStore.prototype.updateFieldLength=function(e,t,n){null!=e&&0!=this.hasDoc(e)&&this.addFieldLength(e,t,n)},E.DocumentStore.prototype.getFieldLength=function(e,t){return null==e?0:e in this.docs&&t in this.docInfo[e]?this.docInfo[e][t]:0},E.DocumentStore.prototype.toJSON=function(){return{docs:this.docs,docInfo:this.docInfo,length:this.length,save:this._save}},E.stemmer=(o={ational:"ate",tional:"tion",enci:"ence",anci:"ance",izer:"ize",bli:"ble",alli:"al",entli:"ent",eli:"e",ousli:"ous",ization:"ize",ation:"ate",ator:"ate",alism:"al",iveness:"ive",fulness:"ful",ousness:"ous",aliti:"al",iviti:"ive",biliti:"ble",logi:"log"},c={icate:"ic",ative:"",alize:"al",iciti:"ic",ical:"ic",ful:"",ness:""},s="[aeiouy]",u="[^aeiou][^aeiouy]*",l=new RegExp("^([^aeiou][^aeiouy]*)?[aeiouy][aeiou]*[^aeiou][^aeiouy]*"),f=new RegExp("^([^aeiou][^aeiouy]*)?[aeiouy][aeiou]*[^aeiou][^aeiouy]*[aeiouy][aeiou]*[^aeiou][^aeiouy]*"),h=new RegExp("^([^aeiou][^aeiouy]*)?[aeiouy][aeiou]*[^aeiou][^aeiouy]*([aeiouy][aeiou]*)?$"),d=new RegExp("^([^aeiou][^aeiouy]*)?[aeiouy]"),p=/^(.+?)(ss|i)es$/,m=/^(.+?)([^s])s$/,v=/^(.+?)eed$/,g=/^(.+?)(ed|ing)$/,y=/.$/,b=/(at|bl|iz)$/,w=new RegExp("([^aeiouylsz])\\1$"),x=new RegExp("^"+u+s+"[^aeiouwxy]$"),S=/^(.+?[^aeiou])y$/,k=/^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/,_=/^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/,z=/^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/,C=/^(.+?)(s|t)(ion)$/,M=/^(.+?)e$/,O=/ll$/,T=new RegExp("^"+u+s+"[^aeiouwxy]$"),function(e){var t,n,r,i,a,s,u;if(e.length<3)return e;if("y"==(r=e.substr(0,1))&&(e=r.toUpperCase()+e.substr(1)),a=m,(i=p).test(e)?e=e.replace(i,"$1$2"):a.test(e)&&(e=e.replace(a,"$1$2")),a=g,(i=v).test(e)){var E=i.exec(e);(i=l).test(E[1])&&(i=y,e=e.replace(i,""))}else a.test(e)&&(t=(E=a.exec(e))[1],(a=d).test(t)&&(s=w,u=x,(a=b).test(e=t)?e+="e":s.test(e)?(i=y,e=e.replace(i,"")):u.test(e)&&(e+="e")));return(i=S).test(e)&&(e=(t=(E=i.exec(e))[1])+"i"),(i=k).test(e)&&(t=(E=i.exec(e))[1],n=E[2],(i=l).test(t)&&(e=t+o[n])),(i=_).test(e)&&(t=(E=i.exec(e))[1],n=E[2],(i=l).test(t)&&(e=t+c[n])),a=C,(i=z).test(e)?(t=(E=i.exec(e))[1],(i=f).test(t)&&(e=t)):a.test(e)&&(t=(E=a.exec(e))[1]+E[2],(a=f).test(t)&&(e=t)),(i=M).test(e)&&(t=(E=i.exec(e))[1],a=h,s=T,((i=f).test(t)||a.test(t)&&!s.test(t))&&(e=t)),a=f,(i=O).test(e)&&a.test(e)&&(i=y,e=e.replace(i,"")),"y"==r&&(e=r.toLowerCase()+e.substr(1)),e}),E.Pipeline.registerFunction(E.stemmer,"stemmer"),
              + +

              /*!

              + +
              * elasticlunr.stopWordFilter
              +* Copyright (C) 2016 Oliver Nightingale
              +* Copyright (C) 2016 Wei Song
              +*/
              + +

              E.stopWordFilter=function(e){if(e&&!0!==E.stopWordFilter.stopWords)return e},E.clearStopWords=function(){E.stopWordFilter.stopWords={}},E.addStopWords=function(e){null!=e&&!1!==Array.isArray(e)&&e.forEach((function(e){E.stopWordFilter.stopWords=!0}),this)},E.resetStopWords=function(){E.stopWordFilter.stopWords=E.defaultStopWords},E.defaultStopWords={“”:!0,a:!0,able:!0,about:!0,across:!0,after:!0,all:!0,almost:!0,also:!0,am:!0,among:!0,an:!0,and:!0,any:!0,are:!0,as:!0,at:!0,be:!0,because:!0,been:!0,but:!0,by:!0,can:!0,cannot:!0,could:!0,dear:!0,did:!0,do:!0,does:!0,either:!0,else:!0,ever:!0,every:!0,for:!0,from:!0,get:!0,got:!0,had:!0,has:!0,have:!0,he:!0,her:!0,hers:!0,him:!0,his:!0,how:!0,however:!0,i:!0,if:!0,in:!0,into:!0,is:!0,it:!0,its:!0,just:!0,least:!0,let:!0,like:!0,likely:!0,may:!0,me:!0,might:!0,most:!0,must:!0,my:!0,neither:!0,no:!0,nor:!0,not:!0,of:!0,off:!0,often:!0,on:!0,only:!0,or:!0,other:!0,our:!0,own:!0,rather:!0,said:!0,say:!0,says:!0,she:!0,should:!0,since:!0,so:!0,some:!0,than:!0,that:!0,the:!0,their:!0,them:!0,then:!0,there:!0,these:!0,they:!0,this:!0,tis:!0,to:!0,too:!0,twas:!0,us:!0,wants:!0,was:!0,we:!0,were:!0,what:!0,when:!0,where:!0,which:!0,while:!0,who:!0,whom:!0,why:!0,will:!0,with:!0,would:!0,yet:!0,you:!0,your:!0},E.stopWordFilter.stopWords=E.defaultStopWords,E.Pipeline.registerFunction(E.stopWordFilter,“stopWordFilter”), /*!

              + +
              * elasticlunr.trimmer
              +* Copyright (C) 2016 Oliver Nightingale
              +* Copyright (C) 2016 Wei Song
              +*/
              + +

              E.trimmer=function(e){if(null==e)throw new Error(“token should not be undefined”);return e.replace(/^W+/,“”).replace(/W+$/,“”)},E.Pipeline.registerFunction(E.trimmer,“trimmer”), /*!

              + +
              * elasticlunr.InvertedIndex
              +* Copyright (C) 2016 Wei Song
              +* Includes code from - http://tartarus.org/~martin/PorterStemmer/js.txt
              +*/
              + +

              E.InvertedIndex=function(){this.root={docs:{},df:0}},E.InvertedIndex.load=function(e){var t=new this;return t.root=e.root,t},E.InvertedIndex.prototype.addToken=function(e,t,n){n=n||this.root;for(var r=0;r<=e.length-1;){var i=e;i in n||(n={docs:{},df:0}),r+=1,n=n}var a=t.ref;n.docs?n.docs={tf:t.tf}:(n.docs={tf:t.tf},n.df+=1)},E.InvertedIndex.prototype.hasToken=function(e){if(!e)return!1;for(var t=this.root,n=0;n<e.length;n++){if(!t[e])return!1;t=t[e]}return!0},E.InvertedIndex.prototype.getNode=function(e){if(!e)return null;for(var t=this.root,n=0;n<e.length;n++){if(!t[e])return null;t=t[e]}return t},E.InvertedIndex.prototype.getDocs=function(e){var t=this.getNode(e);return null==t?{}:t.docs},E.InvertedIndex.prototype.getTermFrequency=function(e,t){var n=this.getNode(e);return null==n?0:t in n.docs?n.docs.tf:0},E.InvertedIndex.prototype.getDocFreq=function(e){var t=this.getNode(e);return null==t?0:t.df},E.InvertedIndex.prototype.removeToken=function(e,t){if(e){var n=this.getNode(e);null!=n&&t in n.docs&&(delete n.docs,n.df-=1)}},E.InvertedIndex.prototype.expandToken=function(e,t,n){if(null==e||“”==e)return[];t=t||;if(null==n&&null==(n=this.getNode(e)))return t;for(var r in n.df>0&&t.push(e),n)“docs”!==r&&“df”!==r&&this.expandToken(e+r,t,n);return t},E.InvertedIndex.prototype.toJSON=function(){return{root:this.root}}, /*!

              + +
              * elasticlunr.Configuration
              +* Copyright (C) 2016 Wei Song
              +*/
              + +

              E.Configuration=function(e,t){var n;e=e||“”;if(null==t||null==t)throw new Error(“fields should not be null”);this.config={};try{n=JSON.parse(e),this.buildUserConfig(n,t)}catch(e){E.utils.warn(“user configuration parse failed, will use default configuration”),this.buildDefaultConfig(t)}},E.Configuration.prototype.buildDefaultConfig=function(e){this.reset(),e.forEach((function(e){this.config={boost:1,bool:“OR”,expand:!1}}),this)},E.Configuration.prototype.buildUserConfig=function(e,t){var n=“OR”,r=!1;if(this.reset(),“bool”in e&&(n=e.bool||n),“expand”in e&&(r=e.expand||r),“fields”in e)for(var i in e.fields)if(t.indexOf(i)>-1){var a=e.fields,o=r;null!=a.expand&&(o=a.expand),this.config={boost:a.boost||0===a.boost?a.boost:1,bool:a.bool||n,expand:o}}else E.utils.warn(“field name in user configuration not found in index instance fields”);else this.addAllFields2UserConfig(n,r,t)},E.Configuration.prototype.addAllFields2UserConfig=function(e,t,n){n.forEach((function(n){this.config={boost:1,bool:e,expand:t}}),this)},E.Configuration.prototype.get=function(){return this.config},E.Configuration.prototype.reset=function(){this.config={}}, /*!

              + +
              * lunr.SortedSet
              +* Copyright (C) 2016 Oliver Nightingale
              +*/
              + +

              lunr.SortedSet=function(){this.length=0,this.elements=[]},lunr.SortedSet.load=function(e){var t=new this;return t.elements=e,t.length=e.length,t},lunr.SortedSet.prototype.add=function(){var e,t;for(e=0;e,~this.indexOf(t)||this.elements.splice(this.locationFor(t),0,t);this.length=this.elements.length},lunr.SortedSet.prototype.toArray=function(){return this.elements.slice()},lunr.SortedSet.prototype.map=function(e,t){return this.elements.map(e,t)},lunr.SortedSet.prototype.forEach=function(e,t){return this.elements.forEach(e,t)},lunr.SortedSet.prototype.indexOf=function(e){for(var t=0,n=this.elements.length,r=n-t,i=t+Math.floor(r/2),a=this.elements;r>1;){if(a===e)return i;ae&&(n=i),r=n-t,i=t+Math.floor(r/2),a=this.elements}return a===e?i:-1},lunr.SortedSet.prototype.locationFor=function(e){for(var t=0,n=this.elements.length,r=n-t,i=t+Math.floor(r/2),a=this.elements;r>1;)ae&&(n=i),r=n-t,i=t+Math.floor(r/2),a=this.elements;return a>e?i:a<e?i+1:void 0},lunr.SortedSet.prototype.intersect=function(e){for(var t=new lunr.SortedSet,n=0,r=0,i=this.length,a=e.length,o=this.elements,c=e.elements;!(n>i-1||r>a-1);)o!==c?o<c?n++:o>c&&r++:(t.add(o),n++,r++);return t},lunr.SortedSet.prototype.clone=function(){var e=new lunr.SortedSet;return e.elements=this.toArray(),e.length=e.elements.length,e},lunr.SortedSet.prototype.union=function(e){var t,n,r;this.length>=e.length?(t=this,n=e):(t=e,n=this),r=t.clone();for(var i=0,a=n.toArray();i);return r},lunr.SortedSet.prototype.toJSON=function(){return this.toArray()},void 0===(i=“function”==typeof(r=function(){return E})?r.call(t,n,t,e):r)||(e.exports=i)}()},function(e,t,n){“use strict”;var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,“__esModule”,{value:!0});var i=r(n(0)),a=r(n(136)),o=r(n(137)),c=r(n(8));t.default=function(e){var t=e.description,n=a.default(t),r=o.default(n);return i.default.createElement(c.default,{className:“cucumber-description”,text:r,htmlText:!0})}},function(e,t){var n,r,i=e.exports={};function a(){throw new Error(“setTimeout has not been defined”)}function o(){throw new Error(“clearTimeout has not been defined”)}function c(e){if(n===setTimeout)return setTimeout(e,0);if((n===a||!n)&&setTimeout)return n=setTimeout,setTimeout(e,0);try{return n(e,0)}catch(t){try{return n.call(null,e,0)}catch(t){return n.call(this,e,0)}}}!function(){try{n=“function”==typeof setTimeout?setTimeout:a}catch(e){n=a}try{r=“function”==typeof clearTimeout?clearTimeout:o}catch(e){r=o}}();var s,u=[],l=!1,f=-1;function h(){l&&s&&(l=!1,s.length?u=s.concat(u):f=-1,u.length&&d())}function d(){if(!l){var e=c(h);l=!0;for(var t=u.length;t;){for(s=u,u=[];++f.run();f=-1,t=u.length}s=null,l=!1,function(e){if(r===clearTimeout)return clearTimeout(e);if((r===o||!r)&&clearTimeout)return r=clearTimeout,clearTimeout(e);try{r(e)}catch(t){try{return r.call(null,e)}catch(t){return r.call(this,e)}}}(e)}}function p(e,t){this.fun=e,this.array=t}function m(){}i.nextTick=function(e){var t=new Array(arguments.length-1);if(arguments.length>1)for(var n=1;n=arguments;u.push(new p(e,t)),1!==u.length||l||c(d)},p.prototype.run=function(){this.fun.apply(null,this.array)},i.title=“browser”,i.browser=!0,i.env={},i.argv=[],i.version=“”,i.versions={},i.on=m,i.addListener=m,i.once=m,i.off=m,i.removeListener=m,i.removeAllListeners=m,i.emit=m,i.prependListener=m,i.prependOnceListener=m,i.listeners=function(e){return},i.binding=function(e){throw new Error(“process.binding is not supported”)},i.cwd=function(){return“/”},i.chdir=function(e){throw new Error(“process.chdir is not supported”)},i.umask=function(){return 0}},function(e,t,n){“use strict”;(function(t){void 0===t||!t.version||0===t.version.indexOf(“v0.”)||0===t.version.indexOf(“v1.”)&&0!==t.version.indexOf(“v1.8.”)?e.exports={nextTick:function(e,n,r,i){if(“function”!=typeof e)throw new TypeError('“callback” argument must be a function');var a,o,c=arguments.length;switch©{case 0:case 1:return t.nextTick(e);case 2:return t.nextTick((function(){e.call(null,n)}));case 3:return t.nextTick((function(){e.call(null,n,r)}));case 4:return t.nextTick((function(){e.call(null,n,r,i)}));default:for(a=new Array(c-1),o=0;o=arguments;return t.nextTick((function(){e.apply(null,a)}))}}}:e.exports=t}).call(this,n(24))},function(e,t,n){var r=n(19),i=r.Buffer;function a(e,t){for(var n in e)t=e}function o(e,t,n){return i(e,t,n)}i.from&&i.alloc&&i.allocUnsafe&&i.allocUnsafeSlow?e.exports=r:(a(r,t),t.Buffer=o),a(i,o),o.from=function(e,t,n){if(“number”==typeof e)throw new TypeError(“Argument must not be a number”);return i(e,t,n)},o.alloc=function(e,t,n){if(“number”!=typeof e)throw new TypeError(“Argument must be a number”);var r=i(e);return void 0!==t?“string”==typeof n?r.fill(t,n):r.fill(t):r.fill(0),r},o.allocUnsafe=function(e){if(“number”!=typeof e)throw new TypeError(“Argument must be a number”);return i(e)},o.allocUnsafeSlow=function(e){if(“number”!=typeof e)throw new TypeError(“Argument must be a number”);return r.SlowBuffer(e)}},function(e,t,n){“use strict”;e.exports=o;var r=n(16);((o.prototype=Object.create(r.prototype)).constructor=o).className=“OneOf”;var i=n(11),a=n(3);function o(e,t,n,i){if(Array.isArray(t)||(n=t,t=void 0),r.call(this,e,n),void 0!==t&&!Array.isArray(t))throw TypeError(“fieldNames must be an Array”);this.oneof=t||[],this.fieldsArray=,this.comment=i}function c(e){if(e.parent)for(var t=0;t.parent||e.parent.add(e.fieldsArray)}o.fromJSON=function(e,t){return new o(e,t.oneof,t.options,t.comment)},o.prototype.toJSON=function(e){var t=!!e&&Boolean(e.keepComments);return a.toObject([“options”,this.options,“oneof”,this.oneof,“comment”,t?this.comment:void 0])},o.prototype.add=function(e){if(!(e instanceof i))throw TypeError(“field must be a Field”);return e.parent&&e.parent!==this.parent&&e.parent.remove(e),this.oneof.push(e.name),this.fieldsArray.push(e),e.partOf=this,c(this),this},o.prototype.remove=function(e){if(!(e instanceof i))throw TypeError(“field must be a Field”);var t=this.fieldsArray.indexOf(e);if(t<0)throw Error(e+“ is not a member of ”+this);return this.fieldsArray.splice(t,1),(t=this.oneof.indexOf(e.name))>-1&&this.oneof.splice(t,1),e.partOf=null,this},o.prototype.onAdd=function(e){r.prototype.onAdd.call(this,e);for(var t=0;t<this.oneof.length;++t){var n=e.get(this.oneof);n&&!n.partOf&&(n.partOf=this,this.fieldsArray.push(n))}c(this)},o.prototype.onRemove=function(e){for(var t,n=0;n).parent&&t.parent.remove(t);r.prototype.onRemove.call(this,e)},o.d=function(){for(var e=new Array(arguments.length),t=0;t=arguments;return function(t,n){a.decorateType(t.constructor).add(new o(n,e)),Object.defineProperty(t,n,{get:a.oneOfGetter(e),set:a.oneOfSetter(e)})}}},function(e,t,n){“use strict”;var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,“__esModule”,{value:!0});var i=r(n(0));t.default=i.default.createContext({query:“”})},function(e,t,n){“use strict”;Object.defineProperty(t,“__esModule”,{value:!0});var r=function(){function e(){this.generatedIds=[]}return e.prototype.generate=function(e){var t=e.toLowerCase().replace(/+/g,“-”);if(t.match(/^-*$/)&&(t=“id”),!this.idAlreadyUsed(t))return this.generatedIds.push(t),t;for(var n=1;this.idAlreadyUsed(t+“-”+n);)n+=1;return this.generatedIds.push(t+“-”+n),t+“-”+n},e.prototype.idAlreadyUsed=function(e){return this.generatedIds.includes(e)},e}();t.default=r},function(e,t,n){“use strict”;var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,“__esModule”,{value:!0}),t.RuleType=t.TokenType=void 0;var i,a=n(31),o=r(n(80)),c=r(n(81));!function(e){e=“None”,e=“EOF”,e=“Empty”,e=“Comment”,e=“TagLine”,e=“FeatureLine”,e=“RuleLine”,e=“BackgroundLine”,e=“ScenarioLine”,e=“ExamplesLine”,e=“StepLine”,e=“DocStringSeparator”,e=“TableRow”,e=“Language”,e=“Other”}(t.TokenType||(t.TokenType={})),function(e){e=“None”,e=“_EOF”,e=“_Empty”,e=“_Comment”,e=“_TagLine”,e=“_FeatureLine”,e=“_RuleLine”,e=“_BackgroundLine”,e=“_ScenarioLine”,e=“_ExamplesLine”,e=“_StepLine”,e=“_DocStringSeparator”,e=“_TableRow”,e=“_Language”,e=“_Other”,e=“GherkinDocument”,e=“Feature”,e=“FeatureHeader”,e=“Rule”,e=“RuleHeader”,e=“Background”,e=“ScenarioDefinition”,e=“Scenario”,e=“ExamplesDefinition”,e=“Examples”,e=“ExamplesTable”,e=“Step”,e=“StepArg”,e=“DataTable”,e=“DocString”,e=“Tags”,e=“DescriptionHelper”,e=“Description”}(i=t.RuleType||(t.RuleType={}));var s=function(){function e(e){this.builder=e,this.stopAtFirstError=!1}return e.prototype.parse=function(e,t){void 0===t&&(t=new c.default);var n=new o.default(e);this.builder.reset(),t.reset(),this.context={tokenScanner:n,tokenMatcher:t,tokenQueue:[],errors:},this.startRule(this.context,i.GherkinDocument);for(var r=0,s=null;s=this.readToken(this.context),r=this.matchToken(r,s,this.context),!s.isEof;);if(this.endRule(this.context),this.context.errors.length>0)throw a.CompositeParserException.create(this.context.errors);return this.getResult()},e.prototype.addError=function(e,t){if(e.errors.push(t),e.errors.length>10)throw a.CompositeParserException.create(e.errors)},e.prototype.startRule=function(e,t){var n=this;this.handleAstError(e,(function(){return n.builder.startRule(t)}))},e.prototype.endRule=function(e){var t=this;this.handleAstError(e,(function(){return t.builder.endRule()}))},e.prototype.build=function(e,t){var n=this;this.handleAstError(e,(function(){return n.builder.build(t)}))},e.prototype.getResult=function(){return this.builder.getResult()},e.prototype.handleAstError=function(e,t){this.handleExternalError(e,!0,t)},e.prototype.handleExternalError=function(e,t,n){var r=this;if(this.stopAtFirstError)return n();try{return n()}catch(t){if(t instanceof a.CompositeParserException)t.errors.forEach((function(t){return r.addError(e,t)}));else{if(!(t instanceof a.ParserException||t instanceof a.AstBuilderException||t instanceof a.UnexpectedTokenException||t instanceof a.NoSuchLanguageException))throw t;this.addError(e,t)}}return t},e.prototype.readToken=function(e){return e.tokenQueue.length>0?e.tokenQueue.shift():e.tokenScanner.read()},e.prototype.matchToken=function(e,t,n){switch(e){case 0:return this.matchTokenAt_0(t,n);case 1:return this.matchTokenAt_1(t,n);case 2:return this.matchTokenAt_2(t,n);case 3:return this.matchTokenAt_3(t,n);case 4:return this.matchTokenAt_4(t,n);case 5:return this.matchTokenAt_5(t,n);case 6:return this.matchTokenAt_6(t,n);case 7:return this.matchTokenAt_7(t,n);case 8:return this.matchTokenAt_8(t,n);case 9:return this.matchTokenAt_9(t,n);case 10:return this.matchTokenAt_10(t,n);case 11:return this.matchTokenAt_11(t,n);case 12:return this.matchTokenAt_12(t,n);case 13:return this.matchTokenAt_13(t,n);case 14:return this.matchTokenAt_14(t,n);case 15:return this.matchTokenAt_15(t,n);case 16:return this.matchTokenAt_16(t,n);case 17:return this.matchTokenAt_17(t,n);case 18:return this.matchTokenAt_18(t,n);case 19:return this.matchTokenAt_19(t,n);case 20:return this.matchTokenAt_20(t,n);case 21:return this.matchTokenAt_21(t,n);case 22:return this.matchTokenAt_22(t,n);case 23:return this.matchTokenAt_23(t,n);case 24:return this.matchTokenAt_24(t,n);case 25:return this.matchTokenAt_25(t,n);case 26:return this.matchTokenAt_26(t,n);case 27:return this.matchTokenAt_27(t,n);case 28:return this.matchTokenAt_28(t,n);case 29:return this.matchTokenAt_29(t,n);case 30:return this.matchTokenAt_30(t,n);case 31:return this.matchTokenAt_31(t,n);case 32:return this.matchTokenAt_32(t,n);case 33:return this.matchTokenAt_33(t,n);case 34:return this.matchTokenAt_34(t,n);case 35:return this.matchTokenAt_35(t,n);case 36:return this.matchTokenAt_36(t,n);case 37:return this.matchTokenAt_37(t,n);case 38:return this.matchTokenAt_38(t,n);case 39:return this.matchTokenAt_39(t,n);case 40:return this.matchTokenAt_40(t,n);case 42:return this.matchTokenAt_42(t,n);case 43:return this.matchTokenAt_43(t,n);case 44:return this.matchTokenAt_44(t,n);case 45:return this.matchTokenAt_45(t,n);case 46:return this.matchTokenAt_46(t,n);case 47:return this.matchTokenAt_47(t,n);case 48:return this.matchTokenAt_48(t,n);case 49:return this.matchTokenAt_49(t,n);default:throw new Error(“Unknown state: ”+e)}},e.prototype.matchTokenAt_0=function(e,t){if(this.match_EOF(t,e))return this.build(t,e),41;if(this.match_Language(t,e))return this.startRule(t,i.Feature),this.startRule(t,i.FeatureHeader),this.build(t,e),1;if(this.match_TagLine(t,e))return this.startRule(t,i.Feature),this.startRule(t,i.FeatureHeader),this.startRule(t,i.Tags),this.build(t,e),2;if(this.match_FeatureLine(t,e))return this.startRule(t,i.Feature),this.startRule(t,i.FeatureHeader),this.build(t,e),3;if(this.match_Comment(t,e))return this.build(t,e),0;if(this.match_Empty(t,e))return this.build(t,e),0;e.detach();var n=,r=e.isEof?a.UnexpectedEOFException.create(e,n):a.UnexpectedTokenException.create(e,n);if(this.stopAtFirstError)throw r;return this.addError(t,r),0},e.prototype.matchTokenAt_1=function(e,t){if(this.match_TagLine(t,e))return this.startRule(t,i.Tags),this.build(t,e),2;if(this.match_FeatureLine(t,e))return this.build(t,e),3;if(this.match_Comment(t,e))return this.build(t,e),1;if(this.match_Empty(t,e))return this.build(t,e),1;e.detach();var n=,r=e.isEof?a.UnexpectedEOFException.create(e,n):a.UnexpectedTokenException.create(e,n);if(this.stopAtFirstError)throw r;return this.addError(t,r),1},e.prototype.matchTokenAt_2=function(e,t){if(this.match_TagLine(t,e))return this.build(t,e),2;if(this.match_FeatureLine(t,e))return this.endRule(t),this.build(t,e),3;if(this.match_Comment(t,e))return this.build(t,e),2;if(this.match_Empty(t,e))return this.build(t,e),2;e.detach();var n=,r=e.isEof?a.UnexpectedEOFException.create(e,n):a.UnexpectedTokenException.create(e,n);if(this.stopAtFirstError)throw r;return this.addError(t,r),2},e.prototype.matchTokenAt_3=function(e,t){if(this.match_EOF(t,e))return this.endRule(t),this.endRule(t),this.build(t,e),41;if(this.match_Empty(t,e))return this.build(t,e),3;if(this.match_Comment(t,e))return this.build(t,e),5;if(this.match_BackgroundLine(t,e))return this.endRule(t),this.startRule(t,i.Background),this.build(t,e),6;if(this.match_TagLine(t,e))return this.endRule(t),this.startRule(t,i.ScenarioDefinition),this.startRule(t,i.Tags),this.build(t,e),11;if(this.match_ScenarioLine(t,e))return this.endRule(t),this.startRule(t,i.ScenarioDefinition),this.startRule(t,i.Scenario),this.build(t,e),12;if(this.match_RuleLine(t,e))return this.endRule(t),this.startRule(t,i.Rule),this.startRule(t,i.RuleHeader),this.build(t,e),22;if(this.match_Other(t,e))return this.startRule(t,i.Description),this.build(t,e),4;e.detach();var n=,r=e.isEof?a.UnexpectedEOFException.create(e,n):a.UnexpectedTokenException.create(e,n);if(this.stopAtFirstError)throw r;return this.addError(t,r),3},e.prototype.matchTokenAt_4=function(e,t){if(this.match_EOF(t,e))return this.endRule(t),this.endRule(t),this.endRule(t),this.build(t,e),41;if(this.match_Comment(t,e))return this.endRule(t),this.build(t,e),5;if(this.match_BackgroundLine(t,e))return this.endRule(t),this.endRule(t),this.startRule(t,i.Background),this.build(t,e),6;if(this.match_TagLine(t,e))return this.endRule(t),this.endRule(t),this.startRule(t,i.ScenarioDefinition),this.startRule(t,i.Tags),this.build(t,e),11;if(this.match_ScenarioLine(t,e))return this.endRule(t),this.endRule(t),this.startRule(t,i.ScenarioDefinition),this.startRule(t,i.Scenario),this.build(t,e),12;if(this.match_RuleLine(t,e))return this.endRule(t),this.endRule(t),this.startRule(t,i.Rule),this.startRule(t,i.RuleHeader),this.build(t,e),22;if(this.match_Other(t,e))return this.build(t,e),4;e.detach();var n=,r=e.isEof?a.UnexpectedEOFException.create(e,n):a.UnexpectedTokenException.create(e,n);if(this.stopAtFirstError)throw r;return this.addError(t,r),4},e.prototype.matchTokenAt_5=function(e,t){if(this.match_EOF(t,e))return this.endRule(t),this.endRule(t),this.build(t,e),41;if(this.match_Comment(t,e))return this.build(t,e),5;if(this.match_BackgroundLine(t,e))return this.endRule(t),this.startRule(t,i.Background),this.build(t,e),6;if(this.match_TagLine(t,e))return this.endRule(t),this.startRule(t,i.ScenarioDefinition),this.startRule(t,i.Tags),this.build(t,e),11;if(this.match_ScenarioLine(t,e))return this.endRule(t),this.startRule(t,i.ScenarioDefinition),this.startRule(t,i.Scenario),this.build(t,e),12;if(this.match_RuleLine(t,e))return this.endRule(t),this.startRule(t,i.Rule),this.startRule(t,i.RuleHeader),this.build(t,e),22;if(this.match_Empty(t,e))return this.build(t,e),5;e.detach();var n=,r=e.isEof?a.UnexpectedEOFException.create(e,n):a.UnexpectedTokenException.create(e,n);if(this.stopAtFirstError)throw r;return this.addError(t,r),5},e.prototype.matchTokenAt_6=function(e,t){if(this.match_EOF(t,e))return this.endRule(t),this.endRule(t),this.build(t,e),41;if(this.match_Empty(t,e))return this.build(t,e),6;if(this.match_Comment(t,e))return this.build(t,e),8;if(this.match_StepLine(t,e))return this.startRule(t,i.Step),this.build(t,e),9;if(this.match_TagLine(t,e))return this.endRule(t),this.startRule(t,i.ScenarioDefinition),this.startRule(t,i.Tags),this.build(t,e),11;if(this.match_ScenarioLine(t,e))return this.endRule(t),this.startRule(t,i.ScenarioDefinition),this.startRule(t,i.Scenario),this.build(t,e),12;if(this.match_RuleLine(t,e))return this.endRule(t),this.startRule(t,i.Rule),this.startRule(t,i.RuleHeader),this.build(t,e),22;if(this.match_Other(t,e))return this.startRule(t,i.Description),this.build(t,e),7;e.detach();var n=,r=e.isEof?a.UnexpectedEOFException.create(e,n):a.UnexpectedTokenException.create(e,n);if(this.stopAtFirstError)throw r;return this.addError(t,r),6},e.prototype.matchTokenAt_7=function(e,t){if(this.match_EOF(t,e))return this.endRule(t),this.endRule(t),this.endRule(t),this.build(t,e),41;if(this.match_Comment(t,e))return this.endRule(t),this.build(t,e),8;if(this.match_StepLine(t,e))return this.endRule(t),this.startRule(t,i.Step),this.build(t,e),9;if(this.match_TagLine(t,e))return this.endRule(t),this.endRule(t),this.startRule(t,i.ScenarioDefinition),this.startRule(t,i.Tags),this.build(t,e),11;if(this.match_ScenarioLine(t,e))return this.endRule(t),this.endRule(t),this.startRule(t,i.ScenarioDefinition),this.startRule(t,i.Scenario),this.build(t,e),12;if(this.match_RuleLine(t,e))return this.endRule(t),this.endRule(t),this.startRule(t,i.Rule),this.startRule(t,i.RuleHeader),this.build(t,e),22;if(this.match_Other(t,e))return this.build(t,e),7;e.detach();var n=,r=e.isEof?a.UnexpectedEOFException.create(e,n):a.UnexpectedTokenException.create(e,n);if(this.stopAtFirstError)throw r;return this.addError(t,r),7},e.prototype.matchTokenAt_8=function(e,t){if(this.match_EOF(t,e))return this.endRule(t),this.endRule(t),this.build(t,e),41;if(this.match_Comment(t,e))return this.build(t,e),8;if(this.match_StepLine(t,e))return this.startRule(t,i.Step),this.build(t,e),9;if(this.match_TagLine(t,e))return this.endRule(t),this.startRule(t,i.ScenarioDefinition),this.startRule(t,i.Tags),this.build(t,e),11;if(this.match_ScenarioLine(t,e))return this.endRule(t),this.startRule(t,i.ScenarioDefinition),this.startRule(t,i.Scenario),this.build(t,e),12;if(this.match_RuleLine(t,e))return this.endRule(t),this.startRule(t,i.Rule),this.startRule(t,i.RuleHeader),this.build(t,e),22;if(this.match_Empty(t,e))return this.build(t,e),8;e.detach();var n=,r=e.isEof?a.UnexpectedEOFException.create(e,n):a.UnexpectedTokenException.create(e,n);if(this.stopAtFirstError)throw r;return this.addError(t,r),8},e.prototype.matchTokenAt_9=function(e,t){if(this.match_EOF(t,e))return this.endRule(t),this.endRule(t),this.endRule(t),this.build(t,e),41;if(this.match_TableRow(t,e))return this.startRule(t,i.DataTable),this.build(t,e),10;if(this.match_DocStringSeparator(t,e))return this.startRule(t,i.DocString),this.build(t,e),48;if(this.match_StepLine(t,e))return this.endRule(t),this.startRule(t,i.Step),this.build(t,e),9;if(this.match_TagLine(t,e))return this.endRule(t),this.endRule(t),this.startRule(t,i.ScenarioDefinition),this.startRule(t,i.Tags),this.build(t,e),11;if(this.match_ScenarioLine(t,e))return this.endRule(t),this.endRule(t),this.startRule(t,i.ScenarioDefinition),this.startRule(t,i.Scenario),this.build(t,e),12;if(this.match_RuleLine(t,e))return this.endRule(t),this.endRule(t),this.startRule(t,i.Rule),this.startRule(t,i.RuleHeader),this.build(t,e),22;if(this.match_Comment(t,e))return this.build(t,e),9;if(this.match_Empty(t,e))return this.build(t,e),9;e.detach();var n=,r=e.isEof?a.UnexpectedEOFException.create(e,n):a.UnexpectedTokenException.create(e,n);if(this.stopAtFirstError)throw r;return this.addError(t,r),9},e.prototype.matchTokenAt_10=function(e,t){if(this.match_EOF(t,e))return this.endRule(t),this.endRule(t),this.endRule(t),this.endRule(t),this.build(t,e),41;if(this.match_TableRow(t,e))return this.build(t,e),10;if(this.match_StepLine(t,e))return this.endRule(t),this.endRule(t),this.startRule(t,i.Step),this.build(t,e),9;if(this.match_TagLine(t,e))return this.endRule(t),this.endRule(t),this.endRule(t),this.startRule(t,i.ScenarioDefinition),this.startRule(t,i.Tags),this.build(t,e),11;if(this.match_ScenarioLine(t,e))return this.endRule(t),this.endRule(t),this.endRule(t),this.startRule(t,i.ScenarioDefinition),this.startRule(t,i.Scenario),this.build(t,e),12;if(this.match_RuleLine(t,e))return this.endRule(t),this.endRule(t),this.endRule(t),this.startRule(t,i.Rule),this.startRule(t,i.RuleHeader),this.build(t,e),22;if(this.match_Comment(t,e))return this.build(t,e),10;if(this.match_Empty(t,e))return this.build(t,e),10;e.detach();var n=,r=e.isEof?a.UnexpectedEOFException.create(e,n):a.UnexpectedTokenException.create(e,n);if(this.stopAtFirstError)throw r;return this.addError(t,r),10},e.prototype.matchTokenAt_11=function(e,t){if(this.match_TagLine(t,e))return this.build(t,e),11;if(this.match_ScenarioLine(t,e))return this.endRule(t),this.startRule(t,i.Scenario),this.build(t,e),12;if(this.match_Comment(t,e))return this.build(t,e),11;if(this.match_Empty(t,e))return this.build(t,e),11;e.detach();var n=,r=e.isEof?a.UnexpectedEOFException.create(e,n):a.UnexpectedTokenException.create(e,n);if(this.stopAtFirstError)throw r;return this.addError(t,r),11},e.prototype.matchTokenAt_12=function(e,t){if(this.match_EOF(t,e))return this.endRule(t),this.endRule(t),this.endRule(t),this.build(t,e),41;if(this.match_Empty(t,e))return this.build(t,e),12;if(this.match_Comment(t,e))return this.build(t,e),14;if(this.match_StepLine(t,e))return this.startRule(t,i.Step),this.build(t,e),15;if(this.match_TagLine(t,e)&&this.lookahead_0(t,e))return this.startRule(t,i.ExamplesDefinition),this.startRule(t,i.Tags),this.build(t,e),17;if(this.match_TagLine(t,e))return this.endRule(t),this.endRule(t),this.startRule(t,i.ScenarioDefinition),this.startRule(t,i.Tags),this.build(t,e),11;if(this.match_ExamplesLine(t,e))return this.startRule(t,i.ExamplesDefinition),this.startRule(t,i.Examples),this.build(t,e),18;if(this.match_ScenarioLine(t,e))return this.endRule(t),this.endRule(t),this.startRule(t,i.ScenarioDefinition),this.startRule(t,i.Scenario),this.build(t,e),12;if(this.match_RuleLine(t,e))return this.endRule(t),this.endRule(t),this.startRule(t,i.Rule),this.startRule(t,i.RuleHeader),this.build(t,e),22;if(this.match_Other(t,e))return this.startRule(t,i.Description),this.build(t,e),13;e.detach();var n=,r=e.isEof?a.UnexpectedEOFException.create(e,n):a.UnexpectedTokenException.create(e,n);if(this.stopAtFirstError)throw r;return this.addError(t,r),12},e.prototype.matchTokenAt_13=function(e,t){if(this.match_EOF(t,e))return this.endRule(t),this.endRule(t),this.endRule(t),this.endRule(t),this.build(t,e),41;if(this.match_Comment(t,e))return this.endRule(t),this.build(t,e),14;if(this.match_StepLine(t,e))return this.endRule(t),this.startRule(t,i.Step),this.build(t,e),15;if(this.match_TagLine(t,e)&&this.lookahead_0(t,e))return this.endRule(t),this.startRule(t,i.ExamplesDefinition),this.startRule(t,i.Tags),this.build(t,e),17;if(this.match_TagLine(t,e))return this.endRule(t),this.endRule(t),this.endRule(t),this.startRule(t,i.ScenarioDefinition),this.startRule(t,i.Tags),this.build(t,e),11;if(this.match_ExamplesLine(t,e))return this.endRule(t),this.startRule(t,i.ExamplesDefinition),this.startRule(t,i.Examples),this.build(t,e),18;if(this.match_ScenarioLine(t,e))return this.endRule(t),this.endRule(t),this.endRule(t),this.startRule(t,i.ScenarioDefinition),this.startRule(t,i.Scenario),this.build(t,e),12;if(this.match_RuleLine(t,e))return this.endRule(t),this.endRule(t),this.endRule(t),this.startRule(t,i.Rule),this.startRule(t,i.RuleHeader),this.build(t,e),22;if(this.match_Other(t,e))return this.build(t,e),13;e.detach();var n=,r=e.isEof?a.UnexpectedEOFException.create(e,n):a.UnexpectedTokenException.create(e,n);if(this.stopAtFirstError)throw r;return this.addError(t,r),13},e.prototype.matchTokenAt_14=function(e,t){if(this.match_EOF(t,e))return this.endRule(t),this.endRule(t),this.endRule(t),this.build(t,e),41;if(this.match_Comment(t,e))return this.build(t,e),14;if(this.match_StepLine(t,e))return this.startRule(t,i.Step),this.build(t,e),15;if(this.match_TagLine(t,e)&&this.lookahead_0(t,e))return this.startRule(t,i.ExamplesDefinition),this.startRule(t,i.Tags),this.build(t,e),17;if(this.match_TagLine(t,e))return this.endRule(t),this.endRule(t),this.startRule(t,i.ScenarioDefinition),this.startRule(t,i.Tags),this.build(t,e),11;if(this.match_ExamplesLine(t,e))return this.startRule(t,i.ExamplesDefinition),this.startRule(t,i.Examples),this.build(t,e),18;if(this.match_ScenarioLine(t,e))return this.endRule(t),this.endRule(t),this.startRule(t,i.ScenarioDefinition),this.startRule(t,i.Scenario),this.build(t,e),12;if(this.match_RuleLine(t,e))return this.endRule(t),this.endRule(t),this.startRule(t,i.Rule),this.startRule(t,i.RuleHeader),this.build(t,e),22;if(this.match_Empty(t,e))return this.build(t,e),14;e.detach();var n=,r=e.isEof?a.UnexpectedEOFException.create(e,n):a.UnexpectedTokenException.create(e,n);if(this.stopAtFirstError)throw r;return this.addError(t,r),14},e.prototype.matchTokenAt_15=function(e,t){if(this.match_EOF(t,e))return this.endRule(t),this.endRule(t),this.endRule(t),this.endRule(t),this.build(t,e),41;if(this.match_TableRow(t,e))return this.startRule(t,i.DataTable),this.build(t,e),16;if(this.match_DocStringSeparator(t,e))return this.startRule(t,i.DocString),this.build(t,e),46;if(this.match_StepLine(t,e))return this.endRule(t),this.startRule(t,i.Step),this.build(t,e),15;if(this.match_TagLine(t,e)&&this.lookahead_0(t,e))return this.endRule(t),this.startRule(t,i.ExamplesDefinition),this.startRule(t,i.Tags),this.build(t,e),17;if(this.match_TagLine(t,e))return this.endRule(t),this.endRule(t),this.endRule(t),this.startRule(t,i.ScenarioDefinition),this.startRule(t,i.Tags),this.build(t,e),11;if(this.match_ExamplesLine(t,e))return this.endRule(t),this.startRule(t,i.ExamplesDefinition),this.startRule(t,i.Examples),this.build(t,e),18;if(this.match_ScenarioLine(t,e))return this.endRule(t),this.endRule(t),this.endRule(t),this.startRule(t,i.ScenarioDefinition),this.startRule(t,i.Scenario),this.build(t,e),12;if(this.match_RuleLine(t,e))return this.endRule(t),this.endRule(t),this.endRule(t),this.startRule(t,i.Rule),this.startRule(t,i.RuleHeader),this.build(t,e),22;if(this.match_Comment(t,e))return this.build(t,e),15;if(this.match_Empty(t,e))return this.build(t,e),15;e.detach();var n=,r=e.isEof?a.UnexpectedEOFException.create(e,n):a.UnexpectedTokenException.create(e,n);if(this.stopAtFirstError)throw r;return this.addError(t,r),15},e.prototype.matchTokenAt_16=function(e,t){if(this.match_EOF(t,e))return this.endRule(t),this.endRule(t),this.endRule(t),this.endRule(t),this.endRule(t),this.build(t,e),41;if(this.match_TableRow(t,e))return this.build(t,e),16;if(this.match_StepLine(t,e))return this.endRule(t),this.endRule(t),this.startRule(t,i.Step),this.build(t,e),15;if(this.match_TagLine(t,e)&&this.lookahead_0(t,e))return this.endRule(t),this.endRule(t),this.startRule(t,i.ExamplesDefinition),this.startRule(t,i.Tags),this.build(t,e),17;if(this.match_TagLine(t,e))return this.endRule(t),this.endRule(t),this.endRule(t),this.endRule(t),this.startRule(t,i.ScenarioDefinition),this.startRule(t,i.Tags),this.build(t,e),11;if(this.match_ExamplesLine(t,e))return this.endRule(t),this.endRule(t),this.startRule(t,i.ExamplesDefinition),this.startRule(t,i.Examples),this.build(t,e),18;if(this.match_ScenarioLine(t,e))return this.endRule(t),this.endRule(t),this.endRule(t),this.endRule(t),this.startRule(t,i.ScenarioDefinition),this.startRule(t,i.Scenario),this.build(t,e),12;if(this.match_RuleLine(t,e))return this.endRule(t),this.endRule(t),this.endRule(t),this.endRule(t),this.startRule(t,i.Rule),this.startRule(t,i.RuleHeader),this.build(t,e),22;if(this.match_Comment(t,e))return this.build(t,e),16;if(this.match_Empty(t,e))return this.build(t,e),16;e.detach();var n=,r=e.isEof?a.UnexpectedEOFException.create(e,n):a.UnexpectedTokenException.create(e,n);if(this.stopAtFirstError)throw r;return this.addError(t,r),16},e.prototype.matchTokenAt_17=function(e,t){if(this.match_TagLine(t,e))return this.build(t,e),17;if(this.match_ExamplesLine(t,e))return this.endRule(t),this.startRule(t,i.Examples),this.build(t,e),18;if(this.match_Comment(t,e))return this.build(t,e),17;if(this.match_Empty(t,e))return this.build(t,e),17;e.detach();var n=,r=e.isEof?a.UnexpectedEOFException.create(e,n):a.UnexpectedTokenException.create(e,n);if(this.stopAtFirstError)throw r;return this.addError(t,r),17},e.prototype.matchTokenAt_18=function(e,t){if(this.match_EOF(t,e))return this.endRule(t),this.endRule(t),this.endRule(t),this.endRule(t),this.endRule(t),this.build(t,e),41;if(this.match_Empty(t,e))return this.build(t,e),18;if(this.match_Comment(t,e))return this.build(t,e),20;if(this.match_TableRow(t,e))return this.startRule(t,i.ExamplesTable),this.build(t,e),21;if(this.match_TagLine(t,e)&&this.lookahead_0(t,e))return this.endRule(t),this.endRule(t),this.startRule(t,i.ExamplesDefinition),this.startRule(t,i.Tags),this.build(t,e),17;if(this.match_TagLine(t,e))return this.endRule(t),this.endRule(t),this.endRule(t),this.endRule(t),this.startRule(t,i.ScenarioDefinition),this.startRule(t,i.Tags),this.build(t,e),11;if(this.match_ExamplesLine(t,e))return this.endRule(t),this.endRule(t),this.startRule(t,i.ExamplesDefinition),this.startRule(t,i.Examples),this.build(t,e),18;if(this.match_ScenarioLine(t,e))return this.endRule(t),this.endRule(t),this.endRule(t),this.endRule(t),this.startRule(t,i.ScenarioDefinition),this.startRule(t,i.Scenario),this.build(t,e),12;if(this.match_RuleLine(t,e))return this.endRule(t),this.endRule(t),this.endRule(t),this.endRule(t),this.startRule(t,i.Rule),this.startRule(t,i.RuleHeader),this.build(t,e),22;if(this.match_Other(t,e))return this.startRule(t,i.Description),this.build(t,e),19;e.detach();var n=,r=e.isEof?a.UnexpectedEOFException.create(e,n):a.UnexpectedTokenException.create(e,n);if(this.stopAtFirstError)throw r;return this.addError(t,r),18},e.prototype.matchTokenAt_19=function(e,t){if(this.match_EOF(t,e))return this.endRule(t),this.endRule(t),this.endRule(t),this.endRule(t),this.endRule(t),this.endRule(t),this.build(t,e),41;if(this.match_Comment(t,e))return this.endRule(t),this.build(t,e),20;if(this.match_TableRow(t,e))return this.endRule(t),this.startRule(t,i.ExamplesTable),this.build(t,e),21;if(this.match_TagLine(t,e)&&this.lookahead_0(t,e))return this.endRule(t),this.endRule(t),this.endRule(t),this.startRule(t,i.ExamplesDefinition),this.startRule(t,i.Tags),this.build(t,e),17;if(this.match_TagLine(t,e))return this.endRule(t),this.endRule(t),this.endRule(t),this.endRule(t),this.endRule(t),this.startRule(t,i.ScenarioDefinition),this.startRule(t,i.Tags),this.build(t,e),11;if(this.match_ExamplesLine(t,e))return this.endRule(t),this.endRule(t),this.endRule(t),this.startRule(t,i.ExamplesDefinition),this.startRule(t,i.Examples),this.build(t,e),18;if(this.match_ScenarioLine(t,e))return this.endRule(t),this.endRule(t),this.endRule(t),this.endRule(t),this.endRule(t),this.startRule(t,i.ScenarioDefinition),this.startRule(t,i.Scenario),this.build(t,e),12;if(this.match_RuleLine(t,e))return this.endRule(t),this.endRule(t),this.endRule(t),this.endRule(t),this.endRule(t),this.startRule(t,i.Rule),this.startRule(t,i.RuleHeader),this.build(t,e),22;if(this.match_Other(t,e))return this.build(t,e),19;e.detach();var n=,r=e.isEof?a.UnexpectedEOFException.create(e,n):a.UnexpectedTokenException.create(e,n);if(this.stopAtFirstError)throw r;return this.addError(t,r),19},e.prototype.matchTokenAt_20=function(e,t){if(this.match_EOF(t,e))return this.endRule(t),this.endRule(t),this.endRule(t),this.endRule(t),this.endRule(t),this.build(t,e),41;if(this.match_Comment(t,e))return this.build(t,e),20;if(this.match_TableRow(t,e))return this.startRule(t,i.ExamplesTable),this.build(t,e),21;if(this.match_TagLine(t,e)&&this.lookahead_0(t,e))return this.endRule(t),this.endRule(t),this.startRule(t,i.ExamplesDefinition),this.startRule(t,i.Tags),this.build(t,e),17;if(this.match_TagLine(t,e))return this.endRule(t),this.endRule(t),this.endRule(t),this.endRule(t),this.startRule(t,i.ScenarioDefinition),this.startRule(t,i.Tags),this.build(t,e),11;if(this.match_ExamplesLine(t,e))return this.endRule(t),this.endRule(t),this.startRule(t,i.ExamplesDefinition),this.startRule(t,i.Examples),this.build(t,e),18;if(this.match_ScenarioLine(t,e))return this.endRule(t),this.endRule(t),this.endRule(t),this.endRule(t),this.startRule(t,i.ScenarioDefinition),this.startRule(t,i.Scenario),this.build(t,e),12;if(this.match_RuleLine(t,e))return this.endRule(t),this.endRule(t),this.endRule(t),this.endRule(t),this.startRule(t,i.Rule),this.startRule(t,i.RuleHeader),this.build(t,e),22;if(this.match_Empty(t,e))return this.build(t,e),20;e.detach();var n=,r=e.isEof?a.UnexpectedEOFException.create(e,n):a.UnexpectedTokenException.create(e,n);if(this.stopAtFirstError)throw r;return this.addError(t,r),20},e.prototype.matchTokenAt_21=function(e,t){if(this.match_EOF(t,e))return this.endRule(t),this.endRule(t),this.endRule(t),this.endRule(t),this.endRule(t),this.endRule(t),this.build(t,e),41;if(this.match_TableRow(t,e))return this.build(t,e),21;if(this.match_TagLine(t,e)&&this.lookahead_0(t,e))return this.endRule(t),this.endRule(t),this.endRule(t),this.startRule(t,i.ExamplesDefinition),this.startRule(t,i.Tags),this.build(t,e),17;if(this.match_TagLine(t,e))return this.endRule(t),this.endRule(t),this.endRule(t),this.endRule(t),this.endRule(t),this.startRule(t,i.ScenarioDefinition),this.startRule(t,i.Tags),this.build(t,e),11;if(this.match_ExamplesLine(t,e))return this.endRule(t),this.endRule(t),this.endRule(t),this.startRule(t,i.ExamplesDefinition),this.startRule(t,i.Examples),this.build(t,e),18;if(this.match_ScenarioLine(t,e))return this.endRule(t),this.endRule(t),this.endRule(t),this.endRule(t),this.endRule(t),this.startRule(t,i.ScenarioDefinition),this.startRule(t,i.Scenario),this.build(t,e),12;if(this.match_RuleLine(t,e))return this.endRule(t),this.endRule(t),this.endRule(t),this.endRule(t),this.endRule(t),this.startRule(t,i.Rule),this.startRule(t,i.RuleHeader),this.build(t,e),22;if(this.match_Comment(t,e))return this.build(t,e),21;if(this.match_Empty(t,e))return this.build(t,e),21;e.detach();var n=,r=e.isEof?a.UnexpectedEOFException.create(e,n):a.UnexpectedTokenException.create(e,n);if(this.stopAtFirstError)throw r;return this.addError(t,r),21},e.prototype.matchTokenAt_22=function(e,t){if(this.match_EOF(t,e))return this.endRule(t),this.endRule(t),this.endRule(t),this.build(t,e),41;if(this.match_Empty(t,e))return this.build(t,e),22;if(this.match_Comment(t,e))return this.build(t,e),24;if(this.match_BackgroundLine(t,e))return this.endRule(t),this.startRule(t,i.Background),this.build(t,e),25;if(this.match_TagLine(t,e))return this.endRule(t),this.startRule(t,i.ScenarioDefinition),this.startRule(t,i.Tags),this.build(t,e),30;if(this.match_ScenarioLine(t,e))return this.endRule(t),this.startRule(t,i.ScenarioDefinition),this.startRule(t,i.Scenario),this.build(t,e),31;if(this.match_RuleLine(t,e))return this.endRule(t),this.endRule(t),this.startRule(t,i.Rule),this.startRule(t,i.RuleHeader),this.build(t,e),22;if(this.match_Other(t,e))return this.startRule(t,i.Description),this.build(t,e),23;e.detach();var n=,r=e.isEof?a.UnexpectedEOFException.create(e,n):a.UnexpectedTokenException.create(e,n);if(this.stopAtFirstError)throw r;return this.addError(t,r),22},e.prototype.matchTokenAt_23=function(e,t){if(this.match_EOF(t,e))return this.endRule(t),this.endRule(t),this.endRule(t),this.endRule(t),this.build(t,e),41;if(this.match_Comment(t,e))return this.endRule(t),this.build(t,e),24;if(this.match_BackgroundLine(t,e))return this.endRule(t),this.endRule(t),this.startRule(t,i.Background),this.build(t,e),25;if(this.match_TagLine(t,e))return this.endRule(t),this.endRule(t),this.startRule(t,i.ScenarioDefinition),this.startRule(t,i.Tags),this.build(t,e),30;if(this.match_ScenarioLine(t,e))return this.endRule(t),this.endRule(t),this.startRule(t,i.ScenarioDefinition),this.startRule(t,i.Scenario),this.build(t,e),31;if(this.match_RuleLine(t,e))return this.endRule(t),this.endRule(t),this.endRule(t),this.startRule(t,i.Rule),this.startRule(t,i.RuleHeader),this.build(t,e),22;if(this.match_Other(t,e))return this.build(t,e),23;e.detach();var n=,r=e.isEof?a.UnexpectedEOFException.create(e,n):a.UnexpectedTokenException.create(e,n);if(this.stopAtFirstError)throw r;return this.addError(t,r),23},e.prototype.matchTokenAt_24=function(e,t){if(this.match_EOF(t,e))return this.endRule(t),this.endRule(t),this.endRule(t),this.build(t,e),41;if(this.match_Comment(t,e))return this.build(t,e),24;if(this.match_BackgroundLine(t,e))return this.endRule(t),this.startRule(t,i.Background),this.build(t,e),25;if(this.match_TagLine(t,e))return this.endRule(t),this.startRule(t,i.ScenarioDefinition),this.startRule(t,i.Tags),this.build(t,e),30;if(this.match_ScenarioLine(t,e))return this.endRule(t),this.startRule(t,i.ScenarioDefinition),this.startRule(t,i.Scenario),this.build(t,e),31;if(this.match_RuleLine(t,e))return this.endRule(t),this.endRule(t),this.startRule(t,i.Rule),this.startRule(t,i.RuleHeader),this.build(t,e),22;if(this.match_Empty(t,e))return this.build(t,e),24;e.detach();var n=,r=e.isEof?a.UnexpectedEOFException.create(e,n):a.UnexpectedTokenException.create(e,n);if(this.stopAtFirstError)throw r;return this.addError(t,r),24},e.prototype.matchTokenAt_25=function(e,t){if(this.match_EOF(t,e))return this.endRule(t),this.endRule(t),this.endRule(t),this.build(t,e),41;if(this.match_Empty(t,e))return this.build(t,e),25;if(this.match_Comment(t,e))return this.build(t,e),27;if(this.match_StepLine(t,e))return this.startRule(t,i.Step),this.build(t,e),28;if(this.match_TagLine(t,e))return this.endRule(t),this.startRule(t,i.ScenarioDefinition),this.startRule(t,i.Tags),this.build(t,e),30;if(this.match_ScenarioLine(t,e))return this.endRule(t),this.startRule(t,i.ScenarioDefinition),this.startRule(t,i.Scenario),this.build(t,e),31;if(this.match_RuleLine(t,e))return this.endRule(t),this.endRule(t),this.startRule(t,i.Rule),this.startRule(t,i.RuleHeader),this.build(t,e),22;if(this.match_Other(t,e))return this.startRule(t,i.Description),this.build(t,e),26;e.detach();var n=,r=e.isEof?a.UnexpectedEOFException.create(e,n):a.UnexpectedTokenException.create(e,n);if(this.stopAtFirstError)throw r;return this.addError(t,r),25},e.prototype.matchTokenAt_26=function(e,t){if(this.match_EOF(t,e))return this.endRule(t),this.endRule(t),this.endRule(t),this.endRule(t),this.build(t,e),41;if(this.match_Comment(t,e))return this.endRule(t),this.build(t,e),27;if(this.match_StepLine(t,e))return this.endRule(t),this.startRule(t,i.Step),this.build(t,e),28;if(this.match_TagLine(t,e))return this.endRule(t),this.endRule(t),this.startRule(t,i.ScenarioDefinition),this.startRule(t,i.Tags),this.build(t,e),30;if(this.match_ScenarioLine(t,e))return this.endRule(t),this.endRule(t),this.startRule(t,i.ScenarioDefinition),this.startRule(t,i.Scenario),this.build(t,e),31;if(this.match_RuleLine(t,e))return this.endRule(t),this.endRule(t),this.endRule(t),this.startRule(t,i.Rule),this.startRule(t,i.RuleHeader),this.build(t,e),22;if(this.match_Other(t,e))return this.build(t,e),26;e.detach();var n=,r=e.isEof?a.UnexpectedEOFException.create(e,n):a.UnexpectedTokenException.create(e,n);if(this.stopAtFirstError)throw r;return this.addError(t,r),26},e.prototype.matchTokenAt_27=function(e,t){if(this.match_EOF(t,e))return this.endRule(t),this.endRule(t),this.endRule(t),this.build(t,e),41;if(this.match_Comment(t,e))return this.build(t,e),27;if(this.match_StepLine(t,e))return this.startRule(t,i.Step),this.build(t,e),28;if(this.match_TagLine(t,e))return this.endRule(t),this.startRule(t,i.ScenarioDefinition),this.startRule(t,i.Tags),this.build(t,e),30;if(this.match_ScenarioLine(t,e))return this.endRule(t),this.startRule(t,i.ScenarioDefinition),this.startRule(t,i.Scenario),this.build(t,e),31;if(this.match_RuleLine(t,e))return this.endRule(t),this.endRule(t),this.startRule(t,i.Rule),this.startRule(t,i.RuleHeader),this.build(t,e),22;if(this.match_Empty(t,e))return this.build(t,e),27;e.detach();var n=,r=e.isEof?a.UnexpectedEOFException.create(e,n):a.UnexpectedTokenException.create(e,n);if(this.stopAtFirstError)throw r;return this.addError(t,r),27},e.prototype.matchTokenAt_28=function(e,t){if(this.match_EOF(t,e))return this.endRule(t),this.endRule(t),this.endRule(t),this.endRule(t),this.build(t,e),41;if(this.match_TableRow(t,e))return this.startRule(t,i.DataTable),this.build(t,e),29;if(this.match_DocStringSeparator(t,e))return this.startRule(t,i.DocString),this.build(t,e),44;if(this.match_StepLine(t,e))return this.endRule(t),this.startRule(t,i.Step),this.build(t,e),28;if(this.match_TagLine(t,e))return this.endRule(t),this.endRule(t),this.startRule(t,i.ScenarioDefinition),this.startRule(t,i.Tags),this.build(t,e),30;if(this.match_ScenarioLine(t,e))return this.endRule(t),this.endRule(t),this.startRule(t,i.ScenarioDefinition),this.startRule(t,i.Scenario),this.build(t,e),31;if(this.match_RuleLine(t,e))return this.endRule(t),this.endRule(t),this.endRule(t),this.startRule(t,i.Rule),this.startRule(t,i.RuleHeader),this.build(t,e),22;if(this.match_Comment(t,e))return this.build(t,e),28;if(this.match_Empty(t,e))return this.build(t,e),28;e.detach();var n=,r=e.isEof?a.UnexpectedEOFException.create(e,n):a.UnexpectedTokenException.create(e,n);if(this.stopAtFirstError)throw r;return this.addError(t,r),28},e.prototype.matchTokenAt_29=function(e,t){if(this.match_EOF(t,e))return this.endRule(t),this.endRule(t),this.endRule(t),this.endRule(t),this.endRule(t),this.build(t,e),41;if(this.match_TableRow(t,e))return this.build(t,e),29;if(this.match_StepLine(t,e))return this.endRule(t),this.endRule(t),this.startRule(t,i.Step),this.build(t,e),28;if(this.match_TagLine(t,e))return this.endRule(t),this.endRule(t),this.endRule(t),this.startRule(t,i.ScenarioDefinition),this.startRule(t,i.Tags),this.build(t,e),30;if(this.match_ScenarioLine(t,e))return this.endRule(t),this.endRule(t),this.endRule(t),this.startRule(t,i.ScenarioDefinition),this.startRule(t,i.Scenario),this.build(t,e),31;if(this.match_RuleLine(t,e))return this.endRule(t),this.endRule(t),this.endRule(t),this.endRule(t),this.startRule(t,i.Rule),this.startRule(t,i.RuleHeader),this.build(t,e),22;if(this.match_Comment(t,e))return this.build(t,e),29;if(this.match_Empty(t,e))return this.build(t,e),29;e.detach();var n=,r=e.isEof?a.UnexpectedEOFException.create(e,n):a.UnexpectedTokenException.create(e,n);if(this.stopAtFirstError)throw r;return this.addError(t,r),29},e.prototype.matchTokenAt_30=function(e,t){if(this.match_TagLine(t,e))return this.build(t,e),30;if(this.match_ScenarioLine(t,e))return this.endRule(t),this.startRule(t,i.Scenario),this.build(t,e),31;if(this.match_Comment(t,e))return this.build(t,e),30;if(this.match_Empty(t,e))return this.build(t,e),30;e.detach();var n=,r=e.isEof?a.UnexpectedEOFException.create(e,n):a.UnexpectedTokenException.create(e,n);if(this.stopAtFirstError)throw r;return this.addError(t,r),30},e.prototype.matchTokenAt_31=function(e,t){if(this.match_EOF(t,e))return this.endRule(t),this.endRule(t),this.endRule(t),this.endRule(t),this.build(t,e),41;if(this.match_Empty(t,e))return this.build(t,e),31;if(this.match_Comment(t,e))return this.build(t,e),33;if(this.match_StepLine(t,e))return this.startRule(t,i.Step),this.build(t,e),34;if(this.match_TagLine(t,e)&&this.lookahead_0(t,e))return this.startRule(t,i.ExamplesDefinition),this.startRule(t,i.Tags),this.build(t,e),36;if(this.match_TagLine(t,e))return this.endRule(t),this.endRule(t),this.startRule(t,i.ScenarioDefinition),this.startRule(t,i.Tags),this.build(t,e),30;if(this.match_ExamplesLine(t,e))return this.startRule(t,i.ExamplesDefinition),this.startRule(t,i.Examples),this.build(t,e),37;if(this.match_ScenarioLine(t,e))return this.endRule(t),this.endRule(t),this.startRule(t,i.ScenarioDefinition),this.startRule(t,i.Scenario),this.build(t,e),31;if(this.match_RuleLine(t,e))return this.endRule(t),this.endRule(t),this.endRule(t),this.startRule(t,i.Rule),this.startRule(t,i.RuleHeader),this.build(t,e),22;if(this.match_Other(t,e))return this.startRule(t,i.Description),this.build(t,e),32;e.detach();var n=,r=e.isEof?a.UnexpectedEOFException.create(e,n):a.UnexpectedTokenException.create(e,n);if(this.stopAtFirstError)throw r;return this.addError(t,r),31},e.prototype.matchTokenAt_32=function(e,t){if(this.match_EOF(t,e))return this.endRule(t),this.endRule(t),this.endRule(t),this.endRule(t),this.endRule(t),this.build(t,e),41;if(this.match_Comment(t,e))return this.endRule(t),this.build(t,e),33;if(this.match_StepLine(t,e))return this.endRule(t),this.startRule(t,i.Step),this.build(t,e),34;if(this.match_TagLine(t,e)&&this.lookahead_0(t,e))return this.endRule(t),this.startRule(t,i.ExamplesDefinition),this.startRule(t,i.Tags),this.build(t,e),36;if(this.match_TagLine(t,e))return this.endRule(t),this.endRule(t),this.endRule(t),this.startRule(t,i.ScenarioDefinition),this.startRule(t,i.Tags),this.build(t,e),30;if(this.match_ExamplesLine(t,e))return this.endRule(t),this.startRule(t,i.ExamplesDefinition),this.startRule(t,i.Examples),this.build(t,e),37;if(this.match_ScenarioLine(t,e))return this.endRule(t),this.endRule(t),this.endRule(t),this.startRule(t,i.ScenarioDefinition),this.startRule(t,i.Scenario),this.build(t,e),31;if(this.match_RuleLine(t,e))return this.endRule(t),this.endRule(t),this.endRule(t),this.endRule(t),this.startRule(t,i.Rule),this.startRule(t,i.RuleHeader),this.build(t,e),22;if(this.match_Other(t,e))return this.build(t,e),32;e.detach();var n=,r=e.isEof?a.UnexpectedEOFException.create(e,n):a.UnexpectedTokenException.create(e,n);if(this.stopAtFirstError)throw r;return this.addError(t,r),32},e.prototype.matchTokenAt_33=function(e,t){if(this.match_EOF(t,e))return this.endRule(t),this.endRule(t),this.endRule(t),this.endRule(t),this.build(t,e),41;if(this.match_Comment(t,e))return this.build(t,e),33;if(this.match_StepLine(t,e))return this.startRule(t,i.Step),this.build(t,e),34;if(this.match_TagLine(t,e)&&this.lookahead_0(t,e))return this.startRule(t,i.ExamplesDefinition),this.startRule(t,i.Tags),this.build(t,e),36;if(this.match_TagLine(t,e))return this.endRule(t),this.endRule(t),this.startRule(t,i.ScenarioDefinition),this.startRule(t,i.Tags),this.build(t,e),30;if(this.match_ExamplesLine(t,e))return this.startRule(t,i.ExamplesDefinition),this.startRule(t,i.Examples),this.build(t,e),37;if(this.match_ScenarioLine(t,e))return this.endRule(t),this.endRule(t),this.startRule(t,i.ScenarioDefinition),this.startRule(t,i.Scenario),this.build(t,e),31;if(this.match_RuleLine(t,e))return this.endRule(t),this.endRule(t),this.endRule(t),this.startRule(t,i.Rule),this.startRule(t,i.RuleHeader),this.build(t,e),22;if(this.match_Empty(t,e))return this.build(t,e),33;e.detach();var n=,r=e.isEof?a.UnexpectedEOFException.create(e,n):a.UnexpectedTokenException.create(e,n);if(this.stopAtFirstError)throw r;return this.addError(t,r),33},e.prototype.matchTokenAt_34=function(e,t){if(this.match_EOF(t,e))return this.endRule(t),this.endRule(t),this.endRule(t),this.endRule(t),this.endRule(t),this.build(t,e),41;if(this.match_TableRow(t,e))return this.startRule(t,i.DataTable),this.build(t,e),35;if(this.match_DocStringSeparator(t,e))return this.startRule(t,i.DocString),this.build(t,e),42;if(this.match_StepLine(t,e))return this.endRule(t),this.startRule(t,i.Step),this.build(t,e),34;if(this.match_TagLine(t,e)&&this.lookahead_0(t,e))return this.endRule(t),this.startRule(t,i.ExamplesDefinition),this.startRule(t,i.Tags),this.build(t,e),36;if(this.match_TagLine(t,e))return this.endRule(t),this.endRule(t),this.endRule(t),this.startRule(t,i.ScenarioDefinition),this.startRule(t,i.Tags),this.build(t,e),30;if(this.match_ExamplesLine(t,e))return this.endRule(t),this.startRule(t,i.ExamplesDefinition),this.startRule(t,i.Examples),this.build(t,e),37;if(this.match_ScenarioLine(t,e))return this.endRule(t),this.endRule(t),this.endRule(t),this.startRule(t,i.ScenarioDefinition),this.startRule(t,i.Scenario),this.build(t,e),31;if(this.match_RuleLine(t,e))return this.endRule(t),this.endRule(t),this.endRule(t),this.endRule(t),this.startRule(t,i.Rule),this.startRule(t,i.RuleHeader),this.build(t,e),22;if(this.match_Comment(t,e))return this.build(t,e),34;if(this.match_Empty(t,e))return this.build(t,e),34;e.detach();var n=,r=e.isEof?a.UnexpectedEOFException.create(e,n):a.UnexpectedTokenException.create(e,n);if(this.stopAtFirstError)throw r;return this.addError(t,r),34},e.prototype.matchTokenAt_35=function(e,t){if(this.match_EOF(t,e))return this.endRule(t),this.endRule(t),this.endRule(t),this.endRule(t),this.endRule(t),this.endRule(t),this.build(t,e),41;if(this.match_TableRow(t,e))return this.build(t,e),35;if(this.match_StepLine(t,e))return this.endRule(t),this.endRule(t),this.startRule(t,i.Step),this.build(t,e),34;if(this.match_TagLine(t,e)&&this.lookahead_0(t,e))return this.endRule(t),this.endRule(t),this.startRule(t,i.ExamplesDefinition),this.startRule(t,i.Tags),this.build(t,e),36;if(this.match_TagLine(t,e))return this.endRule(t),this.endRule(t),this.endRule(t),this.endRule(t),this.startRule(t,i.ScenarioDefinition),this.startRule(t,i.Tags),this.build(t,e),30;if(this.match_ExamplesLine(t,e))return this.endRule(t),this.endRule(t),this.startRule(t,i.ExamplesDefinition),this.startRule(t,i.Examples),this.build(t,e),37;if(this.match_ScenarioLine(t,e))return this.endRule(t),this.endRule(t),this.endRule(t),this.endRule(t),this.startRule(t,i.ScenarioDefinition),this.startRule(t,i.Scenario),this.build(t,e),31;if(this.match_RuleLine(t,e))return this.endRule(t),this.endRule(t),this.endRule(t),this.endRule(t),this.endRule(t),this.startRule(t,i.Rule),this.startRule(t,i.RuleHeader),this.build(t,e),22;if(this.match_Comment(t,e))return this.build(t,e),35;if(this.match_Empty(t,e))return this.build(t,e),35;e.detach();var n=,r=e.isEof?a.UnexpectedEOFException.create(e,n):a.UnexpectedTokenException.create(e,n);if(this.stopAtFirstError)throw r;return this.addError(t,r),35},e.prototype.matchTokenAt_36=function(e,t){if(this.match_TagLine(t,e))return this.build(t,e),36;if(this.match_ExamplesLine(t,e))return this.endRule(t),this.startRule(t,i.Examples),this.build(t,e),37;if(this.match_Comment(t,e))return this.build(t,e),36;if(this.match_Empty(t,e))return this.build(t,e),36;e.detach();var n=,r=e.isEof?a.UnexpectedEOFException.create(e,n):a.UnexpectedTokenException.create(e,n);if(this.stopAtFirstError)throw r;return this.addError(t,r),36},e.prototype.matchTokenAt_37=function(e,t){if(this.match_EOF(t,e))return this.endRule(t),this.endRule(t),this.endRule(t),this.endRule(t),this.endRule(t),this.endRule(t),this.build(t,e),41;if(this.match_Empty(t,e))return this.build(t,e),37;if(this.match_Comment(t,e))return this.build(t,e),39;if(this.match_TableRow(t,e))return this.startRule(t,i.ExamplesTable),this.build(t,e),40;if(this.match_TagLine(t,e)&&this.lookahead_0(t,e))return this.endRule(t),this.endRule(t),this.startRule(t,i.ExamplesDefinition),this.startRule(t,i.Tags),this.build(t,e),36;if(this.match_TagLine(t,e))return this.endRule(t),this.endRule(t),this.endRule(t),this.endRule(t),this.startRule(t,i.ScenarioDefinition),this.startRule(t,i.Tags),this.build(t,e),30;if(this.match_ExamplesLine(t,e))return this.endRule(t),this.endRule(t),this.startRule(t,i.ExamplesDefinition),this.startRule(t,i.Examples),this.build(t,e),37;if(this.match_ScenarioLine(t,e))return this.endRule(t),this.endRule(t),this.endRule(t),this.endRule(t),this.startRule(t,i.ScenarioDefinition),this.startRule(t,i.Scenario),this.build(t,e),31;if(this.match_RuleLine(t,e))return this.endRule(t),this.endRule(t),this.endRule(t),this.endRule(t),this.endRule(t),this.startRule(t,i.Rule),this.startRule(t,i.RuleHeader),this.build(t,e),22;if(this.match_Other(t,e))return this.startRule(t,i.Description),this.build(t,e),38;e.detach();var n=,r=e.isEof?a.UnexpectedEOFException.create(e,n):a.UnexpectedTokenException.create(e,n);if(this.stopAtFirstError)throw r;return this.addError(t,r),37},e.prototype.matchTokenAt_38=function(e,t){if(this.match_EOF(t,e))return this.endRule(t),this.endRule(t),this.endRule(t),this.endRule(t),this.endRule(t),this.endRule(t),this.endRule(t),this.build(t,e),41;if(this.match_Comment(t,e))return this.endRule(t),this.build(t,e),39;if(this.match_TableRow(t,e))return this.endRule(t),this.startRule(t,i.ExamplesTable),this.build(t,e),40;if(this.match_TagLine(t,e)&&this.lookahead_0(t,e))return this.endRule(t),this.endRule(t),this.endRule(t),this.startRule(t,i.ExamplesDefinition),this.startRule(t,i.Tags),this.build(t,e),36;if(this.match_TagLine(t,e))return this.endRule(t),this.endRule(t),this.endRule(t),this.endRule(t),this.endRule(t),this.startRule(t,i.ScenarioDefinition),this.startRule(t,i.Tags),this.build(t,e),30;if(this.match_ExamplesLine(t,e))return this.endRule(t),this.endRule(t),this.endRule(t),this.startRule(t,i.ExamplesDefinition),this.startRule(t,i.Examples),this.build(t,e),37;if(this.match_ScenarioLine(t,e))return this.endRule(t),this.endRule(t),this.endRule(t),this.endRule(t),this.endRule(t),this.startRule(t,i.ScenarioDefinition),this.startRule(t,i.Scenario),this.build(t,e),31;if(this.match_RuleLine(t,e))return this.endRule(t),this.endRule(t),this.endRule(t),this.endRule(t),this.endRule(t),this.endRule(t),this.startRule(t,i.Rule),this.startRule(t,i.RuleHeader),this.build(t,e),22;if(this.match_Other(t,e))return this.build(t,e),38;e.detach();var n=,r=e.isEof?a.UnexpectedEOFException.create(e,n):a.UnexpectedTokenException.create(e,n);if(this.stopAtFirstError)throw r;return this.addError(t,r),38},e.prototype.matchTokenAt_39=function(e,t){if(this.match_EOF(t,e))return this.endRule(t),this.endRule(t),this.endRule(t),this.endRule(t),this.endRule(t),this.endRule(t),this.build(t,e),41;if(this.match_Comment(t,e))return this.build(t,e),39;if(this.match_TableRow(t,e))return this.startRule(t,i.ExamplesTable),this.build(t,e),40;if(this.match_TagLine(t,e)&&this.lookahead_0(t,e))return this.endRule(t),this.endRule(t),this.startRule(t,i.ExamplesDefinition),this.startRule(t,i.Tags),this.build(t,e),36;if(this.match_TagLine(t,e))return this.endRule(t),this.endRule(t),this.endRule(t),this.endRule(t),this.startRule(t,i.ScenarioDefinition),this.startRule(t,i.Tags),this.build(t,e),30;if(this.match_ExamplesLine(t,e))return this.endRule(t),this.endRule(t),this.startRule(t,i.ExamplesDefinition),this.startRule(t,i.Examples),this.build(t,e),37;if(this.match_ScenarioLine(t,e))return this.endRule(t),this.endRule(t),this.endRule(t),this.endRule(t),this.startRule(t,i.ScenarioDefinition),this.startRule(t,i.Scenario),this.build(t,e),31;if(this.match_RuleLine(t,e))return this.endRule(t),this.endRule(t),this.endRule(t),this.endRule(t),this.endRule(t),this.startRule(t,i.Rule),this.startRule(t,i.RuleHeader),this.build(t,e),22;if(this.match_Empty(t,e))return this.build(t,e),39;e.detach();var n=,r=e.isEof?a.UnexpectedEOFException.create(e,n):a.UnexpectedTokenException.create(e,n);if(this.stopAtFirstError)throw r;return this.addError(t,r),39},e.prototype.matchTokenAt_40=function(e,t){if(this.match_EOF(t,e))return this.endRule(t),this.endRule(t),this.endRule(t),this.endRule(t),this.endRule(t),this.endRule(t),this.endRule(t),this.build(t,e),41;if(this.match_TableRow(t,e))return this.build(t,e),40;if(this.match_TagLine(t,e)&&this.lookahead_0(t,e))return this.endRule(t),this.endRule(t),this.endRule(t),this.startRule(t,i.ExamplesDefinition),this.startRule(t,i.Tags),this.build(t,e),36;if(this.match_TagLine(t,e))return this.endRule(t),this.endRule(t),this.endRule(t),this.endRule(t),this.endRule(t),this.startRule(t,i.ScenarioDefinition),this.startRule(t,i.Tags),this.build(t,e),30;if(this.match_ExamplesLine(t,e))return this.endRule(t),this.endRule(t),this.endRule(t),this.startRule(t,i.ExamplesDefinition),this.startRule(t,i.Examples),this.build(t,e),37;if(this.match_ScenarioLine(t,e))return this.endRule(t),this.endRule(t),this.endRule(t),this.endRule(t),this.endRule(t),this.startRule(t,i.ScenarioDefinition),this.startRule(t,i.Scenario),this.build(t,e),31;if(this.match_RuleLine(t,e))return this.endRule(t),this.endRule(t),this.endRule(t),this.endRule(t),this.endRule(t),this.endRule(t),this.startRule(t,i.Rule),this.startRule(t,i.RuleHeader),this.build(t,e),22;if(this.match_Comment(t,e))return this.build(t,e),40;if(this.match_Empty(t,e))return this.build(t,e),40;e.detach();var n=,r=e.isEof?a.UnexpectedEOFException.create(e,n):a.UnexpectedTokenException.create(e,n);if(this.stopAtFirstError)throw r;return this.addError(t,r),40},e.prototype.matchTokenAt_42=function(e,t){if(this.match_DocStringSeparator(t,e))return this.build(t,e),43;if(this.match_Other(t,e))return this.build(t,e),42;e.detach();var n=,r=e.isEof?a.UnexpectedEOFException.create(e,n):a.UnexpectedTokenException.create(e,n);if(this.stopAtFirstError)throw r;return this.addError(t,r),42},e.prototype.matchTokenAt_43=function(e,t){if(this.match_EOF(t,e))return this.endRule(t),this.endRule(t),this.endRule(t),this.endRule(t),this.endRule(t),this.endRule(t),this.build(t,e),41;if(this.match_StepLine(t,e))return this.endRule(t),this.endRule(t),this.startRule(t,i.Step),this.build(t,e),34;if(this.match_TagLine(t,e)&&this.lookahead_0(t,e))return this.endRule(t),this.endRule(t),this.startRule(t,i.ExamplesDefinition),this.startRule(t,i.Tags),this.build(t,e),36;if(this.match_TagLine(t,e))return this.endRule(t),this.endRule(t),this.endRule(t),this.endRule(t),this.startRule(t,i.ScenarioDefinition),this.startRule(t,i.Tags),this.build(t,e),30;if(this.match_ExamplesLine(t,e))return this.endRule(t),this.endRule(t),this.startRule(t,i.ExamplesDefinition),this.startRule(t,i.Examples),this.build(t,e),37;if(this.match_ScenarioLine(t,e))return this.endRule(t),this.endRule(t),this.endRule(t),this.endRule(t),this.startRule(t,i.ScenarioDefinition),this.startRule(t,i.Scenario),this.build(t,e),31;if(this.match_RuleLine(t,e))return this.endRule(t),this.endRule(t),this.endRule(t),this.endRule(t),this.endRule(t),this.startRule(t,i.Rule),this.startRule(t,i.RuleHeader),this.build(t,e),22;if(this.match_Comment(t,e))return this.build(t,e),43;if(this.match_Empty(t,e))return this.build(t,e),43;e.detach();var n=,r=e.isEof?a.UnexpectedEOFException.create(e,n):a.UnexpectedTokenException.create(e,n);if(this.stopAtFirstError)throw r;return this.addError(t,r),43},e.prototype.matchTokenAt_44=function(e,t){if(this.match_DocStringSeparator(t,e))return this.build(t,e),45;if(this.match_Other(t,e))return this.build(t,e),44;e.detach();var n=,r=e.isEof?a.UnexpectedEOFException.create(e,n):a.UnexpectedTokenException.create(e,n);if(this.stopAtFirstError)throw r;return this.addError(t,r),44},e.prototype.matchTokenAt_45=function(e,t){if(this.match_EOF(t,e))return this.endRule(t),this.endRule(t),this.endRule(t),this.endRule(t),this.endRule(t),this.build(t,e),41;if(this.match_StepLine(t,e))return this.endRule(t),this.endRule(t),this.startRule(t,i.Step),this.build(t,e),28;if(this.match_TagLine(t,e))return this.endRule(t),this.endRule(t),this.endRule(t),this.startRule(t,i.ScenarioDefinition),this.startRule(t,i.Tags),this.build(t,e),30;if(this.match_ScenarioLine(t,e))return this.endRule(t),this.endRule(t),this.endRule(t),this.startRule(t,i.ScenarioDefinition),this.startRule(t,i.Scenario),this.build(t,e),31;if(this.match_RuleLine(t,e))return this.endRule(t),this.endRule(t),this.endRule(t),this.endRule(t),this.startRule(t,i.Rule),this.startRule(t,i.RuleHeader),this.build(t,e),22;if(this.match_Comment(t,e))return this.build(t,e),45;if(this.match_Empty(t,e))return this.build(t,e),45;e.detach();var n=,r=e.isEof?a.UnexpectedEOFException.create(e,n):a.UnexpectedTokenException.create(e,n);if(this.stopAtFirstError)throw r;return this.addError(t,r),45},e.prototype.matchTokenAt_46=function(e,t){if(this.match_DocStringSeparator(t,e))return this.build(t,e),47;if(this.match_Other(t,e))return this.build(t,e),46;e.detach();var n=,r=e.isEof?a.UnexpectedEOFException.create(e,n):a.UnexpectedTokenException.create(e,n);if(this.stopAtFirstError)throw r;return this.addError(t,r),46},e.prototype.matchTokenAt_47=function(e,t){if(this.match_EOF(t,e))return this.endRule(t),this.endRule(t),this.endRule(t),this.endRule(t),this.endRule(t),this.build(t,e),41;if(this.match_StepLine(t,e))return this.endRule(t),this.endRule(t),this.startRule(t,i.Step),this.build(t,e),15;if(this.match_TagLine(t,e)&&this.lookahead_0(t,e))return this.endRule(t),this.endRule(t),this.startRule(t,i.ExamplesDefinition),this.startRule(t,i.Tags),this.build(t,e),17;if(this.match_TagLine(t,e))return this.endRule(t),this.endRule(t),this.endRule(t),this.endRule(t),this.startRule(t,i.ScenarioDefinition),this.startRule(t,i.Tags),this.build(t,e),11;if(this.match_ExamplesLine(t,e))return this.endRule(t),this.endRule(t),this.startRule(t,i.ExamplesDefinition),this.startRule(t,i.Examples),this.build(t,e),18;if(this.match_ScenarioLine(t,e))return this.endRule(t),this.endRule(t),this.endRule(t),this.endRule(t),this.startRule(t,i.ScenarioDefinition),this.startRule(t,i.Scenario),this.build(t,e),12;if(this.match_RuleLine(t,e))return this.endRule(t),this.endRule(t),this.endRule(t),this.endRule(t),this.startRule(t,i.Rule),this.startRule(t,i.RuleHeader),this.build(t,e),22;if(this.match_Comment(t,e))return this.build(t,e),47;if(this.match_Empty(t,e))return this.build(t,e),47;e.detach();var n=,r=e.isEof?a.UnexpectedEOFException.create(e,n):a.UnexpectedTokenException.create(e,n);if(this.stopAtFirstError)throw r;return this.addError(t,r),47},e.prototype.matchTokenAt_48=function(e,t){if(this.match_DocStringSeparator(t,e))return this.build(t,e),49;if(this.match_Other(t,e))return this.build(t,e),48;e.detach();var n=,r=e.isEof?a.UnexpectedEOFException.create(e,n):a.UnexpectedTokenException.create(e,n);if(this.stopAtFirstError)throw r;return this.addError(t,r),48},e.prototype.matchTokenAt_49=function(e,t){if(this.match_EOF(t,e))return this.endRule(t),this.endRule(t),this.endRule(t),this.endRule(t),this.build(t,e),41;if(this.match_StepLine(t,e))return this.endRule(t),this.endRule(t),this.startRule(t,i.Step),this.build(t,e),9;if(this.match_TagLine(t,e))return this.endRule(t),this.endRule(t),this.endRule(t),this.startRule(t,i.ScenarioDefinition),this.startRule(t,i.Tags),this.build(t,e),11;if(this.match_ScenarioLine(t,e))return this.endRule(t),this.endRule(t),this.endRule(t),this.startRule(t,i.ScenarioDefinition),this.startRule(t,i.Scenario),this.build(t,e),12;if(this.match_RuleLine(t,e))return this.endRule(t),this.endRule(t),this.endRule(t),this.startRule(t,i.Rule),this.startRule(t,i.RuleHeader),this.build(t,e),22;if(this.match_Comment(t,e))return this.build(t,e),49;if(this.match_Empty(t,e))return this.build(t,e),49;e.detach();var n=,r=e.isEof?a.UnexpectedEOFException.create(e,n):a.UnexpectedTokenException.create(e,n);if(this.stopAtFirstError)throw r;return this.addError(t,r),49},e.prototype.match_EOF=function(e,t){return this.handleExternalError(e,!1,(function(){return e.tokenMatcher.match_EOF(t)}))},e.prototype.match_Empty=function(e,t){return!t.isEof&&this.handleExternalError(e,!1,(function(){return e.tokenMatcher.match_Empty(t)}))},e.prototype.match_Comment=function(e,t){return!t.isEof&&this.handleExternalError(e,!1,(function(){return e.tokenMatcher.match_Comment(t)}))},e.prototype.match_TagLine=function(e,t){return!t.isEof&&this.handleExternalError(e,!1,(function(){return e.tokenMatcher.match_TagLine(t)}))},e.prototype.match_FeatureLine=function(e,t){return!t.isEof&&this.handleExternalError(e,!1,(function(){return e.tokenMatcher.match_FeatureLine(t)}))},e.prototype.match_RuleLine=function(e,t){return!t.isEof&&this.handleExternalError(e,!1,(function(){return e.tokenMatcher.match_RuleLine(t)}))},e.prototype.match_BackgroundLine=function(e,t){return!t.isEof&&this.handleExternalError(e,!1,(function(){return e.tokenMatcher.match_BackgroundLine(t)}))},e.prototype.match_ScenarioLine=function(e,t){return!t.isEof&&this.handleExternalError(e,!1,(function(){return e.tokenMatcher.match_ScenarioLine(t)}))},e.prototype.match_ExamplesLine=function(e,t){return!t.isEof&&this.handleExternalError(e,!1,(function(){return e.tokenMatcher.match_ExamplesLine(t)}))},e.prototype.match_StepLine=function(e,t){return!t.isEof&&this.handleExternalError(e,!1,(function(){return e.tokenMatcher.match_StepLine(t)}))},e.prototype.match_DocStringSeparator=function(e,t){return!t.isEof&&this.handleExternalError(e,!1,(function(){return e.tokenMatcher.match_DocStringSeparator(t)}))},e.prototype.match_TableRow=function(e,t){return!t.isEof&&this.handleExternalError(e,!1,(function(){return e.tokenMatcher.match_TableRow(t)}))},e.prototype.match_Language=function(e,t){return!t.isEof&&this.handleExternalError(e,!1,(function(){return e.tokenMatcher.match_Language(t)}))},e.prototype.match_Other=function(e,t){return!t.isEof&&this.handleExternalError(e,!1,(function(){return e.tokenMatcher.match_Other(t)}))},e.prototype.lookahead_0=function(e,t){var n;t.detach();var r=[],i=!1;do{if((n=this.readToken(this.context)).detach(),r.push(n),this.match_ExamplesLine(e,n)){i=!0;break}}while(this.match_Empty(e,n)||this.match_Comment(e,n)||this.match_TagLine(e,n));return e.tokenQueue=e.tokenQueue.concat®,i},e}();t.default=s},function(e,t,n){“use strict”;var r,i=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e=t)})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}),a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,“__esModule”,{value:!0}),t.NoSuchLanguageException=t.AstBuilderException=t.UnexpectedEOFException=t.UnexpectedTokenException=t.CompositeParserException=t.ParserException=void 0;var o=a(n(50)),c=function(e){function t(t){var n=this.constructor,r=e.call(this,t)||this,i=n.prototype;return Object.setPrototypeOf?Object.setPrototypeOf(r,i):r.__proto__=i,r}return i(t,e),t._create=function(e,t){var n=null!=t?t.column||0:-1,r=new this(“(”+(null!=t?t.line||0:-1)+“:”n“): ”+e);return r.location=t,r},t}(Error),s=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return i(t,e),t.create=function(e,t,n){var r=new this(“(”t“:”n“): ”+e);return r.location=o.default({line:t,column:n}),r},t}©;t.ParserException=s;var u=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return i(t,e),t.create=function(e){var t=new this(“Parser errors:n”+e.map((function(e){return e.message})).join(“n”));return t.errors=e,t},t}©;t.CompositeParserException=u;var l=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return i(t,e),t.create=function(e,t){var n=“expected: ”+t.join(“, ”)+“, got '”+e.getTokenValue().trim()+“'”,r=p(e);return this._create(n,r)},t}©;t.UnexpectedTokenException=l;var f=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return i(t,e),t.create=function(e,t){var n=“unexpected end of file, expected: ”+t.join(“, ”),r=p(e);return this._create(n,r)},t}©;t.UnexpectedEOFException=f;var h=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return i(t,e),t.create=function(e,t){return this._create(e,t)},t}©;t.AstBuilderException=h;var d=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return i(t,e),t.create=function(e,t){var n=“Language not supported: ”+e;return this._create(n,t)},t}©;function p(e){return e.location&&e.location.line&&e.line&&void 0!==e.line.indent?o.default({line:e.location.line,column:e.line.indent+1}):e.location}t.NoSuchLanguageException=d},function(e,t,n){“use strict”;var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,“__esModule”,{value:!0});var i=r(n(0));t.default=function(e){var t=e.message,n=e.className,r=void 0===n?“”:n;return i.default.createElement(“pre”,{className:“cucumber-error ”+r},t)}},function(e,t,n){“use strict”;Object.defineProperty(t,“__esModule”,{value:!0});var r=n(2).messages.TestStepFinished.TestStepResult.Status;t.default=function(e){var t;return(t={},t=“passed”,t=“skipped”,t=“pending”,t=“undefined”,t=“ambiguous”,t=“failed”,t=“unknown”,t)}},function(e,t,n){“use strict”;var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,“__esModule”,{value:!0});var i=n(13),a=n(2).messages.TestStepFinished.TestStepResult.Status,o=r(n(0)),c=n(14),s=r(n(33));t.default=function(e){var t=e.status;return o.default.createElement(c.FontAwesomeIcon,{icon:u(t),size:“1x”,className:“cucumber-status–”+s.default(t)})};var u=function(e){var t;return(t={},t=i.faCheckCircle,t=i.faStopCircle,t=i.faPauseCircle,t=i.faQuestionCircle,t=i.faInfoCircle,t=i.faTimesCircle,t=i.faQuestionCircle,t)}},function(e,t,n){“use strict”;var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n),Object.defineProperty(e,r,{enumerable:!0,get:function(){return t}})}:function(e,t,n,r){void 0===r&&(r=n),e=t}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,“default”,{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)“default”!==n&&Object.hasOwnProperty.call(e,n)&&r(t,e,n);return i(t,e),t},o=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,“__esModule”,{value:!0}),t.rejectAllFilters=t.GherkinDocumentWalker=t.pretty=void 0;var c=o(n(181));t.pretty=c.default;var s=a(n(182));t.GherkinDocumentWalker=s.default,Object.defineProperty(t,“rejectAllFilters”,{enumerable:!0,get:function(){return s.rejectAllFilters}})},function(e,t,n){“use strict”;var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,“__esModule”,{value:!0}),t.EnvelopesQuery=void 0;var i=r(n(0)),a=function(){function e(){this.envelopes=[]}return e.prototype.update=function(e){this.envelopes.push(e)},e.prototype.find=function(e){return this.envelopes.find(e)},e.prototype.filter=function(e){return this.envelopes.filter(e)},e}();t.EnvelopesQuery=a,t.default=i.default.createContext(new a)},function(e,t,n){“use strict”;var r,i=“object”==typeof Reflect?Reflect:null,a=i&&“function”==typeof i.apply?i.apply:function(e,t,n){return Function.prototype.apply.call(e,t,n)};r=i&&“function”==typeof i.ownKeys?i.ownKeys:Object.getOwnPropertySymbols?function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:function(e){return Object.getOwnPropertyNames(e)};var o=Number.isNaN||function(e){return e!=e};function c(){c.init.call(this)}e.exports=c,e.exports.once=function(e,t){return new Promise((function(n,r){function i(){void 0!==a&&e.removeListener(“error”,a),n([].slice.call(arguments))}var a;“error”!==t&&(a=function(n){e.removeListener(t,i),r(n)},e.once(“error”,a)),e.once(t,i)}))},c.EventEmitter=c,c.prototype._events=void 0,c.prototype._eventsCount=0,c.prototype._maxListeners=void 0;var s=10;function u(e){if(“function”!=typeof e)throw new TypeError('The “listener” argument must be of type Function. Received type '+typeof e)}function l(e){return void 0===e._maxListeners?c.defaultMaxListeners:e._maxListeners}function f(e,t,n,r){var i,a,o,c;if(u(n),void 0===(a=e._events)?(a=e._events=Object.create(null),e._eventsCount=0):(void 0!==a.newListener&&(e.emit(“newListener”,t,n.listener?n.listener:n),a=e._events),o=a),void 0===o)o=a=n,++e._eventsCount;else if(“function”==typeof o?o=a=r?:[o,n]:r?o.unshift(n):o.push(n),(i=l(e))>0&&o.length>i&&!o.warned){o.warned=!0;var s=new Error(“Possible EventEmitter memory leak detected. ”o.length“ ”+String(t)+“ listeners added. Use emitter.setMaxListeners() to increase limit”);s.name=“MaxListenersExceededWarning”,s.emitter=e,s.type=t,s.count=o.length,c=s,console&&console.warn&&console.warn©}return e}function h(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,0===arguments.length?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function d(e,t,n){var r={fired:!1,wrapFn:void 0,target:e,type:t,listener:n},i=h.bind®;return i.listener=n,r.wrapFn=i,i}function p(e,t,n){var r=e._events;if(void 0===r)return[];var i=r;return void 0===i?[]:“function”==typeof i?n?:[i]:n?function(e){for(var t=new Array(e.length),n=0;n=e.listener||e;return t}(i):v(i,i.length)}function m(e){var t=this._events;if(void 0!==t){var n=t;if(“function”==typeof n)return 1;if(void 0!==n)return n.length}return 0}function v(e,t){for(var n=new Array(t),r=0;r=e;return n}Object.defineProperty(c,“defaultMaxListeners”,{enumerable:!0,get:function(){return s},set:function(e){if(“number”!=typeof e||e<0||o(e))throw new RangeError('The value of “defaultMaxListeners” is out of range. It must be a non-negative number. Received 'e“.”);s=e}}),c.init=function(){void 0!==this._events&&this._events!==Object.getPrototypeOf(this)._events||(this._events=Object.create(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0},c.prototype.setMaxListeners=function(e){if(“number”!=typeof e||e<0||o(e))throw new RangeError('The value of “n” is out of range. It must be a non-negative number. Received 'e“.”);return this._maxListeners=e,this},c.prototype.getMaxListeners=function(){return l(this)},c.prototype.emit=function(e){for(var t=[],n=1;n);var r=“error”===e,i=this._events;if(void 0!==i)r=r&&void 0===i.error;else if(!r)return!1;if®{var o;if(t.length>0&&(o=t),o instanceof Error)throw o;var c=new Error(“Unhandled error.”+(o?“ (”o.message“)”:“”));throw c.context=o,c}var s=i;if(void 0===s)return!1;if(“function”==typeof s)a(s,this,t);else{var u=s.length,l=v(s,u);for(n=0;n,this,t)}return!0},c.prototype.addListener=function(e,t){return f(this,e,t,!1)},c.prototype.on=c.prototype.addListener,c.prototype.prependListener=function(e,t){return f(this,e,t,!0)},c.prototype.once=function(e,t){return u(t),this.on(e,d(this,e,t)),this},c.prototype.prependOnceListener=function(e,t){return u(t),this.prependListener(e,d(this,e,t)),this},c.prototype.removeListener=function(e,t){var n,r,i,a,o;if(u(t),void 0===(r=this._events))return this;if(void 0===(n=r))return this;if(n===t||n.listener===t)0==–this._eventsCount?this._events=Object.create(null):(delete r,r.removeListener&&this.emit(“removeListener”,e,n.listener||t));else if(“function”!=typeof n){for(i=-1,a=n.length-1;a>=0;a–)if(n===t||n.listener===t){o=n.listener,i=a;break}if(i<0)return this;0===i?n.shift():function(e,t){for(;t+1=e;e.pop()}(n,i),1===n.length&&(r=n),void 0!==r.removeListener&&this.emit(“removeListener”,e,o||t)}return this},c.prototype.off=c.prototype.removeListener,c.prototype.removeAllListeners=function(e){var t,n,r;if(void 0===(n=this._events))return this;if(void 0===n.removeListener)return 0===arguments.length?(this._events=Object.create(null),this._eventsCount=0):void 0!==n&&(0==–this._eventsCount?this._events=Object.create(null):delete n),this;if(0===arguments.length){var i,a=Object.keys(n);for(r=0;r)&&this.removeAllListeners(i);return this.removeAllListeners(“removeListener”),this._events=Object.create(null),this._eventsCount=0,this}if(“function”==typeof(t=n))this.removeListener(e,t);else if(void 0!==t)for(r=t.length-1;r>=0;r–)this.removeListener(e,t);return this},c.prototype.listeners=function(e){return p(this,e,!0)},c.prototype.rawListeners=function(e){return p(this,e,!1)},c.listenerCount=function(e,t){return“function”==typeof e.listenerCount?e.listenerCount(t):m.call(e,t)},c.prototype.listenerCount=m,c.prototype.eventNames=function(){return this._eventsCount>0?r(this._events):[]}},function(e,t,n){(t=e.exports=n(54)).Stream=t,t.Readable=t,t.Writable=n(39),t.Duplex=n(10),t.Transform=n(60),t.PassThrough=n(101)},function(e,t,n){“use strict”;(function(t,r,i){var a=n(25);function o(e){var t=this;this.next=null,this.entry=null,this.finish=function(){!function(e,t,n){var r=e.entry;e.entry=null;for(;r;){var i=r.callback;t.pendingcb–,i(n),r=r.next}t.corkedRequestsFree?t.corkedRequestsFree.next=e:t.corkedRequestsFree=e}(t,e)}}e.exports=y;var c,s=!t.browser&&.indexOf(t.version.slice(0,5))>-1?r:a.nextTick;y.WritableState=g;var u=Object.create(n(20));u.inherits=n(15);var l={deprecate:n(100)},f=n(56),h=n(26).Buffer,d=i.Uint8Array||function(){};var p,m=n(57);function v(){}function g(e,t){c=c||n(10),e=e||{};var r=t instanceof c;this.objectMode=!!e.objectMode,r&&(this.objectMode=this.objectMode||!!e.writableObjectMode);var i=e.highWaterMark,u=e.writableHighWaterMark,l=this.objectMode?16:16384;this.highWaterMark=i||0===i?i:r&&(u||0===u)?u:l,this.highWaterMark=Math.floor(this.highWaterMark),this.finalCalled=!1,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1,this.destroyed=!1;var f=!1===e.decodeStrings;this.decodeStrings=!f,this.defaultEncoding=e.defaultEncoding||“utf8”,this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=function(e){!function(e,t){var n=e._writableState,r=n.sync,i=n.writecb;if(function(e){e.writing=!1,e.writecb=null,e.length-=e.writelen,e.writelen=0}(n),t)!function(e,t,n,r,i){–t.pendingcb,n?(a.nextTick(i,r),a.nextTick(_,e,t),e._writableState.errorEmitted=!0,e.emit(“error”,r)):(i®,e._writableState.errorEmitted=!0,e.emit(“error”,r),_(e,t))}(e,n,r,t,i);else{var o=S(n);o||n.corked||n.bufferProcessing||!n.bufferedRequest||x(e,n),r?s(w,e,n,o,i):w(e,n,o,i)}}(t,e)},this.writecb=null,this.writelen=0,this.bufferedRequest=null,this.lastBufferedRequest=null,this.pendingcb=0,this.prefinished=!1,this.errorEmitted=!1,this.bufferedRequestCount=0,this.corkedRequestsFree=new o(this)}function y(e){if(c=c||n(10),!(p.call(y,this)||this instanceof c))return new y(e);this._writableState=new g(e,this),this.writable=!0,e&&(“function”==typeof e.write&&(this._write=e.write),“function”==typeof e.writev&&(this._writev=e.writev),“function”==typeof e.destroy&&(this._destroy=e.destroy),“function”==typeof e.final&&(this._final=e.final)),f.call(this)}function b(e,t,n,r,i,a,o){t.writelen=r,t.writecb=o,t.writing=!0,t.sync=!0,n?e._writev(i,t.onwrite):e._write(i,a,t.onwrite),t.sync=!1}function w(e,t,n,r){n||function(e,t){0===t.length&&t.needDrain&&(t.needDrain=!1,e.emit(“drain”))}(e,t),t.pendingcb–,r(),_(e,t)}function x(e,t){t.bufferProcessing=!0;var n=t.bufferedRequest;if(e._writev&&n&&n.next){var r=t.bufferedRequestCount,i=new Array®,a=t.corkedRequestsFree;a.entry=n;for(var c=0,s=!0;n;)i=n,n.isBuf||(s=!1),n=n.next,c+=1;i.allBuffers=s,b(e,t,!0,t.length,i,“”,a.finish),t.pendingcb++,t.lastBufferedRequest=null,a.next?(t.corkedRequestsFree=a.next,a.next=null):t.corkedRequestsFree=new o(t),t.bufferedRequestCount=0}else{for(;n;){var u=n.chunk,l=n.encoding,f=n.callback;if(b(e,t,!1,t.objectMode?1:u.length,u,l,f),n=n.next,t.bufferedRequestCount–,t.writing)break}null===n&&(t.lastBufferedRequest=null)}t.bufferedRequest=n,t.bufferProcessing=!1}function S(e){return e.ending&&0===e.length&&null===e.bufferedRequest&&!e.finished&&!e.writing}function k(e,t){e._final((function(n){t.pendingcb–,n&&e.emit(“error”,n),t.prefinished=!0,e.emit(“prefinish”),_(e,t)}))}function _(e,t){var n=S(t);return n&&(!function(e,t){t.prefinished||t.finalCalled||(“function”==typeof e._final?(t.pendingcb++,t.finalCalled=!0,a.nextTick(k,e,t)):(t.prefinished=!0,e.emit(“prefinish”)))}(e,t),0===t.pendingcb&&(t.finished=!0,e.emit(“finish”))),n}u.inherits(y,f),g.prototype.getBuffer=function(){for(var e=this.bufferedRequest,t=[];e;)t.push(e),e=e.next;return t},function(){try{Object.defineProperty(g.prototype,“buffer”,{get:l.deprecate((function(){return this.getBuffer()}),“_writableState.buffer is deprecated. Use _writableState.getBuffer instead.”,“DEP0003”)})}catch(e){}}(),“function”==typeof Symbol&&Symbol.hasInstance&&“function”==typeof Function.prototype?(p=Function.prototype,Object.defineProperty(y,Symbol.hasInstance,{value:function(e){return!!p.call(this,e)||this===y&&(e&&e._writableState instanceof g)}})):p=function(e){return e instanceof this},y.prototype.pipe=function(){this.emit(“error”,new Error(“Cannot pipe, not readable”))},y.prototype.write=function(e,t,n){var r,i=this._writableState,o=!1,c=!i.objectMode&&(r=e,h.isBuffer®||r instanceof d);return c&&!h.isBuffer(e)&&(e=function(e){return h.from(e)}(e)),“function”==typeof t&&(n=t,t=null),c?t=“buffer”:t||(t=i.defaultEncoding),“function”!=typeof n&&(n=v),i.ended?function(e,t){var n=new Error(“write after end”);e.emit(“error”,n),a.nextTick(t,n)}(this,n):(c||function(e,t,n,r){var i=!0,o=!1;return null===n?o=new TypeError(“May not write null values to stream”):“string”==typeof n||void 0===n||t.objectMode||(o=new TypeError(“Invalid non-string/buffer chunk”)),o&&(e.emit(“error”,o),a.nextTick(r,o),i=!1),i}(this,i,e,n))&&(i.pendingcb++,o=function(e,t,n,r,i,a){if(!n){var o=function(e,t,n){e.objectMode||!1===e.decodeStrings||“string”!=typeof t||(t=h.from(t,n));return t}(t,r,i);r!==o&&(n=!0,i=“buffer”,r=o)}var c=t.objectMode?1:r.length;t.length+=c;var s=t.length<t.highWaterMark;s||(t.needDrain=!0);if(t.writing||t.corked){var u=t.lastBufferedRequest;t.lastBufferedRequest={chunk:r,encoding:i,isBuf:n,callback:a,next:null},u?u.next=t.lastBufferedRequest:t.bufferedRequest=t.lastBufferedRequest,t.bufferedRequestCount+=1}else b(e,t,!1,c,r,i,a);return s}(this,i,c,e,t,n)),o},y.prototype.cork=function(){this._writableState.corked++},y.prototype.uncork=function(){var e=this._writableState;e.corked&&(e.corked–,e.writing||e.corked||e.finished||e.bufferProcessing||!e.bufferedRequest||x(this,e))},y.prototype.setDefaultEncoding=function(e){if(“string”==typeof e&&(e=e.toLowerCase()),!(.indexOf((e+“”).toLowerCase())>-1))throw new TypeError(“Unknown encoding: ”+e);return this._writableState.defaultEncoding=e,this},Object.defineProperty(y.prototype,“writableHighWaterMark”,{enumerable:!1,get:function(){return this._writableState.highWaterMark}}),y.prototype._write=function(e,t,n){n(new Error(“_write() is not implemented”))},y.prototype._writev=null,y.prototype.end=function(e,t,n){var r=this._writableState;“function”==typeof e?(n=e,e=null,t=null):“function”==typeof t&&(n=t,t=null),null!=e&&this.write(e,t),r.corked&&(r.corked=1,this.uncork()),r.ending||r.finished||function(e,t,n){t.ending=!0,_(e,t),n&&(t.finished?a.nextTick(n):e.once(“finish”,n));t.ended=!0,e.writable=!1}(this,r,n)},Object.defineProperty(y.prototype,“destroyed”,{get:function(){return void 0!==this._writableState&&this._writableState.destroyed},set:function(e){this._writableState&&(this._writableState.destroyed=e)}}),y.prototype.destroy=m.destroy,y.prototype._undestroy=m.undestroy,y.prototype._destroy=function(e,t){this.end(),t(e)}}).call(this,n(24),n(58).setImmediate,n(4))},function(e,t,n){“use strict”;e.exports=f;var r,i=n(6),a=i.LongBits,o=i.base64,c=i.utf8;function s(e,t,n){this.fn=e,this.len=t,this.next=void 0,this.val=n}function u(){}function l(e){this.head=e.head,this.tail=e.tail,this.len=e.len,this.next=e.states}function f(){this.len=0,this.head=new s(u,0,0),this.tail=this.head,this.states=null}var h=function(){return i.Buffer?function(){return(f.create=function(){return new r})()}:function(){return new f}};function d(e,t,n){t=255&e}function p(e,t){this.len=e,this.next=void 0,this.val=t}function m(e,t,n){for(;e.hi;)t=127&e.lo|128,e.lo=(e.lo>>>7|e.hi<<25)>>>0,e.hi>>>=7;for(;e.lo>127;)t=127&e.lo|128,e.lo=e.lo>>>7;t=e.lo}function v(e,t,n){t=255&e,t=e>>>8&255,t=e>>>16&255,t=e>>>24}f.create=h(),f.alloc=function(e){return new i.Array(e)},i.Array!==Array&&(f.alloc=i.pool(f.alloc,i.Array.prototype.subarray)),f.prototype._push=function(e,t,n){return this.tail=this.tail.next=new s(e,t,n),this.len+=t,this},p.prototype=Object.create(s.prototype),p.prototype.fn=function(e,t,n){for(;e>127;)t=127&e|128,e>>>=7;t=e},f.prototype.uint32=function(e){return this.len+=(this.tail=this.tail.next=new p((e>>>=0)<128?1:e<16384?2:e<2097152?3:e<268435456?4:5,e)).len,this},f.prototype.int32=function(e){return e<0?this._push(m,10,a.fromNumber(e)):this.uint32(e)},f.prototype.sint32=function(e){return this.uint32((e<<1^e>>31)>>>0)},f.prototype.uint64=function(e){var t=a.from(e);return this._push(m,t.length(),t)},f.prototype.int64=f.prototype.uint64,f.prototype.sint64=function(e){var t=a.from(e).zzEncode();return this._push(m,t.length(),t)},f.prototype.bool=function(e){return this._push(d,1,e?1:0)},f.prototype.fixed32=function(e){return this._push(v,4,e>>>0)},f.prototype.sfixed32=f.prototype.fixed32,f.prototype.fixed64=function(e){var t=a.from(e);return this._push(v,4,t.lo)._push(v,4,t.hi)},f.prototype.sfixed64=f.prototype.fixed64,f.prototype.float=function(e){return this._push(i.float.writeFloatLE,4,e)},f.prototype.double=function(e){return this._push(i.float.writeDoubleLE,8,e)};var g=i.Array.prototype.set?function(e,t,n){t.set(e,n)}:function(e,t,n){for(var r=0;r=e};f.prototype.bytes=function(e){var t=e.length>>>0;if(!t)return this._push(d,1,0);if(i.isString(e)){var n=f.alloc(t=o.length(e));o.decode(e,n,0),e=n}return this.uint32(t)._push(g,t,e)},f.prototype.string=function(e){var t=c.length(e);return t?this.uint32(t)._push(c.write,t,e):this._push(d,1,0)},f.prototype.fork=function(){return this.states=new l(this),this.head=this.tail=new s(u,0,0),this.len=0,this},f.prototype.reset=function(){return this.states?(this.head=this.states.head,this.tail=this.states.tail,this.len=this.states.len,this.states=this.states.next):(this.head=this.tail=new s(u,0,0),this.len=0),this},f.prototype.ldelim=function(){var e=this.head,t=this.tail,n=this.len;return this.reset().uint32(n),n&&(this.tail.next=e.next,this.tail=t,this.len+=n),this},f.prototype.finish=function(){for(var e=this.head.next,t=this.constructor.alloc(this.len),n=0;e;)e.fn(e.val,t,n),n+=e.len,e=e.next;return t},f._configure=function(e){r=e,f.create=h(),r._configure()}},function(e,t,n){“use strict”;e.exports=s;var r,i=n(6),a=i.LongBits,o=i.utf8;function c(e,t){return RangeError(“index out of range: ”e.pos“ + ”+(t||1)+“ > ”+e.len)}function s(e){this.buf=e,this.pos=0,this.len=e.length}var u,l=“undefined”!=typeof Uint8Array?function(e){if(e instanceof Uint8Array||Array.isArray(e))return new s(e);throw Error(“illegal buffer”)}:function(e){if(Array.isArray(e))return new s(e);throw Error(“illegal buffer”)},f=function(){return i.Buffer?function(e){return(s.create=function(e){return i.Buffer.isBuffer(e)?new r(e):l(e)})(e)}:l};function h(){var e=new a(0,0),t=0;if(!(this.len-this.pos>4)){for(;t<3;++t){if(this.pos>=this.len)throw c(this);if(e.lo=(e.lo|(127&this.buf)<<7*t)>>>0,this.buf<128)return e}return e.lo=(e.lo|(127&this.buf)<<7*t)>>>0,e}for(;t<4;++t)if(e.lo=(e.lo|(127&this.buf)<<7*t)>>>0,this.buf<128)return e;if(e.lo=(e.lo|(127&this.buf)<<28)>>>0,e.hi=(e.hi|(127&this.buf)>>4)>>>0,this.buf<128)return e;if(t=0,this.len-this.pos>4){for(;t<5;++t)if(e.hi=(e.hi|(127&this.buf)<<7*t+3)>>>0,this.buf<128)return e}else for(;t<5;++t){if(this.pos>=this.len)throw c(this);if(e.hi=(e.hi|(127&this.buf)<<7*t+3)>>>0,this.buf<128)return e}throw Error(“invalid varint encoding”)}function d(e,t){return(e|e<<8|e<<16|e<<24)>>>0}function p(){if(this.pos+8>this.len)throw c(this,8);return new a(d(this.buf,this.pos+=4),d(this.buf,this.pos+=4))}s.create=f(),s.prototype._slice=i.Array.prototype.subarray||i.Array.prototype.slice,s.prototype.uint32=(u=4294967295,function(){if(u=(127&this.buf)>>>0,this.buf<128)return u;if(u=(u|(127&this.buf)<<7)>>>0,this.buf<128)return u;if(u=(u|(127&this.buf)<<14)>>>0,this.buf<128)return u;if(u=(u|(127&this.buf)<<21)>>>0,this.buf<128)return u;if(u=(u|(15&this.buf)<<28)>>>0,this.buf<128)return u;if((this.pos+=5)>this.len)throw this.pos=this.len,c(this,10);return u}),s.prototype.int32=function(){return 0|this.uint32()},s.prototype.sint32=function(){var e=this.uint32();return e>>>1^-(1&e)|0},s.prototype.bool=function(){return 0!==this.uint32()},s.prototype.fixed32=function(){if(this.pos+4>this.len)throw c(this,4);return d(this.buf,this.pos+=4)},s.prototype.sfixed32=function(){if(this.pos+4>this.len)throw c(this,4);return 0|d(this.buf,this.pos+=4)},s.prototype.float=function(){if(this.pos+4>this.len)throw c(this,4);var e=i.float.readFloatLE(this.buf,this.pos);return this.pos+=4,e},s.prototype.double=function(){if(this.pos+8>this.len)throw c(this,4);var e=i.float.readDoubleLE(this.buf,this.pos);return this.pos+=8,e},s.prototype.bytes=function(){var e=this.uint32(),t=this.pos,n=this.pos+e;if(n>this.len)throw c(this,e);return this.pos+=e,Array.isArray(this.buf)?this.buf.slice(t,n):t===n?new this.buf.constructor(0):this._slice.call(this.buf,t,n)},s.prototype.string=function(){var e=this.bytes();return o.read(e,0,e.length)},s.prototype.skip=function(e){if(“number”==typeof e){if(this.pos+e>this.len)throw c(this,e);this.pos+=e}else do{if(this.pos>=this.len)throw c(this)}while(128&this.buf);return this},s.prototype.skipType=function(e){switch(e){case 0:this.skip();break;case 1:this.skip(8);break;case 2:this.skip(this.uint32());break;case 3:for(;4!=(e=7&this.uint32());)this.skipType(e);break;case 5:this.skip(4);break;default:throw Error(“invalid wire type ”e“ at offset ”+this.pos)}return this},s._configure=function(e){r=e,s.create=f(),r._configure();var t=i.Long?“toLong”:“toNumber”;i.merge(s.prototype,{int64:function(){return h.call(this)(!1)},uint64:function(){return h.call(this)(!0)},sint64:function(){return h.call(this).zzDecode()(!1)},fixed64:function(){return p.call(this)(!0)},sfixed64:function(){return p.call(this)(!1)}})}},function(e,t,n){“use strict”;e.exports=y;var r=n(21);((y.prototype=Object.create(r.prototype)).constructor=y).className=“Type”;var i=n(5),a=n(27),o=n(11),c=n(43),s=n(44),u=n(46),l=n(41),f=n(40),h=n(3),d=n(66),p=n(67),m=n(68),v=n(69),g=n(70);function y(e,t){r.call(this,e,t),this.fields={},this.oneofs=void 0,this.extensions=void 0,this.reserved=void 0,this.group=void 0,this._fieldsById=null,this._fieldsArray=null,this._oneofsArray=null,this._ctor=null}function b(e){return e._fieldsById=e._fieldsArray=e._oneofsArray=null,delete e.encode,delete e.decode,delete e.verify,e}Object.defineProperties(y.prototype,{fieldsById:{get:function(){if(this._fieldsById)return this._fieldsById;this._fieldsById={};for(var e=Object.keys(this.fields),t=0;t<e.length;++t){var n=this.fields[e],r=n.id;if(this._fieldsById)throw Error(“duplicate id ”r“ in ”+this);this._fieldsById=n}return this._fieldsById}},fieldsArray:{get:function(){return this._fieldsArray||(this._fieldsArray=h.toArray(this.fields))}},oneofsArray:{get:function(){return this._oneofsArray||(this._oneofsArray=h.toArray(this.oneofs))}},ctor:{get:function(){return this._ctor||(this.ctor=y.generateConstructor(this)())},set:function(e){var t=e.prototype;t instanceof u||((e.prototype=new u).constructor=e,h.merge(e.prototype,t)),e.$type=e.prototype.$type=this,h.merge(e,u,!0),this._ctor=e;for(var n=0;n.resolve();var r={};for(n=0;n.resolve().name]={get:h.oneOfGetter(this._oneofsArray.oneof),set:h.oneOfSetter(this._oneofsArray.oneof)};n&&Object.defineProperties(e.prototype,r)}}}),y.generateConstructor=function(e){for(var t,n=h.codegen(,e.name),r=0;r).map?n(“this%s={}”,h.safeProp(t.name)):t.repeated&&n(“this%s=[]”,h.safeProp(t.name));return n(“if(p)for(var ks=Object.keys(p),i=0;i]!=null)”)(“this[ks]=p[ks]”)},y.fromJSON=function(e,t){var n=new y(e,t.options);n.extensions=t.extensions,n.reserved=t.reserved;for(var u=Object.keys(t.fields),l=0;l<u.length;++l)n.add((void 0!==t.fields[u].keyType?c.fromJSON:o.fromJSON)(u,t.fields[u]));if(t.oneofs)for(u=Object.keys(t.oneofs),l=0;l,t.oneofs[u]));if(t.nested)for(u=Object.keys(t.nested),l=0;l<u.length;++l){var f=t.nested[u];n.add((void 0!==f.id?o.fromJSON:void 0!==f.fields?y.fromJSON:void 0!==f.values?i.fromJSON:void 0!==f.methods?s.fromJSON:r.fromJSON)(u,f))}return t.extensions&&t.extensions.length&&(n.extensions=t.extensions),t.reserved&&t.reserved.length&&(n.reserved=t.reserved),t.group&&(n.group=!0),t.comment&&(n.comment=t.comment),n},y.prototype.toJSON=function(e){var t=r.prototype.toJSON.call(this,e),n=!!e&&Boolean(e.keepComments);return h.toObject([“options”,t&&t.options||void 0,“oneofs”,r.arrayToJSON(this.oneofsArray,e),“fields”,r.arrayToJSON(this.fieldsArray.filter((function(e){return!e.declaringField})),e)||{},“extensions”,this.extensions&&this.extensions.length?this.extensions:void 0,“reserved”,this.reserved&&this.reserved.length?this.reserved:void 0,“group”,this.group||void 0,“nested”,t&&t.nested||void 0,“comment”,n?this.comment:void 0])},y.prototype.resolveAll=function(){for(var e=this.fieldsArray,t=0;t.resolve();var n=this.oneofsArray;for(t=0;t.resolve();return r.prototype.resolveAll.call(this)},y.prototype.get=function(e){return this.fields||this.oneofs&&this.oneofs||this.nested&&this.nested||null},y.prototype.add=function(e){if(this.get(e.name))throw Error(“duplicate name '”e.name“' in ”+this);if(e instanceof o&&void 0===e.extend){if(this._fieldsById?this._fieldsById:this.fieldsById)throw Error(“duplicate id ”e.id“ in ”+this);if(this.isReservedId(e.id))throw Error(“id ”e.id“ is reserved in ”+this);if(this.isReservedName(e.name))throw Error(“name '”e.name“' is reserved in ”+this);return e.parent&&e.parent.remove(e),this.fields=e,e.message=this,e.onAdd(this),b(this)}return e instanceof a?(this.oneofs||(this.oneofs={}),this.oneofs=e,e.onAdd(this),b(this)):r.prototype.add.call(this,e)},y.prototype.remove=function(e){if(e instanceof o&&void 0===e.extend){if(!this.fields||this.fields!==e)throw Error(e+“ is not a member of ”+this);return delete this.fields,e.parent=null,e.onRemove(this),b(this)}if(e instanceof a){if(!this.oneofs||this.oneofs!==e)throw Error(e+“ is not a member of ”+this);return delete this.oneofs,e.parent=null,e.onRemove(this),b(this)}return r.prototype.remove.call(this,e)},y.prototype.isReservedId=function(e){return r.isReservedId(this.reserved,e)},y.prototype.isReservedName=function(e){return r.isReservedName(this.reserved,e)},y.prototype.create=function(e){return new this.ctor(e)},y.prototype.setup=function(){for(var e=this.fullName,t=[],n=0;n.resolve().resolvedType);this.encode=d(this)({Writer:f,types:t,util:h}),this.decode=p(this)({Reader:l,types:t,util:h}),this.verify=m(this)({types:t,util:h}),this.fromObject=v.fromObject(this)({types:t,util:h}),this.toObject=v.toObject(this)({types:t,util:h});var r=g;if®{var i=Object.create(this);i.fromObject=this.fromObject,this.fromObject=r.fromObject.bind(i),i.toObject=this.toObject,this.toObject=r.toObject.bind(i)}return this},y.prototype.encode=function(e,t){return this.setup().encode(e,t)},y.prototype.encodeDelimited=function(e,t){return this.encode(e,t&&t.len?t.fork():t).ldelim()},y.prototype.decode=function(e,t){return this.setup().decode(e,t)},y.prototype.decodeDelimited=function(e){return e instanceof l||(e=l.create(e)),this.decode(e,e.uint32())},y.prototype.verify=function(e){return this.setup().verify(e)},y.prototype.fromObject=function(e){return this.setup().fromObject(e)},y.prototype.toObject=function(e,t){return this.setup().toObject(e,t)},y.d=function(e){return function(t){h.decorateType(t,e)}}},function(e,t,n){“use strict”;e.exports=o;var r=n(11);((o.prototype=Object.create(r.prototype)).constructor=o).className=“MapField”;var i=n(17),a=n(3);function o(e,t,n,i,o,c){if(r.call(this,e,t,i,void 0,void 0,o,c),!a.isString(n))throw TypeError(“keyType must be a string”);this.keyType=n,this.resolvedKeyType=null,this.map=!0}o.fromJSON=function(e,t){return new o(e,t.id,t.keyType,t.type,t.options,t.comment)},o.prototype.toJSON=function(e){var t=!!e&&Boolean(e.keepComments);return a.toObject([“keyType”,this.keyType,“type”,this.type,“id”,this.id,“extend”,this.extend,“options”,this.options,“comment”,t?this.comment:void 0])},o.prototype.resolve=function(){if(this.resolved)return this;if(void 0===i.mapKey)throw Error(“invalid key type: ”+this.keyType);return r.prototype.resolve.call(this)},o.d=function(e,t,n){return“function”==typeof n?n=a.decorateType(n).name:n&&“object”==typeof n&&(n=a.decorateEnum(n).name),function(r,i){a.decorateType(r.constructor).add(new o(i,e,t,n))}}},function(e,t,n){“use strict”;e.exports=c;var r=n(21);((c.prototype=Object.create(r.prototype)).constructor=c).className=“Service”;var i=n(45),a=n(3),o=n(64);function c(e,t){r.call(this,e,t),this.methods={},this._methodsArray=null}function s(e){return e._methodsArray=null,e}c.fromJSON=function(e,t){var n=new c(e,t.options);if(t.methods)for(var r=Object.keys(t.methods),a=0;a,t.methods[r]));return t.nested&&n.addJSON(t.nested),n.comment=t.comment,n},c.prototype.toJSON=function(e){var t=r.prototype.toJSON.call(this,e),n=!!e&&Boolean(e.keepComments);return a.toObject([“options”,t&&t.options||void 0,“methods”,r.arrayToJSON(this.methodsArray,e)||{},“nested”,t&&t.nested||void 0,“comment”,n?this.comment:void 0])},Object.defineProperty(c.prototype,“methodsArray”,{get:function(){return this._methodsArray||(this._methodsArray=a.toArray(this.methods))}}),c.prototype.get=function(e){return this.methods||r.prototype.get.call(this,e)},c.prototype.resolveAll=function(){for(var e=this.methodsArray,t=0;t.resolve();return r.prototype.resolve.call(this)},c.prototype.add=function(e){if(this.get(e.name))throw Error(“duplicate name '”e.name“' in ”+this);return e instanceof i?(this.methods=e,e.parent=this,s(this)):r.prototype.add.call(this,e)},c.prototype.remove=function(e){if(e instanceof i){if(this.methods!==e)throw Error(e+“ is not a member of ”+this);return delete this.methods,e.parent=null,s(this)}return r.prototype.remove.call(this,e)},c.prototype.create=function(e,t,n){for(var r,i=new o.Service(e,t,n),c=0;c<this.methodsArray.length;++c){var s=a.lcFirst((r=this._methodsArray).resolve().name).replace(//g,“”);i=a.codegen(,a.isReserved(s)?s+“_”:s)(“return this.rpcCall(m,q,s,r,c)”)({m:r,q:r.resolvedRequestType.ctor,s:r.resolvedResponseType.ctor})}return i}},function(e,t,n){“use strict”;e.exports=a;var r=n(16);((a.prototype=Object.create(r.prototype)).constructor=a).className=“Method”;var i=n(3);function a(e,t,n,a,o,c,s,u){if(i.isObject(o)?(s=o,o=c=void 0):i.isObject©&&(s=c,c=void 0),void 0!==t&&!i.isString(t))throw TypeError(“type must be a string”);if(!i.isString(n))throw TypeError(“requestType must be a string”);if(!i.isString(a))throw TypeError(“responseType must be a string”);r.call(this,e,s),this.type=t||“rpc”,this.requestType=n,this.requestStream=!!o||void 0,this.responseType=a,this.responseStream=!!c||void 0,this.resolvedRequestType=null,this.resolvedResponseType=null,this.comment=u}a.fromJSON=function(e,t){return new a(e,t.type,t.requestType,t.responseType,t.requestStream,t.responseStream,t.options,t.comment)},a.prototype.toJSON=function(e){var t=!!e&&Boolean(e.keepComments);return i.toObject([“type”,“rpc”!==this.type&&this.type||void 0,“requestType”,this.requestType,“requestStream”,this.requestStream,“responseType”,this.responseType,“responseStream”,this.responseStream,“options”,this.options,“comment”,t?this.comment:void 0])},a.prototype.resolve=function(){return this.resolved?this:(this.resolvedRequestType=this.parent.lookupType(this.requestType),this.resolvedResponseType=this.parent.lookupType(this.responseType),r.prototype.resolve.call(this))}},function(e,t,n){“use strict”;e.exports=i;var r=n(6);function i(e){if(e)for(var t=Object.keys(e),n=0;n]=e[t]}i.create=function(e){return this.$type.create(e)},i.encode=function(e,t){return this.$type.encode(e,t)},i.encodeDelimited=function(e,t){return this.$type.encodeDelimited(e,t)},i.decode=function(e){return this.$type.decode(e)},i.decodeDelimited=function(e){return this.$type.decodeDelimited(e)},i.verify=function(e){return this.$type.verify(e)},i.fromObject=function(e){return this.$type.fromObject(e)},i.toObject=function(e,t){return this.$type.toObject(e,t)},i.prototype.toJSON=function(){return this.$type.toObject(this,r.toJSONOptions)}},function(e,t,n){“use strict”;e.exports=f;var r=n(21);((f.prototype=Object.create(r.prototype)).constructor=f).className=“Root”;var i,a,o,c=n(11),s=n(5),u=n(27),l=n(3);function f(e){r.call(this,“”,e),this.deferred=[],this.files=}function h(){}f.fromJSON=function(e,t){return t||(t=new f),e.options&&t.setOptions(e.options),t.addJSON(e.nested)},f.prototype.resolvePath=l.path.resolve,f.prototype.fetch=l.fetch,f.prototype.load=function e(t,n,r){“function”==typeof n&&(r=n,n=void 0);var i=this;if(!r)return l.asPromise(e,i,t,n);var c=r===h;function s(e,t){if®{var n=r;if(r=null,c)throw e;n(e,t)}}function u(e){var t=e.lastIndexOf(“google/protobuf/”);if(t>-1){var n=e.substring(t);if(n in o)return n}return null}function f(e,t){try{if(l.isString(t)&&“{”===t.charAt(0)&&(t=JSON.parse(t)),l.isString(t)){a.filename=e;var r,o=a(t,i,n),f=0;if(o.imports)for(;f)||i.resolvePath(e,o.imports))&&d®;if(o.weakImports)for(f=0;f)||i.resolvePath(e,o.weakImports))&&d(r,!0)}else i.setOptions(t.options).addJSON(t.nested)}catch(e){s(e)}c||p||s(null,i)}function d(e,t){if(!(i.files.indexOf(e)>-1))if(i.files.push(e),e in o)c?f(e,o):(++p,setTimeout((function(){–p,f(e,o)})));else if©{var n;try{n=l.fs.readFileSync(e).toString(“utf8”)}catch(e){return void(t||s(e))}f(e,n)}else++p,i.fetch(e,(function(n,a){–p,r&&(n?t?p||s(null,i):s(n):f(e,a))}))}var p=0;l.isString(t)&&(t=);for(var m,v=0;v))&&d(m);if©return i;p||s(null,i)},f.prototype.loadSync=function(e,t){if(!l.isNode)throw Error(“not supported”);return this.load(e,t,h)},f.prototype.resolveAll=function(){if(this.deferred.length)throw Error(“unresolvable extensions: ”+this.deferred.map((function(e){return“'extend ”e.extend“' in ”+e.parent.fullName})).join(“, ”));return r.prototype.resolveAll.call(this)};var d=/^/;function p(e,t){var n=t.parent.lookup(t.extend);if(n){var r=new c(t.fullName,t.id,t.type,t.rule,void 0,t.options);return r.declaringField=t,t.extensionField=r,n.add®,!0}return!1}f.prototype._handleAdd=function(e){if(e instanceof c)void 0===e.extend||e.extensionField||p(0,e)||this.deferred.push(e);else if(e instanceof s)d.test(e.name)&&(e.parent=e.values);else if(!(e instanceof u)){if(e instanceof i)for(var t=0;t)?this.deferred.splice(t,1):++t;for(var n=0;n);d.test(e.name)&&(e.parent=e)}},f.prototype._handleRemove=function(e){if(e instanceof c){if(void 0!==e.extend)if(e.extensionField)e.extensionField.parent.remove(e.extensionField),e.extensionField=null;else{var t=this.deferred.indexOf(e);t>-1&&this.deferred.splice(t,1)}}else if(e instanceof s)d.test(e.name)&&delete e.parent;else if(e instanceof r){for(var n=0;n);d.test(e.name)&&delete e.parent}},f._configure=function(e,t,n){i=e,a=t,o=n}},function(e,t,n){“use strict”;var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,“__esModule”,{value:!0});var i=r(n(0)),a=r(n(8));t.default=function(e){var t=e.tags;return t?i.default.createElement(“ul”,{className:“cucumber-tags”},t.map((function(e,t){return i.default.createElement(“li”,{className:“cucumber-tag”,key:t},i.default.createElement(a.default,{text:e.name}))}))):null}},function(e,t,n){“use strict”;Object.defineProperty(t,“__esModule”,{value:!0});var r=n(142);t.ArrayMultimap=r.ArrayMultimap;var i=n(143);t.SetMultimap=i.SetMultimap},function(e,t,n){“use strict”;Object.defineProperty(t,“__esModule”,{value:!0});var r=n(2);t.default=function(e){var t=r.messages.Location.create(e);return 0===t.line&&(t.line=void 0),0===t.column&&(t.column=void 0),t}},function(e,t,n){“use strict”;Object.defineProperty(t,“__esModule”,{value:!0});var r=n(2);t.default=function(e,t){return new r.messages.Envelope({source:new r.messages.Source({data:e,uri:t,mediaType:“text/x.cucumber.gherkin+plain”})})}},function(e,t,n){“use strict”;var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,“__esModule”,{value:!0});var i=r(n(0));t.default=i.default.createContext(null)},function(e,t,n){“use strict”;(function(e,r){function i(e){return(i=“function”==typeof Symbol&&“symbol”==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&“function”==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?“symbol”:typeof e})(e)}function a(e,t){for(var n=0;n<t.length;n++){var r=t;r.enumerable=r.enumerable||!1,r.configurable=!0,“value”in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e=n,e}function c(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments?arguments:{},r=Object.keys(n);“function”==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),r.forEach((function(t){o(e,t,n)}))}return e}function s(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,c=e();!(r=(o=c.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{r||null==c.return||c.return()}finally{if(i)throw a}}return n}(e,t)||function(){throw new TypeError(“Invalid attempt to destructure non-iterable instance”)}()}n.d(t,“a”,(function(){return _e})),n.d(t,“b”,(function(){return ke}));var u=function(){},l={},f={},h={mark:u,measure:u};try{“undefined”!=typeof window&&(l=window),“undefined”!=typeof document&&(f=document),“undefined”!=typeof MutationObserver&&MutationObserver,“undefined”!=typeof performance&&(h=performance)}catch(e){}var d=(l.navigator||{}).userAgent,p=void 0===d?“”:d,m=l,v=f,g=h,y=(m.document,!!v.documentElement&&!!v.head&&“function”==typeof v.addEventListener&&“function”==typeof v.createElement),b=(~p.indexOf(“MSIE”)||p.indexOf(“Trident/”),function(){try{}catch(e){return!1}}(),[1,2,3,4,5,6,7,8,9,10]),w=b.concat(),x={GROUP:“group”,SWAP_OPACITY:“swap-opacity”,PRIMARY:“primary”,SECONDARY:“secondary”},S=(.concat(b.map((function(e){return“”.concat(e,“x”)}))).concat(w.map((function(e){return“w-”.concat(e)}))),m.FontAwesomeConfig||{});if(v&&“function”==typeof v.querySelector){[[“data-family-prefix”,“familyPrefix”],,[“data-auto-replace-svg”,“autoReplaceSvg”],,[“data-auto-a11y”,“autoA11y”],,[“data-observe-mutations”,“observeMutations”],,[“data-keep-original-source”,“keepOriginalSource”],,[“data-show-missing-icons”,“showMissingIcons”]].forEach((function(e){var t=s(e,2),n=t,r=t,i=function(e){return“”===e||“false”!==e&&(“true”===e||e)}(function(e){var t=v.querySelector(“script”);if(t)return t.getAttribute(e)}(n));null!=i&&(S=i)}))}var k=c({},{familyPrefix:“fa”,replacementClass:“svg-inline–fa”,autoReplaceSvg:!0,autoAddCss:!0,autoA11y:!0,searchPseudoElements:!1,observeMutations:!0,mutateApproach:“async”,keepOriginalSource:!0,measurePerformance:!1,showMissingIcons:!0},S);k.autoReplaceSvg||(k.observeMutations=!1);var _=c({},k);m.FontAwesomeConfig=_;var z=m||{};z.FONT_AWESOME||(z.FONT_AWESOME={}),z.FONT_AWESOME.styles||(z.FONT_AWESOME.styles={}),z.FONT_AWESOME.hooks||(z.FONT_AWESOME.hooks={}),z.FONT_AWESOME.shims||(z.FONT_AWESOME.shims=[]);var C=z.FONT_AWESOME,M=[];y&&((v.documentElement.doScroll?/^loaded|^c/:/^loaded|^i|^c/).test(v.readyState)||v.addEventListener(“DOMContentLoaded”,(function e(){v.removeEventListener(“DOMContentLoaded”,e),1,M.map((function(e){return e()}))})));var O,T=function(){},E=void 0!==e&&void 0!==e.process&&“function”==typeof e.process.emit,L=void 0===r?setTimeout:r,A=[];function R(){for(var e=0;e[0](A[1]);A=[],O=!1}function N(e,t){A.push(),O||(O=!0,L(R,0))}function H(e){var t=e.owner,n=t._state,r=t._data,i=e,a=e.then;if(“function”==typeof i){n=“fulfilled”;try{r=i®}catch(e){D(a,e)}}P(a,r)||(“fulfilled”===n&&j(a,r),“rejected”===n&&D(a,r))}function P(e,t){var n;try{if(e===t)throw new TypeError(“A promises callback cannot return that same promise.”);if(t&&(“function”==typeof t||“object”===i(t))){var r=t.then;if(“function”==typeof r)return r.call(t,(function®{n||(n=!0,t===r?V(e,r):j(e,r))}),(function(t){n||(n=!0,D(e,t))})),!0}}catch(t){return n||D(e,t),!0}return!1}function j(e,t){e!==t&&P(e,t)||V(e,t)}function V(e,t){“pending”===e._state&&(e._state=“settled”,e._data=t,N(F,e))}function D(e,t){“pending”===e._state&&(e._state=“settled”,e._data=t,N(B,e))}function I(e){e._then=e._then.forEach(H)}function F(e){e._state=“fulfilled”,I(e)}function B(t){t._state=“rejected”,I(t),!t._handled&&E&&e.process.emit(“unhandledRejection”,t._data,t)}function U(t){e.process.emit(“rejectionHandled”,t)}function q(e){if(“function”!=typeof e)throw new TypeError(“Promise resolver ”e“ is not a function”);if(this instanceof q==!1)throw new TypeError(“Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.”);this._then=[],function(e,t){function n(e){D(t,e)}try{e((function(e){j(t,e)}),n)}catch(e){n(e)}}(e,this)}q.prototype={constructor:q,_state:“pending”,_then:null,_data:void 0,_handled:!1,then:function(e,t){var n={owner:this,then:new this.constructor(T),fulfilled:e,rejected:t};return!t&&!e||this._handled||(this._handled=!0,“rejected”===this._state&&E&&N(U,this)),“fulfilled”===this._state||“rejected”===this._state?N(H,n):this._then.push(n),n.then},catch:function(e){return this.then(null,e)}},q.all=function(e){if(!Array.isArray(e))throw new TypeError(“You must pass an array to Promise.all().”);return new q((function(t,n){var r=[],i=0;function a(e){return i++,function(n){r=n,–i||t®}}for(var o,c=0;c)&&“function”==typeof o.then?o.then(a©,n):r=o;i||t®}))},q.race=function(e){if(!Array.isArray(e))throw new TypeError(“You must pass an array to Promise.race().”);return new q((function(t,n){for(var r,i=0;i)&&“function”==typeof r.then?r.then(t,n):t®}))},q.resolve=function(e){return e&&“object”===i(e)&&e.constructor===q?e:new q((function(t){t(e)}))},q.reject=function(e){return new q((function(t,n){n(e)}))};var G={size:16,x:0,y:0,rotate:0,flipX:!1,flipY:!1};function W(e){if(e&&y){var t=v.createElement(“style”);t.setAttribute(“type”,“text/css”),t.innerHTML=e;for(var n=v.head.childNodes,r=null,i=n.length-1;i>-1;i–){var a=n,o=(a.tagName||“”).toUpperCase();.indexOf(o)>-1&&(r=a)}return v.head.insertBefore(t,r),e}}function Z(){for(var e=12,t=“”;e– >0;)t+=“0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ”;return t}function $(e){return“”.concat(e).replace(/&/g,“&amp;”).replace(/“/g,”&quot;“).replace(/'/g,”&#39;“).replace(/</g,”&lt;“).replace(/>/g,”&gt;“)}function J(e){return Object.keys(e||{}).reduce((function(t,n){return t+”“.concat(n,”: “).concat(e,”;“)}),”“)}function K(e){return e.size!==G.size||e.x!==G.x||e.y!==G.y||e.rotate!==G.rotate||e.flipX||e.flipY}function Q(e){var t=e.transform,n=e.containerWidth,r=e.iconWidth,i={transform:”translate(“.concat(n/2,” 256)“)},a=”translate(“.concat(32*t.x,”, “).concat(32*t.y,”) “),o=”scale(“.concat(t.size/16*(t.flipX?-1:1),”, “).concat(t.size/16*(t.flipY?-1:1),”) “),c=”rotate(“.concat(t.rotate,” 0 0)“);return{outer:i,inner:{transform:”“.concat(a,” “).concat(o,” “).concat©},path:{transform:”translate(“.concat(r/2*-1,” -256)“)}}}var Y={x:0,y:0,width:”100%“,height:”100%“};function X(e){var t=!(arguments.length>1&&void 0!==arguments)||arguments;return e.attributes&&(e.attributes.fill||t)&&(e.attributes.fill=”black“),e}function ee(e){var t=e.icons,n=t.main,r=t.mask,i=e.prefix,a=e.iconName,o=e.transform,s=e.symbol,u=e.title,l=e.maskId,f=e.titleId,h=e.extra,d=e.watchable,p=void 0!==d&&d,m=r.found?r:n,v=m.width,g=m.height,y=”fa-w-“.concat(Math.ceil(v/g*16)),b=.filter((function(e){return-1===h.classes.indexOf(e)})).concat(h.classes).join(” “),w={children:[],attributes:c({},h.attributes,{”data-prefix“:i,”data-icon“:a,class:b,role:h.attributes.role||”img“,xmlns:”www.w3.org/2000/svg“,viewBox:”0 0 “.concat(v,” “).concat(g)})};p&&(w.attributes=”“),u&&w.children.push({tag:”title“,attributes:{id:w.attributes||”title-“.concat(f||Z())},children:});var x=c({},w,{prefix:i,iconName:a,main:n,mask:r,maskId:l,transform:o,symbol:s,styles:h.styles}),S=r.found&&n.found?function(e){var t,n=e.children,r=e.attributes,i=e.main,a=e.mask,o=e.maskId,s=e.transform,u=i.width,l=i.icon,f=a.width,h=a.icon,d=Q({transform:s,containerWidth:f,iconWidth:u}),p={tag:”rect“,attributes:c({},Y,{fill:”white“})},m=l.children?{children:l.children.map(X)}:{},v={tag:”g“,attributes:c({},d.inner),children:},g={tag:”g“,attributes:c({},d.outer),children:},y=”mask-“.concat(o||Z()),b=”clip-“.concat(o||Z()),w={tag:”mask“,attributes:c({},Y,{id:y,maskUnits:”userSpaceOnUse“,maskContentUnits:”userSpaceOnUse“}),children:},x={tag:”defs“,children:[{tag:”clipPath“,attributes:{id:b},children:(t=h,”g“===t.tag?t.children:)},w]};return n.push(x,{tag:”rect“,attributes:c({fill:”currentColor“,”clip-path“:”url(#“.concat(b,”)“),mask:”url(#“.concat(y,”)“)},Y)}),{children:n,attributes:r}}(x):function(e){var t=e.children,n=e.attributes,r=e.main,i=e.transform,a=J(e.styles);if(a.length>0&&(n.style=a),K(i)){var o=Q({transform:i,containerWidth:r.width,iconWidth:r.width});t.push({tag:”g“,attributes:c({},o.outer),children:[{tag:”g“,attributes:c({},o.inner),children:}]})}else t.push(r.icon);return{children:t,attributes:n}}(x),k=S.children,z=S.attributes;return x.children=k,x.attributes=z,s?function(e){var t=e.prefix,n=e.iconName,r=e.children,i=e.attributes,a=e.symbol;return[{tag:”svg“,attributes:{style:”display: none;“},children:}]}(x):function(e){var t=e.children,n=e.main,r=e.mask,i=e.attributes,a=e.styles,o=e.transform;if(K(o)&&n.found&&!r.found){var s={x:n.width/n.height/2,y:.5};i.style=J(c({},a,{”transform-origin“:”“.concat(s.x+o.x/16,”em “).concat(s.y+o.y/16,”em“)}))}return}(x)}var te=function(){},ne=(_.measurePerformance&&g&&g.mark&&g.measure,function(e,t,n,r){var i,a,o,c=Object.keys(e),s=c.length,u=void 0!==r?function(e,t){return function(n,r,i,a){return e.call(t,n,r,i,a)}}(t,r):t;for(void 0===n?(i=1,o=e[c]):(i=0,o=n);i],a,e);return o});function re(e,t){var n=arguments.length>2&&void 0!==arguments?arguments:{},r=n.skipHooks,i=void 0!==r&&r,a=Object.keys(t).reduce((function(e,n){var r=t;return!!r.icon?e=r.icon:e=r,e}),{});”function“!=typeof C.hooks.addPack||i?C.styles=c({},C.styles||{},a):C.hooks.addPack(e,a),”fas“===e&&re(”fa“,t)}var ie=C.styles,ae=C.shims,oe=function(){var e=function(e){return ne(ie,(function(t,n,r){return t=ne(n,e,{}),t}),{})};e((function(e,t,n){return t&&(e[t]=n),e})),e((function(e,t,n){var r=t;return e=n,r.forEach((function(t){e=n})),e}));var t=”far“in ie;ne(ae,(function(e,n){var r=n,i=n,a=n;return”far“!==i||t||(i=”fas“),e={prefix:i,iconName:a},e}),{})};oe();C.styles;function ce(e,t,n){if(e&&e&&e[n])return{prefix:t,iconName:n,icon:e[n]}}function se(e){var t=e.tag,n=e.attributes,r=void 0===n?{}:n,i=e.children,a=void 0===i?[]:i;return”string“==typeof e?$(e):”<“.concat(t,” “).concat(function(e){return Object.keys(e||{}).reduce((function(t,n){return t+”“.concat(n,‘=”’).concat($(e),'“ ')}),”“).trim()}®,”>“).concat(a.map(se).join(”“),”</“).concat(t,”>“)}var ue=function(e){var t={size:16,x:0,y:0,flipX:!1,flipY:!1,rotate:0};return e?e.toLowerCase().split(” “).reduce((function(e,t){var n=t.toLowerCase().split(”-“),r=n,i=n.slice(1).join(”-“);if(r&&”h“===i)return e.flipX=!0,e;if(r&&”v“===i)return e.flipY=!0,e;if(i=parseFloat(i),isNaN(i))return e;switch®{case”grow“:e.size=e.size+i;break;case”shrink“:e.size=e.size-i;break;case”left“:e.x=e.x-i;break;case”right“:e.x=e.x+i;break;case”up“:e.y=e.y-i;break;case”down“:e.y=e.y+i;break;case”rotate“:e.rotate=e.rotate+i}return e}),t):t};function le(e){this.name=”MissingIcon“,this.message=e||”Icon unavailable“,this.stack=(new Error).stack}le.prototype=Object.create(Error.prototype),le.prototype.constructor=le;var fe={fill:”currentColor“},he={attributeType:”XML“,repeatCount:”indefinite“,dur:”2s“},de={tag:”path“,attributes:c({},fe,{d:”M156.5,447.7l-12.6,29.5c-18.7-9.5-35.9-21.2-51.5-34.9l22.7-22.7C127.6,430.5,141.5,440,156.5,447.7z M40.6,272H8.5 c1.4,21.2,5.4,41.7,11.7,61.1L50,321.2C45.1,305.5,41.8,289,40.6,272z M40.6,240c1.4-18.8,5.2-37,11.1-54.1l-29.5-12.6 C14.7,194.3,10,216.7,8.5,240H40.6z M64.3,156.5c7.8-14.9,17.2-28.8,28.1-41.5L69.7,92.3c-13.7,15.6-25.5,32.8-34.9,51.5 L64.3,156.5z M397,419.6c-13.9,12-29.4,22.3-46.1,30.4l11.9,29.8c20.7-9.9,39.8-22.6,56.9-37.6L397,419.6z M115,92.4 c13.9-12,29.4-22.3,46.1-30.4l-11.9-29.8c-20.7,9.9-39.8,22.6-56.8,37.6L115,92.4z M447.7,355.5c-7.8,14.9-17.2,28.8-28.1,41.5 l22.7,22.7c13.7-15.6,25.5-32.9,34.9-51.5L447.7,355.5z M471.4,272c-1.4,18.8-5.2,37-11.1,54.1l29.5,12.6 c7.5-21.1,12.2-43.5,13.6-66.8H471.4z M321.2,462c-15.7,5-32.2,8.2-49.2,9.4v32.1c21.2-1.4,41.7-5.4,61.1-11.7L321.2,462z M240,471.4c-18.8-1.4-37-5.2-54.1-11.1l-12.6,29.5c21.1,7.5,43.5,12.2,66.8,13.6V471.4z M462,190.8c5,15.7,8.2,32.2,9.4,49.2h32.1 c-1.4-21.2-5.4-41.7-11.7-61.1L462,190.8z M92.4,397c-12-13.9-22.3-29.4-30.4-46.1l-29.8,11.9c9.9,20.7,22.6,39.8,37.6,56.9 L92.4,397z M272,40.6c18.8,1.4,36.9,5.2,54.1,11.1l12.6-29.5C317.7,14.7,295.3,10,272,8.5V40.6z M190.8,50 c15.7-5,32.2-8.2,49.2-9.4V8.5c-21.2,1.4-41.7,5.4-61.1,11.7L190.8,50z M442.3,92.3L419.6,115c12,13.9,22.3,29.4,30.5,46.1 l29.8-11.9C470,128.5,457.3,109.4,442.3,92.3z M397,92.4l22.7-22.7c-15.6-13.7-32.8-25.5-51.5-34.9l-12.6,29.5 C370.4,72.1,384.4,81.5,397,92.4z“})},pe=c({},he,{attributeName:”opacity“});c({},fe,{cx:”256“,cy:”364“,r:”28“}),c({},he,{attributeName:”r“,values:”28;14;28;28;14;28;“}),c({},pe,{values:”1;0;1;1;0;1;“}),c({},fe,{opacity:”1“,d:”M263.7,312h-16c-6.6,0-12-5.4-12-12c0-71,77.4-63.9,77.4-107.8c0-20-17.8-40.2-57.4-40.2c-29.1,0-44.3,9.6-59.2,28.7 c-3.9,5-11.1,6-16.2,2.4l-13.1-9.2c-5.6-3.9-6.9-11.8-2.6-17.2c21.2-27.2,46.4-44.7,91.2-44.7c52.3,0,97.4,29.8,97.4,80.2 c0,67.6-77.4,63.5-77.4,107.8C275.7,306.6,270.3,312,263.7,312z“}),c({},pe,{values:”1;0;0;0;0;1;“}),c({},fe,{opacity:”0“,d:”M232.5,134.5l7,168c0.3,6.4,5.6,11.5,12,11.5h9c6.4,0,11.7-5.1,12-11.5l7-168c0.3-6.8-5.2-12.5-12-12.5h-23 C237.7,122,232.2,127.7,232.5,134.5z“}),c({},pe,{values:”0;0;1;1;0;0;“}),C.styles;function me(e){var t=e,n=e,r=s(e.slice(4),1);return{found:!0,width:t,height:n,icon:Array.isArray®?{tag:”g“,attributes:{class:”“.concat(_.familyPrefix,”-“).concat(x.GROUP)},children:[{tag:”path“,attributes:{class:”“.concat(_.familyPrefix,”-“).concat(x.SECONDARY),fill:”currentColor“,d:r}},{tag:”path“,attributes:{class:”“.concat(_.familyPrefix,”-“).concat(x.PRIMARY),fill:”currentColor“,d:r}}]}:{tag:”path“,attributes:{fill:”currentColor“,d:r}}}}C.styles;function ve(){var e=”svg-inline–fa“,t=_.familyPrefix,n=_.replacementClass,r='svg:not(:root).svg-inline–fa {n overflow: visible;n}nn.svg-inline–fa {n display: inline-block;n font-size: inherit;n height: 1em;n overflow: visible;n vertical-align: -0.125em;n}n.svg-inline–fa.fa-lg {n vertical-align: -0.225em;n}n.svg-inline–fa.fa-w-1 {n width: 0.0625em;n}n.svg-inline–fa.fa-w-2 {n width: 0.125em;n}n.svg-inline–fa.fa-w-3 {n width: 0.1875em;n}n.svg-inline–fa.fa-w-4 {n width: 0.25em;n}n.svg-inline–fa.fa-w-5 {n width: 0.3125em;n}n.svg-inline–fa.fa-w-6 {n width: 0.375em;n}n.svg-inline–fa.fa-w-7 {n width: 0.4375em;n}n.svg-inline–fa.fa-w-8 {n width: 0.5em;n}n.svg-inline–fa.fa-w-9 {n width: 0.5625em;n}n.svg-inline–fa.fa-w-10 {n width: 0.625em;n}n.svg-inline–fa.fa-w-11 {n width: 0.6875em;n}n.svg-inline–fa.fa-w-12 {n width: 0.75em;n}n.svg-inline–fa.fa-w-13 {n width: 0.8125em;n}n.svg-inline–fa.fa-w-14 {n width: 0.875em;n}n.svg-inline–fa.fa-w-15 {n width: 0.9375em;n}n.svg-inline–fa.fa-w-16 {n width: 1em;n}n.svg-inline–fa.fa-w-17 {n width: 1.0625em;n}n.svg-inline–fa.fa-w-18 {n width: 1.125em;n}n.svg-inline–fa.fa-w-19 {n width: 1.1875em;n}n.svg-inline–fa.fa-w-20 {n width: 1.25em;n}n.svg-inline–fa.fa-pull-left {n margin-right: 0.3em;n width: auto;n}n.svg-inline–fa.fa-pull-right {n margin-left: 0.3em;n width: auto;n}n.svg-inline–fa.fa-border {n height: 1.5em;n}n.svg-inline–fa.fa-li {n width: 2em;n}n.svg-inline–fa.fa-fw {n width: 1.25em;n}nn.fa-layers svg.svg-inline–fa {n bottom: 0;n left: 0;n margin: auto;n position: absolute;n right: 0;n top: 0;n}nn.fa-layers {n display: inline-block;n height: 1em;n position: relative;n text-align: center;n vertical-align: -0.125em;n width: 1em;n}n.fa-layers svg.svg-inline–fa {n -webkit-transform-origin: center center;n transform-origin: center center;n}nn.fa-layers-counter, .fa-layers-text {n display: inline-block;n position: absolute;n text-align: center;n}nn.fa-layers-text {n left: 50%;n top: 50%;n -webkit-transform: translate(-50%, -50%);n transform: translate(-50%, -50%);n -webkit-transform-origin: center center;n transform-origin: center center;n}nn.fa-layers-counter {n background-color: ff253a;n border-radius: 1em;n -webkit-box-sizing: border-box;n box-sizing: border-box;n color: fff;n height: 1.5em;n line-height: 1;n max-width: 5em;n min-width: 1.5em;n overflow: hidden;n padding: 0.25em;n right: 0;n text-overflow: ellipsis;n top: 0;n -webkit-transform: scale(0.25);n transform: scale(0.25);n -webkit-transform-origin: top right;n transform-origin: top right;n}nn.fa-layers-bottom-right {n bottom: 0;n right: 0;n top: auto;n -webkit-transform: scale(0.25);n transform: scale(0.25);n -webkit-transform-origin: bottom right;n transform-origin: bottom right;n}nn.fa-layers-bottom-left {n bottom: 0;n left: 0;n right: auto;n top: auto;n -webkit-transform: scale(0.25);n transform: scale(0.25);n -webkit-transform-origin: bottom left;n transform-origin: bottom left;n}nn.fa-layers-top-right {n right: 0;n top: 0;n -webkit-transform: scale(0.25);n transform: scale(0.25);n -webkit-transform-origin: top right;n transform-origin: top right;n}nn.fa-layers-top-left {n left: 0;n right: auto;n top: 0;n -webkit-transform: scale(0.25);n transform: scale(0.25);n -webkit-transform-origin: top left;n transform-origin: top left;n}nn.fa-lg {n font-size: 1.3333333333em;n line-height: 0.75em;n vertical-align: -0.0667em;n}nn.fa-xs {n font-size: 0.75em;n}nn.fa-sm {n font-size: 0.875em;n}nn.fa-1x {n font-size: 1em;n}nn.fa-2x {n font-size: 2em;n}nn.fa-3x {n font-size: 3em;n}nn.fa-4x {n font-size: 4em;n}nn.fa-5x {n font-size: 5em;n}nn.fa-6x {n font-size: 6em;n}nn.fa-7x {n font-size: 7em;n}nn.fa-8x {n font-size: 8em;n}nn.fa-9x {n font-size: 9em;n}nn.fa-10x {n font-size: 10em;n}nn.fa-fw {n text-align: center;n width: 1.25em;n}nn.fa-ul {n list-style-type: none;n margin-left: 2.5em;n padding-left: 0;n}n.fa-ul > li {n position: relative;n}nn.fa-li {n left: -2em;n position: absolute;n text-align: center;n width: 2em;n line-height: inherit;n}nn.fa-border {n border: solid 0.08em eee;n border-radius: 0.1em;n padding: 0.2em 0.25em 0.15em;n}nn.fa-pull-left {n float: left;n}nn.fa-pull-right {n float: right;n}nn.fa.fa-pull-left,n.fas.fa-pull-left,n.far.fa-pull-left,n.fal.fa-pull-left,n.fab.fa-pull-left {n margin-right: 0.3em;n}n.fa.fa-pull-right,n.fas.fa-pull-right,n.far.fa-pull-right,n.fal.fa-pull-right,n.fab.fa-pull-right {n margin-left: 0.3em;n}nn.fa-spin {n -webkit-animation: fa-spin 2s infinite linear;n animation: fa-spin 2s infinite linear;n}nn.fa-pulse {n -webkit-animation: fa-spin 1s infinite steps(8);n animation: fa-spin 1s infinite steps(8);n}nn@-webkit-keyframes fa-spin {n 0% {n -webkit-transform: rotate(0deg);n transform: rotate(0deg);n }n 100% {n -webkit-transform: rotate(360deg);n transform: rotate(360deg);n }n}nn@keyframes fa-spin {n 0% {n -webkit-transform: rotate(0deg);n transform: rotate(0deg);n }n 100% {n -webkit-transform: rotate(360deg);n transform: rotate(360deg);n }n}n.fa-rotate-90 {n -ms-filter: ”progid:DXImageTransform.Microsoft.BasicImage(rotation=1)“;n -webkit-transform: rotate(90deg);n transform: rotate(90deg);n}nn.fa-rotate-180 {n -ms-filter: ”progid:DXImageTransform.Microsoft.BasicImage(rotation=2)“;n -webkit-transform: rotate(180deg);n transform: rotate(180deg);n}nn.fa-rotate-270 {n -ms-filter: ”progid:DXImageTransform.Microsoft.BasicImage(rotation=3)“;n -webkit-transform: rotate(270deg);n transform: rotate(270deg);n}nn.fa-flip-horizontal {n -ms-filter: ”progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)“;n -webkit-transform: scale(-1, 1);n transform: scale(-1, 1);n}nn.fa-flip-vertical {n -ms-filter: ”progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)“;n -webkit-transform: scale(1, -1);n transform: scale(1, -1);n}nn.fa-flip-both, .fa-flip-horizontal.fa-flip-vertical {n -ms-filter: ”progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)“;n -webkit-transform: scale(-1, -1);n transform: scale(-1, -1);n}nn: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:root .fa-flip-both {n -webkit-filter: none;n filter: none;n}nn.fa-stack {n display: inline-block;n height: 2em;n position: relative;n width: 2.5em;n}nn.fa-stack-1x,n.fa-stack-2x {n bottom: 0;n left: 0;n margin: auto;n position: absolute;n right: 0;n top: 0;n}nn.svg-inline–fa.fa-stack-1x {n height: 1em;n width: 1.25em;n}n.svg-inline–fa.fa-stack-2x {n height: 2em;n width: 2.5em;n}nn.fa-inverse {n color: fff;n}nn.sr-only {n border: 0;n clip: rect(0, 0, 0, 0);n height: 1px;n margin: -1px;n overflow: hidden;n padding: 0;n position: absolute;n width: 1px;n}nn.sr-only-focusable:active, .sr-only-focusable:focus {n clip: auto;n height: auto;n margin: 0;n overflow: visible;n position: static;n width: auto;n}nn.svg-inline–fa .fa-primary {n fill: var(–fa-primary-color, currentColor);n opacity: 1;n opacity: var(–fa-primary-opacity, 1);n}nn.svg-inline–fa .fa-secondary {n fill: var(–fa-secondary-color, currentColor);n opacity: 0.4;n opacity: var(–fa-secondary-opacity, 0.4);n}nn.svg-inline–fa.fa-swap-opacity .fa-primary {n opacity: 0.4;n opacity: var(–fa-secondary-opacity, 0.4);n}nn.svg-inline–fa.fa-swap-opacity .fa-secondary {n opacity: 1;n opacity: var(–fa-primary-opacity, 1);n}nn.svg-inline–fa mask .fa-primary,n.svg-inline–fa mask .fa-secondary {n fill: black;n}nn.fad.fa-inverse {n color: fff;n}';if(”fa“!==t||n!==e){var i=new RegExp(”\.“.concat(”fa“,”\-“),”g“),a=new RegExp(”\–“.concat(”fa“,”\-“),”g“),o=new RegExp(”\.“.concat(e),”g“);r=r.replace(i,”.“.concat(t,”-“)).replace(a,”–“.concat(t,”-“)).replace(o,”.“.concat(n))}return r}function ge(){_.autoAddCss&&!Se&&(W(ve()),Se=!0)}function ye(e,t){return Object.defineProperty(e,”abstract“,{get:t}),Object.defineProperty(e,”html“,{get:function(){return e.abstract.map((function(e){return se(e)}))}}),Object.defineProperty(e,”node“,{get:function(){if(y){var t=v.createElement(”div“);return t.innerHTML=e.html,t.children}}}),e}function be(e){var t=e.prefix,n=void 0===t?”fa“:t,r=e.iconName;if®return ce(xe.definitions,n,r)||ce(C.styles,n,r)}var we,xe=new(function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError(”Cannot call a class as a function“)}(this,e),this.definitions={}}var t,n,r;return t=e,(n=[{key:”add“,value:function(){for(var e=this,t=arguments.length,n=new Array(t),r=0;r=arguments;var i=n.reduce(this._pullDefinitions,{});Object.keys(i).forEach((function(t){e.definitions=c({},e.definitions||{},i),re(t,i),oe()}))}},{key:”reset“,value:function(){this.definitions={}}},{key:”_pullDefinitions“,value:function(e,t){var n=t.prefix&&t.iconName&&t.icon?{0:t}:t;return Object.keys(n).map((function(t){var r=n,i=r.prefix,a=r.iconName,o=r.icon;e||(e={}),e[a]=o})),e}}])&&a(t.prototype,n),r&&a(t,r),e}()),Se=!1,ke={transform:function(e){return ue(e)}},_e=(we=function(e){var t=arguments.length>1&&void 0!==arguments?arguments:{},n=t.transform,r=void 0===n?G:n,i=t.symbol,a=void 0!==i&&i,o=t.mask,s=void 0===o?null:o,u=t.maskId,l=void 0===u?null:u,f=t.title,h=void 0===f?null:f,d=t.titleId,p=void 0===d?null:d,m=t.classes,v=void 0===m?[]:m,g=t.attributes,y=void 0===g?{}:g,b=t.styles,w=void 0===b?{}:b;if(e){var x=e.prefix,S=e.iconName,k=e.icon;return ye(c({type:”icon“},e),(function(){return ge(),_.autoA11y&&(h?y=”“.concat(_.replacementClass,”-title-“).concat(p||Z()):(y=”true“,y.focusable=”false“)),ee({icons:{main:me(k),mask:s?me(s.icon):{found:!1,width:null,height:null,icon:{}}},prefix:x,iconName:S,transform:c({},G,r),symbol:a,title:h,maskId:l,titleId:p,extra:{attributes:y,styles:w,classes:v}})}))}},function(e){var t=arguments.length>1&&void 0!==arguments?arguments:{},n=(e||{}).icon?e:be(e||{}),r=t.mask;return r&&(r=(r||{}).icon?r:be(r||{})),we(n,c({},t,{mask:r}))})}).call(this,n(4),n(58).setImmediate)},function(e,t,n){”use strict“;(function(t,r){var i=n(25);e.exports=b;var a,o=n(55);b.ReadableState=y;n(37).EventEmitter;var c=function(e,t){return e.listeners(t).length},s=n(56),u=n(26).Buffer,l=t.Uint8Array||function(){};var f=Object.create(n(20));f.inherits=n(15);var h=n(96),d=void 0;d=h&&h.debuglog?h.debuglog(”stream“):function(){};var p,m=n(97),v=n(57);f.inherits(b,s);var g=;function y(e,t){e=e||{};var r=t instanceof(a=a||n(10));this.objectMode=!!e.objectMode,r&&(this.objectMode=this.objectMode||!!e.readableObjectMode);var i=e.highWaterMark,o=e.readableHighWaterMark,c=this.objectMode?16:16384;this.highWaterMark=i||0===i?i:r&&(o||0===o)?o:c,this.highWaterMark=Math.floor(this.highWaterMark),this.buffer=new m,this.length=0,this.pipes=null,this.pipesCount=0,this.flowing=null,this.ended=!1,this.endEmitted=!1,this.reading=!1,this.sync=!0,this.needReadable=!1,this.emittedReadable=!1,this.readableListening=!1,this.resumeScheduled=!1,this.destroyed=!1,this.defaultEncoding=e.defaultEncoding||”utf8“,this.awaitDrain=0,this.readingMore=!1,this.decoder=null,this.encoding=null,e.encoding&&(p||(p=n(59).StringDecoder),this.decoder=new p(e.encoding),this.encoding=e.encoding)}function b(e){if(a=a||n(10),!(this instanceof b))return new b(e);this._readableState=new y(e,this),this.readable=!0,e&&(”function“==typeof e.read&&(this._read=e.read),”function“==typeof e.destroy&&(this._destroy=e.destroy)),s.call(this)}function w(e,t,n,r,i){var a,o=e._readableState;null===t?(o.reading=!1,function(e,t){if(t.ended)return;if(t.decoder){var n=t.decoder.end();n&&n.length&&(t.buffer.push(n),t.length+=t.objectMode?1:n.length)}t.ended=!0,k(e)}(e,o)):(i||(a=function(e,t){var n;r=t,u.isBuffer®||r instanceof l||”string“==typeof t||void 0===t||e.objectMode||(n=new TypeError(”Invalid non-string/buffer chunk“));var r;return n}(o,t)),a?e.emit(”error“,a):o.objectMode||t&&t.length>0?(”string“==typeof t||o.objectMode||Object.getPrototypeOf(t)===u.prototype||(t=function(e){return u.from(e)}(t)),r?o.endEmitted?e.emit(”error“,new Error(”stream.unshift() after end event“)):x(e,o,t,!0):o.ended?e.emit(”error“,new Error(”stream.push() after EOF“)):(o.reading=!1,o.decoder&&!n?(t=o.decoder.write(t),o.objectMode||0!==t.length?x(e,o,t,!1):z(e,o)):x(e,o,t,!1))):r||(o.reading=!1));return function(e){return!e.ended&&(e.needReadable||e.length<e.highWaterMark||0===e.length)}(o)}function x(e,t,n,r){t.flowing&&0===t.length&&!t.sync?(e.emit(”data“,n),e.read(0)):(t.length+=t.objectMode?1:n.length,r?t.buffer.unshift(n):t.buffer.push(n),t.needReadable&&k(e)),z(e,t)}Object.defineProperty(b.prototype,”destroyed“,{get:function(){return void 0!==this._readableState&&this._readableState.destroyed},set:function(e){this._readableState&&(this._readableState.destroyed=e)}}),b.prototype.destroy=v.destroy,b.prototype._undestroy=v.undestroy,b.prototype._destroy=function(e,t){this.push(null),t(e)},b.prototype.push=function(e,t){var n,r=this._readableState;return r.objectMode?n=!0:”string“==typeof e&&((t=t||r.defaultEncoding)!==r.encoding&&(e=u.from(e,t),t=”“),n=!0),w(this,e,t,!1,n)},b.prototype.unshift=function(e){return w(this,e,null,!0,!1)},b.prototype.isPaused=function(){return!1===this._readableState.flowing},b.prototype.setEncoding=function(e){return p||(p=n(59).StringDecoder),this._readableState.decoder=new p(e),this._readableState.encoding=e,this};function S(e,t){return e<=0||0===t.length&&t.ended?0:t.objectMode?1:e!=e?t.flowing&&t.length?t.buffer.head.data.length:t.length:(e>t.highWaterMark&&(t.highWaterMark=function(e){return e>=8388608?e=8388608:(e–,e|=e>>>1,e|=e>>>2,e|=e>>>4,e|=e>>>8,e|=e>>>16,e++),e}(e)),e<=t.length?e:t.ended?t.length:(t.needReadable=!0,0))}function k(e){var t=e._readableState;t.needReadable=!1,t.emittedReadable||(d(”emitReadable“,t.flowing),t.emittedReadable=!0,t.sync?i.nextTick(_,e):_(e))}function _(e){d(”emit readable“),e.emit(”readable“),T(e)}function z(e,t){t.readingMore||(t.readingMore=!0,i.nextTick(C,e,t))}function C(e,t){for(var n=t.length;!t.reading&&!t.flowing&&!t.ended&&t.length<t.highWaterMark&&(d(”maybeReadMore read 0“),e.read(0),n!==t.length);)n=t.length;t.readingMore=!1}function M(e){d(”readable nexttick read 0“),e.read(0)}function O(e,t){t.reading||(d(”resume read 0“),e.read(0)),t.resumeScheduled=!1,t.awaitDrain=0,e.emit(”resume“),T(e),t.flowing&&!t.reading&&e.read(0)}function T(e){var t=e._readableState;for(d(”flow“,t.flowing);t.flowing&&null!==e.read(););}function E(e,t){return 0===t.length?null:(t.objectMode?n=t.buffer.shift():!e||e>=t.length?(n=t.decoder?t.buffer.join(”“):1===t.buffer.length?t.buffer.head.data:t.buffer.concat(t.length),t.buffer.clear()):n=function(e,t,n){var r;e<t.head.data.length?(r=t.head.data.slice(0,e),t.head.data=t.head.data.slice(e)):r=e===t.head.data.length?t.shift():n?function(e,t){var n=t.head,r=1,i=n.data;e-=i.length;for(;n=n.next;){var a=n.data,o=e>a.length?a.length:e;if(o===a.length?i+=a:i+=a.slice(0,e),0===(e-=o)){o===a.length?(++r,n.next?t.head=n.next:t.head=t.tail=null):(t.head=n,n.data=a.slice(o));break}++r}return t.length-=r,i}(e,t):function(e,t){var n=u.allocUnsafe(e),r=t.head,i=1;r.data.copy(n),e-=r.data.length;for(;r=r.next;){var a=r.data,o=e>a.length?a.length:e;if(a.copy(n,n.length-e,0,o),0===(e-=o)){o===a.length?(++i,r.next?t.head=r.next:t.head=t.tail=null):(t.head=r,r.data=a.slice(o));break}++i}return t.length-=i,n}(e,t);return r}(e,t.buffer,t.decoder),n);var n}function L(e){var t=e._readableState;if(t.length>0)throw new Error('”endReadable()“ called on non-empty stream');t.endEmitted||(t.ended=!0,i.nextTick(A,t,e))}function A(e,t){e.endEmitted||0!==e.length||(e.endEmitted=!0,t.readable=!1,t.emit(”end“))}function R(e,t){for(var n=0,r=e.length;n===t)return n;return-1}b.prototype.read=function(e){d(”read“,e),e=parseInt(e,10);var t=this._readableState,n=e;if(0!==e&&(t.emittedReadable=!1),0===e&&t.needReadable&&(t.length>=t.highWaterMark||t.ended))return d(”read: emitReadable“,t.length,t.ended),0===t.length&&t.ended?L(this):k(this),null;if(0===(e=S(e,t))&&t.ended)return 0===t.length&&L(this),null;var r,i=t.needReadable;return d(”need readable“,i),(0===t.length||t.length-e<t.highWaterMark)&&d(”length less than watermark“,i=!0),t.ended||t.reading?d(”reading or ended“,i=!1):i&&(d(”do read“),t.reading=!0,t.sync=!0,0===t.length&&(t.needReadable=!0),this._read(t.highWaterMark),t.sync=!1,t.reading||(e=S(n,t))),null===(r=e>0?E(e,t):null)?(t.needReadable=!0,e=0):t.length-=e,0===t.length&&(t.ended||(t.needReadable=!0),n!==e&&t.ended&&L(this)),null!==r&&this.emit(”data“,r),r},b.prototype._read=function(e){this.emit(”error“,new Error(”_read() is not implemented“))},b.prototype.pipe=function(e,t){var n=this,a=this._readableState;switch(a.pipesCount){case 0:a.pipes=e;break;case 1:a.pipes=;break;default:a.pipes.push(e)}a.pipesCount+=1,d(”pipe count=%d opts=%j“,a.pipesCount,t);var s=(!t||!1!==t.end)&&e!==r.stdout&&e!==r.stderr?l:b;function u(t,r){d(”onunpipe“),t===n&&r&&!1===r.hasUnpiped&&(r.hasUnpiped=!0,d(”cleanup“),e.removeListener(”close“,g),e.removeListener(”finish“,y),e.removeListener(”drain“,f),e.removeListener(”error“,v),e.removeListener(”unpipe“,u),n.removeListener(”end“,l),n.removeListener(”end“,b),n.removeListener(”data“,m),h=!0,!a.awaitDrain||e._writableState&&!e._writableState.needDrain||f())}function l(){d(”onend“),e.end()}a.endEmitted?i.nextTick(s):n.once(”end“,s),e.on(”unpipe“,u);var f=function(e){return function(){var t=e._readableState;d(”pipeOnDrain“,t.awaitDrain),t.awaitDrain&&t.awaitDrain–,0===t.awaitDrain&&c(e,”data“)&&(t.flowing=!0,T(e))}}(n);e.on(”drain“,f);var h=!1;var p=!1;function m(t){d(”ondata“),p=!1,!1!==e.write(t)||p||((1===a.pipesCount&&a.pipes===e||a.pipesCount>1&&-1!==R(a.pipes,e))&&!h&&(d(”false write response, pause“,n._readableState.awaitDrain),n._readableState.awaitDrain++,p=!0),n.pause())}function v(t){d(”onerror“,t),b(),e.removeListener(”error“,v),0===c(e,”error“)&&e.emit(”error“,t)}function g(){e.removeListener(”finish“,y),b()}function y(){d(”onfinish“),e.removeListener(”close“,g),b()}function b(){d(”unpipe“),n.unpipe(e)}return n.on(”data“,m),function(e,t,n){if(”function“==typeof e.prependListener)return e.prependListener(t,n);e._events&&e._events?o(e._events)?e._events.unshift(n):e._events=[n,e._events]:e.on(t,n)}(e,”error“,v),e.once(”close“,g),e.once(”finish“,y),e.emit(”pipe“,n),a.flowing||(d(”pipe resume“),n.resume()),e},b.prototype.unpipe=function(e){var t=this._readableState,n={hasUnpiped:!1};if(0===t.pipesCount)return this;if(1===t.pipesCount)return e&&e!==t.pipes||(e||(e=t.pipes),t.pipes=null,t.pipesCount=0,t.flowing=!1,e&&e.emit(”unpipe“,this,n)),this;if(!e){var r=t.pipes,i=t.pipesCount;t.pipes=null,t.pipesCount=0,t.flowing=!1;for(var a=0;a.emit(”unpipe“,this,n);return this}var o=R(t.pipes,e);return-1===o||(t.pipes.splice(o,1),t.pipesCount-=1,1===t.pipesCount&&(t.pipes=t.pipes),e.emit(”unpipe“,this,n)),this},b.prototype.on=function(e,t){var n=s.prototype.on.call(this,e,t);if(”data“===e)!1!==this._readableState.flowing&&this.resume();else if(”readable“===e){var r=this._readableState;r.endEmitted||r.readableListening||(r.readableListening=r.needReadable=!0,r.emittedReadable=!1,r.reading?r.length&&k(this):i.nextTick(M,this))}return n},b.prototype.addListener=b.prototype.on,b.prototype.resume=function(){var e=this._readableState;return e.flowing||(d(”resume“),e.flowing=!0,function(e,t){t.resumeScheduled||(t.resumeScheduled=!0,i.nextTick(O,e,t))}(this,e)),this},b.prototype.pause=function(){return d(”call pause flowing=%j“,this._readableState.flowing),!1!==this._readableState.flowing&&(d(”pause“),this._readableState.flowing=!1,this.emit(”pause“)),this},b.prototype.wrap=function(e){var t=this,n=this._readableState,r=!1;for(var i in e.on(”end“,(function(){if(d(”wrapped end“),n.decoder&&!n.ended){var e=n.decoder.end();e&&e.length&&t.push(e)}t.push(null)})),e.on(”data“,(function(i){(d(”wrapped data“),n.decoder&&(i=n.decoder.write(i)),n.objectMode&&null==i)||(n.objectMode||i&&i.length)&&(t.push(i)||(r=!0,e.pause()))})),e)void 0===this&&”function“==typeof e&&(this=function(t){return function(){return e.apply(e,arguments)}}(i));for(var a=0;a,this.emit.bind(this,g));return this._read=function(t){d(”wrapped _read“,t),r&&(r=!1,e.resume())},this},Object.defineProperty(b.prototype,”readableHighWaterMark“,{enumerable:!1,get:function(){return this._readableState.highWaterMark}}),b._fromList=E}).call(this,n(4),n(24))},function(e,t){var n={}.toString;e.exports=Array.isArray||function(e){return”[object Array]“==n.call(e)}},function(e,t,n){e.exports=n(37).EventEmitter},function(e,t,n){”use strict“;var r=n(25);function i(e,t){e.emit(”error“,t)}e.exports={destroy:function(e,t){var n=this,a=this._readableState&&this._readableState.destroyed,o=this._writableState&&this._writableState.destroyed;return a||o?(t?t(e):!e||this._writableState&&this._writableState.errorEmitted||r.nextTick(i,this,e),this):(this._readableState&&(this._readableState.destroyed=!0),this._writableState&&(this._writableState.destroyed=!0),this._destroy(e||null,(function(e){!t&&e?(r.nextTick(i,n,e),n._writableState&&(n._writableState.errorEmitted=!0)):t&&t(e)})),this)},undestroy:function(){this._readableState&&(this._readableState.destroyed=!1,this._readableState.reading=!1,this._readableState.ended=!1,this._readableState.endEmitted=!1),this._writableState&&(this._writableState.destroyed=!1,this._writableState.ended=!1,this._writableState.ending=!1,this._writableState.finished=!1,this._writableState.errorEmitted=!1)}}},function(e,t,n){(function(e){var r=void 0!==e&&e||”undefined“!=typeof self&&self||window,i=Function.prototype.apply;function a(e,t){this._id=e,this._clearFn=t}t.setTimeout=function(){return new a(i.call(setTimeout,r,arguments),clearTimeout)},t.setInterval=function(){return new a(i.call(setInterval,r,arguments),clearInterval)},t.clearTimeout=t.clearInterval=function(e){e&&e.close()},a.prototype.unref=a.prototype.ref=function(){},a.prototype.close=function(){this._clearFn.call(r,this._id)},t.enroll=function(e,t){clearTimeout(e._idleTimeoutId),e._idleTimeout=t},t.unenroll=function(e){clearTimeout(e._idleTimeoutId),e._idleTimeout=-1},t._unrefActive=t.active=function(e){clearTimeout(e._idleTimeoutId);var t=e._idleTimeout;t>=0&&(e._idleTimeoutId=setTimeout((function(){e._onTimeout&&e._onTimeout()}),t))},n(99),t.setImmediate=”undefined“!=typeof self&&self.setImmediate||void 0!==e&&e.setImmediate||this&&this.setImmediate,t.clearImmediate=”undefined“!=typeof self&&self.clearImmediate||void 0!==e&&e.clearImmediate||this&&this.clearImmediate}).call(this,n(4))},function(e,t,n){”use strict“;var r=n(26).Buffer,i=r.isEncoding||function(e){switch((e=”“+e)&&e.toLowerCase()){case”hex“:case”utf8“:case”utf-8“:case”ascii“:case”binary“:case”base64“:case”ucs2“:case”ucs-2“:case”utf16le“:case”utf-16le“:case”raw“:return!0;default:return!1}};function a(e){var t;switch(this.encoding=function(e){var t=function(e){if(!e)return”utf8“;for(var t;;)switch(e){case”utf8“:case”utf-8“:return”utf8“;case”ucs2“:case”ucs-2“:case”utf16le“:case”utf-16le“:return”utf16le“;case”latin1“:case”binary“:return”latin1“;case”base64“:case”ascii“:case”hex“:return e;default:if(t)return;e=(”“+e).toLowerCase(),t=!0}}(e);if(”string“!=typeof t&&(r.isEncoding===i||!i(e)))throw new Error(”Unknown encoding: “+e);return t||e}(e),this.encoding){case”utf16le“:this.text=s,this.end=u,t=4;break;case”utf8“:this.fillLast=c,t=4;break;case”base64“:this.text=l,this.end=f,t=3;break;default:return this.write=h,void(this.end=d)}this.lastNeed=0,this.lastTotal=0,this.lastChar=r.allocUnsafe(t)}function o(e){return e<=127?0:e>>5==6?2:e>>4==14?3:e>>3==30?4:e>>6==2?-1:-2}function c(e){var t=this.lastTotal-this.lastNeed,n=function(e,t,n){if(128!=(192&t))return e.lastNeed=0,”�“;if(e.lastNeed>1&&t.length>1){if(128!=(192&t))return e.lastNeed=1,”�“;if(e.lastNeed>2&&t.length>2&&128!=(192&t))return e.lastNeed=2,”�“}}(this,e);return void 0!==n?n:this.lastNeed<=e.length?(e.copy(this.lastChar,t,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal)):(e.copy(this.lastChar,t,0,e.length),void(this.lastNeed-=e.length))}function s(e,t){if((e.length-t)%2==0){var n=e.toString(”utf16le“,t);if(n){var r=n.charCodeAt(n.length-1);if(r>=55296&&r<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar=e,this.lastChar=e,n.slice(0,-1)}return n}return this.lastNeed=1,this.lastTotal=2,this.lastChar=e,e.toString(”utf16le“,t,e.length-1)}function u(e){var t=e&&e.length?this.write(e):”“;if(this.lastNeed){var n=this.lastTotal-this.lastNeed;return t+this.lastChar.toString(”utf16le“,0,n)}return t}function l(e,t){var n=(e.length-t)%3;return 0===n?e.toString(”base64“,t):(this.lastNeed=3-n,this.lastTotal=3,1===n?this.lastChar=e:(this.lastChar=e,this.lastChar=e),e.toString(”base64“,t,e.length-n))}function f(e){var t=e&&e.length?this.write(e):”“;return this.lastNeed?t+this.lastChar.toString(”base64“,0,3-this.lastNeed):t}function h(e){return e.toString(this.encoding)}function d(e){return e&&e.length?this.write(e):”“}t.StringDecoder=a,a.prototype.write=function(e){if(0===e.length)return”“;var t,n;if(this.lastNeed){if(void 0===(t=this.fillLast(e)))return”“;n=this.lastNeed,this.lastNeed=0}else n=0;return n<e.length?t?t+this.text(e,n):this.text(e,n):t||”“},a.prototype.end=function(e){var t=e&&e.length?this.write(e):”“;return this.lastNeed?t+”�“:t},a.prototype.text=function(e,t){var n=function(e,t,n){var r=t.length-1;if(r<n)return 0;var i=o(t);if(i>=0)return i>0&&(e.lastNeed=i-1),i;if(–r<n||-2===i)return 0;if((i=o(t))>=0)return i>0&&(e.lastNeed=i-2),i;if(–r<n||-2===i)return 0;if((i=o(t))>=0)return i>0&&(2===i?i=0:e.lastNeed=i-3),i;return 0}(this,e,t);if(!this.lastNeed)return e.toString(”utf8“,t);this.lastTotal=n;var r=e.length-(n-this.lastNeed);return e.copy(this.lastChar,0,r),e.toString(”utf8“,t,r)},a.prototype.fillLast=function(e){if(this.lastNeed<=e.length)return e.copy(this.lastChar,this.lastTotal-this.lastNeed,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);e.copy(this.lastChar,this.lastTotal-this.lastNeed,0,e.length),this.lastNeed-=e.length}},function(e,t,n){”use strict“;e.exports=o;var r=n(10),i=Object.create(n(20));function a(e,t){var n=this._transformState;n.transforming=!1;var r=n.writecb;if(!r)return this.emit(”error“,new Error(”write callback called multiple times“));n.writechunk=null,n.writecb=null,null!=t&&this.push(t),r(e);var i=this._readableState;i.reading=!1,(i.needReadable||i.length<i.highWaterMark)&&this._read(i.highWaterMark)}function o(e){if(!(this instanceof o))return new o(e);r.call(this,e),this._transformState={afterTransform:a.bind(this),needTransform:!1,transforming:!1,writecb:null,writechunk:null,writeencoding:null},this._readableState.needReadable=!0,this._readableState.sync=!1,e&&(”function“==typeof e.transform&&(this._transform=e.transform),”function“==typeof e.flush&&(this._flush=e.flush)),this.on(”prefinish“,c)}function c(){var e=this;”function“==typeof this._flush?this._flush((function(t,n){s(e,t,n)})):s(this,null,null)}function s(e,t,n){if(t)return e.emit(”error“,t);if(null!=n&&e.push(n),e._writableState.length)throw new Error(”Calling transform done when ws.length != 0“);if(e._transformState.transforming)throw new Error(”Calling transform done when still transforming“);return e.push(null)}i.inherits=n(15),i.inherits(o,r),o.prototype.push=function(e,t){return this._transformState.needTransform=!1,r.prototype.push.call(this,e,t)},o.prototype._transform=function(e,t,n){throw new Error(”_transform() is not implemented“)},o.prototype._write=function(e,t,n){var r=this._transformState;if(r.writecb=n,r.writechunk=e,r.writeencoding=t,!r.transforming){var i=this._readableState;(r.needTransform||i.needReadable||i.length<i.highWaterMark)&&this._read(i.highWaterMark)}},o.prototype._read=function(e){var t=this._transformState;null!==t.writechunk&&t.writecb&&!t.transforming?(t.transforming=!0,this._transform(t.writechunk,t.writeencoding,t.afterTransform)):t.needTransform=!0},o.prototype._destroy=function(e,t){var n=this;r.prototype._destroy.call(this,e,(function(e){t(e),n.emit(”close“)}))}},function(e,t,n){”use strict“;var r=t;function i(){r.util._configure(),r.Writer._configure(r.BufferWriter),r.Reader._configure(r.BufferReader)}r.build=”minimal“,r.Writer=n(40),r.BufferWriter=n(117),r.Reader=n(41),r.BufferReader=n(118),r.util=n(6),r.rpc=n(64),r.roots=n(65),r.configure=i,i()},function(e,t,n){”use strict“;e.exports=function(e,t){var n=new Array(arguments.length-1),r=0,i=2,a=!0;for(;i=arguments;return new Promise((function(i,o){n=function(e){if(a)if(a=!1,e)o(e);else{for(var t=new Array(arguments.length-1),n=0;n=arguments;i.apply(null,t)}};try{e.apply(t||null,n)}catch(e){a&&(a=!1,o(e))}}))}},function(module,exports,webpack_require){”use strict“;function inquire(moduleName){try{var mod=eval(”quire“.replace(/^/,”re“))(moduleName);if(mod&&(mod.length||Object.keys(mod).length))return mod}catch(e){}return null}module.exports=inquire},function(e,t,n){”use strict“;t.Service=n(119)},function(e,t,n){”use strict“;e.exports={}},function(e,t,n){”use strict“;e.exports=function(e){for(var t,n=a.codegen(,e.name+”$encode“)(”if(!w)“)(”w=Writer.create()“),c=e.fieldsArray.slice().sort(a.compareFieldsById),s=0;s<c.length;++s){var u=c.resolve(),l=e._fieldsArray.indexOf(u),f=u.resolvedType instanceof r?”int32“:u.type,h=i.basic;t=”m“+a.safeProp(u.name),u.map?(n(”if(%s!=null&&Object.hasOwnProperty.call(m,%j)){“,t,u.name)(”for(var ks=Object.keys(%s),i=0;i<ks.length;++i){“,t)(”w.uint32(%i).fork().uint32(%i).%s(ks)“,(u.id<<3|2)>>>0,8|i.mapKey,u.keyType),void 0===h?n(”types.encode(%s[ks],w.uint32(18).fork()).ldelim().ldelim()“,l,t):n(”.uint32(%i).%s(%s[ks]).ldelim()“,16|h,f,t),n(”}“)(”}“)):u.repeated?(n(”if(%s!=null&&%s.length){“,t,t),u.packed&&void 0!==i.packed?n(”w.uint32(%i).fork()“,(u.id<<3|2)>>>0)(”for(var i=0;i<%s.length;++i)",t)("w.%s(%s)“,f,t)(”w.ldelim()“):(n(”for(var i=0;i<%s.length;++i)“,t),void 0===h?o(n,u,l,t+”“):n(”w.uint32(%i).%s(%s)“,(u.id<<3|h)>>>0,f,t)),n(”}“)):(u.optional&&n(”if(%s!=null&&Object.hasOwnProperty.call(m,%j))“,t,u.name),void 0===h?o(n,u,l,t):n(”w.uint32(%i).%s(%s)“,(u.id<<3|h)>>>0,f,t))}return n(”return w“)};var r=n(5),i=n(17),a=n(3);function o(e,t,n,r){return t.resolvedType.group?e(”types.encode(%s,w.uint32(%i)).uint32(%i)“,n,r,(t.id<<3|3)>>>0,(t.id<<3|4)>>>0):e(”types.encode(%s,w.uint32(%i).fork()).ldelim()“,n,r,(t.id<<3|2)>>>0)}},function(e,t,n){”use strict“;e.exports=function(e){var t=a.codegen(,e.name+”$decode“)(”if(!(r instanceof Reader))“)(”r=Reader.create®“)(”var c=l===undefined?r.len:r.pos+l,m=new this.ctor“+(e.fieldsArray.filter((function(e){return e.map})).length?”,k,value“:”“))(”while(r.pos<c){“)(”var t=r.uint32()“);e.group&&t(”if((t&7)===4)“)(”break“);t(”switch(t>>>3){“);for(var n=0;n<e.fieldsArray.length;++n){var c=e._fieldsArray.resolve(),s=c.resolvedType instanceof r?”int32“:c.type,u=”m“+a.safeProp(c.name);t(”case %i:“,c.id),c.map?(t(”if(%s===util.emptyObject)“,u)(”%s={}“,u)(”var c2 = r.uint32()+r.pos“),void 0!==i.defaults?t(”k=%j“,i.defaults):t(”k=null“),void 0!==i.defaults?t(”value=%j“,i.defaults):t(”value=null“),t(”while(r.pos<c2){“)(”var tag2=r.uint32()“)(”switch(tag2>>>3){“)(”case 1: k=r.%s(); break“,c.keyType)(”case 2:“),void 0===i.basic?t(”value=types.decode(r,r.uint32())“,n):t(”value=r.%s()“,s),t(”break“)(”default:“)(”r.skipType(tag2&7)“)(”break“)(”}“)(”}“),void 0!==i.long?t('%s[typeof k===”object“?util.longToHash(k):k]=value’,u):t(”%s=value“,u)):c.repeated?(t(”if(!(%s&&%s.length))“,u,u)(”%s=[]“,u),void 0!==i.packed&&t(”if((t&7)===2){“)(”var c2=r.uint32()+r.pos“)(”while(r.pos<c2)“)(”%s.push(r.%s())“,u,s)(”}else“),void 0===i.basic?t(c.resolvedType.group?”%s.push(types.decode®)“:”%s.push(types.decode(r,r.uint32()))“,u,n):t(”%s.push(r.%s())“,u,s)):void 0===i.basic?t(c.resolvedType.group?”%s=types.decode®“:”%s=types.decode(r,r.uint32())“,u,n):t(”%s=r.%s()“,u,s),t(”break“)}for(t(”default:“)(”r.skipType(t&7)“)(”break“)(”}“)(”}“),n=0;n<e._fieldsArray.length;++n){var l=e._fieldsArray;l.required&&t(”if(!m.hasOwnProperty(%j))“,l.name)(”throw util.ProtocolError(%j,{instance:m})“,o(l))}return t(”return m“)};var r=n(5),i=n(17),a=n(3);function o(e){return”missing required '“e.name”'“}},function(e,t,n){”use strict“;e.exports=function(e){var t=i.codegen(,e.name+”$verify“)('if(typeof m!==”object“||m===null)')(”return%j“,”object expected“),n=e.oneofsArray,r={};n.length&&t(”var p={}“);for(var s=0;s<e.fieldsArray.length;++s){var u=e._fieldsArray.resolve(),l=”m“+i.safeProp(u.name);if(u.optional&&t(”if(%s!=null&&m.hasOwnProperty(%j)){“,l,u.name),u.map)t(”if(!util.isObject(%s))“,l)(”return%j“,a(u,”object“))(”var k=Object.keys(%s)“,l)(”for(var i=0;i<k.length;++i){“),c(t,u,”k“),o(t,u,s,l+”[k]“)(”}“);else if(u.repeated)t(”if(!Array.isArray(%s))“,l)(”return%j“,a(u,”array“))(”for(var i=0;i<%s.length;++i){“,l),o(t,u,s,l+”“)(”}“);else{if(u.partOf){var f=i.safeProp(u.partOf.name);1===r&&t(”if(p%s===1)“,f)(”return%j“,u.partOf.name+”: multiple values“),r=1,t(”p%s=1“,f)}o(t,u,s,l)}u.optional&&t(”}“)}return t(”return null“)};var r=n(5),i=n(3);function a(e,t){return e.name+”: “t(e.repeated&&”array“!==t?”[]“:e.map&&”object“!==t?”{k:“e.keyType”}“:”“)+” expected“}function o(e,t,n,i){if(t.resolvedType)if(t.resolvedType instanceof r){e(”switch(%s){“,i)(”default:“)(”return%j“,a(t,”enum value“));for(var o=Object.keys(t.resolvedType.values),c=0;c<o.length;++c)e(”case %i:“,t.resolvedType.values[o]);e(”break“)(”}“)}else e(”{“)(”var e=types.verify(%s);“,n,i)(”if(e)“)(”return%j+e“,t.name+”.“)(”}“);else switch(t.type){case”int32“:case”uint32“:case”sint32“:case”fixed32“:case”sfixed32“:e(”if(!util.isInteger(%s))“,i)(”return%j“,a(t,”integer“));break;case”int64“:case”uint64“:case”sint64“:case”fixed64“:case”sfixed64“:e(”if(!util.isInteger(%s)&&!(%s&&util.isInteger(%s.low)&&util.isInteger(%s.high)))“,i,i,i,i)(”return%j“,a(t,”integer|Long“));break;case”float“:case”double“:e('if(typeof %s!==”number“)',i)(”return%j“,a(t,”number“));break;case”bool“:e('if(typeof %s!==”boolean“)',i)(”return%j“,a(t,”boolean“));break;case”string“:e(”if(!util.isString(%s))“,i)(”return%j“,a(t,”string“));break;case”bytes“:e('if(!(%s&&typeof %s.length===”number“||util.isString(%s)))',i,i,i)(”return%j“,a(t,”buffer“))}return e}function c(e,t,n){switch(t.keyType){case”int32“:case”uint32“:case”sint32“:case”fixed32“:case”sfixed32“:e(”if(!util.key32Re.test(%s))“,n)(”return%j“,a(t,”integer key“));break;case”int64“:case”uint64“:case”sint64“:case”fixed64“:case”sfixed64“:e(”if(!util.key64Re.test(%s))“,n)(”return%j“,a(t,”integer|Long key“));break;case”bool“:e(”if(!util.key2Re.test(%s))“,n)(”return%j“,a(t,”boolean key“))}return e}},function(e,t,n){”use strict“;var r=t,i=n(5),a=n(3);function o(e,t,n,r){if(t.resolvedType)if(t.resolvedType instanceof i){e(”switch(d%s){“,r);for(var a=t.resolvedType.values,o=Object.keys(a),c=0;c]===t.typeDefault&&e(”default:“),e(”case%j:“,o)(”case %i:“,a[o])(”m%s=%j“,r,a[o])(”break“);e(”}“)}else e('if(typeof d%s!==”object“)',r)(”throw TypeError(%j)“,t.fullName+”: object expected“)(”m%s=types.fromObject(d%s)“,r,n,r);else{var s=!1;switch(t.type){case”double“:case”float“:e(”m%s=Number(d%s)“,r,r);break;case”uint32“:case”fixed32“:e(”m%s=d%s>>>0“,r,r);break;case”int32“:case”sint32“:case”sfixed32“:e(”m%s=d%s|0“,r,r);break;case”uint64“:s=!0;case”int64“:case”sint64“:case”fixed64“:case”sfixed64“:e(”if(util.Long)“)(”(m%s=util.Long.fromValue(d%s)).unsigned=%j“,r,r,s)('else if(typeof d%s===”string“)',r)(”m%s=parseInt(d%s,10)“,r,r)('else if(typeof d%s===”number“)',r)(”m%s=d%s“,r,r)('else if(typeof d%s===”object“)',r)(”m%s=new util.LongBits(d%s.low>>>0,d%s.high>>>0).toNumber(%s)“,r,r,r,s?”true“:”“);break;case”bytes“:e('if(typeof d%s===”string“)',r)(”util.base64.decode(d%s,m%s=util.newBuffer(util.base64.length(d%s)),0)“,r,r,r)(”else if(d%s.length)“,r)(”m%s=d%s“,r,r);break;case”string“:e(”m%s=String(d%s)“,r,r);break;case”bool“:e(”m%s=Boolean(d%s)“,r,r)}}return e}function c(e,t,n,r){if(t.resolvedType)t.resolvedType instanceof i?e(”d%s=o.enums===String?types.values:m%s“,r,n,r,r):e(”d%s=types.toObject(m%s,o)“,r,n,r);else{var a=!1;switch(t.type){case”double“:case”float“:e(”d%s=o.json&&!isFinite(m%s)?String(m%s):m%s“,r,r,r,r);break;case”uint64“:a=!0;case”int64“:case”sint64“:case”fixed64“:case”sfixed64“:e('if(typeof m%s===”number“)',r)(”d%s=o.longs===String?String(m%s):m%s“,r,r,r)(”else“)(”d%s=o.longs===String?util.Long.prototype.toString.call(m%s):o.longs===Number?new util.LongBits(m%s.low>>>0,m%s.high>>>0).toNumber(%s):m%s“,r,r,r,r,a?”true“:”“,r);break;case”bytes“:e(”d%s=o.bytes===String?util.base64.encode(m%s,0,m%s.length):o.bytes===Array?Array.prototype.slice.call(m%s):m%s“,r,r,r,r,r);break;default:e(”d%s=m%s“,r,r)}}return e}r.fromObject=function(e){var t=e.fieldsArray,n=a.codegen(,e.name+”$fromObject“)(”if(d instanceof this.ctor)“)(”return d“);if(!t.length)return n(”return new this.ctor“);n(”var m=new this.ctor“);for(var r=0;r<t.length;++r){var c=t.resolve(),s=a.safeProp(c.name);c.map?(n(”if(d%s){“,s)('if(typeof d%s!==”object“)',s)(”throw TypeError(%j)“,c.fullName+”: object expected“)(”m%s={}“,s)(”for(var ks=Object.keys(d%s),i=0;i<ks.length;++i){“,s),o(n,c,r,s+”[ks]“)(”}“)(”}“)):c.repeated?(n(”if(d%s){“,s)(”if(!Array.isArray(d%s))“,s)(”throw TypeError(%j)“,c.fullName+”: array expected“)(”m%s=[]“,s)(”for(var i=0;i<d%s.length;++i){“,s),o(n,c,r,s+”“)(”}“)(”}“)):(c.resolvedType instanceof i||n(”if(d%s!=null){“,s),o(n,c,r,s),c.resolvedType instanceof i||n(”}“))}return n(”return m“)},r.toObject=function(e){var t=e.fieldsArray.slice().sort(a.compareFieldsById);if(!t.length)return a.codegen()(”return {}“);for(var n=a.codegen(,e.name+”$toObject“)(”if(!o)“)(”o={}“)(”var d={}“),r=[],o=,s=[],u=0;u.partOf||(t.resolve().repeated?r:t.map?o:s).push(t);if(r.length){for(n(”if(o.arrays||o.defaults){“),u=0;u.name));n(”}“)}if(o.length){for(n(”if(o.objects||o.defaults){“),u=0;u<o.length;++u)n(”d%s={}“,a.safeProp(o.name));n(”}“)}if(s.length){for(n(”if(o.defaults){“),u=0;u<s.length;++u){var l=s,f=a.safeProp(l.name);if(l.resolvedType instanceof i)n(”d%s=o.enums===String?%j:%j“,f,l.resolvedType.valuesById,l.typeDefault);else if(l.long)n(”if(util.Long){“)(”var n=new util.Long(%i,%i,%j)“,l.typeDefault.low,l.typeDefault.high,l.typeDefault.unsigned)(”d%s=o.longs===String?n.toString():o.longs===Number?n.toNumber():n“,f)(”}else“)(”d%s=o.longs===String?%j:%i“,f,l.typeDefault.toString(),l.typeDefault.toNumber());else if(l.bytes){var h=”“;n(”if(o.bytes===String)d%s=%j“,f,String.fromCharCode.apply(String,l.typeDefault))(”else{“)(”d%s=%s“,f,h)(”if(o.bytes!==Array)d%s=util.newBuffer(d%s)“,f,f)(”}“)}else n(”d%s=%j“,f,l.typeDefault)}n(”}“)}var d=!1;for(u=0;u<t.length;++u){l=t;var p=e._fieldsArray.indexOf(l);f=a.safeProp(l.name);l.map?(d||(d=!0,n(”var ks2“)),n(”if(m%s&&(ks2=Object.keys(m%s)).length){“,f,f)(”d%s={}“,f)(”for(var j=0;j<ks2.length;++j){“),c(n,l,p,f+”[ks2]“)(”}“)):l.repeated?(n(”if(m%s&&m%s.length){“,f,f)(”d%s=[]“,f)(”for(var j=0;j<m%s.length;++j){“,f),c(n,l,p,f+”“)(”}“)):(n(”if(m%s!=null&&m.hasOwnProperty(%j)){“,f,l.name),c(n,l,p,f),l.partOf&&n(”if(o.oneofs)“)(”d%s=%j“,a.safeProp(l.partOf.name),l.name)),n(”}“)}return n(”return d“)}},function(e,t,n){”use strict“;var r=t,i=n(46);r={fromObject:function(e){if(e&&e){var t=e.substring(e.lastIndexOf(”/“)+1),n=this.lookup(t);if(n){var r=”.“===e.charAt(0)?e.substr(1):e;return-1===r.indexOf(”/“)&&(r=”/“+r),this.create({type_url:r,value:n.encode(n.fromObject(e)).finish()})}}return this.fromObject(e)},toObject:function(e,t){var n=”“,r=”“;if(t&&t.json&&e.type_url&&e.value){r=e.type_url.substring(e.type_url.lastIndexOf(”/“)+1),n=e.type_url.substring(0,e.type_url.lastIndexOf(”/“)+1);var a=this.lookup®;a&&(e=a.decode(e.value))}if(!(e instanceof this.ctor)&&e instanceof i){var o=e.$type.toObject(e,t);return”“===n&&(n=”type.googleapis.com/“),r=n+(”.“===e.$type.fullName?e.$type.fullName.substr(1):e.$type.fullName),o=r,o}return this.toObject(e,t)}}},function(e,t,n){”use strict“;e.exports=d;var r=/[s{}=;:,'”()<>]/g,i=/(?:“(*(?:\.[^”\]*)*)“)/g,a=/(?:‘(*(?:\.[^'\]*)*)')/g,o=/^ *[*/]+ */,c=/^s**?/*/,s=/n/g,u=/s/,l=/\(.?)/g,f={0:”0“,r:”r“,n:”n“,t:”t“};function h(e){return e.replace(l,(function(e,t){switch(t){case”\“:case”“:return t;default:return f||”“}}))}function d(e,t){e=e.toString();var n=0,l=e.length,f=1,d=null,p=null,m=0,v=!1,g=!1,y=[],b=null;function w(e){return Error(”illegal “e” (line “f”)“)}function x(t){return e.charAt(t)}function S(n,r,i){d=e.charAt(n++),m=f,v=!1,g=i;var a,u=n-(t?2:3);do{if(–u<0||”n“===(a=e.charAt(u))){v=!0;break}}while(” “===a||”t“===a);for(var l=e.substring(n,r).split(s),h=0;h=l.replace(t?c:o,”“).trim();p=l.join(”n“).trim()}function k(t){var n=_(t),r=e.substring(t,n);return/^s*/{1,2}/.test®}function _(e){for(var t=e;t<l&&”n“!==x(t);)t++;return t}function z(){if(y.length>0)return y.shift();if(b)return function(){var t=”'“===b?a:i;t.lastIndex=n-1;var r=t.exec(e);if(!r)throw w(”string“);return n=t.lastIndex,C(b),b=null,h(r)}();var o,c,s,d,p,m=0===n;do{if(n===l)return null;for(o=!1;u.test(s=x(n));)if(”n“===s&&(m=!0,++f),++n===l)return null;if(”/“===x(n)){if(++n===l)throw w(”comment“);if(”/“===x(n))if(t){if(d=n,p=!1,k(n)){p=!0;do{if((n=_(n))===l)break;n++}while(k(n))}else n=Math.min(l,_(n)+1);p&&S(d,n,m),f++,o=!0}else{for(p=”/“===x(d=n+1);”n“!==x(++n);)if(n===l)return null;++n,p&&S(d,n-1,m),++f,o=!0}else{if(”*“!==(s=x(n)))return”/“;d=n+1,p=t||”*“===x(d);do{if(”n“===s&&+f,+n===l)throw w(”comment“);c=s,s=x(n)}while(”*“!==c||”/“!==s);++n,p&&S(d,n-2,m),o=!0}}}while(o);var v=n;if(r.lastIndex=0,!r.test(x(v++)))for(;v<l&&!r.test(x(v));)++v;var g=e.substring(n,n=v);return'”'!==g&&“'”!==g||(b=g),g}function C(e){y.push(e)}function M(){if(!y.length){var e=z();if(null===e)return null;C(e)}return y}return Object.defineProperty({next:z,peek:M,push:C,skip:function(e,t){var n=M();if(n===e)return z(),!0;if(!t)throw w(“token '”n“', '”e“' expected”);return!1},cmnt:function(e){var n=null;return void 0===e?m===f-1&&(t||“*”===d||v)&&(n=g?p:null):(m<e&&M(),m!==e||v||!t&&“/”!==d||(n=g?null:p)),n}},“line”,{get:function(){return f}})}d.unescape=h},function(e,t,n){“use strict”;var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n),Object.defineProperty(e,r,{enumerable:!0,get:function(){return t}})}:function(e,t,n,r){void 0===r&&(r=n),e=t}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,“default”,{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)“default”!==n&&Object.hasOwnProperty.call(e,n)&&r(t,e,n);return i(t,e),t},o=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,“__esModule”,{value:!0}),t.filterByStatus=t.FilteredResults=t.EnvelopesQuery=t.EnvelopesQueryContext=t.SearchQueryContext=t.CucumberQueryContext=t.GherkinQueryContext=t.QueriesWrapper=t.GherkinDocumentList=void 0;var c=o(n(131));t.GherkinDocumentList=c.default;var s=o(n(175));t.FilteredResults=s.default;var u=o(n(197));t.QueriesWrapper=u.default;var l=o(n(91));t.filterByStatus=l.default;var f=o(n(12));t.GherkinQueryContext=f.default;var h=o(n(9));t.CucumberQueryContext=h.default;var d=o(n(28));t.SearchQueryContext=d.default;var p=a(n(36));t.EnvelopesQueryContext=p.default,Object.defineProperty(t,“EnvelopesQuery”,{enumerable:!0,get:function(){return p.EnvelopesQuery}})},function(e,t,n){“use strict”; /* object-assign © Sindre Sorhus @license MIT */var r=Object.getOwnPropertySymbols,i=Object.prototype.hasOwnProperty,a=Object.prototype.propertyIsEnumerable;function o(e){if(null==e)throw new TypeError(“Object.assign cannot be called with null or undefined”);return Object(e)}e.exports=function(){try{if(!Object.assign)return!1;var e=new String(“abc”);if(e=“de”,“5”===Object.getOwnPropertyNames(e))return!1;for(var t={},n=0;n<10;n++)t=n;if(“0123456789”!==Object.getOwnPropertyNames(t).map((function(e){return t})).join(“”))return!1;var r={};return“abcdefghijklmnopqrst”.split(“”).forEach((function(e){r=e})),“abcdefghijklmnopqrst”===Object.keys(Object.assign({},r)).join(“”)}catch(e){return!1}}()?Object.assign:function(e,t){for(var n,c,s=o(e),u=1;u<arguments.length;u++){for(var l in n=Object(arguments))i.call(n,l)&&(s=n);if®{c=r(n);for(var f=0;f)&&(s[c]=n[c])}}return s}},function(e,t,n){“use strict”;var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,“__esModule”,{value:!0});var i=r(n(0)),a=r(n(48)),o=r(n(23)),c=r(n(138)),s=r(n(85)),u=r(n(167)),l=r(n(29)),f=r(n(169)),h=r(n(9)),d=r(n(12)),p=r(n(52)),m=new l.default;t.default=function(e){var t=e.scenario,n=t.examples||[],r=n.length>0,l=m.generate(t.name),v=i.default.useContext(h.default),g=i.default.useContext(d.default),y=i.default.useContext(p.default),b=g.getPickleIds(y,t.id),w=v.getBeforeHookSteps(b),x=v.getAfterHookSteps(b);return i.default.createElement(“section”,{className:“cucumber-scenario”},i.default.createElement(a.default,{tags:t.tags}),i.default.createElement(f.default,{id:l,scenario:t}),i.default.createElement(o.default,{description:t.description}),i.default.createElement(u.default,{hookSteps:w}),i.default.createElement(s.default,{steps:t.steps||[],renderStepMatchArguments:!r,renderMessage:!r}),i.default.createElement(u.default,{hookSteps:x}),n.map((function(e,t){return i.default.createElement(c.default,{key:t,examples:e})})))}},function(e,t,n){“use strict”;var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,“__esModule”,{value:!0}),t.QueryStream=t.Query=void 0;var i=r(n(141));t.Query=i.default;var a=r(n(144));t.QueryStream=a.default},function(e,t,n){“use strict”;var r=this&&this.__generator||function(e,t){var n,r,i,a,o={label:0,sent:function(){if(1&i)throw i;return i},trys:[],ops:};return a={next:c(0),throw:c(1),return:c(2)},“function”==typeof Symbol&&(a=function(){return this}),a;function c(a){return function©{return function(a){if(n)throw new TypeError(“Generator is already executing.”);for(;o;)try{if(n=1,r&&(i=2&a?r.return:a?r.throw||((i=r.return)&&i.call®,0):r.next)&&!(i=i.call(r,a)).done)return i;switch(r=0,i&&(a=[2&a,i.value]),a){case 0:case 1:i=a;break;case 4:return o.label++,{value:a,done:!1};case 5:o.label++,r=a,a=;continue;case 7:a=o.ops.pop(),o.trys.pop();continue;default:if(!(i=o.trys,(i=i.length>0&&i)||6!==a&&2!==a)){o=0;continue}if(3===a&&(!i||a>i&&a<i)){o.label=a;break}if(6===a&&o.label){o.label=i,i=a;break}if(i&&o.label){o.label=i,o.ops.push(a);break}i&&o.ops.pop(),o.trys.pop();continue}a=t.call(e,o)}catch(e){a=,r=0}finally{n=i=0}if(5&a)throw a;return{value:a?a:void 0,done:!0}}([a,c])}}},i=this&&this.__values||function(e){var t=“function”==typeof Symbol&&e,n=0;return t?t.call(e):{next:function(){return e&&n>=e.length&&(e=void 0),{value:e&&e,done:!e}}}},a=this&&this.__read||function(e,t){var n=“function”==typeof Symbol&&e;if(!n)return e;var r,i,a=n.call(e),o=[];try{for(;(void 0===t||t– >0)&&!(r=a.next()).done;)o.push(r.value)}catch(e){i={error:e}}finally{try{r&&!r.done&&(n=a.return)&&n.call(a)}finally{if(i)throw i.error}}return o};Object.defineProperty(t,“__esModule”,{value:!0});var o=function(){function e(e,t){var n,r;if(this.size_=0,this.map=new Map,this.operator=e,t)try{for(var o=i(t),c=o.next();!c.done;c=o.next()){var s=a(c.value,2),u=s,l=s;this.put(u,l)}}catch(e){n={error:e}}finally{try{c&&!c.done&&(r=o.return)&&r.call(o)}finally{if(n)throw n.error}}return this}return Object.defineProperty(e.prototype,“size”,{get:function(){return this.size_},enumerable:!0,configurable:!0}),e.prototype.get=function(e){var t=this.map.get(e);return t?this.operator.clone(t):this.operator.create()},e.prototype.put=function(e,t){var n=this.map.get(e);return n||(n=this.operator.create()),!!this.operator.add(t,n)&&(this.map.set(e,n),this.size_++,!0)},e.prototype.putAll=function(t,n){var r,o,c,s,u=0;if(n){var l=t,f=n;try{for(var h=i(f),d=h.next();!d.done;d=h.next()){var p=d.value;this.put(l,p),u++}}catch(e){r={error:e}}finally{try{d&&!d.done&&(o=h.return)&&o.call(h)}finally{if®throw r.error}}}else{if(!(t instanceof e))throw new Error(“unexpected arguments”);try{for(var m=i(t.entries()),v=m.next();!v.done;v=m.next()){var g=a(v.value,2);l=g,p=g;this.put(l,p),u++}}catch(e){c={error:e}}finally{try{v&&!v.done&&(s=m.return)&&s.call(m)}finally{if©throw c.error}}}return u>0},e.prototype.has=function(e){return this.map.has(e)},e.prototype.hasEntry=function(e,t){return this.operator.has(t,this.get(e))},e.prototype.delete=function(e){return this.size_-=this.operator.size(this.get(e)),this.map.delete(e)},e.prototype.deleteEntry=function(e,t){var n=this.get(e);return!!this.operator.delete(t,n)&&(this.map.set(e,n),this.size_–,!0)},e.prototype.clear=function(){this.map.clear(),this.size_=0},e.prototype.keys=function(){return this.map.keys()},e.prototype.entries=function(){var e=this;return function(){var t,n,o,c,s,u,l,f,h,d,p,m,v,g;return r(this,(function®{switch(r.label){case 0:r.trys.push(),s=i(e.map.entries()),u=s.next(),r.label=1;case 1:if(u.done)return;l=a(u.value,2),f=l,h=l,r.label=2;case 2:r.trys.push(),d=i(h),p=d.next(),r.label=3;case 3:return p.done?:(m=p.value,[4,]);case 4:r.sent(),r.label=5;case 5:return p=d.next(),;case 6:return;case 7:return v=r.sent(),o={error:v},[3,9];case 8:try{p&&!p.done&&(c=d.return)&&c.call(d)}finally{if(o)throw o.error}return;case 9:return u=s.next(),;case 10:return;case 11:return g=r.sent(),t={error:g},[3,13];case 12:try{u&&!u.done&&(n=s.return)&&n.call(s)}finally{if(t)throw t.error}return;case 13:return}}))}()},e.prototype.values=function(){var e=this;return function(){var t,n,o,c,s,u;return r(this,(function®{switch(r.label){case 0:r.trys.push(),o=i(e.entries()),c=o.next(),r.label=1;case 1:return c.done?:(s=a(c.value,2),[4,s]);case 2:r.sent(),r.label=3;case 3:return c=o.next(),;case 4:return;case 5:return u=r.sent(),t={error:u},[3,7];case 6:try{c&&!c.done&&(n=o.return)&&n.call(o)}finally{if(t)throw t.error}return;case 7:return}}))}()},e.prototype.forEach=function(e,t){var n,r;try{for(var o=i(this.entries()),c=o.next();!c.done;c=o.next()){var s=a(c.value,2),u=s,l=s;e.call(t,l,u,this)}}catch(e){n={error:e}}finally{try{c&&!c.done&&(r=o.return)&&r.call(o)}finally{if(n)throw n.error}}},e.prototype=function(){return this.entries()},e.prototype.asMap=function(){var e,t,n=new Map;try{for(var r=i(this.keys()),a=r.next();!a.done;a=r.next()){var o=a.value;n.set(o,this.operator.clone(this.get(o)))}}catch(t){e={error:t}}finally{try{a&&!a.done&&(t=r.return)&&t.call®}finally{if(e)throw e.error}}return n},e}();t.Multimap=o},function(e,t,n){“use strict”;Object.defineProperty(t,“__esModule”,{value:!0});var r=/(?=.d.)?d*(?:.(?=d.*))?d*(?:d+[+-]?d+)?/;t.default=function(e){return!!e.match®}},function(e,t,n){“use strict”;var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,“__esModule”,{value:!0}),t.compile=t.TokenScanner=t.AstBuilder=t.Parser=t.dialects=t.Query=t.makeSourceEnvelope=t.generateMessages=t.GherkinStreams=void 0;var i=r(n(145));t.GherkinStreams=i.default;var a=r(n(79));t.generateMessages=a.default;var o=r(n(51));t.makeSourceEnvelope=o.default;var c=r(n(153));t.Query=c.default;var s=r(n(30));t.Parser=s.default;var u=r(n(84));t.AstBuilder=u.default;var l=r(n(80));t.TokenScanner=l.default;var f=r(n(83));t.compile=f.default;var h=r(n(82)).default;t.dialects=h},function(e,t,n){“use strict”;var r=this&&this.__assign||function(){return(r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var i in t=arguments)Object.prototype.hasOwnProperty.call(t,i)&&(e=t);return e}).apply(this,arguments)},i=this&&this.__values||function(e){var t=“function”==typeof Symbol&&Symbol.iterator,n=t&&e,r=0;if(n)return n.call(e);if(e&&“number”==typeof e.length)return{next:function(){return e&&r>=e.length&&(e=void 0),{value:e&&e,done:!e}}};throw new TypeError(t?“Object is not iterable.”:“Symbol.iterator is not defined.”)},a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,“__esModule”,{value:!0});var o=a(n(30)),c=a(n(81)),s=n(2),u=a(n(83)),l=a(n(84)),f=a(n(51));t.default=function(e,t,n){var a,h,d,p,m=[];try{if(n.includeSource&&m.push(f.default(e,t)),!n.includeGherkinDocument&&!n.includePickles)return m;var v=new o.default(new l.default(n.newId));v.stopAtFirstError=!1;var g=v.parse(e,new c.default(n.defaultDialect));if(n.includeGherkinDocument&&m.push(s.messages.Envelope.create({gherkinDocument:r(r({},g),{uri:t})})),n.includePickles){var y=u.default(g,t,n.newId);try{for(var b=i(y),w=b.next();!w.done;w=b.next()){var x=w.value;m.push(s.messages.Envelope.create({pickle:x}))}}catch(e){a={error:e}}finally{try{w&&!w.done&&(h=b.return)&&h.call(b)}finally{if(a)throw a.error}}}}catch(e){var S=e.errors||;try{for(var k=i(S),_=k.next();!.done;=k.next()){var z=_.value;if(!z.location)throw z;m.push(s.messages.Envelope.create({parseError:{source:{uri:t,location:{line:z.location.line,column:z.location.column}},message:z.message}}))}}catch(e){d={error:e}}finally{try{_&&!_.done&&(p=k.return)&&p.call(k)}finally{if(d)throw d.error}}}return m}},function(e,t,n){“use strict”;var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,“__esModule”,{value:!0});var i=r(n(147)),a=r(n(148)),o=r(n(50)),c=function(){function e(e){this.lineNumber=0,this.lines=e.split(/r?n/),this.lines.length>0&&“”===this.lines.trim()&&this.lines.pop()}return e.prototype.read=function(){var e=this.lines,t=o.default({line:this.lineNumber});return t.column=void 0,null==e?new i.default(null,t):new i.default(new a.default(e,this.lineNumber),t)},e}();t.default=c},function(e,t,n){“use strict”;var r=this&&this.__values||function(e){var t=“function”==typeof Symbol&&Symbol.iterator,n=t&&e,r=0;if(n)return n.call(e);if(e&&“number”==typeof e.length)return{next:function(){return e&&r>=e.length&&(e=void 0),{value:e&&e,done:!e}}};throw new TypeError(t?“Object is not iterable.”:“Symbol.iterator is not defined.”)},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,“__esModule”,{value:!0});var a=i(n(82)),o=n(31),c=n(30),s=a.default,u=/^s*#s*languages*:s*(+)s*$/,l=function(){function e(e){void 0===e&&(e=“en”),this.defaultDialectName=e,this.reset()}return e.prototype.changeDialect=function(e,t){var n=s;if(!n)throw o.NoSuchLanguageException.create(e,t);this.dialectName=e,this.dialect=n},e.prototype.reset=function(){this.dialectName!==this.defaultDialectName&&this.changeDialect(this.defaultDialectName),this.activeDocStringSeparator=null,this.indentToRemove=0},e.prototype.match_TagLine=function(e){return!!e.line.startsWith(“@”)&&(this.setTokenMatched(e,c.TokenType.TagLine,null,null,null,e.line.getTags()),!0)},e.prototype.match_FeatureLine=function(e){return this.matchTitleLine(e,c.TokenType.FeatureLine,this.dialect.feature)},e.prototype.match_ScenarioLine=function(e){return this.matchTitleLine(e,c.TokenType.ScenarioLine,this.dialect.scenario)||this.matchTitleLine(e,c.TokenType.ScenarioLine,this.dialect.scenarioOutline)},e.prototype.match_BackgroundLine=function(e){return this.matchTitleLine(e,c.TokenType.BackgroundLine,this.dialect.background)},e.prototype.match_ExamplesLine=function(e){return this.matchTitleLine(e,c.TokenType.ExamplesLine,this.dialect.examples)},e.prototype.match_RuleLine=function(e){return this.matchTitleLine(e,c.TokenType.RuleLine,this.dialect.rule)},e.prototype.match_TableRow=function(e){return!!e.line.startsWith(“|”)&&(this.setTokenMatched(e,c.TokenType.TableRow,null,null,null,e.line.getTableCells()),!0)},e.prototype.match_Empty=function(e){return!!e.line.isEmpty&&(this.setTokenMatched(e,c.TokenType.Empty,null,null,0),!0)},e.prototype.match_Comment=function(e){if(e.line.startsWith(“#”)){var t=e.line.getLineText(0);return this.setTokenMatched(e,c.TokenType.Comment,t,null,0),!0}return!1},e.prototype.match_Language=function(e){var t=e.line.trimmedLineText.match(u);if(t){var n=t;return this.setTokenMatched(e,c.TokenType.Language,n),this.changeDialect(n,e.location),!0}return!1},e.prototype.match_DocStringSeparator=function(e){return null==this.activeDocStringSeparator?this._match_DocStringSeparator(e,'“”“',!0)||this._match_DocStringSeparator(e,”“`“,!0):this._match_DocStringSeparator(e,this.activeDocStringSeparator,!1)},e.prototype._match_DocStringSeparator=function(e,t,n){if(e.line.startsWith(t)){var r=null;return n?(r=e.line.getRestTrimmed(t.length),this.activeDocStringSeparator=t,this.indentToRemove=e.line.indent):(this.activeDocStringSeparator=null,this.indentToRemove=0),this.setTokenMatched(e,c.TokenType.DocStringSeparator,r),!0}return!1},e.prototype.match_EOF=function(e){return!!e.isEof&&(this.setTokenMatched(e,c.TokenType.EOF),!0)},e.prototype.match_StepLine=function(e){var t,n,i=[].concat(this.dialect.given).concat(this.dialect.when).concat(this.dialect.then).concat(this.dialect.and).concat(this.dialect.but);try{for(var a=r(i),o=a.next();!o.done;o=a.next()){var s=o.value;if(e.line.startsWith(s)){var u=e.line.getRestTrimmed(s.length);return this.setTokenMatched(e,c.TokenType.StepLine,u,s),!0}}}catch(e){t={error:e}}finally{try{o&&!o.done&&(n=a.return)&&n.call(a)}finally{if(t)throw t.error}}return!1},e.prototype.match_Other=function(e){var t=e.line.getLineText(this.indentToRemove);return this.setTokenMatched(e,c.TokenType.Other,this.unescapeDocString(t),null,0),!0},e.prototype.matchTitleLine=function(e,t,n){var i,a;try{for(var o=r(n),c=o.next();!c.done;c=o.next()){var s=c.value;if(e.line.startsWithTitleKeyword(s)){var u=e.line.getRestTrimmed(s.length+”:“.length);return this.setTokenMatched(e,t,u,s),!0}}}catch(e){i={error:e}}finally{try{c&&!c.done&&(a=o.return)&&a.call(o)}finally{if(i)throw i.error}}return!1},e.prototype.setTokenMatched=function(e,t,n,r,i,a){e.matchedType=t,e.matchedText=n,e.matchedKeyword=r,e.matchedIndent=”number“==typeof i?i:null==e.line?0:e.line.indent,e.matchedItems=a||[],e.location.column=e.matchedIndent+1,e.matchedGherkinDialect=this.dialectName},e.prototype.unescapeDocString=function(e){return'”“”'===this.activeDocStringSeparator?e.replace('\“\”\“','”“”'):““`”===this.activeDocStringSeparator?e.replace(“\`\`\`”,““`”):e},e}();t.default=l},function(e){e.exports=JSON.parse('{“af”:{“and”:[“* ”,“En ”],“background”:,“but”:[“* ”,“Maar ”],“examples”:,“feature”:[“Funksie”,“Besigheid Behoefte”,“Vermoë”],“given”:[“* ”,“Gegewe ”],“name”:“Afrikaans”,“native”:“Afrikaans”,“rule”:,“scenario”:,“scenarioOutline”:[“Situasie Uiteensetting”],“then”:[“* ”,“Dan ”],“when”:[“* ”,“Wanneer ”]},“am”:{“and”:[“* ”,“Եվ ”],“background”:,“but”:[“* ”,“Բայց ”],“examples”:,“feature”:,“given”:[“* ”,“Դիցուք ”],“name”:“Armenian”,“native”:“հայերեն”,“rule”:,“scenario”:,“scenarioOutline”:[“Սցենարի կառուցվացքը”],“then”:[“* ”,“Ապա ”],“when”:[“* ”,“Եթե ”,“Երբ ”]},“an”:{“and”:[“* ”,“Y ”,“E ”],“background”:,“but”:[“* ”,“Pero ”],“examples”:,“feature”:,“given”:[“* ”,“Dau ”,“Dada ”,“Daus ”,“Dadas ”],“name”:“Aragonese”,“native”:“Aragonés”,“rule”:,“scenario”:,“scenarioOutline”:[“Esquema del caso”],“then”:[“* ”,“Alavez ”,“Allora ”,“Antonces ”],“when”:[“* ”,“Cuan ”]},“ar”:{“and”:[“* ”,“و ”],“background”:,“but”:[“* ”,“لكن ”],“examples”:,“feature”:,“given”:[“* ”,“بفرض ”],“name”:“Arabic”,“native”:“العربية”,“rule”:,“scenario”:,“scenarioOutline”:[“سيناريو مخطط”],“then”:[“* ”,“اذاً ”,“ثم ”],“when”:[“* ”,“متى ”,“عندما ”]},“ast”:{“and”:[“* ”,“Y ”,“Ya ”],“background”:,“but”:[“* ”,“Peru ”],“examples”:,“feature”:,“given”:[“* ”,“Dáu ”,“Dada ”,“Daos ”,“Daes ”],“name”:“Asturian”,“native”:“asturianu”,“rule”:,“scenario”:,“scenarioOutline”:[“Esbozu del casu”],“then”:[“* ”,“Entós ”],“when”:[“* ”,“Cuando ”]},“az”:{“and”:[“* ”,“Və ”,“Həm ”],“background”:,“but”:[“* ”,“Amma ”,“Ancaq ”],“examples”:,“feature”:,“given”:[“* ”,“Tutaq ki ”,“Verilir ”],“name”:“Azerbaijani”,“native”:“Azərbaycanca”,“rule”:,“scenario”:,“scenarioOutline”:[“Ssenarinin strukturu”],“then”:[“* ”,“O halda ”],“when”:[“* ”,“Əgər ”,“Nə vaxt ki ”]},“bg”:{“and”:[“* ”,“И ”],“background”:,“but”:[“* ”,“Но ”],“examples”:,“feature”:,“given”:[“* ”,“Дадено ”],“name”:“Bulgarian”,“native”:“български”,“rule”:,“scenario”:,“scenarioOutline”:[“Рамка на сценарий”],“then”:[“* ”,“То ”],“when”:[“* ”,“Когато ”]},“bm”:{“and”:[“* ”,“Dan ”],“background”:[“Latar Belakang”],“but”:[“* ”,“Tetapi ”,“Tapi ”],“examples”:,“feature”:,“given”:[“* ”,“Diberi ”,“Bagi ”],“name”:“Malay”,“native”:“Bahasa Melayu”,“rule”:,“scenario”:,“scenarioOutline”:[“Kerangka Senario”,“Kerangka Situasi”,“Kerangka Keadaan”,“Garis Panduan Senario”],“then”:[“* ”,“Maka ”,“Kemudian ”],“when”:[“* ”,“Apabila ”]},“bs”:{“and”:[“* ”,“I ”,“A ”],“background”:,“but”:[“* ”,“Ali ”],“examples”:,“feature”:,“given”:[“* ”,“Dato ”],“name”:“Bosnian”,“native”:“Bosanski”,“rule”:,“scenario”:,“scenarioOutline”:,“then”:[“* ”,“Zatim ”],“when”:[“* ”,“Kada ”]},“ca”:{“and”:[“* ”,“I ”],“background”:,“but”:[“* ”,“Però ”],“examples”:,“feature”:,“given”:[“* ”,“Donat ”,“Donada ”,“Atès ”,“Atesa ”],“name”:“Catalan”,“native”:“català”,“rule”:,“scenario”:,“scenarioOutline”:[“Esquema de l'escenari”],“then”:[“* ”,“Aleshores ”,“Cal ”],“when”:[“* ”,“Quan ”]},“cs”:{“and”:[“* ”,“A také ”,“A ”],“background”:,“but”:[“* ”,“Ale ”],“examples”:,“feature”:,“given”:[“* ”,“Pokud ”,“Za předpokladu ”],“name”:“Czech”,“native”:“Česky”,“rule”:,“scenario”:,“scenarioOutline”:[“Náčrt Scénáře”,“Osnova scénáře”],“then”:[“* ”,“Pak ”],“when”:[“* ”,“Když ”]},“cy-GB”:{“and”:[“* ”,“A ”],“background”:,“but”:[“* ”,“Ond ”],“examples”:,“feature”:,“given”:[“* ”,“Anrhegedig a ”],“name”:“Welsh”,“native”:“Cymraeg”,“rule”:,“scenario”:,“scenarioOutline”:[“Scenario Amlinellol”],“then”:[“* ”,“Yna ”],“when”:[“* ”,“Pryd ”]},“da”:{“and”:[“* ”,“Og ”],“background”:,“but”:[“* ”,“Men ”],“examples”:,“feature”:,“given”:[“* ”,“Givet ”],“name”:“Danish”,“native”:“dansk”,“rule”:,“scenario”:,“scenarioOutline”:[“Abstrakt Scenario”],“then”:[“* ”,“Så ”],“when”:[“* ”,“Når ”]},“de”:{“and”:[“* ”,“Und ”],“background”:,“but”:[“* ”,“Aber ”],“examples”:,“feature”:,“given”:[“* ”,“Angenommen ”,“Gegeben sei ”,“Gegeben seien ”],“name”:“German”,“native”:“Deutsch”,“rule”:,“scenario”:,“scenarioOutline”:,“then”:[“* ”,“Dann ”],“when”:[“* ”,“Wenn ”]},“el”:{“and”:[“* ”,“Και ”],“background”:,“but”:[“* ”,“Αλλά ”],“examples”:,“feature”:,“given”:[“* ”,“Δεδομένου ”],“name”:“Greek”,“native”:“Ελληνικά”,“rule”:,“scenario”:,“scenarioOutline”:[“Περιγραφή Σεναρίου”,“Περίγραμμα Σεναρίου”],“then”:[“* ”,“Τότε ”],“when”:[“* ”,“Όταν ”]},“em”:{“and”:[“* ”,“😂”],“background”:,“but”:[“* ”,“😔”],“examples”:,“feature”:,“given”:[“* ”,“😐”],“name”:“Emoji”,“native”:“😀”,“rule”:,“scenario”:,“scenarioOutline”:,“then”:[“* ”,“🙏”],“when”:[“* ”,“🎬”]},“en”:{“and”:[“* ”,“And ”],“background”:,“but”:[“* ”,“But ”],“examples”:,“feature”:[“Feature”,“Business Need”,“Ability”],“given”:[“* ”,“Given ”],“name”:“English”,“native”:“English”,“rule”:,“scenario”:,“scenarioOutline”:[“Scenario Outline”,“Scenario Template”],“then”:[“* ”,“Then ”],“when”:[“* ”,“When ”]},“en-Scouse”:{“and”:[“* ”,“An ”],“background”:[“Dis is what went down”],“but”:[“* ”,“Buh ”],“examples”:,“feature”:,“given”:[“* ”,“Givun ”,“Youse know when youse got ”],“name”:“Scouse”,“native”:“Scouse”,“rule”:,“scenario”:[“The thing of it is”],“scenarioOutline”:[“Wharrimean is”],“then”:[“* ”,“Dun ”,“Den youse gotta ”],“when”:[“* ”,“Wun ”,“Youse know like when ”]},“en-au”:{“and”:[“* ”,“Too right ”],“background”:[“First off”],“but”:[“* ”,“Yeah nah ”],“examples”:[“You'll wanna”],“feature”:[“Pretty much”],“given”:[“* ”,“Y'know ”],“name”:“Australian”,“native”:“Australian”,“rule”:,“scenario”:[“Awww, look mate”],“scenarioOutline”:[“Reckon it's like”],“then”:[“* ”,“But at the end of the day I reckon ”],“when”:[“* ”,“It's just unbelievable ”]},“en-lol”:{“and”:[“* ”,“AN ”],“background”:,“but”:[“* ”,“BUT ”],“examples”:,“feature”:[“OH HAI”],“given”:[“* ”,“I CAN HAZ ”],“name”:“LOLCAT”,“native”:“LOLCAT”,“rule”:,“scenario”:,“scenarioOutline”:[“MISHUN SRSLY”],“then”:[“* ”,“DEN ”],“when”:[“* ”,“WEN ”]},“en-old”:{“and”:[“* ”,“Ond ”,“7 ”],“background”:,“but”:[“* ”,“Ac ”],“examples”:[“Se the”,“Se þe”,“Se ðe”],“feature”:,“given”:[“* ”,“Thurh ”,“Þurh ”,“Ðurh ”],“name”:“Old English”,“native”:“Englisc”,“rule”:,“scenario”:,“scenarioOutline”:[“Swa hwaer swa”,“Swa hwær swa”],“then”:[“* ”,“Tha ”,“Þa ”,“Ða ”,“Tha the ”,“Þa þe ”,“Ða ðe ”],“when”:[“* ”,“Tha ”,“Þa ”,“Ða ”]},“en-pirate”:{“and”:[“* ”,“Aye ”],“background”:,“but”:[“* ”,“Avast! ”],“examples”:[“Dead men tell no tales”],“feature”:[“Ahoy matey!”],“given”:[“* ”,“Gangway! ”],“name”:“Pirate”,“native”:“Pirate”,“rule”:,“scenario”:[“Heave to”],“scenarioOutline”:[“Shiver me timbers”],“then”:[“* ”,“Let go and haul ”],“when”:[“* ”,“Blimey! ”]},“eo”:{“and”:[“* ”,“Kaj ”],“background”:,“but”:[“* ”,“Sed ”],“examples”:,“feature”:,“given”:[“* ”,“Donitaĵo ”,“Komence ”],“name”:“Esperanto”,“native”:“Esperanto”,“rule”:,“scenario”:,“scenarioOutline”:[“Konturo de la scenaro”,“Skizo”,“Kazo-skizo”],“then”:[“* ”,“Do ”],“when”:[“* ”,“Se ”]},“es”:{“and”:[“* ”,“Y ”,“E ”],“background”:,“but”:[“* ”,“Pero ”],“examples”:,“feature”:,“given”:[“* ”,“Dado ”,“Dada ”,“Dados ”,“Dadas ”],“name”:“Spanish”,“native”:“español”,“rule”:,“scenario”:,“scenarioOutline”:[“Esquema del escenario”],“then”:[“* ”,“Entonces ”],“when”:[“* ”,“Cuando ”]},“et”:{“and”:[“* ”,“Ja ”],“background”:,“but”:[“* ”,“Kuid ”],“examples”:,“feature”:,“given”:[“* ”,“Eeldades ”],“name”:“Estonian”,“native”:“eesti keel”,“rule”:,“scenario”:,“scenarioOutline”:,“then”:[“* ”,“Siis ”],“when”:[“* ”,“Kui ”]},“fa”:{“and”:[“* ”,“و ”],“background”:,“but”:[“* ”,“اما ”],“examples”:[“نمونه ها”],“feature”:,“given”:[“* ”,“با فرض ”],“name”:“Persian”,“native”:“فارسی”,“rule”:,“scenario”:,“scenarioOutline”:[“الگوی سناریو”],“then”:[“* ”,“آنگاه ”],“when”:[“* ”,“هنگامی ”]},“fi”:{“and”:[“* ”,“Ja ”],“background”:,“but”:[“* ”,“Mutta ”],“examples”:,“feature”:,“given”:[“* ”,“Oletetaan ”],“name”:“Finnish”,“native”:“suomi”,“rule”:,“scenario”:,“scenarioOutline”:,“then”:[“* ”,“Niin ”],“when”:[“* ”,“Kun ”]},“fr”:{“and”:[“* ”,“Et que ”,“Et qu'”,“Et ”],“background”:,“but”:[“* ”,“Mais que ”,“Mais qu'”,“Mais ”],“examples”:,“feature”:,“given”:[“* ”,“Soit ”,“Sachant que ”,“Sachant qu'”,“Sachant ”,“Etant donné que ”,“Etant donné qu'”,“Etant donné ”,“Etant donnée ”,“Etant donnés ”,“Etant données ”,“Étant donné que ”,“Étant donné qu'”,“Étant donné ”,“Étant donnée ”,“Étant donnés ”,“Étant données ”],“name”:“French”,“native”:“français”,“rule”:,“scenario”:,“scenarioOutline”:[“Plan du scénario”,“Plan du Scénario”],“then”:[“* ”,“Alors ”,“Donc ”],“when”:[“* ”,“Quand ”,“Lorsque ”,“Lorsqu'”]},“ga”:{“and”:[“* ”,“Agus”],“background”:,“but”:[“* ”,“Ach”],“examples”:,“feature”:,“given”:[“* ”,“Cuir i gcás go”,“Cuir i gcás nach”,“Cuir i gcás gur”,“Cuir i gcás nár”],“name”:“Irish”,“native”:“Gaeilge”,“rule”:,“scenario”:,“scenarioOutline”:[“Cás Achomair”],“then”:[“* ”,“Ansin”],“when”:[“* ”,“Nuair a”,“Nuair nach”,“Nuair ba”,“Nuair nár”]},“gj”:{“and”:[“* ”,“અને ”],“background”:,“but”:[“* ”,“પણ ”],“examples”:,“feature”:[“લક્ષણ”,“વ્યાપાર જરૂર”,“ક્ષમતા”],“given”:[“* ”,“આપેલ છે ”],“name”:“Gujarati”,“native”:“ગુજરાતી”,“rule”:,“scenario”:,“scenarioOutline”:[“પરિદ્દશ્ય રૂપરેખા”,“પરિદ્દશ્ય ઢાંચો”],“then”:[“* ”,“પછી ”],“when”:[“* ”,“ક્યારે ”]},“gl”:{“and”:[“* ”,“E ”],“background”:,“but”:[“* ”,“Mais ”,“Pero ”],“examples”:,“feature”:,“given”:[“* ”,“Dado ”,“Dada ”,“Dados ”,“Dadas ”],“name”:“Galician”,“native”:“galego”,“rule”:,“scenario”:,“scenarioOutline”:[“Esbozo do escenario”],“then”:[“* ”,“Entón ”,“Logo ”],“when”:[“* ”,“Cando ”]},“he”:{“and”:[“* ”,“וגם ”],“background”:,“but”:[“* ”,“אבל ”],“examples”:,“feature”:,“given”:[“* ”,“בהינתן ”],“name”:“Hebrew”,“native”:“עברית”,“rule”:,“scenario”:,“scenarioOutline”:[“תבנית תרחיש”],“then”:[“* ”,“אז ”,“אזי ”],“when”:[“* ”,“כאשר ”]},“hi”:{“and”:[“* ”,“और ”,“तथा ”],“background”:,“but”:[“* ”,“पर ”,“परन्तु ”,“किन्तु ”],“examples”:,“feature”:[“रूप लेख”],“given”:[“* ”,“अगर ”,“यदि ”,“चूंकि ”],“name”:“Hindi”,“native”:“हिंदी”,“rule”:,“scenario”:,“scenarioOutline”:[“परिदृश्य रूपरेखा”],“then”:[“* ”,“तब ”,“तदा ”],“when”:[“* ”,“जब ”,“कदा ”]},“hr”:{“and”:[“* ”,“I ”],“background”:,“but”:[“* ”,“Ali ”],“examples”:,“feature”:,“given”:[“* ”,“Zadan ”,“Zadani ”,“Zadano ”,“Ukoliko ”],“name”:“Croatian”,“native”:“hrvatski”,“rule”:,“scenario”:,“scenarioOutline”:,“then”:[“* ”,“Onda ”],“when”:[“* ”,“Kada ”,“Kad ”]},“ht”:{“and”:[“* ”,“Ak ”,“Epi ”,“E ”],“background”:,“but”:[“* ”,“Men ”],“examples”:,“feature”:,“given”:[“* ”,“Sipoze ”,“Sipoze ke ”,“Sipoze Ke ”],“name”:“Creole”,“native”:“kreyòl”,“rule”:,“scenario”:,“scenarioOutline”:[“Plan senaryo”,“Plan Senaryo”,“Senaryo deskripsyon”,“Senaryo Deskripsyon”,“Dyagram senaryo”,“Dyagram Senaryo”],“then”:[“* ”,“Lè sa a ”,“Le sa a ”],“when”:[“* ”,“Lè ”,“Le ”]},“hu”:{“and”:[“* ”,“És ”],“background”:,“but”:[“* ”,“De ”],“examples”:,“feature”:,“given”:[“* ”,“Amennyiben ”,“Adott ”],“name”:“Hungarian”,“native”:“magyar”,“rule”:,“scenario”:,“scenarioOutline”:[“Forgatókönyv vázlat”],“then”:[“* ”,“Akkor ”],“when”:[“* ”,“Majd ”,“Ha ”,“Amikor ”]},“id”:{“and”:[“* ”,“Dan ”],“background”:[“Dasar”,“Latar Belakang”],“but”:[“* ”,“Tapi ”,“Tetapi ”],“examples”:,“feature”:,“given”:[“* ”,“Dengan ”,“Diketahui ”,“Diasumsikan ”,“Bila ”,“Jika ”],“name”:“Indonesian”,“native”:“Bahasa Indonesia”,“rule”:,“scenario”:,“scenarioOutline”:[“Skenario konsep”,“Garis-Besar Skenario”],“then”:[“* ”,“Maka ”,“Kemudian ”],“when”:[“* ”,“Ketika ”]},“is”:{“and”:[“* ”,“Og ”],“background”:,“but”:[“* ”,“En ”],“examples”:,“feature”:,“given”:[“* ”,“Ef ”],“name”:“Icelandic”,“native”:“Íslenska”,“rule”:,“scenario”:,“scenarioOutline”:[“Lýsing Atburðarásar”,“Lýsing Dæma”],“then”:[“* ”,“Þá ”],“when”:[“* ”,“Þegar ”]},“it”:{“and”:[“* ”,“E ”],“background”:,“but”:[“* ”,“Ma ”],“examples”:,“feature”:,“given”:[“* ”,“Dato ”,“Data ”,“Dati ”,“Date ”],“name”:“Italian”,“native”:“italiano”,“rule”:,“scenario”:,“scenarioOutline”:[“Schema dello scenario”],“then”:[“* ”,“Allora ”],“when”:[“* ”,“Quando ”]},“ja”:{“and”:[“* ”,“かつ”],“background”:,“but”:[“* ”,“しかし”,“但し”,“ただし”],“examples”:,“feature”:,“given”:[“* ”,“前提”],“name”:“Japanese”,“native”:“日本語”,“rule”:,“scenario”:,“scenarioOutline”:,“then”:[“* ”,“ならば”],“when”:[“* ”,“もし”]},“jv”:{“and”:[“* ”,“Lan ”],“background”:,“but”:[“* ”,“Tapi ”,“Nanging ”,“Ananging ”],“examples”:,“feature”:,“given”:[“* ”,“Nalika ”,“Nalikaning ”],“name”:“Javanese”,“native”:“Basa Jawa”,“rule”:,“scenario”:,“scenarioOutline”:[“Konsep skenario”],“then”:[“* ”,“Njuk ”,“Banjur ”],“when”:[“* ”,“Manawa ”,“Menawa ”]},“ka”:{“and”:[“* ”,“და”],“background”:,“but”:[“* ”,“მაგ­რამ”],“examples”:,“feature”:,“given”:[“* ”,“მოცემული”],“name”:“Georgian”,“native”:“ქართველი”,“rule”:,“scenario”:,“scenarioOutline”:[“სცენარის ნიმუში”],“then”:[“* ”,“მაშინ”],“when”:[“* ”,“როდესაც”]},“kn”:{“and”:[“* ”,“ಮತ್ತು ”],“background”:,“but”:[“* ”,“ಆದರೆ ”],“examples”:,“feature”:,“given”:[“* ”,“ನೀಡಿದ ”],“name”:“Kannada”,“native”:“ಕನ್ನಡ”,“rule”:,“scenario”:,“scenarioOutline”:,“then”:[“* ”,“ನಂತರ ”],“when”:[“* ”,“ಸ್ಥಿತಿಯನ್ನು ”]},“ko”:{“and”:[“* ”,“그리고”],“background”:,“but”:[“* ”,“하지만”,“단”],“examples”:,“feature”:,“given”:[“* ”,“조건”,“먼저”],“name”:“Korean”,“native”:“한국어”,“rule”:,“scenario”:,“scenarioOutline”:[“시나리오 개요”],“then”:[“* ”,“그러면”],“when”:[“* ”,“만일”,“만약”]},“lt”:{“and”:[“* ”,“Ir ”],“background”:,“but”:[“* ”,“Bet ”],“examples”:,“feature”:,“given”:[“* ”,“Duota ”],“name”:“Lithuanian”,“native”:“lietuvių kalba”,“rule”:,“scenario”:,“scenarioOutline”:[“Scenarijaus šablonas”],“then”:[“* ”,“Tada ”],“when”:[“* ”,“Kai ”]},“lu”:{“and”:[“* ”,“an ”,“a ”],“background”:,“but”:[“* ”,“awer ”,“mä ”],“examples”:,“feature”:,“given”:[“* ”,“ugeholl ”],“name”:“Luxemburgish”,“native”:“Lëtzebuergesch”,“rule”:,“scenario”:,“scenarioOutline”:[“Plang vum Szenario”],“then”:[“* ”,“dann ”],“when”:[“* ”,“wann ”]},“lv”:{“and”:[“* ”,“Un ”],“background”:,“but”:[“* ”,“Bet ”],“examples”:,“feature”:,“given”:[“* ”,“Kad ”],“name”:“Latvian”,“native”:“latviešu”,“rule”:,“scenario”:,“scenarioOutline”:[“Scenārijs pēc parauga”],“then”:[“* ”,“Tad ”],“when”:[“* ”,“Ja ”]},“mk-Cyrl”:{“and”:[“* ”,“И ”],“background”:,“but”:[“* ”,“Но ”],“examples”:,“feature”:[“Функционалност”,“Бизнис потреба”,“Можност”],“given”:[“* ”,“Дадено ”,“Дадена ”],“name”:“Macedonian”,“native”:“Македонски”,“rule”:,“scenario”:[“Пример”,“Сценарио”,“На пример”],“scenarioOutline”:[“Преглед на сценарија”,“Скица”,“Концепт”],“then”:[“* ”,“Тогаш ”],“when”:[“* ”,“Кога ”]},“mk-Latn”:{“and”:[“* ”,“I ”],“background”:,“but”:[“* ”,“No ”],“examples”:,“feature”:[“Funkcionalnost”,“Biznis potreba”,“Mozhnost”],“given”:[“* ”,“Dadeno ”,“Dadena ”],“name”:“Macedonian (Latin)”,“native”:“Makedonski (Latinica)”,“rule”:,“scenario”:[“Scenario”,“Na primer”],“scenarioOutline”:[“Pregled na scenarija”,“Skica”,“Koncept”],“then”:[“* ”,“Togash ”],“when”:[“* ”,“Koga ”]},“mn”:{“and”:[“* ”,“Мөн ”,“Тэгээд ”],“background”:,“but”:[“* ”,“Гэхдээ ”,“Харин ”],“examples”:,“feature”:,“given”:[“* ”,“Өгөгдсөн нь ”,“Анх ”],“name”:“Mongolian”,“native”:“монгол”,“rule”:,“scenario”:,“scenarioOutline”:[“Сценарын төлөвлөгөө”],“then”:[“* ”,“Тэгэхэд ”,“Үүний дараа ”],“when”:[“* ”,“Хэрэв ”]},“ne”:{“and”:[“* ”,“र ”,“अनी ”],“background”:,“but”:[“* ”,“तर ”],“examples”:,“feature”:,“given”:[“* ”,“दिइएको ”,“दिएको ”,“यदि ”],“name”:“Nepali”,“native”:“नेपाली”,“rule”:,“scenario”:,“scenarioOutline”:[“परिदृश्य रूपरेखा”],“then”:[“* ”,“त्यसपछि ”,“अनी ”],“when”:[“* ”,“जब ”]},“nl”:{“and”:[“* ”,“En ”],“background”:,“but”:[“* ”,“Maar ”],“examples”:,“feature”:,“given”:[“* ”,“Gegeven ”,“Stel ”],“name”:“Dutch”,“native”:“Nederlands”,“rule”:,“scenario”:,“scenarioOutline”:[“Abstract Scenario”],“then”:[“* ”,“Dan ”],“when”:[“* ”,“Als ”,“Wanneer ”]},“no”:{“and”:[“* ”,“Og ”],“background”:,“but”:[“* ”,“Men ”],“examples”:,“feature”:,“given”:[“* ”,“Gitt ”],“name”:“Norwegian”,“native”:“norsk”,“rule”:,“scenario”:,“scenarioOutline”:[“Scenariomal”,“Abstrakt Scenario”],“then”:[“* ”,“Så ”],“when”:[“* ”,“Når ”]},“pa”:{“and”:[“* ”,“ਅਤੇ ”],“background”:,“but”:[“* ”,“ਪਰ ”],“examples”:,“feature”:[“ਖਾਸੀਅਤ”,“ਮੁਹਾਂਦਰਾ”,“ਨਕਸ਼ ਨੁਹਾਰ”],“given”:[“* ”,“ਜੇਕਰ ”,“ਜਿਵੇਂ ਕਿ ”],“name”:“Panjabi”,“native”:“ਪੰਜਾਬੀ”,“rule”:,“scenario”:,“scenarioOutline”:[“ਪਟਕਥਾ ਢਾਂਚਾ”,“ਪਟਕਥਾ ਰੂਪ ਰੇਖਾ”],“then”:[“* ”,“ਤਦ ”],“when”:[“* ”,“ਜਦੋਂ ”]},“pl”:{“and”:[“* ”,“Oraz ”,“I ”],“background”:,“but”:[“* ”,“Ale ”],“examples”:,“feature”:[“Właściwość”,“Funkcja”,“Aspekt”,“Potrzeba biznesowa”],“given”:[“* ”,“Zakładając ”,“Mając ”,“Zakładając, że ”],“name”:“Polish”,“native”:“polski”,“rule”:,“scenario”:,“scenarioOutline”:[“Szablon scenariusza”],“then”:[“* ”,“Wtedy ”],“when”:[“* ”,“Jeżeli ”,“Jeśli ”,“Gdy ”,“Kiedy ”]},“pt”:{“and”:[“* ”,“E ”],“background”:[“Contexto”,“Cenário de Fundo”,“Cenario de Fundo”,“Fundo”],“but”:[“* ”,“Mas ”],“examples”:,“feature”:,“given”:[“* ”,“Dado ”,“Dada ”,“Dados ”,“Dadas ”],“name”:“Portuguese”,“native”:“português”,“rule”:,“scenario”:,“scenarioOutline”:[“Esquema do Cenário”,“Esquema do Cenario”,“Delineação do Cenário”,“Delineacao do Cenario”],“then”:[“* ”,“Então ”,“Entao ”],“when”:[“* ”,“Quando ”]},“ro”:{“and”:[“* ”,“Si ”,“Și ”,“Şi ”],“background”:,“but”:[“* ”,“Dar ”],“examples”:,“feature”:,“given”:[“* ”,“Date fiind ”,“Dat fiind ”,“Dată fiind”,“Dati fiind ”,“Dați fiind ”,“Daţi fiind ”],“name”:“Romanian”,“native”:“română”,“rule”:,“scenario”:,“scenarioOutline”:[“Structura scenariu”,“Structură scenariu”],“then”:[“* ”,“Atunci ”],“when”:[“* ”,“Cand ”,“Când ”]},“ru”:{“and”:[“* ”,“И ”,“К тому же ”,“Также ”],“background”:,“but”:[“* ”,“Но ”,“А ”,“Иначе ”],“examples”:,“feature”:,“given”:[“* ”,“Допустим ”,“Дано ”,“Пусть ”],“name”:“Russian”,“native”:“русский”,“rule”:,“scenario”:,“scenarioOutline”:[“Структура сценария”],“then”:[“* ”,“То ”,“Затем ”,“Тогда ”],“when”:[“* ”,“Когда ”,“Если ”]},“sk”:{“and”:[“* ”,“A ”,“A tiež ”,“A taktiež ”,“A zároveň ”],“background”:,“but”:[“* ”,“Ale ”],“examples”:,“feature”:,“given”:[“* ”,“Pokiaľ ”,“Za predpokladu ”],“name”:“Slovak”,“native”:“Slovensky”,“rule”:,“scenario”:,“scenarioOutline”:[“Náčrt Scenáru”,“Náčrt Scenára”,“Osnova Scenára”],“then”:[“* ”,“Tak ”,“Potom ”],“when”:[“* ”,“Keď ”,“Ak ”]},“sl”:{“and”:[“In ”,“Ter ”],“background”:,“but”:[“Toda ”,“Ampak ”,“Vendar ”],“examples”:,“feature”:,“given”:[“Dano ”,“Podano ”,“Zaradi ”,“Privzeto ”],“name”:“Slovenian”,“native”:“Slovenski”,“rule”:,“scenario”:,“scenarioOutline”:[“Struktura scenarija”,“Skica”,“Koncept”,“Oris scenarija”,“Osnutek”],“then”:[“Nato ”,“Potem ”,“Takrat ”],“when”:[“Ko ”,“Ce ”,“Če ”,“Kadar ”]},“sr-Cyrl”:{“and”:[“* ”,“И ”],“background”:,“but”:[“* ”,“Али ”],“examples”:,“feature”:,“given”:[“* ”,“За дато ”,“За дате ”,“За дати ”],“name”:“Serbian”,“native”:“Српски”,“rule”:,“scenario”:,“scenarioOutline”:[“Структура сценарија”,“Скица”,“Концепт”],“then”:[“* ”,“Онда ”],“when”:[“* ”,“Када ”,“Кад ”]},“sr-Latn”:{“and”:[“* ”,“I ”],“background”:,“but”:[“* ”,“Ali ”],“examples”:,“feature”:,“given”:[“* ”,“Za dato ”,“Za date ”,“Za dati ”],“name”:“Serbian (Latin)”,“native”:“Srpski (Latinica)”,“rule”:,“scenario”:,“scenarioOutline”:[“Struktura scenarija”,“Skica”,“Koncept”],“then”:[“* ”,“Onda ”],“when”:[“* ”,“Kada ”,“Kad ”]},“sv”:{“and”:[“* ”,“Och ”],“background”:,“but”:[“* ”,“Men ”],“examples”:,“feature”:,“given”:[“* ”,“Givet ”],“name”:“Swedish”,“native”:“Svenska”,“rule”:,“scenario”:,“scenarioOutline”:[“Abstrakt Scenario”,“Scenariomall”],“then”:[“* ”,“Så ”],“when”:[“* ”,“När ”]},“ta”:{“and”:[“* ”,“மேலும் ”,“மற்றும் ”],“background”:,“but”:[“* ”,“ஆனால் ”],“examples”:,“feature”:[“அம்சம்”,“வணிக தேவை”,“திறன்”],“given”:[“* ”,“கொடுக்கப்பட்ட ”],“name”:“Tamil”,“native”:“தமிழ்”,“rule”:,“scenario”:,“scenarioOutline”:[“காட்சி சுருக்கம்”,“காட்சி வார்ப்புரு”],“then”:[“* ”,“அப்பொழுது ”],“when”:[“* ”,“எப்போது ”]},“th”:{“and”:[“* ”,“และ ”],“background”:,“but”:[“* ”,“แต่ ”],“examples”:,“feature”:,“given”:[“* ”,“กำหนดให้ ”],“name”:“Thai”,“native”:“ไทย”,“rule”:,“scenario”:,“scenarioOutline”:,“then”:[“* ”,“ดังนั้น ”],“when”:[“* ”,“เมื่อ ”]},“tl”:{“and”:[“* ”,“మరియు ”],“background”:,“but”:[“* ”,“కాని ”],“examples”:,“feature”:,“given”:[“* ”,“చెప్పబడినది ”],“name”:“Telugu”,“native”:“తెలుగు”,“rule”:,“scenario”:,“scenarioOutline”:,“then”:[“* ”,“అప్పుడు ”],“when”:[“* ”,“ఈ పరిస్థితిలో ”]},“tlh”:{“and”:[“* ”,“'ej ”,“latlh ”],“background”:,“but”:[“* ”,“'ach ”,“'a ”],“examples”:,“feature”:[“Qap”,“Qu'meH 'ut”,“perbogh”,“poQbogh malja'”,“laH”],“given”:[“* ”,“ghu' noblu' ”,“DaH ghu' bejlu' ”],“name”:“Klingon”,“native”:“tlhIngan”,“rule”:,“scenario”:,“scenarioOutline”:[“lut chovnatlh”],“then”:[“* ”,“vaj ”],“when”:[“* ”,“qaSDI' ”]},“tr”:{“and”:[“* ”,“Ve ”],“background”:,“but”:[“* ”,“Fakat ”,“Ama ”],“examples”:,“feature”:,“given”:[“* ”,“Diyelim ki ”],“name”:“Turkish”,“native”:“Türkçe”,“rule”:,“scenario”:,“scenarioOutline”:[“Senaryo taslağı”],“then”:[“* ”,“O zaman ”],“when”:[“* ”,“Eğer ki ”]},“tt”:{“and”:[“* ”,“Һәм ”,“Вә ”],“background”:,“but”:[“* ”,“Ләкин ”,“Әмма ”],“examples”:,“feature”:,“given”:[“* ”,“Әйтик ”],“name”:“Tatar”,“native”:“Татарча”,“rule”:,“scenario”:,“scenarioOutline”:[“Сценарийның төзелеше”],“then”:[“* ”,“Нәтиҗәдә ”],“when”:[“* ”,“Әгәр ”]},“uk”:{“and”:[“* ”,“І ”,“А також ”,“Та ”],“background”:,“but”:[“* ”,“Але ”],“examples”:,“feature”:,“given”:[“* ”,“Припустимо ”,“Припустимо, що ”,“Нехай ”,“Дано ”],“name”:“Ukrainian”,“native”:“Українська”,“rule”:,“scenario”:,“scenarioOutline”:[“Структура сценарію”],“then”:[“* ”,“То ”,“Тоді ”],“when”:[“* ”,“Якщо ”,“Коли ”]},“ur”:{“and”:[“* ”,“اور ”],“background”:[“پس منظر”],“but”:[“* ”,“لیکن ”],“examples”:,“feature”:[“صلاحیت”,“کاروبار کی ضرورت”,“خصوصیت”],“given”:[“* ”,“اگر ”,“بالفرض ”,“فرض کیا ”],“name”:“Urdu”,“native”:“اردو”,“rule”:,“scenario”:,“scenarioOutline”:[“منظر نامے کا خاکہ”],“then”:[“* ”,“پھر ”,“تب ”],“when”:[“* ”,“جب ”]},“uz”:{“and”:[“* ”,“Ва ”],“background”:,“but”:[“* ”,“Лекин ”,“Бирок ”,“Аммо ”],“examples”:,“feature”:,“given”:[“* ”,“Агар ”],“name”:“Uzbek”,“native”:“Узбекча”,“rule”:,“scenario”:,“scenarioOutline”:[“Сценарий структураси”],“then”:[“* ”,“Унда ”],“when”:[“* ”,“Агар ”]},“vi”:{“and”:[“* ”,“Và ”],“background”:[“Bối cảnh”],“but”:[“* ”,“Nhưng ”],“examples”:[“Dữ liệu”],“feature”:[“Tính năng”],“given”:[“* ”,“Biết ”,“Cho ”],“name”:“Vietnamese”,“native”:“Tiếng Việt”,“rule”:,“scenario”:[“Tình huống”,“Kịch bản”],“scenarioOutline”:[“Khung tình huống”,“Khung kịch bản”],“then”:[“* ”,“Thì ”],“when”:[“* ”,“Khi ”]},“zh-CN”:{“and”:[“* ”,“而且”,“并且”,“同时”],“background”:,“but”:[“* ”,“但是”],“examples”:,“feature”:,“given”:[“* ”,“假如”,“假设”,“假定”],“name”:“Chinese simplified”,“native”:“简体中文”,“rule”:,“scenario”:,“scenarioOutline”:,“then”:[“* ”,“那么”],“when”:[“* ”,“当”]},“zh-TW”:{“and”:[“* ”,“而且”,“並且”,“同時”],“background”:,“but”:[“* ”,“但是”],“examples”:,“feature”:,“given”:[“* ”,“假如”,“假設”,“假定”],“name”:“Chinese traditional”,“native”:“繁體中文”,“rule”:,“scenario”:,“scenarioOutline”:,“then”:[“* ”,“那麼”],“when”:[“* ”,“當”]},“mr”:{“and”:[“* ”,“आणि ”,“तसेच ”],“background”:,“but”:[“* ”,“पण ”,“परंतु ”],“examples”:,“feature”:,“given”:[“* ”,“जर”,“दिलेल्या प्रमाणे ”],“name”:“Marathi”,“native”:“मराठी”,“rule”:,“scenario”:,“scenarioOutline”:[“परिदृश्य रूपरेखा”],“then”:[“* ”,“मग ”,“तेव्हा ”],“when”:[“* ”,“जेव्हा ”]}}')},function(e,t,n){“use strict”;Object.defineProperty(t,“__esModule”,{value:!0});var r=n(2);function i(e,t,n,i,a,o,c){var l=0===n.steps.length?[]:t.map((function(e){return s(e,[],null,c)})),f=.concat(e).concat(n.tags);n.steps.forEach((function(e){return l.push(s(e,[],null,c))}));var h=r.messages.Pickle.create({id:c(),uri:o,astNodeIds:,tags:u(f),name:n.name,language:i,steps:l});a.push(h)}function a(e,t,n,i,a,o,l){n.examples.filter((function(e){return null!==e.tableHeader})).forEach((function(f){var h=f.tableHeader.cells;f.tableBody.forEach((function(d){var p=0===n.steps.length?[]:t.map((function(e){return s(e,[],null,l)})),m=.concat(e).concat(n.tags).concat(f.tags);n.steps.forEach((function(e){var t=s(e,h,d,l);p.push(t)})),a.push(r.messages.Pickle.create({id:l(),uri:o,astNodeIds:,name:c(n.name,h,d.cells),language:i,steps:p,tags:u(m)}))}))}))}function o(e,t,n){if(e.dataTable)return{dataTable:{rows:(i=e.dataTable).rows.map((function(e){return{cells:e.cells.map((function(e){return{location:e.location,value:c(e.value,t,n)}}))}}))}};if(e.docString){var i=e.docString,a=r.messages.PickleStepArgument.PickleDocString.create({content:c(i.content,t,n)});return i.mediaType&&(a.mediaType=c(i.mediaType,t,n)),{docString:a}}}function c(e,t,n){return t.forEach((function(t,r){var i=n,a=(“<"t.value">”).replace(/[-/\^$*+?.()|{}]/g,“\$&”),o=new RegExp(a,“g”),c=i.value.replace(new RegExp(“\$”,“g”),“$$$$”);e=e.replace(o,c)})),e}function s(e,t,n,i){var a=;n&&a.push(n.id);var s=n?n.cells:[];return r.messages.Pickle.PickleStep.create({id:i(),text:c(e.text,t,s),argument:o(e,t,s),astNodeIds:a})}function u(e){return e.map(l)}function l(e){return r.messages.Pickle.PickleTag.create({name:e.name,astNodeId:e.id})}t.default=function(e,t,n){var r=[];if(null==e.feature)return r;var o=e.feature,c=o.language,s=o.tags,u=[];return o.children.forEach((function(e){e.background?u=[].concat(e.background.steps):e.rule?function(e,t,n,r,o,c,s){var u=[].concat(t);n.children.forEach((function(t){t.background?u=u.concat(t.background.steps):0===t.scenario.examples.length?i(e,u,t.scenario,r,o,c,s):a(e,u,t.scenario,r,o,c,s)}))}(s,u,e.rule,c,r,t,n):0===e.scenario.examples.length?i(s,u,e.scenario,c,r,t,n):a(s,u,e.scenario,c,r,t,n)})),r}},function(e,t,n){“use strict”;var r=this&&this.__values||function(e){var t=“function”==typeof Symbol&&Symbol.iterator,n=t&&e,r=0;if(n)return n.call(e);if(e&&“number”==typeof e.length)return{next:function(){return e&&r>=e.length&&(e=void 0),{value:e&&e,done:!e}}};throw new TypeError(t?“Object is not iterable.”:“Symbol.iterator is not defined.”)},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,“__esModule”,{value:!0});var a=i(n(150)),o=n(2),c=n(30),s=n(31),u=i(n(50)),l=function(){function e(e){if(this.newId=e,!e)throw new Error(“No newId”);this.reset()}return e.prototype.reset=function(){this.stack=[new a.default(c.RuleType.None)],this.comments=[]},e.prototype.startRule=function(e){this.stack.push(new a.default(e))},e.prototype.endRule=function(){var e=this.stack.pop(),t=this.transformNode(e);this.currentNode().add(e.ruleType,t)},e.prototype.build=function(e){e.matchedType===c.TokenType.Comment?this.comments.push(o.messages.GherkinDocument.Comment.create({location:this.getLocation(e),text:e.matchedText})):this.currentNode().add(e.matchedType,e)},e.prototype.getResult=function(){return this.currentNode().getSingle(c.RuleType.GherkinDocument)},e.prototype.currentNode=function(){return this.stack},e.prototype.getLocation=function(e,t){return t?u.default({line:e.location.line,column:t}):e.location},e.prototype.getTags=function(e){var t,n,i,a,s=[],u=e.getSingle(c.RuleType.Tags);if(!u)return s;var l=u.getTokens(c.TokenType.TagLine);try{for(var f=r(l),h=f.next();!h.done;h=f.next()){var d=h.value;try{for(var p=(i=void 0,r(d.matchedItems)),m=p.next();!m.done;m=p.next()){var v=m.value;s.push(o.messages.GherkinDocument.Feature.Tag.create({location:this.getLocation(d,v.column),name:v.text,id:this.newId()}))}}catch(e){i={error:e}}finally{try{m&&!m.done&&(a=p.return)&&a.call(p)}finally{if(i)throw i.error}}}}catch(e){t={error:e}}finally{try{h&&!h.done&&(n=f.return)&&n.call(f)}finally{if(t)throw t.error}}return s},e.prototype.getCells=function(e){var t=this;return e.matchedItems.map((function(n){return o.messages.GherkinDocument.Feature.TableRow.TableCell.create({location:t.getLocation(e,n.column),value:n.text})}))},e.prototype.getDescription=function(e){return e.getSingle(c.RuleType.Description)},e.prototype.getSteps=function(e){return e.getItems(c.RuleType.Step)},e.prototype.getTableRows=function(e){var t=this,n=e.getTokens(c.TokenType.TableRow).map((function(e){return o.messages.GherkinDocument.Feature.TableRow.create({id:t.newId(),location:t.getLocation(e),cells:t.getCells(e)})}));return this.ensureCellCount(n),n},e.prototype.ensureCellCount=function(e){if(0!==e.length){var t=e.cells.length;e.forEach((function(e){if(e.cells.length!==t)throw s.AstBuilderException.create(“inconsistent cell count within the table”,e.location)}))}},e.prototype.transformNode=function(e){var t,n,i,a,s,u;switch(e.ruleType){case c.RuleType.Step:var l=e.getToken(c.TokenType.StepLine),f=e.getSingle(c.RuleType.DataTable),h=e.getSingle(c.RuleType.DocString);return o.messages.GherkinDocument.Feature.Step.create({id:this.newId(),location:this.getLocation(l),keyword:l.matchedKeyword,text:l.matchedText,dataTable:f,docString:h});case c.RuleType.DocString:var d=e.getTokens(c.TokenType.DocStringSeparator),p=d.matchedText.length>0?d.matchedText:void 0,m=(O=e.getTokens(c.TokenType.Other)).map((function(e){return e.matchedText})).join(“n”),v=o.messages.GherkinDocument.Feature.Step.DocString.create({location:this.getLocation(d),content:m,delimiter:d.line.trimmedLineText.substring(0,3)});return p&&(v.mediaType=p),v;case c.RuleType.DataTable:var g=this.getTableRows(e);return o.messages.GherkinDocument.Feature.Step.DataTable.create({location:g.location,rows:g});case c.RuleType.Background:var y=e.getToken(c.TokenType.BackgroundLine),b=this.getDescription(e),w=this.getSteps(e);return o.messages.GherkinDocument.Feature.Background.create({id:this.newId(),location:this.getLocation(y),keyword:y.matchedKeyword,name:y.matchedText,description:b,steps:w});case c.RuleType.ScenarioDefinition:var x=this.getTags(e),S=e.getSingle(c.RuleType.Scenario),k=S.getToken(c.TokenType.ScenarioLine),_=(b=this.getDescription(S),w=this.getSteps(S),S.getItems(c.RuleType.ExamplesDefinition));return o.messages.GherkinDocument.Feature.Scenario.create({id:this.newId(),tags:x,location:this.getLocation(k),keyword:k.matchedKeyword,name:k.matchedText,description:b,steps:w,examples:_});case c.RuleType.ExamplesDefinition:x=this.getTags(e);var z=e.getSingle(c.RuleType.Examples),C=z.getToken(c.TokenType.ExamplesLine),M=(b=this.getDescription(z),z.getSingle(c.RuleType.ExamplesTable));return o.messages.GherkinDocument.Feature.Scenario.Examples.create({id:this.newId(),tags:x,location:this.getLocation(C),keyword:C.matchedKeyword,name:C.matchedText,description:b,tableHeader:void 0!==M?M:void 0,tableBody:void 0!==M?M.slice(1):void 0});case c.RuleType.ExamplesTable:return this.getTableRows(e);case c.RuleType.Description:for(var O,T=(O=e.getTokens(c.TokenType.Other)).length;T>0&&“”===O.line.trimmedLineText;)T–;return(O=O.slice(0,T)).map((function(e){return e.matchedText})).join(“n”);case c.RuleType.Feature:if(!(D=e.getSingle(c.RuleType.FeatureHeader)))return null;x=this.getTags(D);var E=D.getToken(c.TokenType.FeatureLine);if(!E)return null;var L=[];(F=e.getSingle(c.RuleType.Background))&&L.push(o.messages.GherkinDocument.Feature.FeatureChild.create({background:F}));try{for(var A=r(e.getItems(c.RuleType.ScenarioDefinition)),R=A.next();!R.done;R=A.next()){var N=R.value;L.push(o.messages.GherkinDocument.Feature.FeatureChild.create({scenario:N}))}}catch(e){t={error:e}}finally{try{R&&!R.done&&(n=A.return)&&n.call(A)}finally{if(t)throw t.error}}try{for(var H=r(e.getItems(c.RuleType.Rule)),P=H.next();!P.done;P=H.next()){var j=P.value;L.push(o.messages.GherkinDocument.Feature.FeatureChild.create({rule:j}))}}catch(e){i={error:e}}finally{try{P&&!P.done&&(a=H.return)&&a.call(H)}finally{if(i)throw i.error}}b=this.getDescription(D);var V=E.matchedGherkinDialect;return o.messages.GherkinDocument.Feature.create({tags:x,location:this.getLocation(E),language:V,keyword:E.matchedKeyword,name:E.matchedText,description:b,children:L});case c.RuleType.Rule:var D;if(!(D=e.getSingle(c.RuleType.RuleHeader)))return null;var I=D.getToken(c.TokenType.RuleLine);if(!I)return null;var F;L=[];(F=e.getSingle(c.RuleType.Background))&&L.push(o.messages.GherkinDocument.Feature.FeatureChild.create({background:F}));try{for(var B=r(e.getItems(c.RuleType.ScenarioDefinition)),U=B.next();!U.done;U=B.next()){N=U.value;L.push(o.messages.GherkinDocument.Feature.FeatureChild.create({scenario:N}))}}catch(e){s={error:e}}finally{try{U&&!U.done&&(u=B.return)&&u.call(B)}finally{if(s)throw s.error}}b=this.getDescription(D);return o.messages.GherkinDocument.Feature.FeatureChild.Rule.create({id:this.newId(),location:this.getLocation(I),keyword:I.matchedKeyword,name:I.matchedText,description:b,children:L});case c.RuleType.GherkinDocument:var q=e.getSingle(c.RuleType.Feature);return o.messages.GherkinDocument.create({feature:q,comments:this.comments});default:return e}},e}();t.default=l},function(e,t,n){“use strict”;var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,“__esModule”,{value:!0});var i=r(n(0)),a=r(n(156));t.default=function(e){var t=e.steps,n=e.renderStepMatchArguments,r=e.renderMessage;return i.default.createElement(“ol”,{className:“cucumber-steps”},t.map((function(e,t){return i.default.createElement(a.default,{key:t,step:e,renderStepMatchArguments:n,renderMessage:r})})))}},function(e,t,n){“use strict”;var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,“__esModule”,{value:!0});var i=r(n(0)),a=r(n(34));t.default=function(e){var t=e.status,n=e.children;return i.default.createElement(“li”,{className:“cucumber-step”},i.default.createElement(“span”,{className:“cucumber-step__status”},i.default.createElement(a.default,{status:t})),i.default.createElement(“div”,{className:“cucumber-step__content”},n))}},function(e,t,n){“use strict”;(function(e){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,“__esModule”,{value:!0});var i=r(n(0)),a=n(2),o=r(n(32)),c=n(13),s=n(14),u=r(n(160));function l(t,n,r){var o=t.contentEncoding===a.messages.Attachment.ContentEncoding.IDENTITY?t.body:function(t){if(“function”==typeof e.atob)return e.atob(t);if(“function”==typeof e.Buffer)return e.Buffer.from(t,“base64”).toString(“utf8”);throw new Error}(t.body);return r?i.default.createElement(“pre”,{className:“cucumber-attachment cucumber-attachment__text”},i.default.createElement(s.FontAwesomeIcon,{icon:c.faPaperclip,className:“cucumber-attachment__icon”}),i.default.createElement(“span”,{dangerouslySetInnerHTML:{__html:n(o)}})):i.default.createElement(“pre”,{className:“cucumber-attachment cucumber-attachment__text”},i.default.createElement(s.FontAwesomeIcon,{icon:c.faPaperclip,className:“cucumber-attachment__icon”}),n(o))}function f(e){try{return JSON.stringify(JSON.parse(e),null,2)}catch(t){return e}}function h(e){return(new u.default).toHtml(e)}t.default=function(e){var t=e.attachment;return t.mediaType.match(/^image//)?function(e){if(e.contentEncoding!==a.messages.Attachment.ContentEncoding.BASE64)return i.default.createElement(o.default,{className:“cucumber-attachment”,message:“Couldn't display ”e.mediaType“ image because it wasn't base64 encoded”});return i.default.createElement(“img”,{alt:“Embedded Image”,src:“data:”e.mediaType“;base64,”+e.body,className:“cucumber-attachment cucumber-attachment__image”})}(t):t.mediaType.match(/^video//)?function(e){if(e.contentEncoding!==a.messages.Attachment.ContentEncoding.BASE64)return i.default.createElement(o.default,{className:“cucumber-attachment”,message:“Couldn't display ”e.mediaType“ video because it wasn't base64 encoded”});return i.default.createElement(“video”,{controls:!0},i.default.createElement(“source”,{src:“data:”e.mediaType“;base64,”+e.body}),“Your browser is unable to display video”)}(t):“text/x.cucumber.log+plain”==t.mediaType?l(t,h,!0):t.mediaType.match(/^text//)?l(t,(function(e){return e}),!1):t.mediaType.match(/^application/json/)?l(t,f,!1):i.default.createElement(o.default,{message:“Couldn't display ”t.mediaType“ attachment because the media type is unsupported. Please submit a feature request at ”,“lt”:“<","quot":"\\""}')},function(e){e.exports=JSON.parse('{"Aacute":"Á","aacute":"á","Abreve":"Ă","abreve":"ă","ac":"∾","acd":"∿","acE":"∾̳","Acirc":"Â","acirc":"â","acute":"´","Acy":"А","acy":"а","AElig":"Æ","aelig":"æ","af":"⁡","Afr":"𝔄","afr":"𝔞","Agrave":"À","agrave":"à","alefsym":"ℵ","aleph":"ℵ","Alpha":"Α","alpha":"α","Amacr":"Ā","amacr":"ā","amalg":"⨿","amp":"&","AMP":"&","andand":"⩕","And":"⩓","and":"∧","andd":"⩜","andslope":"⩘","andv":"⩚","ang":"∠","ange":"⦤","angle":"∠","angmsdaa":"⦨","angmsdab":"⦩","angmsdac":"⦪","angmsdad":"⦫","angmsdae":"⦬","angmsdaf":"⦭","angmsdag":"⦮","angmsdah":"⦯","angmsd":"∡","angrt":"∟","angrtvb":"⊾","angrtvbd":"⦝","angsph":"∢","angst":"Å","angzarr":"⍼","Aogon":"Ą","aogon":"ą","Aopf":"𝔸","aopf":"𝕒","apacir":"⩯","ap":"≈","apE":"⩰","ape":"≊","apid":"≋","apos":"\'","ApplyFunction":"⁡","approx":"≈","approxeq":"≊","Aring":"Å","aring":"å","Ascr":"𝒜","ascr":"𝒶","Assign":"≔","ast":"*","asymp":"≈","asympeq":"≍","Atilde":"Ã","atilde":"ã","Auml":"Ä","auml":"ä","awconint":"∳","awint":"⨑","backcong":"≌","backepsilon":"϶","backprime":"‵","backsim":"∽","backsimeq":"⋍","Backslash":"∖","Barv":"⫧","barvee":"⊽","barwed":"⌅","Barwed":"⌆","barwedge":"⌅","bbrk":"⎵","bbrktbrk":"⎶","bcong":"≌","Bcy":"Б","bcy":"б","bdquo":"„","becaus":"∵","because":"∵","Because":"∵","bemptyv":"⦰","bepsi":"϶","bernou":"ℬ","Bernoullis":"ℬ","Beta":"Β","beta":"β","beth":"ℶ","between":"≬","Bfr":"𝔅","bfr":"𝔟","bigcap":"⋂","bigcirc":"◯","bigcup":"⋃","bigodot":"⨀","bigoplus":"⨁","bigotimes":"⨂","bigsqcup":"⨆","bigstar":"★","bigtriangledown":"▽","bigtriangleup":"△","biguplus":"⨄","bigvee":"⋁","bigwedge":"⋀","bkarow":"⤍","blacklozenge":"⧫","blacksquare":"▪","blacktriangle":"▴","blacktriangledown":"▾","blacktriangleleft":"◂","blacktriangleright":"▸","blank":"␣","blk12":"▒","blk14":"░","blk34":"▓","block":"█","bne":"=⃥","bnequiv":"≡⃥","bNot":"⫭","bnot":"⌐","Bopf":"𝔹","bopf":"𝕓","bot":"⊥","bottom":"⊥","bowtie":"⋈","boxbox":"⧉","boxdl":"┐","boxdL":"╕","boxDl":"╖","boxDL":"╗","boxdr":"┌","boxdR":"╒","boxDr":"╓","boxDR":"╔","boxh":"─","boxH":"═","boxhd":"┬","boxHd":"╤","boxhD":"╥","boxHD":"╦","boxhu":"┴","boxHu":"╧","boxhU":"╨","boxHU":"╩","boxminus":"⊟","boxplus":"⊞","boxtimes":"⊠","boxul":"┘","boxuL":"╛","boxUl":"╜","boxUL":"╝","boxur":"└","boxuR":"╘","boxUr":"╙","boxUR":"╚","boxv":"│","boxV":"║","boxvh":"┼","boxvH":"╪","boxVh":"╫","boxVH":"╬","boxvl":"┤","boxvL":"╡","boxVl":"╢","boxVL":"╣","boxvr":"├","boxvR":"╞","boxVr":"╟","boxVR":"╠","bprime":"‵","breve":"˘","Breve":"˘","brvbar":"¦","bscr":"𝒷","Bscr":"ℬ","bsemi":"⁏","bsim":"∽","bsime":"⋍","bsolb":"⧅","bsol":"\\\\","bsolhsub":"⟈","bull":"•","bullet":"•","bump":"≎","bumpE":"⪮","bumpe":"≏","Bumpeq":"≎","bumpeq":"≏","Cacute":"Ć","cacute":"ć","capand":"⩄","capbrcup":"⩉","capcap":"⩋","cap":"∩","Cap":"⋒","capcup":"⩇","capdot":"⩀","CapitalDifferentialD":"ⅅ","caps":"∩︀","caret":"⁁","caron":"ˇ","Cayleys":"ℭ","ccaps":"⩍","Ccaron":"Č","ccaron":"č","Ccedil":"Ç","ccedil":"ç","Ccirc":"Ĉ","ccirc":"ĉ","Cconint":"∰","ccups":"⩌","ccupssm":"⩐","Cdot":"Ċ","cdot":"ċ","cedil":"¸","Cedilla":"¸","cemptyv":"⦲","cent":"¢","centerdot":"·","CenterDot":"·","cfr":"𝔠","Cfr":"ℭ","CHcy":"Ч","chcy":"ч","check":"✓","checkmark":"✓","Chi":"Χ","chi":"χ","circ":"ˆ","circeq":"≗","circlearrowleft":"↺","circlearrowright":"↻","circledast":"⊛","circledcirc":"⊚","circleddash":"⊝","CircleDot":"⊙","circledR":"®","circledS":"Ⓢ","CircleMinus":"⊖","CirclePlus":"⊕","CircleTimes":"⊗","cir":"○","cirE":"⧃","cire":"≗","cirfnint":"⨐","cirmid":"⫯","cirscir":"⧂","ClockwiseContourIntegral":"∲","CloseCurlyDoubleQuote":"”","CloseCurlyQuote":"’","clubs":"♣","clubsuit":"♣","colon":":","Colon":"∷","Colone":"⩴","colone":"≔","coloneq":"≔","comma":",","commat":"@","comp":"∁","compfn":"∘","complement":"∁","complexes":"ℂ","cong":"≅","congdot":"⩭","Congruent":"≡","conint":"∮","Conint":"∯","ContourIntegral":"∮","copf":"𝕔","Copf":"ℂ","coprod":"∐","Coproduct":"∐","copy":"©","COPY":"©","copysr":"℗","CounterClockwiseContourIntegral":"∳","crarr":"↵","cross":"✗","Cross":"⨯","Cscr":"𝒞","cscr":"𝒸","csub":"⫏","csube":"⫑","csup":"⫐","csupe":"⫒","ctdot":"⋯","cudarrl":"⤸","cudarrr":"⤵","cuepr":"⋞","cuesc":"⋟","cularr":"↶","cularrp":"⤽","cupbrcap":"⩈","cupcap":"⩆","CupCap":"≍","cup":"∪","Cup":"⋓","cupcup":"⩊","cupdot":"⊍","cupor":"⩅","cups":"∪︀","curarr":"↷","curarrm":"⤼","curlyeqprec":"⋞","curlyeqsucc":"⋟","curlyvee":"⋎","curlywedge":"⋏","curren":"¤","curvearrowleft":"↶","curvearrowright":"↷","cuvee":"⋎","cuwed":"⋏","cwconint":"∲","cwint":"∱","cylcty":"⌭","dagger":"†","Dagger":"‡","daleth":"ℸ","darr":"↓","Darr":"↡","dArr":"⇓","dash":"‐","Dashv":"⫤","dashv":"⊣","dbkarow":"⤏","dblac":"˝","Dcaron":"Ď","dcaron":"ď","Dcy":"Д","dcy":"д","ddagger":"‡","ddarr":"⇊","DD":"ⅅ","dd":"ⅆ","DDotrahd":"⤑","ddotseq":"⩷","deg":"°","Del":"∇","Delta":"Δ","delta":"δ","demptyv":"⦱","dfisht":"⥿","Dfr":"𝔇","dfr":"𝔡","dHar":"⥥","dharl":"⇃","dharr":"⇂","DiacriticalAcute":"´","DiacriticalDot":"˙","DiacriticalDoubleAcute":"˝","DiacriticalGrave":"`","DiacriticalTilde":"˜","diam":"⋄","diamond":"⋄","Diamond":"⋄","diamondsuit":"♦","diams":"♦","die":"¨","DifferentialD":"ⅆ","digamma":"ϝ","disin":"⋲","div":"÷","divide":"÷","divideontimes":"⋇","divonx":"⋇","DJcy":"Ђ","djcy":"ђ","dlcorn":"⌞","dlcrop":"⌍","dollar":"$","Dopf":"𝔻","dopf":"𝕕","Dot":"¨","dot":"˙","DotDot":"⃜","doteq":"≐","doteqdot":"≑","DotEqual":"≐","dotminus":"∸","dotplus":"∔","dotsquare":"⊡","doublebarwedge":"⌆","DoubleContourIntegral":"∯","DoubleDot":"¨","DoubleDownArrow":"⇓","DoubleLeftArrow":"⇐","DoubleLeftRightArrow":"⇔","DoubleLeftTee":"⫤","DoubleLongLeftArrow":"⟸","DoubleLongLeftRightArrow":"⟺","DoubleLongRightArrow":"⟹","DoubleRightArrow":"⇒","DoubleRightTee":"⊨","DoubleUpArrow":"⇑","DoubleUpDownArrow":"⇕","DoubleVerticalBar":"∥","DownArrowBar":"⤓","downarrow":"↓","DownArrow":"↓","Downarrow":"⇓","DownArrowUpArrow":"⇵","DownBreve":"̑","downdownarrows":"⇊","downharpoonleft":"⇃","downharpoonright":"⇂","DownLeftRightVector":"⥐","DownLeftTeeVector":"⥞","DownLeftVectorBar":"⥖","DownLeftVector":"↽","DownRightTeeVector":"⥟","DownRightVectorBar":"⥗","DownRightVector":"⇁","DownTeeArrow":"↧","DownTee":"⊤","drbkarow":"⤐","drcorn":"⌟","drcrop":"⌌","Dscr":"𝒟","dscr":"𝒹","DScy":"Ѕ","dscy":"ѕ","dsol":"⧶","Dstrok":"Đ","dstrok":"đ","dtdot":"⋱","dtri":"▿","dtrif":"▾","duarr":"⇵","duhar":"⥯","dwangle":"⦦","DZcy":"Џ","dzcy":"џ","dzigrarr":"⟿","Eacute":"É","eacute":"é","easter":"⩮","Ecaron":"Ě","ecaron":"ě","Ecirc":"Ê","ecirc":"ê","ecir":"≖","ecolon":"≕","Ecy":"Э","ecy":"э","eDDot":"⩷","Edot":"Ė","edot":"ė","eDot":"≑","ee":"ⅇ","efDot":"≒","Efr":"𝔈","efr":"𝔢","eg":"⪚","Egrave":"È","egrave":"è","egs":"⪖","egsdot":"⪘","el":"⪙","Element":"∈","elinters":"⏧","ell":"ℓ","els":"⪕","elsdot":"⪗","Emacr":"Ē","emacr":"ē","empty":"∅","emptyset":"∅","EmptySmallSquare":"◻","emptyv":"∅","EmptyVerySmallSquare":"▫","emsp13":" ","emsp14":" ","emsp":" ","ENG":"Ŋ","eng":"ŋ","ensp":" ","Eogon":"Ę","eogon":"ę","Eopf":"𝔼","eopf":"𝕖","epar":"⋕","eparsl":"⧣","eplus":"⩱","epsi":"ε","Epsilon":"Ε","epsilon":"ε","epsiv":"ϵ","eqcirc":"≖","eqcolon":"≕","eqsim":"≂","eqslantgtr":"⪖","eqslantless":"⪕","Equal":"⩵","equals":"=","EqualTilde":"≂","equest":"≟","Equilibrium":"⇌","equiv":"≡","equivDD":"⩸","eqvparsl":"⧥","erarr":"⥱","erDot":"≓","escr":"ℯ","Escr":"ℰ","esdot":"≐","Esim":"⩳","esim":"≂","Eta":"Η","eta":"η","ETH":"Ð","eth":"ð","Euml":"Ë","euml":"ë","euro":"€","excl":"!","exist":"∃","Exists":"∃","expectation":"ℰ","exponentiale":"ⅇ","ExponentialE":"ⅇ","fallingdotseq":"≒","Fcy":"Ф","fcy":"ф","female":"♀","ffilig":"ffi","fflig":"ff","ffllig":"ffl","Ffr":"𝔉","ffr":"𝔣","filig":"fi","FilledSmallSquare":"◼","FilledVerySmallSquare":"▪","fjlig":"fj","flat":"♭","fllig":"fl","fltns":"▱","fnof":"ƒ","Fopf":"𝔽","fopf":"𝕗","forall":"∀","ForAll":"∀","fork":"⋔","forkv":"⫙","Fouriertrf":"ℱ","fpartint":"⨍","frac12":"½","frac13":"⅓","frac14":"¼","frac15":"⅕","frac16":"⅙","frac18":"⅛","frac23":"⅔","frac25":"⅖","frac34":"¾","frac35":"⅗","frac38":"⅜","frac45":"⅘","frac56":"⅚","frac58":"⅝","frac78":"⅞","frasl":"⁄","frown":"⌢","fscr":"𝒻","Fscr":"ℱ","gacute":"ǵ","Gamma":"Γ","gamma":"γ","Gammad":"Ϝ","gammad":"ϝ","gap":"⪆","Gbreve":"Ğ","gbreve":"ğ","Gcedil":"Ģ","Gcirc":"Ĝ","gcirc":"ĝ","Gcy":"Г","gcy":"г","Gdot":"Ġ","gdot":"ġ","ge":"≥","gE":"≧","gEl":"⪌","gel":"⋛","geq":"≥","geqq":"≧","geqslant":"⩾","gescc":"⪩","ges":"⩾","gesdot":"⪀","gesdoto":"⪂","gesdotol":"⪄","gesl":"⋛︀","gesles":"⪔","Gfr":"𝔊","gfr":"𝔤","gg":"≫","Gg":"⋙","ggg":"⋙","gimel":"ℷ","GJcy":"Ѓ","gjcy":"ѓ","gla":"⪥","gl":"≷","glE":"⪒","glj":"⪤","gnap":"⪊","gnapprox":"⪊","gne":"⪈","gnE":"≩","gneq":"⪈","gneqq":"≩","gnsim":"⋧","Gopf":"𝔾","gopf":"𝕘","grave":"`","GreaterEqual":"≥","GreaterEqualLess":"⋛","GreaterFullEqual":"≧","GreaterGreater":"⪢","GreaterLess":"≷","GreaterSlantEqual":"⩾","GreaterTilde":"≳","Gscr":"𝒢","gscr":"ℊ","gsim":"≳","gsime":"⪎","gsiml":"⪐","gtcc":"⪧","gtcir":"⩺","gt":">”,“GT”:“>”,“Gt”:“≫”,“gtdot”:“⋗”,“gtlPar”:“⦕”,“gtquest”:“⩼”,“gtrapprox”:“⪆”,“gtrarr”:“⥸”,“gtrdot”:“⋗”,“gtreqless”:“⋛”,“gtreqqless”:“⪌”,“gtrless”:“≷”,“gtrsim”:“≳”,“gvertneqq”:“≩︀”,“gvnE”:“≩︀”,“Hacek”:“ˇ”,“hairsp”:“ ”,“half”:“½”,“hamilt”:“ℋ”,“HARDcy”:“Ъ”,“hardcy”:“ъ”,“harrcir”:“⥈”,“harr”:“↔”,“hArr”:“⇔”,“harrw”:“↭”,“Hat”:“^”,“hbar”:“ℏ”,“Hcirc”:“Ĥ”,“hcirc”:“ĥ”,“hearts”:“♥”,“heartsuit”:“♥”,“hellip”:“…”,“hercon”:“⊹”,“hfr”:“𝔥”,“Hfr”:“ℌ”,“HilbertSpace”:“ℋ”,“hksearow”:“⤥”,“hkswarow”:“⤦”,“hoarr”:“⇿”,“homtht”:“∻”,“hookleftarrow”:“↩”,“hookrightarrow”:“↪”,“hopf”:“𝕙”,“Hopf”:“ℍ”,“horbar”:“―”,“HorizontalLine”:“─”,“hscr”:“𝒽”,“Hscr”:“ℋ”,“hslash”:“ℏ”,“Hstrok”:“Ħ”,“hstrok”:“ħ”,“HumpDownHump”:“≎”,“HumpEqual”:“≏”,“hybull”:“⁃”,“hyphen”:“‐”,“Iacute”:“Í”,“iacute”:“í”,“ic”:“⁣”,“Icirc”:“Δ,“icirc”:“î”,“Icy”:“И”,“icy”:“и”,“Idot”:“İ”,“IEcy”:“Е”,“iecy”:“е”,“iexcl”:“¡”,“iff”:“⇔”,“ifr”:“𝔦”,“Ifr”:“ℑ”,“Igrave”:“Ì”,“igrave”:“ì”,“ii”:“ⅈ”,“iiiint”:“⨌”,“iiint”:“∭”,“iinfin”:“⧜”,“iiota”:“℩”,“IJlig”:“IJ”,“ijlig”:“ij”,“Imacr”:“Ī”,“imacr”:“ī”,“image”:“ℑ”,“ImaginaryI”:“ⅈ”,“imagline”:“ℐ”,“imagpart”:“ℑ”,“imath”:“ı”,“Im”:“ℑ”,“imof”:“⊷”,“imped”:“Ƶ”,“Implies”:“⇒”,“incare”:“℅”,“in”:“∈”,“infin”:“∞”,“infintie”:“⧝”,“inodot”:“ı”,“intcal”:“⊺”,“int”:“∫”,“Int”:“∬”,“integers”:“ℤ”,“Integral”:“∫”,“intercal”:“⊺”,“Intersection”:“⋂”,“intlarhk”:“⨗”,“intprod”:“⨼”,“InvisibleComma”:“⁣”,“InvisibleTimes”:“⁢”,“IOcy”:“Ё”,“iocy”:“ё”,“Iogon”:“Į”,“iogon”:“į”,“Iopf”:“𝕀”,“iopf”:“𝕚”,“Iota”:“Ι”,“iota”:“ι”,“iprod”:“⨼”,“iquest”:“¿”,“iscr”:“𝒾”,“Iscr”:“ℐ”,“isin”:“∈”,“isindot”:“⋵”,“isinE”:“⋹”,“isins”:“⋴”,“isinsv”:“⋳”,“isinv”:“∈”,“it”:“⁢”,“Itilde”:“Ĩ”,“itilde”:“ĩ”,“Iukcy”:“І”,“iukcy”:“і”,“Iuml”:“Ï”,“iuml”:“ï”,“Jcirc”:“Ĵ”,“jcirc”:“ĵ”,“Jcy”:“Й”,“jcy”:“й”,“Jfr”:“𝔍”,“jfr”:“𝔧”,“jmath”:“ȷ”,“Jopf”:“𝕁”,“jopf”:“𝕛”,“Jscr”:“𝒥”,“jscr”:“𝒿”,“Jsercy”:“Ј”,“jsercy”:“ј”,“Jukcy”:“Є”,“jukcy”:“є”,“Kappa”:“Κ”,“kappa”:“κ”,“kappav”:“ϰ”,“Kcedil”:“Ķ”,“kcedil”:“ķ”,“Kcy”:“К”,“kcy”:“к”,“Kfr”:“𝔎”,“kfr”:“𝔨”,“kgreen”:“ĸ”,“KHcy”:“Х”,“khcy”:“х”,“KJcy”:“Ќ”,“kjcy”:“ќ”,“Kopf”:“𝕂”,“kopf”:“𝕜”,“Kscr”:“𝒦”,“kscr”:“𝓀”,“lAarr”:“⇚”,“Lacute”:“Ĺ”,“lacute”:“ĺ”,“laemptyv”:“⦴”,“lagran”:“ℒ”,“Lambda”:“Λ”,“lambda”:“λ”,“lang”:“⟨”,“Lang”:“⟪”,“langd”:“⦑”,“langle”:“⟨”,“lap”:“⪅”,“Laplacetrf”:“ℒ”,“laquo”:“«”,“larrb”:“⇤”,“larrbfs”:“⤟”,“larr”:“←”,“Larr”:“↞”,“lArr”:“⇐”,“larrfs”:“⤝”,“larrhk”:“↩”,“larrlp”:“↫”,“larrpl”:“⤹”,“larrsim”:“⥳”,“larrtl”:“↢”,“latail”:“⤙”,“lAtail”:“⤛”,“lat”:“⪫”,“late”:“⪭”,“lates”:“⪭︀”,“lbarr”:“⤌”,“lBarr”:“⤎”,“lbbrk”:“❲”,“lbrace”:“{”,“lbrack”:“[”,“lbrke”:“⦋”,“lbrksld”:“⦏”,“lbrkslu”:“⦍”,“Lcaron”:“Ľ”,“lcaron”:“ľ”,“Lcedil”:“Ļ”,“lcedil”:“ļ”,“lceil”:“⌈”,“lcub”:“{”,“Lcy”:“Л”,“lcy”:“л”,“ldca”:“⤶”,“ldquo”:““”,“ldquor”:“„”,“ldrdhar”:“⥧”,“ldrushar”:“⥋”,“ldsh”:“↲”,“le”:“≤”,“lE”:“≦”,“LeftAngleBracket”:“⟨”,“LeftArrowBar”:“⇤”,“leftarrow”:“←”,“LeftArrow”:“←”,“Leftarrow”:“⇐”,“LeftArrowRightArrow”:“⇆”,“leftarrowtail”:“↢”,“LeftCeiling”:“⌈”,“LeftDoubleBracket”:“⟦”,“LeftDownTeeVector”:“⥡”,“LeftDownVectorBar”:“⥙”,“LeftDownVector”:“⇃”,“LeftFloor”:“⌊”,“leftharpoondown”:“↽”,“leftharpoonup”:“↼”,“leftleftarrows”:“⇇”,“leftrightarrow”:“↔”,“LeftRightArrow”:“↔”,“Leftrightarrow”:“⇔”,“leftrightarrows”:“⇆”,“leftrightharpoons”:“⇋”,“leftrightsquigarrow”:“↭”,“LeftRightVector”:“⥎”,“LeftTeeArrow”:“↤”,“LeftTee”:“⊣”,“LeftTeeVector”:“⥚”,“leftthreetimes”:“⋋”,“LeftTriangleBar”:“⧏”,“LeftTriangle”:“⊲”,“LeftTriangleEqual”:“⊴”,“LeftUpDownVector”:“⥑”,“LeftUpTeeVector”:“⥠”,“LeftUpVectorBar”:“⥘”,“LeftUpVector”:“↿”,“LeftVectorBar”:“⥒”,“LeftVector”:“↼”,“lEg”:“⪋”,“leg”:“⋚”,“leq”:“≤”,“leqq”:“≦”,“leqslant”:“⩽”,“lescc”:“⪨”,“les”:“⩽”,“lesdot”:“⩿”,“lesdoto”:“⪁”,“lesdotor”:“⪃”,“lesg”:“⋚︀”,“lesges”:“⪓”,“lessapprox”:“⪅”,“lessdot”:“⋖”,“lesseqgtr”:“⋚”,“lesseqqgtr”:“⪋”,“LessEqualGreater”:“⋚”,“LessFullEqual”:“≦”,“LessGreater”:“≶”,“lessgtr”:“≶”,“LessLess”:“⪡”,“lesssim”:“≲”,“LessSlantEqual”:“⩽”,“LessTilde”:“≲”,“lfisht”:“⥼”,“lfloor”:“⌊”,“Lfr”:“𝔏”,“lfr”:“𝔩”,“lg”:“≶”,“lgE”:“⪑”,“lHar”:“⥢”,“lhard”:“↽”,“lharu”:“↼”,“lharul”:“⥪”,“lhblk”:“▄”,“LJcy”:“Љ”,“ljcy”:“љ”,“llarr”:“⇇”,“ll”:“≪”,“Ll”:“⋘”,“llcorner”:“⌞”,“Lleftarrow”:“⇚”,“llhard”:“⥫”,“lltri”:“◺”,“Lmidot”:“Ŀ”,“lmidot”:“ŀ”,“lmoustache”:“⎰”,“lmoust”:“⎰”,“lnap”:“⪉”,“lnapprox”:“⪉”,“lne”:“⪇”,“lnE”:“≨”,“lneq”:“⪇”,“lneqq”:“≨”,“lnsim”:“⋦”,“loang”:“⟬”,“loarr”:“⇽”,“lobrk”:“⟦”,“longleftarrow”:“⟵”,“LongLeftArrow”:“⟵”,“Longleftarrow”:“⟸”,“longleftrightarrow”:“⟷”,“LongLeftRightArrow”:“⟷”,“Longleftrightarrow”:“⟺”,“longmapsto”:“⟼”,“longrightarrow”:“⟶”,“LongRightArrow”:“⟶”,“Longrightarrow”:“⟹”,“looparrowleft”:“↫”,“looparrowright”:“↬”,“lopar”:“⦅”,“Lopf”:“𝕃”,“lopf”:“𝕝”,“loplus”:“⨭”,“lotimes”:“⨴”,“lowast”:“∗”,“lowbar”:“_”,“LowerLeftArrow”:“↙”,“LowerRightArrow”:“↘”,“loz”:“◊”,“lozenge”:“◊”,“lozf”:“⧫”,“lpar”:“(”,“lparlt”:“⦓”,“lrarr”:“⇆”,“lrcorner”:“⌟”,“lrhar”:“⇋”,“lrhard”:“⥭”,“lrm”:“‎”,“lrtri”:“⊿”,“lsaquo”:“‹”,“lscr”:“𝓁”,“Lscr”:“ℒ”,“lsh”:“↰”,“Lsh”:“↰”,“lsim”:“≲”,“lsime”:“⪍”,“lsimg”:“⪏”,“lsqb”:“[”,“lsquo”:“‘”,“lsquor”:“‚”,“Lstrok”:“Ł”,“lstrok”:“ł”,“ltcc”:“⪦”,“ltcir”:“⩹”,“lt”:“<","LT":"<","Lt":"≪","ltdot":"⋖","lthree":"⋋","ltimes":"⋉","ltlarr":"⥶","ltquest":"⩻","ltri":"◃","ltrie":"⊴","ltrif":"◂","ltrPar":"⦖","lurdshar":"⥊","luruhar":"⥦","lvertneqq":"≨︀","lvnE":"≨︀","macr":"¯","male":"♂","malt":"✠","maltese":"✠","Map":"⤅","map":"↦","mapsto":"↦","mapstodown":"↧","mapstoleft":"↤","mapstoup":"↥","marker":"▮","mcomma":"⨩","Mcy":"М","mcy":"м","mdash":"—","mDDot":"∺","measuredangle":"∡","MediumSpace":" ","Mellintrf":"ℳ","Mfr":"𝔐","mfr":"𝔪","mho":"℧","micro":"µ","midast":"*","midcir":"⫰","mid":"∣","middot":"·","minusb":"⊟","minus":"−","minusd":"∸","minusdu":"⨪","MinusPlus":"∓","mlcp":"⫛","mldr":"…","mnplus":"∓","models":"⊧","Mopf":"𝕄","mopf":"𝕞","mp":"∓","mscr":"𝓂","Mscr":"ℳ","mstpos":"∾","Mu":"Μ","mu":"μ","multimap":"⊸","mumap":"⊸","nabla":"∇","Nacute":"Ń","nacute":"ń","nang":"∠⃒","nap":"≉","napE":"⩰̸","napid":"≋̸","napos":"ʼn","napprox":"≉","natural":"♮","naturals":"ℕ","natur":"♮","nbsp":" ","nbump":"≎̸","nbumpe":"≏̸","ncap":"⩃","Ncaron":"Ň","ncaron":"ň","Ncedil":"Ņ","ncedil":"ņ","ncong":"≇","ncongdot":"⩭̸","ncup":"⩂","Ncy":"Н","ncy":"н","ndash":"–","nearhk":"⤤","nearr":"↗","neArr":"⇗","nearrow":"↗","ne":"≠","nedot":"≐̸","NegativeMediumSpace":"​","NegativeThickSpace":"​","NegativeThinSpace":"​","NegativeVeryThinSpace":"​","nequiv":"≢","nesear":"⤨","nesim":"≂̸","NestedGreaterGreater":"≫","NestedLessLess":"≪","NewLine":"\\n","nexist":"∄","nexists":"∄","Nfr":"𝔑","nfr":"𝔫","ngE":"≧̸","nge":"≱","ngeq":"≱","ngeqq":"≧̸","ngeqslant":"⩾̸","nges":"⩾̸","nGg":"⋙̸","ngsim":"≵","nGt":"≫⃒","ngt":"≯","ngtr":"≯","nGtv":"≫̸","nharr":"↮","nhArr":"⇎","nhpar":"⫲","ni":"∋","nis":"⋼","nisd":"⋺","niv":"∋","NJcy":"Њ","njcy":"њ","nlarr":"↚","nlArr":"⇍","nldr":"‥","nlE":"≦̸","nle":"≰","nleftarrow":"↚","nLeftarrow":"⇍","nleftrightarrow":"↮","nLeftrightarrow":"⇎","nleq":"≰","nleqq":"≦̸","nleqslant":"⩽̸","nles":"⩽̸","nless":"≮","nLl":"⋘̸","nlsim":"≴","nLt":"≪⃒","nlt":"≮","nltri":"⋪","nltrie":"⋬","nLtv":"≪̸","nmid":"∤","NoBreak":"⁠","NonBreakingSpace":" ","nopf":"𝕟","Nopf":"ℕ","Not":"⫬","not":"¬","NotCongruent":"≢","NotCupCap":"≭","NotDoubleVerticalBar":"∦","NotElement":"∉","NotEqual":"≠","NotEqualTilde":"≂̸","NotExists":"∄","NotGreater":"≯","NotGreaterEqual":"≱","NotGreaterFullEqual":"≧̸","NotGreaterGreater":"≫̸","NotGreaterLess":"≹","NotGreaterSlantEqual":"⩾̸","NotGreaterTilde":"≵","NotHumpDownHump":"≎̸","NotHumpEqual":"≏̸","notin":"∉","notindot":"⋵̸","notinE":"⋹̸","notinva":"∉","notinvb":"⋷","notinvc":"⋶","NotLeftTriangleBar":"⧏̸","NotLeftTriangle":"⋪","NotLeftTriangleEqual":"⋬","NotLess":"≮","NotLessEqual":"≰","NotLessGreater":"≸","NotLessLess":"≪̸","NotLessSlantEqual":"⩽̸","NotLessTilde":"≴","NotNestedGreaterGreater":"⪢̸","NotNestedLessLess":"⪡̸","notni":"∌","notniva":"∌","notnivb":"⋾","notnivc":"⋽","NotPrecedes":"⊀","NotPrecedesEqual":"⪯̸","NotPrecedesSlantEqual":"⋠","NotReverseElement":"∌","NotRightTriangleBar":"⧐̸","NotRightTriangle":"⋫","NotRightTriangleEqual":"⋭","NotSquareSubset":"⊏̸","NotSquareSubsetEqual":"⋢","NotSquareSuperset":"⊐̸","NotSquareSupersetEqual":"⋣","NotSubset":"⊂⃒","NotSubsetEqual":"⊈","NotSucceeds":"⊁","NotSucceedsEqual":"⪰̸","NotSucceedsSlantEqual":"⋡","NotSucceedsTilde":"≿̸","NotSuperset":"⊃⃒","NotSupersetEqual":"⊉","NotTilde":"≁","NotTildeEqual":"≄","NotTildeFullEqual":"≇","NotTildeTilde":"≉","NotVerticalBar":"∤","nparallel":"∦","npar":"∦","nparsl":"⫽⃥","npart":"∂̸","npolint":"⨔","npr":"⊀","nprcue":"⋠","nprec":"⊀","npreceq":"⪯̸","npre":"⪯̸","nrarrc":"⤳̸","nrarr":"↛","nrArr":"⇏","nrarrw":"↝̸","nrightarrow":"↛","nRightarrow":"⇏","nrtri":"⋫","nrtrie":"⋭","nsc":"⊁","nsccue":"⋡","nsce":"⪰̸","Nscr":"𝒩","nscr":"𝓃","nshortmid":"∤","nshortparallel":"∦","nsim":"≁","nsime":"≄","nsimeq":"≄","nsmid":"∤","nspar":"∦","nsqsube":"⋢","nsqsupe":"⋣","nsub":"⊄","nsubE":"⫅̸","nsube":"⊈","nsubset":"⊂⃒","nsubseteq":"⊈","nsubseteqq":"⫅̸","nsucc":"⊁","nsucceq":"⪰̸","nsup":"⊅","nsupE":"⫆̸","nsupe":"⊉","nsupset":"⊃⃒","nsupseteq":"⊉","nsupseteqq":"⫆̸","ntgl":"≹","Ntilde":"Ñ","ntilde":"ñ","ntlg":"≸","ntriangleleft":"⋪","ntrianglelefteq":"⋬","ntriangleright":"⋫","ntrianglerighteq":"⋭","Nu":"Ν","nu":"ν","num":"#","numero":"№","numsp":" ","nvap":"≍⃒","nvdash":"⊬","nvDash":"⊭","nVdash":"⊮","nVDash":"⊯","nvge":"≥⃒","nvgt":">⃒”,“nvHarr”:“⤄”,“nvinfin”:“⧞”,“nvlArr”:“⤂”,“nvle”:“≤⃒”,“nvlt”:“<⃒","nvltrie":"⊴⃒","nvrArr":"⤃","nvrtrie":"⊵⃒","nvsim":"∼⃒","nwarhk":"⤣","nwarr":"↖","nwArr":"⇖","nwarrow":"↖","nwnear":"⤧","Oacute":"Ó","oacute":"ó","oast":"⊛","Ocirc":"Ô","ocirc":"ô","ocir":"⊚","Ocy":"О","ocy":"о","odash":"⊝","Odblac":"Ő","odblac":"ő","odiv":"⨸","odot":"⊙","odsold":"⦼","OElig":"Œ","oelig":"œ","ofcir":"⦿","Ofr":"𝔒","ofr":"𝔬","ogon":"˛","Ograve":"Ò","ograve":"ò","ogt":"⧁","ohbar":"⦵","ohm":"Ω","oint":"∮","olarr":"↺","olcir":"⦾","olcross":"⦻","oline":"‾","olt":"⧀","Omacr":"Ō","omacr":"ō","Omega":"Ω","omega":"ω","Omicron":"Ο","omicron":"ο","omid":"⦶","ominus":"⊖","Oopf":"𝕆","oopf":"𝕠","opar":"⦷","OpenCurlyDoubleQuote":"“","OpenCurlyQuote":"‘","operp":"⦹","oplus":"⊕","orarr":"↻","Or":"⩔","or":"∨","ord":"⩝","order":"ℴ","orderof":"ℴ","ordf":"ª","ordm":"º","origof":"⊶","oror":"⩖","orslope":"⩗","orv":"⩛","oS":"Ⓢ","Oscr":"𝒪","oscr":"ℴ","Oslash":"Ø","oslash":"ø","osol":"⊘","Otilde":"Õ","otilde":"õ","otimesas":"⨶","Otimes":"⨷","otimes":"⊗","Ouml":"Ö","ouml":"ö","ovbar":"⌽","OverBar":"‾","OverBrace":"⏞","OverBracket":"⎴","OverParenthesis":"⏜","para":"¶","parallel":"∥","par":"∥","parsim":"⫳","parsl":"⫽","part":"∂","PartialD":"∂","Pcy":"П","pcy":"п","percnt":"%","period":".","permil":"‰","perp":"⊥","pertenk":"‱","Pfr":"𝔓","pfr":"𝔭","Phi":"Φ","phi":"φ","phiv":"ϕ","phmmat":"ℳ","phone":"☎","Pi":"Π","pi":"π","pitchfork":"⋔","piv":"ϖ","planck":"ℏ","planckh":"ℎ","plankv":"ℏ","plusacir":"⨣","plusb":"⊞","pluscir":"⨢","plus":"+","plusdo":"∔","plusdu":"⨥","pluse":"⩲","PlusMinus":"±","plusmn":"±","plussim":"⨦","plustwo":"⨧","pm":"±","Poincareplane":"ℌ","pointint":"⨕","popf":"𝕡","Popf":"ℙ","pound":"£","prap":"⪷","Pr":"⪻","pr":"≺","prcue":"≼","precapprox":"⪷","prec":"≺","preccurlyeq":"≼","Precedes":"≺","PrecedesEqual":"⪯","PrecedesSlantEqual":"≼","PrecedesTilde":"≾","preceq":"⪯","precnapprox":"⪹","precneqq":"⪵","precnsim":"⋨","pre":"⪯","prE":"⪳","precsim":"≾","prime":"′","Prime":"″","primes":"ℙ","prnap":"⪹","prnE":"⪵","prnsim":"⋨","prod":"∏","Product":"∏","profalar":"⌮","profline":"⌒","profsurf":"⌓","prop":"∝","Proportional":"∝","Proportion":"∷","propto":"∝","prsim":"≾","prurel":"⊰","Pscr":"𝒫","pscr":"𝓅","Psi":"Ψ","psi":"ψ","puncsp":" ","Qfr":"𝔔","qfr":"𝔮","qint":"⨌","qopf":"𝕢","Qopf":"ℚ","qprime":"⁗","Qscr":"𝒬","qscr":"𝓆","quaternions":"ℍ","quatint":"⨖","quest":"?","questeq":"≟","quot":"\\"","QUOT":"\\"","rAarr":"⇛","race":"∽̱","Racute":"Ŕ","racute":"ŕ","radic":"√","raemptyv":"⦳","rang":"⟩","Rang":"⟫","rangd":"⦒","range":"⦥","rangle":"⟩","raquo":"»","rarrap":"⥵","rarrb":"⇥","rarrbfs":"⤠","rarrc":"⤳","rarr":"→","Rarr":"↠","rArr":"⇒","rarrfs":"⤞","rarrhk":"↪","rarrlp":"↬","rarrpl":"⥅","rarrsim":"⥴","Rarrtl":"⤖","rarrtl":"↣","rarrw":"↝","ratail":"⤚","rAtail":"⤜","ratio":"∶","rationals":"ℚ","rbarr":"⤍","rBarr":"⤏","RBarr":"⤐","rbbrk":"❳","rbrace":"}","rbrack":"]","rbrke":"⦌","rbrksld":"⦎","rbrkslu":"⦐","Rcaron":"Ř","rcaron":"ř","Rcedil":"Ŗ","rcedil":"ŗ","rceil":"⌉","rcub":"}","Rcy":"Р","rcy":"р","rdca":"⤷","rdldhar":"⥩","rdquo":"”","rdquor":"”","rdsh":"↳","real":"ℜ","realine":"ℛ","realpart":"ℜ","reals":"ℝ","Re":"ℜ","rect":"▭","reg":"®","REG":"®","ReverseElement":"∋","ReverseEquilibrium":"⇋","ReverseUpEquilibrium":"⥯","rfisht":"⥽","rfloor":"⌋","rfr":"𝔯","Rfr":"ℜ","rHar":"⥤","rhard":"⇁","rharu":"⇀","rharul":"⥬","Rho":"Ρ","rho":"ρ","rhov":"ϱ","RightAngleBracket":"⟩","RightArrowBar":"⇥","rightarrow":"→","RightArrow":"→","Rightarrow":"⇒","RightArrowLeftArrow":"⇄","rightarrowtail":"↣","RightCeiling":"⌉","RightDoubleBracket":"⟧","RightDownTeeVector":"⥝","RightDownVectorBar":"⥕","RightDownVector":"⇂","RightFloor":"⌋","rightharpoondown":"⇁","rightharpoonup":"⇀","rightleftarrows":"⇄","rightleftharpoons":"⇌","rightrightarrows":"⇉","rightsquigarrow":"↝","RightTeeArrow":"↦","RightTee":"⊢","RightTeeVector":"⥛","rightthreetimes":"⋌","RightTriangleBar":"⧐","RightTriangle":"⊳","RightTriangleEqual":"⊵","RightUpDownVector":"⥏","RightUpTeeVector":"⥜","RightUpVectorBar":"⥔","RightUpVector":"↾","RightVectorBar":"⥓","RightVector":"⇀","ring":"˚","risingdotseq":"≓","rlarr":"⇄","rlhar":"⇌","rlm":"‏","rmoustache":"⎱","rmoust":"⎱","rnmid":"⫮","roang":"⟭","roarr":"⇾","robrk":"⟧","ropar":"⦆","ropf":"𝕣","Ropf":"ℝ","roplus":"⨮","rotimes":"⨵","RoundImplies":"⥰","rpar":")","rpargt":"⦔","rppolint":"⨒","rrarr":"⇉","Rrightarrow":"⇛","rsaquo":"›","rscr":"𝓇","Rscr":"ℛ","rsh":"↱","Rsh":"↱","rsqb":"]","rsquo":"’","rsquor":"’","rthree":"⋌","rtimes":"⋊","rtri":"▹","rtrie":"⊵","rtrif":"▸","rtriltri":"⧎","RuleDelayed":"⧴","ruluhar":"⥨","rx":"℞","Sacute":"Ś","sacute":"ś","sbquo":"‚","scap":"⪸","Scaron":"Š","scaron":"š","Sc":"⪼","sc":"≻","sccue":"≽","sce":"⪰","scE":"⪴","Scedil":"Ş","scedil":"ş","Scirc":"Ŝ","scirc":"ŝ","scnap":"⪺","scnE":"⪶","scnsim":"⋩","scpolint":"⨓","scsim":"≿","Scy":"С","scy":"с","sdotb":"⊡","sdot":"⋅","sdote":"⩦","searhk":"⤥","searr":"↘","seArr":"⇘","searrow":"↘","sect":"§","semi":";","seswar":"⤩","setminus":"∖","setmn":"∖","sext":"✶","Sfr":"𝔖","sfr":"𝔰","sfrown":"⌢","sharp":"♯","SHCHcy":"Щ","shchcy":"щ","SHcy":"Ш","shcy":"ш","ShortDownArrow":"↓","ShortLeftArrow":"←","shortmid":"∣","shortparallel":"∥","ShortRightArrow":"→","ShortUpArrow":"↑","shy":"­","Sigma":"Σ","sigma":"σ","sigmaf":"ς","sigmav":"ς","sim":"∼","simdot":"⩪","sime":"≃","simeq":"≃","simg":"⪞","simgE":"⪠","siml":"⪝","simlE":"⪟","simne":"≆","simplus":"⨤","simrarr":"⥲","slarr":"←","SmallCircle":"∘","smallsetminus":"∖","smashp":"⨳","smeparsl":"⧤","smid":"∣","smile":"⌣","smt":"⪪","smte":"⪬","smtes":"⪬︀","SOFTcy":"Ь","softcy":"ь","solbar":"⌿","solb":"⧄","sol":"/","Sopf":"𝕊","sopf":"𝕤","spades":"♠","spadesuit":"♠","spar":"∥","sqcap":"⊓","sqcaps":"⊓︀","sqcup":"⊔","sqcups":"⊔︀","Sqrt":"√","sqsub":"⊏","sqsube":"⊑","sqsubset":"⊏","sqsubseteq":"⊑","sqsup":"⊐","sqsupe":"⊒","sqsupset":"⊐","sqsupseteq":"⊒","square":"□","Square":"□","SquareIntersection":"⊓","SquareSubset":"⊏","SquareSubsetEqual":"⊑","SquareSuperset":"⊐","SquareSupersetEqual":"⊒","SquareUnion":"⊔","squarf":"▪","squ":"□","squf":"▪","srarr":"→","Sscr":"𝒮","sscr":"𝓈","ssetmn":"∖","ssmile":"⌣","sstarf":"⋆","Star":"⋆","star":"☆","starf":"★","straightepsilon":"ϵ","straightphi":"ϕ","strns":"¯","sub":"⊂","Sub":"⋐","subdot":"⪽","subE":"⫅","sube":"⊆","subedot":"⫃","submult":"⫁","subnE":"⫋","subne":"⊊","subplus":"⪿","subrarr":"⥹","subset":"⊂","Subset":"⋐","subseteq":"⊆","subseteqq":"⫅","SubsetEqual":"⊆","subsetneq":"⊊","subsetneqq":"⫋","subsim":"⫇","subsub":"⫕","subsup":"⫓","succapprox":"⪸","succ":"≻","succcurlyeq":"≽","Succeeds":"≻","SucceedsEqual":"⪰","SucceedsSlantEqual":"≽","SucceedsTilde":"≿","succeq":"⪰","succnapprox":"⪺","succneqq":"⪶","succnsim":"⋩","succsim":"≿","SuchThat":"∋","sum":"∑","Sum":"∑","sung":"♪","sup1":"¹","sup2":"²","sup3":"³","sup":"⊃","Sup":"⋑","supdot":"⪾","supdsub":"⫘","supE":"⫆","supe":"⊇","supedot":"⫄","Superset":"⊃","SupersetEqual":"⊇","suphsol":"⟉","suphsub":"⫗","suplarr":"⥻","supmult":"⫂","supnE":"⫌","supne":"⊋","supplus":"⫀","supset":"⊃","Supset":"⋑","supseteq":"⊇","supseteqq":"⫆","supsetneq":"⊋","supsetneqq":"⫌","supsim":"⫈","supsub":"⫔","supsup":"⫖","swarhk":"⤦","swarr":"↙","swArr":"⇙","swarrow":"↙","swnwar":"⤪","szlig":"ß","Tab":"\\t","target":"⌖","Tau":"Τ","tau":"τ","tbrk":"⎴","Tcaron":"Ť","tcaron":"ť","Tcedil":"Ţ","tcedil":"ţ","Tcy":"Т","tcy":"т","tdot":"⃛","telrec":"⌕","Tfr":"𝔗","tfr":"𝔱","there4":"∴","therefore":"∴","Therefore":"∴","Theta":"Θ","theta":"θ","thetasym":"ϑ","thetav":"ϑ","thickapprox":"≈","thicksim":"∼","ThickSpace":"  ","ThinSpace":" ","thinsp":" ","thkap":"≈","thksim":"∼","THORN":"Þ","thorn":"þ","tilde":"˜","Tilde":"∼","TildeEqual":"≃","TildeFullEqual":"≅","TildeTilde":"≈","timesbar":"⨱","timesb":"⊠","times":"×","timesd":"⨰","tint":"∭","toea":"⤨","topbot":"⌶","topcir":"⫱","top":"⊤","Topf":"𝕋","topf":"𝕥","topfork":"⫚","tosa":"⤩","tprime":"‴","trade":"™","TRADE":"™","triangle":"▵","triangledown":"▿","triangleleft":"◃","trianglelefteq":"⊴","triangleq":"≜","triangleright":"▹","trianglerighteq":"⊵","tridot":"◬","trie":"≜","triminus":"⨺","TripleDot":"⃛","triplus":"⨹","trisb":"⧍","tritime":"⨻","trpezium":"⏢","Tscr":"𝒯","tscr":"𝓉","TScy":"Ц","tscy":"ц","TSHcy":"Ћ","tshcy":"ћ","Tstrok":"Ŧ","tstrok":"ŧ","twixt":"≬","twoheadleftarrow":"↞","twoheadrightarrow":"↠","Uacute":"Ú","uacute":"ú","uarr":"↑","Uarr":"↟","uArr":"⇑","Uarrocir":"⥉","Ubrcy":"Ў","ubrcy":"ў","Ubreve":"Ŭ","ubreve":"ŭ","Ucirc":"Û","ucirc":"û","Ucy":"У","ucy":"у","udarr":"⇅","Udblac":"Ű","udblac":"ű","udhar":"⥮","ufisht":"⥾","Ufr":"𝔘","ufr":"𝔲","Ugrave":"Ù","ugrave":"ù","uHar":"⥣","uharl":"↿","uharr":"↾","uhblk":"▀","ulcorn":"⌜","ulcorner":"⌜","ulcrop":"⌏","ultri":"◸","Umacr":"Ū","umacr":"ū","uml":"¨","UnderBar":"_","UnderBrace":"⏟","UnderBracket":"⎵","UnderParenthesis":"⏝","Union":"⋃","UnionPlus":"⊎","Uogon":"Ų","uogon":"ų","Uopf":"𝕌","uopf":"𝕦","UpArrowBar":"⤒","uparrow":"↑","UpArrow":"↑","Uparrow":"⇑","UpArrowDownArrow":"⇅","updownarrow":"↕","UpDownArrow":"↕","Updownarrow":"⇕","UpEquilibrium":"⥮","upharpoonleft":"↿","upharpoonright":"↾","uplus":"⊎","UpperLeftArrow":"↖","UpperRightArrow":"↗","upsi":"υ","Upsi":"ϒ","upsih":"ϒ","Upsilon":"Υ","upsilon":"υ","UpTeeArrow":"↥","UpTee":"⊥","upuparrows":"⇈","urcorn":"⌝","urcorner":"⌝","urcrop":"⌎","Uring":"Ů","uring":"ů","urtri":"◹","Uscr":"𝒰","uscr":"𝓊","utdot":"⋰","Utilde":"Ũ","utilde":"ũ","utri":"▵","utrif":"▴","uuarr":"⇈","Uuml":"Ü","uuml":"ü","uwangle":"⦧","vangrt":"⦜","varepsilon":"ϵ","varkappa":"ϰ","varnothing":"∅","varphi":"ϕ","varpi":"ϖ","varpropto":"∝","varr":"↕","vArr":"⇕","varrho":"ϱ","varsigma":"ς","varsubsetneq":"⊊︀","varsubsetneqq":"⫋︀","varsupsetneq":"⊋︀","varsupsetneqq":"⫌︀","vartheta":"ϑ","vartriangleleft":"⊲","vartriangleright":"⊳","vBar":"⫨","Vbar":"⫫","vBarv":"⫩","Vcy":"В","vcy":"в","vdash":"⊢","vDash":"⊨","Vdash":"⊩","VDash":"⊫","Vdashl":"⫦","veebar":"⊻","vee":"∨","Vee":"⋁","veeeq":"≚","vellip":"⋮","verbar":"|","Verbar":"‖","vert":"|","Vert":"‖","VerticalBar":"∣","VerticalLine":"|","VerticalSeparator":"❘","VerticalTilde":"≀","VeryThinSpace":" ","Vfr":"𝔙","vfr":"𝔳","vltri":"⊲","vnsub":"⊂⃒","vnsup":"⊃⃒","Vopf":"𝕍","vopf":"𝕧","vprop":"∝","vrtri":"⊳","Vscr":"𝒱","vscr":"𝓋","vsubnE":"⫋︀","vsubne":"⊊︀","vsupnE":"⫌︀","vsupne":"⊋︀","Vvdash":"⊪","vzigzag":"⦚","Wcirc":"Ŵ","wcirc":"ŵ","wedbar":"⩟","wedge":"∧","Wedge":"⋀","wedgeq":"≙","weierp":"℘","Wfr":"𝔚","wfr":"𝔴","Wopf":"𝕎","wopf":"𝕨","wp":"℘","wr":"≀","wreath":"≀","Wscr":"𝒲","wscr":"𝓌","xcap":"⋂","xcirc":"◯","xcup":"⋃","xdtri":"▽","Xfr":"𝔛","xfr":"𝔵","xharr":"⟷","xhArr":"⟺","Xi":"Ξ","xi":"ξ","xlarr":"⟵","xlArr":"⟸","xmap":"⟼","xnis":"⋻","xodot":"⨀","Xopf":"𝕏","xopf":"𝕩","xoplus":"⨁","xotime":"⨂","xrarr":"⟶","xrArr":"⟹","Xscr":"𝒳","xscr":"𝓍","xsqcup":"⨆","xuplus":"⨄","xutri":"△","xvee":"⋁","xwedge":"⋀","Yacute":"Ý","yacute":"ý","YAcy":"Я","yacy":"я","Ycirc":"Ŷ","ycirc":"ŷ","Ycy":"Ы","ycy":"ы","yen":"¥","Yfr":"𝔜","yfr":"𝔶","YIcy":"Ї","yicy":"ї","Yopf":"𝕐","yopf":"𝕪","Yscr":"𝒴","yscr":"𝓎","YUcy":"Ю","yucy":"ю","yuml":"ÿ","Yuml":"Ÿ","Zacute":"Ź","zacute":"ź","Zcaron":"Ž","zcaron":"ž","Zcy":"З","zcy":"з","Zdot":"Ż","zdot":"ż","zeetrf":"ℨ","ZeroWidthSpace":"​","Zeta":"Ζ","zeta":"ζ","zfr":"𝔷","Zfr":"ℨ","ZHcy":"Ж","zhcy":"ж","zigrarr":"⇝","zopf":"𝕫","Zopf":"ℤ","Zscr":"𝒵","zscr":"𝓏","zwj":"‍","zwnj":"‌"}')},function(e,t,n){"use">github.com/cucumber/cucumber/issues”})}}).call(this,n(4))},function(e){e.exports=JSON.parse(’{“amp”:“&”,“apos”:“'”,“gt”:“>”,“lt”:“<","quot":"\\""}')},function(e){e.exports=JSON.parse('{"Aacute":"Á","aacute":"á","Abreve":"Ă","abreve":"ă","ac":"∾","acd":"∿","acE":"∾̳","Acirc":"Â","acirc":"â","acute":"´","Acy":"А","acy":"а","AElig":"Æ","aelig":"æ","af":"⁡","Afr":"𝔄","afr":"𝔞","Agrave":"À","agrave":"à","alefsym":"ℵ","aleph":"ℵ","Alpha":"Α","alpha":"α","Amacr":"Ā","amacr":"ā","amalg":"⨿","amp":"&","AMP":"&","andand":"⩕","And":"⩓","and":"∧","andd":"⩜","andslope":"⩘","andv":"⩚","ang":"∠","ange":"⦤","angle":"∠","angmsdaa":"⦨","angmsdab":"⦩","angmsdac":"⦪","angmsdad":"⦫","angmsdae":"⦬","angmsdaf":"⦭","angmsdag":"⦮","angmsdah":"⦯","angmsd":"∡","angrt":"∟","angrtvb":"⊾","angrtvbd":"⦝","angsph":"∢","angst":"Å","angzarr":"⍼","Aogon":"Ą","aogon":"ą","Aopf":"𝔸","aopf":"𝕒","apacir":"⩯","ap":"≈","apE":"⩰","ape":"≊","apid":"≋","apos":"\'","ApplyFunction":"⁡","approx":"≈","approxeq":"≊","Aring":"Å","aring":"å","Ascr":"𝒜","ascr":"𝒶","Assign":"≔","ast":"*","asymp":"≈","asympeq":"≍","Atilde":"Ã","atilde":"ã","Auml":"Ä","auml":"ä","awconint":"∳","awint":"⨑","backcong":"≌","backepsilon":"϶","backprime":"‵","backsim":"∽","backsimeq":"⋍","Backslash":"∖","Barv":"⫧","barvee":"⊽","barwed":"⌅","Barwed":"⌆","barwedge":"⌅","bbrk":"⎵","bbrktbrk":"⎶","bcong":"≌","Bcy":"Б","bcy":"б","bdquo":"„","becaus":"∵","because":"∵","Because":"∵","bemptyv":"⦰","bepsi":"϶","bernou":"ℬ","Bernoullis":"ℬ","Beta":"Β","beta":"β","beth":"ℶ","between":"≬","Bfr":"𝔅","bfr":"𝔟","bigcap":"⋂","bigcirc":"◯","bigcup":"⋃","bigodot":"⨀","bigoplus":"⨁","bigotimes":"⨂","bigsqcup":"⨆","bigstar":"★","bigtriangledown":"▽","bigtriangleup":"△","biguplus":"⨄","bigvee":"⋁","bigwedge":"⋀","bkarow":"⤍","blacklozenge":"⧫","blacksquare":"▪","blacktriangle":"▴","blacktriangledown":"▾","blacktriangleleft":"◂","blacktriangleright":"▸","blank":"␣","blk12":"▒","blk14":"░","blk34":"▓","block":"█","bne":"=⃥","bnequiv":"≡⃥","bNot":"⫭","bnot":"⌐","Bopf":"𝔹","bopf":"𝕓","bot":"⊥","bottom":"⊥","bowtie":"⋈","boxbox":"⧉","boxdl":"┐","boxdL":"╕","boxDl":"╖","boxDL":"╗","boxdr":"┌","boxdR":"╒","boxDr":"╓","boxDR":"╔","boxh":"─","boxH":"═","boxhd":"┬","boxHd":"╤","boxhD":"╥","boxHD":"╦","boxhu":"┴","boxHu":"╧","boxhU":"╨","boxHU":"╩","boxminus":"⊟","boxplus":"⊞","boxtimes":"⊠","boxul":"┘","boxuL":"╛","boxUl":"╜","boxUL":"╝","boxur":"└","boxuR":"╘","boxUr":"╙","boxUR":"╚","boxv":"│","boxV":"║","boxvh":"┼","boxvH":"╪","boxVh":"╫","boxVH":"╬","boxvl":"┤","boxvL":"╡","boxVl":"╢","boxVL":"╣","boxvr":"├","boxvR":"╞","boxVr":"╟","boxVR":"╠","bprime":"‵","breve":"˘","Breve":"˘","brvbar":"¦","bscr":"𝒷","Bscr":"ℬ","bsemi":"⁏","bsim":"∽","bsime":"⋍","bsolb":"⧅","bsol":"\\\\","bsolhsub":"⟈","bull":"•","bullet":"•","bump":"≎","bumpE":"⪮","bumpe":"≏","Bumpeq":"≎","bumpeq":"≏","Cacute":"Ć","cacute":"ć","capand":"⩄","capbrcup":"⩉","capcap":"⩋","cap":"∩","Cap":"⋒","capcup":"⩇","capdot":"⩀","CapitalDifferentialD":"ⅅ","caps":"∩︀","caret":"⁁","caron":"ˇ","Cayleys":"ℭ","ccaps":"⩍","Ccaron":"Č","ccaron":"č","Ccedil":"Ç","ccedil":"ç","Ccirc":"Ĉ","ccirc":"ĉ","Cconint":"∰","ccups":"⩌","ccupssm":"⩐","Cdot":"Ċ","cdot":"ċ","cedil":"¸","Cedilla":"¸","cemptyv":"⦲","cent":"¢","centerdot":"·","CenterDot":"·","cfr":"𝔠","Cfr":"ℭ","CHcy":"Ч","chcy":"ч","check":"✓","checkmark":"✓","Chi":"Χ","chi":"χ","circ":"ˆ","circeq":"≗","circlearrowleft":"↺","circlearrowright":"↻","circledast":"⊛","circledcirc":"⊚","circleddash":"⊝","CircleDot":"⊙","circledR":"®","circledS":"Ⓢ","CircleMinus":"⊖","CirclePlus":"⊕","CircleTimes":"⊗","cir":"○","cirE":"⧃","cire":"≗","cirfnint":"⨐","cirmid":"⫯","cirscir":"⧂","ClockwiseContourIntegral":"∲","CloseCurlyDoubleQuote":"”","CloseCurlyQuote":"’","clubs":"♣","clubsuit":"♣","colon":":","Colon":"∷","Colone":"⩴","colone":"≔","coloneq":"≔","comma":",","commat":"@","comp":"∁","compfn":"∘","complement":"∁","complexes":"ℂ","cong":"≅","congdot":"⩭","Congruent":"≡","conint":"∮","Conint":"∯","ContourIntegral":"∮","copf":"𝕔","Copf":"ℂ","coprod":"∐","Coproduct":"∐","copy":"©","COPY":"©","copysr":"℗","CounterClockwiseContourIntegral":"∳","crarr":"↵","cross":"✗","Cross":"⨯","Cscr":"𝒞","cscr":"𝒸","csub":"⫏","csube":"⫑","csup":"⫐","csupe":"⫒","ctdot":"⋯","cudarrl":"⤸","cudarrr":"⤵","cuepr":"⋞","cuesc":"⋟","cularr":"↶","cularrp":"⤽","cupbrcap":"⩈","cupcap":"⩆","CupCap":"≍","cup":"∪","Cup":"⋓","cupcup":"⩊","cupdot":"⊍","cupor":"⩅","cups":"∪︀","curarr":"↷","curarrm":"⤼","curlyeqprec":"⋞","curlyeqsucc":"⋟","curlyvee":"⋎","curlywedge":"⋏","curren":"¤","curvearrowleft":"↶","curvearrowright":"↷","cuvee":"⋎","cuwed":"⋏","cwconint":"∲","cwint":"∱","cylcty":"⌭","dagger":"†","Dagger":"‡","daleth":"ℸ","darr":"↓","Darr":"↡","dArr":"⇓","dash":"‐","Dashv":"⫤","dashv":"⊣","dbkarow":"⤏","dblac":"˝","Dcaron":"Ď","dcaron":"ď","Dcy":"Д","dcy":"д","ddagger":"‡","ddarr":"⇊","DD":"ⅅ","dd":"ⅆ","DDotrahd":"⤑","ddotseq":"⩷","deg":"°","Del":"∇","Delta":"Δ","delta":"δ","demptyv":"⦱","dfisht":"⥿","Dfr":"𝔇","dfr":"𝔡","dHar":"⥥","dharl":"⇃","dharr":"⇂","DiacriticalAcute":"´","DiacriticalDot":"˙","DiacriticalDoubleAcute":"˝","DiacriticalGrave":"`","DiacriticalTilde":"˜","diam":"⋄","diamond":"⋄","Diamond":"⋄","diamondsuit":"♦","diams":"♦","die":"¨","DifferentialD":"ⅆ","digamma":"ϝ","disin":"⋲","div":"÷","divide":"÷","divideontimes":"⋇","divonx":"⋇","DJcy":"Ђ","djcy":"ђ","dlcorn":"⌞","dlcrop":"⌍","dollar":"$","Dopf":"𝔻","dopf":"𝕕","Dot":"¨","dot":"˙","DotDot":"⃜","doteq":"≐","doteqdot":"≑","DotEqual":"≐","dotminus":"∸","dotplus":"∔","dotsquare":"⊡","doublebarwedge":"⌆","DoubleContourIntegral":"∯","DoubleDot":"¨","DoubleDownArrow":"⇓","DoubleLeftArrow":"⇐","DoubleLeftRightArrow":"⇔","DoubleLeftTee":"⫤","DoubleLongLeftArrow":"⟸","DoubleLongLeftRightArrow":"⟺","DoubleLongRightArrow":"⟹","DoubleRightArrow":"⇒","DoubleRightTee":"⊨","DoubleUpArrow":"⇑","DoubleUpDownArrow":"⇕","DoubleVerticalBar":"∥","DownArrowBar":"⤓","downarrow":"↓","DownArrow":"↓","Downarrow":"⇓","DownArrowUpArrow":"⇵","DownBreve":"̑","downdownarrows":"⇊","downharpoonleft":"⇃","downharpoonright":"⇂","DownLeftRightVector":"⥐","DownLeftTeeVector":"⥞","DownLeftVectorBar":"⥖","DownLeftVector":"↽","DownRightTeeVector":"⥟","DownRightVectorBar":"⥗","DownRightVector":"⇁","DownTeeArrow":"↧","DownTee":"⊤","drbkarow":"⤐","drcorn":"⌟","drcrop":"⌌","Dscr":"𝒟","dscr":"𝒹","DScy":"Ѕ","dscy":"ѕ","dsol":"⧶","Dstrok":"Đ","dstrok":"đ","dtdot":"⋱","dtri":"▿","dtrif":"▾","duarr":"⇵","duhar":"⥯","dwangle":"⦦","DZcy":"Џ","dzcy":"џ","dzigrarr":"⟿","Eacute":"É","eacute":"é","easter":"⩮","Ecaron":"Ě","ecaron":"ě","Ecirc":"Ê","ecirc":"ê","ecir":"≖","ecolon":"≕","Ecy":"Э","ecy":"э","eDDot":"⩷","Edot":"Ė","edot":"ė","eDot":"≑","ee":"ⅇ","efDot":"≒","Efr":"𝔈","efr":"𝔢","eg":"⪚","Egrave":"È","egrave":"è","egs":"⪖","egsdot":"⪘","el":"⪙","Element":"∈","elinters":"⏧","ell":"ℓ","els":"⪕","elsdot":"⪗","Emacr":"Ē","emacr":"ē","empty":"∅","emptyset":"∅","EmptySmallSquare":"◻","emptyv":"∅","EmptyVerySmallSquare":"▫","emsp13":" ","emsp14":" ","emsp":" ","ENG":"Ŋ","eng":"ŋ","ensp":" ","Eogon":"Ę","eogon":"ę","Eopf":"𝔼","eopf":"𝕖","epar":"⋕","eparsl":"⧣","eplus":"⩱","epsi":"ε","Epsilon":"Ε","epsilon":"ε","epsiv":"ϵ","eqcirc":"≖","eqcolon":"≕","eqsim":"≂","eqslantgtr":"⪖","eqslantless":"⪕","Equal":"⩵","equals":"=","EqualTilde":"≂","equest":"≟","Equilibrium":"⇌","equiv":"≡","equivDD":"⩸","eqvparsl":"⧥","erarr":"⥱","erDot":"≓","escr":"ℯ","Escr":"ℰ","esdot":"≐","Esim":"⩳","esim":"≂","Eta":"Η","eta":"η","ETH":"Ð","eth":"ð","Euml":"Ë","euml":"ë","euro":"€","excl":"!","exist":"∃","Exists":"∃","expectation":"ℰ","exponentiale":"ⅇ","ExponentialE":"ⅇ","fallingdotseq":"≒","Fcy":"Ф","fcy":"ф","female":"♀","ffilig":"ffi","fflig":"ff","ffllig":"ffl","Ffr":"𝔉","ffr":"𝔣","filig":"fi","FilledSmallSquare":"◼","FilledVerySmallSquare":"▪","fjlig":"fj","flat":"♭","fllig":"fl","fltns":"▱","fnof":"ƒ","Fopf":"𝔽","fopf":"𝕗","forall":"∀","ForAll":"∀","fork":"⋔","forkv":"⫙","Fouriertrf":"ℱ","fpartint":"⨍","frac12":"½","frac13":"⅓","frac14":"¼","frac15":"⅕","frac16":"⅙","frac18":"⅛","frac23":"⅔","frac25":"⅖","frac34":"¾","frac35":"⅗","frac38":"⅜","frac45":"⅘","frac56":"⅚","frac58":"⅝","frac78":"⅞","frasl":"⁄","frown":"⌢","fscr":"𝒻","Fscr":"ℱ","gacute":"ǵ","Gamma":"Γ","gamma":"γ","Gammad":"Ϝ","gammad":"ϝ","gap":"⪆","Gbreve":"Ğ","gbreve":"ğ","Gcedil":"Ģ","Gcirc":"Ĝ","gcirc":"ĝ","Gcy":"Г","gcy":"г","Gdot":"Ġ","gdot":"ġ","ge":"≥","gE":"≧","gEl":"⪌","gel":"⋛","geq":"≥","geqq":"≧","geqslant":"⩾","gescc":"⪩","ges":"⩾","gesdot":"⪀","gesdoto":"⪂","gesdotol":"⪄","gesl":"⋛︀","gesles":"⪔","Gfr":"𝔊","gfr":"𝔤","gg":"≫","Gg":"⋙","ggg":"⋙","gimel":"ℷ","GJcy":"Ѓ","gjcy":"ѓ","gla":"⪥","gl":"≷","glE":"⪒","glj":"⪤","gnap":"⪊","gnapprox":"⪊","gne":"⪈","gnE":"≩","gneq":"⪈","gneqq":"≩","gnsim":"⋧","Gopf":"𝔾","gopf":"𝕘","grave":"`","GreaterEqual":"≥","GreaterEqualLess":"⋛","GreaterFullEqual":"≧","GreaterGreater":"⪢","GreaterLess":"≷","GreaterSlantEqual":"⩾","GreaterTilde":"≳","Gscr":"𝒢","gscr":"ℊ","gsim":"≳","gsime":"⪎","gsiml":"⪐","gtcc":"⪧","gtcir":"⩺","gt":">”,“GT”:“>”,“Gt”:“≫”,“gtdot”:“⋗”,“gtlPar”:“⦕”,“gtquest”:“⩼”,“gtrapprox”:“⪆”,“gtrarr”:“⥸”,“gtrdot”:“⋗”,“gtreqless”:“⋛”,“gtreqqless”:“⪌”,“gtrless”:“≷”,“gtrsim”:“≳”,“gvertneqq”:“≩︀”,“gvnE”:“≩︀”,“Hacek”:“ˇ”,“hairsp”:“ ”,“half”:“½”,“hamilt”:“ℋ”,“HARDcy”:“Ъ”,“hardcy”:“ъ”,“harrcir”:“⥈”,“harr”:“↔”,“hArr”:“⇔”,“harrw”:“↭”,“Hat”:“^”,“hbar”:“ℏ”,“Hcirc”:“Ĥ”,“hcirc”:“ĥ”,“hearts”:“♥”,“heartsuit”:“♥”,“hellip”:“…”,“hercon”:“⊹”,“hfr”:“𝔥”,“Hfr”:“ℌ”,“HilbertSpace”:“ℋ”,“hksearow”:“⤥”,“hkswarow”:“⤦”,“hoarr”:“⇿”,“homtht”:“∻”,“hookleftarrow”:“↩”,“hookrightarrow”:“↪”,“hopf”:“𝕙”,“Hopf”:“ℍ”,“horbar”:“―”,“HorizontalLine”:“─”,“hscr”:“𝒽”,“Hscr”:“ℋ”,“hslash”:“ℏ”,“Hstrok”:“Ħ”,“hstrok”:“ħ”,“HumpDownHump”:“≎”,“HumpEqual”:“≏”,“hybull”:“⁃”,“hyphen”:“‐”,“Iacute”:“Í”,“iacute”:“í”,“ic”:“⁣”,“Icirc”:“Δ,“icirc”:“î”,“Icy”:“И”,“icy”:“и”,“Idot”:“İ”,“IEcy”:“Е”,“iecy”:“е”,“iexcl”:“¡”,“iff”:“⇔”,“ifr”:“𝔦”,“Ifr”:“ℑ”,“Igrave”:“Ì”,“igrave”:“ì”,“ii”:“ⅈ”,“iiiint”:“⨌”,“iiint”:“∭”,“iinfin”:“⧜”,“iiota”:“℩”,“IJlig”:“IJ”,“ijlig”:“ij”,“Imacr”:“Ī”,“imacr”:“ī”,“image”:“ℑ”,“ImaginaryI”:“ⅈ”,“imagline”:“ℐ”,“imagpart”:“ℑ”,“imath”:“ı”,“Im”:“ℑ”,“imof”:“⊷”,“imped”:“Ƶ”,“Implies”:“⇒”,“incare”:“℅”,“in”:“∈”,“infin”:“∞”,“infintie”:“⧝”,“inodot”:“ı”,“intcal”:“⊺”,“int”:“∫”,“Int”:“∬”,“integers”:“ℤ”,“Integral”:“∫”,“intercal”:“⊺”,“Intersection”:“⋂”,“intlarhk”:“⨗”,“intprod”:“⨼”,“InvisibleComma”:“⁣”,“InvisibleTimes”:“⁢”,“IOcy”:“Ё”,“iocy”:“ё”,“Iogon”:“Į”,“iogon”:“į”,“Iopf”:“𝕀”,“iopf”:“𝕚”,“Iota”:“Ι”,“iota”:“ι”,“iprod”:“⨼”,“iquest”:“¿”,“iscr”:“𝒾”,“Iscr”:“ℐ”,“isin”:“∈”,“isindot”:“⋵”,“isinE”:“⋹”,“isins”:“⋴”,“isinsv”:“⋳”,“isinv”:“∈”,“it”:“⁢”,“Itilde”:“Ĩ”,“itilde”:“ĩ”,“Iukcy”:“І”,“iukcy”:“і”,“Iuml”:“Ï”,“iuml”:“ï”,“Jcirc”:“Ĵ”,“jcirc”:“ĵ”,“Jcy”:“Й”,“jcy”:“й”,“Jfr”:“𝔍”,“jfr”:“𝔧”,“jmath”:“ȷ”,“Jopf”:“𝕁”,“jopf”:“𝕛”,“Jscr”:“𝒥”,“jscr”:“𝒿”,“Jsercy”:“Ј”,“jsercy”:“ј”,“Jukcy”:“Є”,“jukcy”:“є”,“Kappa”:“Κ”,“kappa”:“κ”,“kappav”:“ϰ”,“Kcedil”:“Ķ”,“kcedil”:“ķ”,“Kcy”:“К”,“kcy”:“к”,“Kfr”:“𝔎”,“kfr”:“𝔨”,“kgreen”:“ĸ”,“KHcy”:“Х”,“khcy”:“х”,“KJcy”:“Ќ”,“kjcy”:“ќ”,“Kopf”:“𝕂”,“kopf”:“𝕜”,“Kscr”:“𝒦”,“kscr”:“𝓀”,“lAarr”:“⇚”,“Lacute”:“Ĺ”,“lacute”:“ĺ”,“laemptyv”:“⦴”,“lagran”:“ℒ”,“Lambda”:“Λ”,“lambda”:“λ”,“lang”:“⟨”,“Lang”:“⟪”,“langd”:“⦑”,“langle”:“⟨”,“lap”:“⪅”,“Laplacetrf”:“ℒ”,“laquo”:“«”,“larrb”:“⇤”,“larrbfs”:“⤟”,“larr”:“←”,“Larr”:“↞”,“lArr”:“⇐”,“larrfs”:“⤝”,“larrhk”:“↩”,“larrlp”:“↫”,“larrpl”:“⤹”,“larrsim”:“⥳”,“larrtl”:“↢”,“latail”:“⤙”,“lAtail”:“⤛”,“lat”:“⪫”,“late”:“⪭”,“lates”:“⪭︀”,“lbarr”:“⤌”,“lBarr”:“⤎”,“lbbrk”:“❲”,“lbrace”:“{”,“lbrack”:“[”,“lbrke”:“⦋”,“lbrksld”:“⦏”,“lbrkslu”:“⦍”,“Lcaron”:“Ľ”,“lcaron”:“ľ”,“Lcedil”:“Ļ”,“lcedil”:“ļ”,“lceil”:“⌈”,“lcub”:“{”,“Lcy”:“Л”,“lcy”:“л”,“ldca”:“⤶”,“ldquo”:““”,“ldquor”:“„”,“ldrdhar”:“⥧”,“ldrushar”:“⥋”,“ldsh”:“↲”,“le”:“≤”,“lE”:“≦”,“LeftAngleBracket”:“⟨”,“LeftArrowBar”:“⇤”,“leftarrow”:“←”,“LeftArrow”:“←”,“Leftarrow”:“⇐”,“LeftArrowRightArrow”:“⇆”,“leftarrowtail”:“↢”,“LeftCeiling”:“⌈”,“LeftDoubleBracket”:“⟦”,“LeftDownTeeVector”:“⥡”,“LeftDownVectorBar”:“⥙”,“LeftDownVector”:“⇃”,“LeftFloor”:“⌊”,“leftharpoondown”:“↽”,“leftharpoonup”:“↼”,“leftleftarrows”:“⇇”,“leftrightarrow”:“↔”,“LeftRightArrow”:“↔”,“Leftrightarrow”:“⇔”,“leftrightarrows”:“⇆”,“leftrightharpoons”:“⇋”,“leftrightsquigarrow”:“↭”,“LeftRightVector”:“⥎”,“LeftTeeArrow”:“↤”,“LeftTee”:“⊣”,“LeftTeeVector”:“⥚”,“leftthreetimes”:“⋋”,“LeftTriangleBar”:“⧏”,“LeftTriangle”:“⊲”,“LeftTriangleEqual”:“⊴”,“LeftUpDownVector”:“⥑”,“LeftUpTeeVector”:“⥠”,“LeftUpVectorBar”:“⥘”,“LeftUpVector”:“↿”,“LeftVectorBar”:“⥒”,“LeftVector”:“↼”,“lEg”:“⪋”,“leg”:“⋚”,“leq”:“≤”,“leqq”:“≦”,“leqslant”:“⩽”,“lescc”:“⪨”,“les”:“⩽”,“lesdot”:“⩿”,“lesdoto”:“⪁”,“lesdotor”:“⪃”,“lesg”:“⋚︀”,“lesges”:“⪓”,“lessapprox”:“⪅”,“lessdot”:“⋖”,“lesseqgtr”:“⋚”,“lesseqqgtr”:“⪋”,“LessEqualGreater”:“⋚”,“LessFullEqual”:“≦”,“LessGreater”:“≶”,“lessgtr”:“≶”,“LessLess”:“⪡”,“lesssim”:“≲”,“LessSlantEqual”:“⩽”,“LessTilde”:“≲”,“lfisht”:“⥼”,“lfloor”:“⌊”,“Lfr”:“𝔏”,“lfr”:“𝔩”,“lg”:“≶”,“lgE”:“⪑”,“lHar”:“⥢”,“lhard”:“↽”,“lharu”:“↼”,“lharul”:“⥪”,“lhblk”:“▄”,“LJcy”:“Љ”,“ljcy”:“љ”,“llarr”:“⇇”,“ll”:“≪”,“Ll”:“⋘”,“llcorner”:“⌞”,“Lleftarrow”:“⇚”,“llhard”:“⥫”,“lltri”:“◺”,“Lmidot”:“Ŀ”,“lmidot”:“ŀ”,“lmoustache”:“⎰”,“lmoust”:“⎰”,“lnap”:“⪉”,“lnapprox”:“⪉”,“lne”:“⪇”,“lnE”:“≨”,“lneq”:“⪇”,“lneqq”:“≨”,“lnsim”:“⋦”,“loang”:“⟬”,“loarr”:“⇽”,“lobrk”:“⟦”,“longleftarrow”:“⟵”,“LongLeftArrow”:“⟵”,“Longleftarrow”:“⟸”,“longleftrightarrow”:“⟷”,“LongLeftRightArrow”:“⟷”,“Longleftrightarrow”:“⟺”,“longmapsto”:“⟼”,“longrightarrow”:“⟶”,“LongRightArrow”:“⟶”,“Longrightarrow”:“⟹”,“looparrowleft”:“↫”,“looparrowright”:“↬”,“lopar”:“⦅”,“Lopf”:“𝕃”,“lopf”:“𝕝”,“loplus”:“⨭”,“lotimes”:“⨴”,“lowast”:“∗”,“lowbar”:“_”,“LowerLeftArrow”:“↙”,“LowerRightArrow”:“↘”,“loz”:“◊”,“lozenge”:“◊”,“lozf”:“⧫”,“lpar”:“(”,“lparlt”:“⦓”,“lrarr”:“⇆”,“lrcorner”:“⌟”,“lrhar”:“⇋”,“lrhard”:“⥭”,“lrm”:“‎”,“lrtri”:“⊿”,“lsaquo”:“‹”,“lscr”:“𝓁”,“Lscr”:“ℒ”,“lsh”:“↰”,“Lsh”:“↰”,“lsim”:“≲”,“lsime”:“⪍”,“lsimg”:“⪏”,“lsqb”:“[”,“lsquo”:“‘”,“lsquor”:“‚”,“Lstrok”:“Ł”,“lstrok”:“ł”,“ltcc”:“⪦”,“ltcir”:“⩹”,“lt”:“<","LT":"<","Lt":"≪","ltdot":"⋖","lthree":"⋋","ltimes":"⋉","ltlarr":"⥶","ltquest":"⩻","ltri":"◃","ltrie":"⊴","ltrif":"◂","ltrPar":"⦖","lurdshar":"⥊","luruhar":"⥦","lvertneqq":"≨︀","lvnE":"≨︀","macr":"¯","male":"♂","malt":"✠","maltese":"✠","Map":"⤅","map":"↦","mapsto":"↦","mapstodown":"↧","mapstoleft":"↤","mapstoup":"↥","marker":"▮","mcomma":"⨩","Mcy":"М","mcy":"м","mdash":"—","mDDot":"∺","measuredangle":"∡","MediumSpace":" ","Mellintrf":"ℳ","Mfr":"𝔐","mfr":"𝔪","mho":"℧","micro":"µ","midast":"*","midcir":"⫰","mid":"∣","middot":"·","minusb":"⊟","minus":"−","minusd":"∸","minusdu":"⨪","MinusPlus":"∓","mlcp":"⫛","mldr":"…","mnplus":"∓","models":"⊧","Mopf":"𝕄","mopf":"𝕞","mp":"∓","mscr":"𝓂","Mscr":"ℳ","mstpos":"∾","Mu":"Μ","mu":"μ","multimap":"⊸","mumap":"⊸","nabla":"∇","Nacute":"Ń","nacute":"ń","nang":"∠⃒","nap":"≉","napE":"⩰̸","napid":"≋̸","napos":"ʼn","napprox":"≉","natural":"♮","naturals":"ℕ","natur":"♮","nbsp":" ","nbump":"≎̸","nbumpe":"≏̸","ncap":"⩃","Ncaron":"Ň","ncaron":"ň","Ncedil":"Ņ","ncedil":"ņ","ncong":"≇","ncongdot":"⩭̸","ncup":"⩂","Ncy":"Н","ncy":"н","ndash":"–","nearhk":"⤤","nearr":"↗","neArr":"⇗","nearrow":"↗","ne":"≠","nedot":"≐̸","NegativeMediumSpace":"​","NegativeThickSpace":"​","NegativeThinSpace":"​","NegativeVeryThinSpace":"​","nequiv":"≢","nesear":"⤨","nesim":"≂̸","NestedGreaterGreater":"≫","NestedLessLess":"≪","NewLine":"\\n","nexist":"∄","nexists":"∄","Nfr":"𝔑","nfr":"𝔫","ngE":"≧̸","nge":"≱","ngeq":"≱","ngeqq":"≧̸","ngeqslant":"⩾̸","nges":"⩾̸","nGg":"⋙̸","ngsim":"≵","nGt":"≫⃒","ngt":"≯","ngtr":"≯","nGtv":"≫̸","nharr":"↮","nhArr":"⇎","nhpar":"⫲","ni":"∋","nis":"⋼","nisd":"⋺","niv":"∋","NJcy":"Њ","njcy":"њ","nlarr":"↚","nlArr":"⇍","nldr":"‥","nlE":"≦̸","nle":"≰","nleftarrow":"↚","nLeftarrow":"⇍","nleftrightarrow":"↮","nLeftrightarrow":"⇎","nleq":"≰","nleqq":"≦̸","nleqslant":"⩽̸","nles":"⩽̸","nless":"≮","nLl":"⋘̸","nlsim":"≴","nLt":"≪⃒","nlt":"≮","nltri":"⋪","nltrie":"⋬","nLtv":"≪̸","nmid":"∤","NoBreak":"⁠","NonBreakingSpace":" ","nopf":"𝕟","Nopf":"ℕ","Not":"⫬","not":"¬","NotCongruent":"≢","NotCupCap":"≭","NotDoubleVerticalBar":"∦","NotElement":"∉","NotEqual":"≠","NotEqualTilde":"≂̸","NotExists":"∄","NotGreater":"≯","NotGreaterEqual":"≱","NotGreaterFullEqual":"≧̸","NotGreaterGreater":"≫̸","NotGreaterLess":"≹","NotGreaterSlantEqual":"⩾̸","NotGreaterTilde":"≵","NotHumpDownHump":"≎̸","NotHumpEqual":"≏̸","notin":"∉","notindot":"⋵̸","notinE":"⋹̸","notinva":"∉","notinvb":"⋷","notinvc":"⋶","NotLeftTriangleBar":"⧏̸","NotLeftTriangle":"⋪","NotLeftTriangleEqual":"⋬","NotLess":"≮","NotLessEqual":"≰","NotLessGreater":"≸","NotLessLess":"≪̸","NotLessSlantEqual":"⩽̸","NotLessTilde":"≴","NotNestedGreaterGreater":"⪢̸","NotNestedLessLess":"⪡̸","notni":"∌","notniva":"∌","notnivb":"⋾","notnivc":"⋽","NotPrecedes":"⊀","NotPrecedesEqual":"⪯̸","NotPrecedesSlantEqual":"⋠","NotReverseElement":"∌","NotRightTriangleBar":"⧐̸","NotRightTriangle":"⋫","NotRightTriangleEqual":"⋭","NotSquareSubset":"⊏̸","NotSquareSubsetEqual":"⋢","NotSquareSuperset":"⊐̸","NotSquareSupersetEqual":"⋣","NotSubset":"⊂⃒","NotSubsetEqual":"⊈","NotSucceeds":"⊁","NotSucceedsEqual":"⪰̸","NotSucceedsSlantEqual":"⋡","NotSucceedsTilde":"≿̸","NotSuperset":"⊃⃒","NotSupersetEqual":"⊉","NotTilde":"≁","NotTildeEqual":"≄","NotTildeFullEqual":"≇","NotTildeTilde":"≉","NotVerticalBar":"∤","nparallel":"∦","npar":"∦","nparsl":"⫽⃥","npart":"∂̸","npolint":"⨔","npr":"⊀","nprcue":"⋠","nprec":"⊀","npreceq":"⪯̸","npre":"⪯̸","nrarrc":"⤳̸","nrarr":"↛","nrArr":"⇏","nrarrw":"↝̸","nrightarrow":"↛","nRightarrow":"⇏","nrtri":"⋫","nrtrie":"⋭","nsc":"⊁","nsccue":"⋡","nsce":"⪰̸","Nscr":"𝒩","nscr":"𝓃","nshortmid":"∤","nshortparallel":"∦","nsim":"≁","nsime":"≄","nsimeq":"≄","nsmid":"∤","nspar":"∦","nsqsube":"⋢","nsqsupe":"⋣","nsub":"⊄","nsubE":"⫅̸","nsube":"⊈","nsubset":"⊂⃒","nsubseteq":"⊈","nsubseteqq":"⫅̸","nsucc":"⊁","nsucceq":"⪰̸","nsup":"⊅","nsupE":"⫆̸","nsupe":"⊉","nsupset":"⊃⃒","nsupseteq":"⊉","nsupseteqq":"⫆̸","ntgl":"≹","Ntilde":"Ñ","ntilde":"ñ","ntlg":"≸","ntriangleleft":"⋪","ntrianglelefteq":"⋬","ntriangleright":"⋫","ntrianglerighteq":"⋭","Nu":"Ν","nu":"ν","num":"#","numero":"№","numsp":" ","nvap":"≍⃒","nvdash":"⊬","nvDash":"⊭","nVdash":"⊮","nVDash":"⊯","nvge":"≥⃒","nvgt":">⃒”,“nvHarr”:“⤄”,“nvinfin”:“⧞”,“nvlArr”:“⤂”,“nvle”:“≤⃒”,“nvlt”:“<⃒","nvltrie":"⊴⃒","nvrArr":"⤃","nvrtrie":"⊵⃒","nvsim":"∼⃒","nwarhk":"⤣","nwarr":"↖","nwArr":"⇖","nwarrow":"↖","nwnear":"⤧","Oacute":"Ó","oacute":"ó","oast":"⊛","Ocirc":"Ô","ocirc":"ô","ocir":"⊚","Ocy":"О","ocy":"о","odash":"⊝","Odblac":"Ő","odblac":"ő","odiv":"⨸","odot":"⊙","odsold":"⦼","OElig":"Œ","oelig":"œ","ofcir":"⦿","Ofr":"𝔒","ofr":"𝔬","ogon":"˛","Ograve":"Ò","ograve":"ò","ogt":"⧁","ohbar":"⦵","ohm":"Ω","oint":"∮","olarr":"↺","olcir":"⦾","olcross":"⦻","oline":"‾","olt":"⧀","Omacr":"Ō","omacr":"ō","Omega":"Ω","omega":"ω","Omicron":"Ο","omicron":"ο","omid":"⦶","ominus":"⊖","Oopf":"𝕆","oopf":"𝕠","opar":"⦷","OpenCurlyDoubleQuote":"“","OpenCurlyQuote":"‘","operp":"⦹","oplus":"⊕","orarr":"↻","Or":"⩔","or":"∨","ord":"⩝","order":"ℴ","orderof":"ℴ","ordf":"ª","ordm":"º","origof":"⊶","oror":"⩖","orslope":"⩗","orv":"⩛","oS":"Ⓢ","Oscr":"𝒪","oscr":"ℴ","Oslash":"Ø","oslash":"ø","osol":"⊘","Otilde":"Õ","otilde":"õ","otimesas":"⨶","Otimes":"⨷","otimes":"⊗","Ouml":"Ö","ouml":"ö","ovbar":"⌽","OverBar":"‾","OverBrace":"⏞","OverBracket":"⎴","OverParenthesis":"⏜","para":"¶","parallel":"∥","par":"∥","parsim":"⫳","parsl":"⫽","part":"∂","PartialD":"∂","Pcy":"П","pcy":"п","percnt":"%","period":".","permil":"‰","perp":"⊥","pertenk":"‱","Pfr":"𝔓","pfr":"𝔭","Phi":"Φ","phi":"φ","phiv":"ϕ","phmmat":"ℳ","phone":"☎","Pi":"Π","pi":"π","pitchfork":"⋔","piv":"ϖ","planck":"ℏ","planckh":"ℎ","plankv":"ℏ","plusacir":"⨣","plusb":"⊞","pluscir":"⨢","plus":"+","plusdo":"∔","plusdu":"⨥","pluse":"⩲","PlusMinus":"±","plusmn":"±","plussim":"⨦","plustwo":"⨧","pm":"±","Poincareplane":"ℌ","pointint":"⨕","popf":"𝕡","Popf":"ℙ","pound":"£","prap":"⪷","Pr":"⪻","pr":"≺","prcue":"≼","precapprox":"⪷","prec":"≺","preccurlyeq":"≼","Precedes":"≺","PrecedesEqual":"⪯","PrecedesSlantEqual":"≼","PrecedesTilde":"≾","preceq":"⪯","precnapprox":"⪹","precneqq":"⪵","precnsim":"⋨","pre":"⪯","prE":"⪳","precsim":"≾","prime":"′","Prime":"″","primes":"ℙ","prnap":"⪹","prnE":"⪵","prnsim":"⋨","prod":"∏","Product":"∏","profalar":"⌮","profline":"⌒","profsurf":"⌓","prop":"∝","Proportional":"∝","Proportion":"∷","propto":"∝","prsim":"≾","prurel":"⊰","Pscr":"𝒫","pscr":"𝓅","Psi":"Ψ","psi":"ψ","puncsp":" ","Qfr":"𝔔","qfr":"𝔮","qint":"⨌","qopf":"𝕢","Qopf":"ℚ","qprime":"⁗","Qscr":"𝒬","qscr":"𝓆","quaternions":"ℍ","quatint":"⨖","quest":"?","questeq":"≟","quot":"\\"","QUOT":"\\"","rAarr":"⇛","race":"∽̱","Racute":"Ŕ","racute":"ŕ","radic":"√","raemptyv":"⦳","rang":"⟩","Rang":"⟫","rangd":"⦒","range":"⦥","rangle":"⟩","raquo":"»","rarrap":"⥵","rarrb":"⇥","rarrbfs":"⤠","rarrc":"⤳","rarr":"→","Rarr":"↠","rArr":"⇒","rarrfs":"⤞","rarrhk":"↪","rarrlp":"↬","rarrpl":"⥅","rarrsim":"⥴","Rarrtl":"⤖","rarrtl":"↣","rarrw":"↝","ratail":"⤚","rAtail":"⤜","ratio":"∶","rationals":"ℚ","rbarr":"⤍","rBarr":"⤏","RBarr":"⤐","rbbrk":"❳","rbrace":"}","rbrack":"]","rbrke":"⦌","rbrksld":"⦎","rbrkslu":"⦐","Rcaron":"Ř","rcaron":"ř","Rcedil":"Ŗ","rcedil":"ŗ","rceil":"⌉","rcub":"}","Rcy":"Р","rcy":"р","rdca":"⤷","rdldhar":"⥩","rdquo":"”","rdquor":"”","rdsh":"↳","real":"ℜ","realine":"ℛ","realpart":"ℜ","reals":"ℝ","Re":"ℜ","rect":"▭","reg":"®","REG":"®","ReverseElement":"∋","ReverseEquilibrium":"⇋","ReverseUpEquilibrium":"⥯","rfisht":"⥽","rfloor":"⌋","rfr":"𝔯","Rfr":"ℜ","rHar":"⥤","rhard":"⇁","rharu":"⇀","rharul":"⥬","Rho":"Ρ","rho":"ρ","rhov":"ϱ","RightAngleBracket":"⟩","RightArrowBar":"⇥","rightarrow":"→","RightArrow":"→","Rightarrow":"⇒","RightArrowLeftArrow":"⇄","rightarrowtail":"↣","RightCeiling":"⌉","RightDoubleBracket":"⟧","RightDownTeeVector":"⥝","RightDownVectorBar":"⥕","RightDownVector":"⇂","RightFloor":"⌋","rightharpoondown":"⇁","rightharpoonup":"⇀","rightleftarrows":"⇄","rightleftharpoons":"⇌","rightrightarrows":"⇉","rightsquigarrow":"↝","RightTeeArrow":"↦","RightTee":"⊢","RightTeeVector":"⥛","rightthreetimes":"⋌","RightTriangleBar":"⧐","RightTriangle":"⊳","RightTriangleEqual":"⊵","RightUpDownVector":"⥏","RightUpTeeVector":"⥜","RightUpVectorBar":"⥔","RightUpVector":"↾","RightVectorBar":"⥓","RightVector":"⇀","ring":"˚","risingdotseq":"≓","rlarr":"⇄","rlhar":"⇌","rlm":"‏","rmoustache":"⎱","rmoust":"⎱","rnmid":"⫮","roang":"⟭","roarr":"⇾","robrk":"⟧","ropar":"⦆","ropf":"𝕣","Ropf":"ℝ","roplus":"⨮","rotimes":"⨵","RoundImplies":"⥰","rpar":")","rpargt":"⦔","rppolint":"⨒","rrarr":"⇉","Rrightarrow":"⇛","rsaquo":"›","rscr":"𝓇","Rscr":"ℛ","rsh":"↱","Rsh":"↱","rsqb":"]","rsquo":"’","rsquor":"’","rthree":"⋌","rtimes":"⋊","rtri":"▹","rtrie":"⊵","rtrif":"▸","rtriltri":"⧎","RuleDelayed":"⧴","ruluhar":"⥨","rx":"℞","Sacute":"Ś","sacute":"ś","sbquo":"‚","scap":"⪸","Scaron":"Š","scaron":"š","Sc":"⪼","sc":"≻","sccue":"≽","sce":"⪰","scE":"⪴","Scedil":"Ş","scedil":"ş","Scirc":"Ŝ","scirc":"ŝ","scnap":"⪺","scnE":"⪶","scnsim":"⋩","scpolint":"⨓","scsim":"≿","Scy":"С","scy":"с","sdotb":"⊡","sdot":"⋅","sdote":"⩦","searhk":"⤥","searr":"↘","seArr":"⇘","searrow":"↘","sect":"§","semi":";","seswar":"⤩","setminus":"∖","setmn":"∖","sext":"✶","Sfr":"𝔖","sfr":"𝔰","sfrown":"⌢","sharp":"♯","SHCHcy":"Щ","shchcy":"щ","SHcy":"Ш","shcy":"ш","ShortDownArrow":"↓","ShortLeftArrow":"←","shortmid":"∣","shortparallel":"∥","ShortRightArrow":"→","ShortUpArrow":"↑","shy":"­","Sigma":"Σ","sigma":"σ","sigmaf":"ς","sigmav":"ς","sim":"∼","simdot":"⩪","sime":"≃","simeq":"≃","simg":"⪞","simgE":"⪠","siml":"⪝","simlE":"⪟","simne":"≆","simplus":"⨤","simrarr":"⥲","slarr":"←","SmallCircle":"∘","smallsetminus":"∖","smashp":"⨳","smeparsl":"⧤","smid":"∣","smile":"⌣","smt":"⪪","smte":"⪬","smtes":"⪬︀","SOFTcy":"Ь","softcy":"ь","solbar":"⌿","solb":"⧄","sol":"/","Sopf":"𝕊","sopf":"𝕤","spades":"♠","spadesuit":"♠","spar":"∥","sqcap":"⊓","sqcaps":"⊓︀","sqcup":"⊔","sqcups":"⊔︀","Sqrt":"√","sqsub":"⊏","sqsube":"⊑","sqsubset":"⊏","sqsubseteq":"⊑","sqsup":"⊐","sqsupe":"⊒","sqsupset":"⊐","sqsupseteq":"⊒","square":"□","Square":"□","SquareIntersection":"⊓","SquareSubset":"⊏","SquareSubsetEqual":"⊑","SquareSuperset":"⊐","SquareSupersetEqual":"⊒","SquareUnion":"⊔","squarf":"▪","squ":"□","squf":"▪","srarr":"→","Sscr":"𝒮","sscr":"𝓈","ssetmn":"∖","ssmile":"⌣","sstarf":"⋆","Star":"⋆","star":"☆","starf":"★","straightepsilon":"ϵ","straightphi":"ϕ","strns":"¯","sub":"⊂","Sub":"⋐","subdot":"⪽","subE":"⫅","sube":"⊆","subedot":"⫃","submult":"⫁","subnE":"⫋","subne":"⊊","subplus":"⪿","subrarr":"⥹","subset":"⊂","Subset":"⋐","subseteq":"⊆","subseteqq":"⫅","SubsetEqual":"⊆","subsetneq":"⊊","subsetneqq":"⫋","subsim":"⫇","subsub":"⫕","subsup":"⫓","succapprox":"⪸","succ":"≻","succcurlyeq":"≽","Succeeds":"≻","SucceedsEqual":"⪰","SucceedsSlantEqual":"≽","SucceedsTilde":"≿","succeq":"⪰","succnapprox":"⪺","succneqq":"⪶","succnsim":"⋩","succsim":"≿","SuchThat":"∋","sum":"∑","Sum":"∑","sung":"♪","sup1":"¹","sup2":"²","sup3":"³","sup":"⊃","Sup":"⋑","supdot":"⪾","supdsub":"⫘","supE":"⫆","supe":"⊇","supedot":"⫄","Superset":"⊃","SupersetEqual":"⊇","suphsol":"⟉","suphsub":"⫗","suplarr":"⥻","supmult":"⫂","supnE":"⫌","supne":"⊋","supplus":"⫀","supset":"⊃","Supset":"⋑","supseteq":"⊇","supseteqq":"⫆","supsetneq":"⊋","supsetneqq":"⫌","supsim":"⫈","supsub":"⫔","supsup":"⫖","swarhk":"⤦","swarr":"↙","swArr":"⇙","swarrow":"↙","swnwar":"⤪","szlig":"ß","Tab":"\\t","target":"⌖","Tau":"Τ","tau":"τ","tbrk":"⎴","Tcaron":"Ť","tcaron":"ť","Tcedil":"Ţ","tcedil":"ţ","Tcy":"Т","tcy":"т","tdot":"⃛","telrec":"⌕","Tfr":"𝔗","tfr":"𝔱","there4":"∴","therefore":"∴","Therefore":"∴","Theta":"Θ","theta":"θ","thetasym":"ϑ","thetav":"ϑ","thickapprox":"≈","thicksim":"∼","ThickSpace":"  ","ThinSpace":" ","thinsp":" ","thkap":"≈","thksim":"∼","THORN":"Þ","thorn":"þ","tilde":"˜","Tilde":"∼","TildeEqual":"≃","TildeFullEqual":"≅","TildeTilde":"≈","timesbar":"⨱","timesb":"⊠","times":"×","timesd":"⨰","tint":"∭","toea":"⤨","topbot":"⌶","topcir":"⫱","top":"⊤","Topf":"𝕋","topf":"𝕥","topfork":"⫚","tosa":"⤩","tprime":"‴","trade":"™","TRADE":"™","triangle":"▵","triangledown":"▿","triangleleft":"◃","trianglelefteq":"⊴","triangleq":"≜","triangleright":"▹","trianglerighteq":"⊵","tridot":"◬","trie":"≜","triminus":"⨺","TripleDot":"⃛","triplus":"⨹","trisb":"⧍","tritime":"⨻","trpezium":"⏢","Tscr":"𝒯","tscr":"𝓉","TScy":"Ц","tscy":"ц","TSHcy":"Ћ","tshcy":"ћ","Tstrok":"Ŧ","tstrok":"ŧ","twixt":"≬","twoheadleftarrow":"↞","twoheadrightarrow":"↠","Uacute":"Ú","uacute":"ú","uarr":"↑","Uarr":"↟","uArr":"⇑","Uarrocir":"⥉","Ubrcy":"Ў","ubrcy":"ў","Ubreve":"Ŭ","ubreve":"ŭ","Ucirc":"Û","ucirc":"û","Ucy":"У","ucy":"у","udarr":"⇅","Udblac":"Ű","udblac":"ű","udhar":"⥮","ufisht":"⥾","Ufr":"𝔘","ufr":"𝔲","Ugrave":"Ù","ugrave":"ù","uHar":"⥣","uharl":"↿","uharr":"↾","uhblk":"▀","ulcorn":"⌜","ulcorner":"⌜","ulcrop":"⌏","ultri":"◸","Umacr":"Ū","umacr":"ū","uml":"¨","UnderBar":"_","UnderBrace":"⏟","UnderBracket":"⎵","UnderParenthesis":"⏝","Union":"⋃","UnionPlus":"⊎","Uogon":"Ų","uogon":"ų","Uopf":"𝕌","uopf":"𝕦","UpArrowBar":"⤒","uparrow":"↑","UpArrow":"↑","Uparrow":"⇑","UpArrowDownArrow":"⇅","updownarrow":"↕","UpDownArrow":"↕","Updownarrow":"⇕","UpEquilibrium":"⥮","upharpoonleft":"↿","upharpoonright":"↾","uplus":"⊎","UpperLeftArrow":"↖","UpperRightArrow":"↗","upsi":"υ","Upsi":"ϒ","upsih":"ϒ","Upsilon":"Υ","upsilon":"υ","UpTeeArrow":"↥","UpTee":"⊥","upuparrows":"⇈","urcorn":"⌝","urcorner":"⌝","urcrop":"⌎","Uring":"Ů","uring":"ů","urtri":"◹","Uscr":"𝒰","uscr":"𝓊","utdot":"⋰","Utilde":"Ũ","utilde":"ũ","utri":"▵","utrif":"▴","uuarr":"⇈","Uuml":"Ü","uuml":"ü","uwangle":"⦧","vangrt":"⦜","varepsilon":"ϵ","varkappa":"ϰ","varnothing":"∅","varphi":"ϕ","varpi":"ϖ","varpropto":"∝","varr":"↕","vArr":"⇕","varrho":"ϱ","varsigma":"ς","varsubsetneq":"⊊︀","varsubsetneqq":"⫋︀","varsupsetneq":"⊋︀","varsupsetneqq":"⫌︀","vartheta":"ϑ","vartriangleleft":"⊲","vartriangleright":"⊳","vBar":"⫨","Vbar":"⫫","vBarv":"⫩","Vcy":"В","vcy":"в","vdash":"⊢","vDash":"⊨","Vdash":"⊩","VDash":"⊫","Vdashl":"⫦","veebar":"⊻","vee":"∨","Vee":"⋁","veeeq":"≚","vellip":"⋮","verbar":"|","Verbar":"‖","vert":"|","Vert":"‖","VerticalBar":"∣","VerticalLine":"|","VerticalSeparator":"❘","VerticalTilde":"≀","VeryThinSpace":" ","Vfr":"𝔙","vfr":"𝔳","vltri":"⊲","vnsub":"⊂⃒","vnsup":"⊃⃒","Vopf":"𝕍","vopf":"𝕧","vprop":"∝","vrtri":"⊳","Vscr":"𝒱","vscr":"𝓋","vsubnE":"⫋︀","vsubne":"⊊︀","vsupnE":"⫌︀","vsupne":"⊋︀","Vvdash":"⊪","vzigzag":"⦚","Wcirc":"Ŵ","wcirc":"ŵ","wedbar":"⩟","wedge":"∧","Wedge":"⋀","wedgeq":"≙","weierp":"℘","Wfr":"𝔚","wfr":"𝔴","Wopf":"𝕎","wopf":"𝕨","wp":"℘","wr":"≀","wreath":"≀","Wscr":"𝒲","wscr":"𝓌","xcap":"⋂","xcirc":"◯","xcup":"⋃","xdtri":"▽","Xfr":"𝔛","xfr":"𝔵","xharr":"⟷","xhArr":"⟺","Xi":"Ξ","xi":"ξ","xlarr":"⟵","xlArr":"⟸","xmap":"⟼","xnis":"⋻","xodot":"⨀","Xopf":"𝕏","xopf":"𝕩","xoplus":"⨁","xotime":"⨂","xrarr":"⟶","xrArr":"⟹","Xscr":"𝒳","xscr":"𝓍","xsqcup":"⨆","xuplus":"⨄","xutri":"△","xvee":"⋁","xwedge":"⋀","Yacute":"Ý","yacute":"ý","YAcy":"Я","yacy":"я","Ycirc":"Ŷ","ycirc":"ŷ","Ycy":"Ы","ycy":"ы","yen":"¥","Yfr":"𝔜","yfr":"𝔶","YIcy":"Ї","yicy":"ї","Yopf":"𝕐","yopf":"𝕪","Yscr":"𝒴","yscr":"𝓎","YUcy":"Ю","yucy":"ю","yuml":"ÿ","Yuml":"Ÿ","Zacute":"Ź","zacute":"ź","Zcaron":"Ž","zcaron":"ž","Zcy":"З","zcy":"з","Zdot":"Ż","zdot":"ż","zeetrf":"ℨ","ZeroWidthSpace":"​","Zeta":"Ζ","zeta":"ζ","zfr":"𝔷","Zfr":"ℨ","ZHcy":"Ж","zhcy":"ж","zigrarr":"⇝","zopf":"𝕫","Zopf":"ℤ","Zscr":"𝒵","zscr":"𝓏","zwj":"‍","zwnj":"‌"}')},function(e,t,n){"use strict”;var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,“__esModule”,{value:!0});var i=r(n(0)),a=r(n(23)),o=r(n(85)),c=r(n(29)),s=r(n(171)),u=new c.default;t.default=function(e){var t=e.background,n=u.generate(t.name);return i.default.createElement(“section”,{className:“cucumber-background”},i.default.createElement(s.default,{id:n,background:t}),i.default.createElement(a.default,{description:t.description}),i.default.createElement(o.default,{steps:t.steps||[],renderStepMatchArguments:!0,renderMessage:!0}))}},function(e,t,n){“use strict”;var r=this&&this.__assign||function(){return(r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var i in t=arguments)Object.prototype.hasOwnProperty.call(t,i)&&(e=t);return e}).apply(this,arguments)};Object.defineProperty(t,“__esModule”,{value:!0});var i=n(35);t.default=function(e,t,n,a){var o={acceptScenario:function®{return t.getPickleIds(e.uri,r.id).map((function(e){return a.includes(n.getWorstTestStepResult(n.getPickleTestStepResults()).status)})).includes(!0)}};return new i.GherkinDocumentWalker(r(r({},i.rejectAllFilters),o)).walkGherkinDocument(e)}},function(e,t,n){“use strict”;var r,i,a=this&&this.__values||function(e){var t=“function”==typeof Symbol&&Symbol.iterator,n=t&&e,r=0;if(n)return n.call(e);if(e&&“number”==typeof e.length)return{next:function(){return e&&r>=e.length&&(e=void 0),{value:e&&e,done:!e}}};throw new TypeError(t?“Object is not iterable.”:“Symbol.iterator is not defined.”)},o=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,“__esModule”,{value:!0});var c=n(2),s=n(72),u=n(78),l=n(75),f=o(n(0)),h=o(n(198)),d=new u.Query,p=new l.Query,m=new s.EnvelopesQuery;try{for(var v=a(window.CUCUMBER_MESSAGES),g=v.next();!g.done;g=v.next()){var y=g.value,b=c.messages.Envelope.fromObject(y);d.update(b),p.update(b),m.update(b)}}catch(e){r={error:e}}finally{try{g&&!g.done&&(i=v.return)&&i.call(v)}finally{if®throw r.error}}var w=f.default.createElement(s.QueriesWrapper,{gherkinQuery:d,cucumberQuery:p,envelopesQuery:m},f.default.createElement(s.FilteredResults,null));h.default.render(w,document.getElementById(“content”))},function(e,t,n){“use strict”;var r,i=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e=t)})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,“__esModule”,{value:!0});var a=n(7),o=n(2),c=function(e){function t(){return e.call(this,{writableObjectMode:!0,readableObjectMode:!1})||this}return i(t,e),t.prototype._transform=function(e,t,n){var r=o.messages.Envelope.encodeDelimited(e).finish();this.push®,n()},t}(a.Transform);t.default=c},function(e,t,n){“use strict”;t.byteLength=function(e){var t=u(e),n=t,r=t;return 3*(n+r)/4-r},t.toByteArray=function(e){var t,n,r=u(e),o=r,c=r,s=new a(function(e,t,n){return 3*(t+n)/4-n}(0,o,c)),l=0,f=c>0?o-4:o;for(n=0;n<<18|i<<12|i<<6|i,s=t>>16&255,s=t>>8&255,s=255&t;2===c&&(t=i<<2|i>>4,s=255&t);1===c&&(t=i<<10|i<<4|i>>2,s=t>>8&255,s=255&t);return s},t.fromByteArray=function(e){for(var t,n=e.length,i=n%3,a=[],o=0,c=n-i;oc?c:o+16383));1===i?(t=e,r+”==“)):2===i&&(t=(e<<8)+e,>4&63“>r+r+”=“));return a.join(”“)};for(var r=[],i=,a=”undefined“!=typeof Uint8Array?Uint8Array:Array,o=”ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/“,c=0,s=o.length;c=o,i=c;function u(e){var t=e.length;if(t%4>0)throw new Error(”Invalid string. Length must be a multiple of 4“);var n=e.indexOf(”=“);return-1===n&&(n=t),}function l(e,t,n){for(var i,a,o=[],c=t;c<<16&16711680)+(e<<8&65280)+(255&e),>12&63“>r+r);return o.join(“”)}i=62,i=63},function(e,t){t.read=function(e,t,n,r,i){var a,o,c=8*i-r-1,s=(1<>1,l=-7,f=n?i-1:0,h=n?-1:1,d=e;for(f+=h,a=d&(1<<-l)-1,d>>=-l,l+=c;l>0;a=256*a+e,f+=h,l-=8);for(o=a&(1<<-l)-1,a>>=-l,l+=r;l>0;o=256*o+e,f+=h,l-=8);if(0===a)a=1-u;else{if(a===s)return o?NaN:1/0*(d?-1:1);o+=Math.pow(2,r),a-=u}return(d?-1:1)*o*Math.pow(2,a-r)},t.write=function(e,t,n,r,i,a){var o,c,s,u=8*a-i-1,l=(1<>1,h=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,d=r?0:a-1,p=r?1:-1,m=t<0||0===t&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(c=isNaN(t)?1:0,o=l):(o=Math.floor(Math.log(t)/Math.LN2),t*(s=Math.pow(2,-o))<1&&(o--,s*=2),(t+=o+f>=1?h/s:h*Math.pow(2,1-f))*s>=2&&(o++,s/=2),o+f>=l?(c=0,o=l):o+f>=1?(c=(t*s-1)*Math.pow(2,i),o+=f):(c=t*Math.pow(2,f-1)*Math.pow(2,i),o=0));i>=8;e=255&c,d+=p,c/=256,i-=8);for(o=o<0;e=255&o,d+=p,o/=256,u-=8);e|=128*m}},function(e,t){},function(e,t,n){“use strict”;var r=n(26).Buffer,i=n(98);e.exports=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError(“Cannot call a class as a function”)}(this,e),this.head=null,this.tail=null,this.length=0}return e.prototype.push=function(e){var t={data:e,next:null};this.length>0?this.tail.next=t:this.head=t,this.tail=t,++this.length},e.prototype.unshift=function(e){var t={data:e,next:this.head};0===this.length&&(this.tail=t),this.head=t,++this.length},e.prototype.shift=function(){if(0!==this.length){var e=this.head.data;return 1===this.length?this.head=this.tail=null:this.head=this.head.next,–this.length,e}},e.prototype.clear=function(){this.head=this.tail=null,this.length=0},e.prototype.join=function(e){if(0===this.length)return“”;for(var t=this.head,n=“”+t.data;t=t.next;)n+=e+t.data;return n},e.prototype.concat=function(e){if(0===this.length)return r.alloc(0);if(1===this.length)return this.head.data;for(var t,n,i,a=r.allocUnsafe(e>>>0),o=this.head,c=0;o;)t=o.data,n=a,i=c,t.copy(n,i),c+=o.data.length,o=o.next;return a},e}(),i&&i.inspect&&i.inspect.custom&&(e.exports.prototype=function(){var e=i.inspect({length:this.length});return this.constructor.name+“ ”+e})},function(e,t){},function(e,t,n){(function(e,t){!function(e,n){“use strict”;if(!e.setImmediate){var r,i,a,o,c,s=1,u={},l=!1,f=e.document,h=Object.getPrototypeOf&&Object.getPrototypeOf(e);h=h&&h.setTimeout?h:e,“[object process]”==={}.toString.call(e.process)?r=function(e){t.nextTick((function(){p(e)}))}:!function(){if(e.postMessage&&!e.importScripts){var t=!0,n=e.onmessage;return e.onmessage=function(){t=!1},e.postMessage(“”,“*”),e.onmessage=n,t}}()?e.MessageChannel?((a=new MessageChannel).port1.onmessage=function(e){p(e.data)},r=function(e){a.port2.postMessage(e)}):f&&“onreadystatechange”in f.createElement(“script”)?(i=f.documentElement,r=function(e){var t=f.createElement(“script”);t.onreadystatechange=function(){p(e),t.onreadystatechange=null,i.removeChild(t),t=null},i.appendChild(t)}):r=function(e){setTimeout(p,0,e)}:(o=“setImmediate$”+Math.random()+“$”,c=function(t){t.source===e&&“string”==typeof t.data&&0===t.data.indexOf(o)&&p(+t.data.slice(o.length))},e.addEventListener?e.addEventListener(“message”,c,!1):e.attachEvent(“onmessage”,c),r=function(t){e.postMessage(o+t,“*”)}),h.setImmediate=function(e){“function”!=typeof e&&(e=new Function(“”+e));for(var t=new Array(arguments.length-1),n=0;n=arguments;var i={callback:e,args:t};return u=i,r(s),s++},h.clearImmediate=d}function d(e){delete u}function p(e){if(l)setTimeout(p,0,e);else{var t=u;if(t){l=!0;try{!function(e){var t=e.callback,n=e.args;switch(n.length){case 0:t();break;case 1:t(n);break;case 2:t(n,n);break;case 3:t(n,n,n);break;default:t.apply(void 0,n)}}(t)}finally{d(e),l=!1}}}}}(“undefined”==typeof self?void 0===e?this:e:self)}).call(this,n(4),n(24))},function(e,t,n){(function(t){function n(e){try{if(!t.localStorage)return!1}catch(e){return!1}var n=t.localStorage;return null!=n&&“true”===String(n).toLowerCase()}e.exports=function(e,t){if(n(“noDeprecation”))return e;var r=!1;return function(){if(!r){if(n(“throwDeprecation”))throw new Error(t);n(“traceDeprecation”)?console.trace(t):console.warn(t),r=!0}return e.apply(this,arguments)}}}).call(this,n(4))},function(e,t,n){“use strict”;e.exports=a;var r=n(60),i=Object.create(n(20));function a(e){if(!(this instanceof a))return new a(e);r.call(this,e)}i.inherits=n(15),i.inherits(a,r),a.prototype._transform=function(e,t,n){n(null,e)}},function(e,t,n){e.exports=n(39)},function(e,t,n){e.exports=n(10)},function(e,t,n){e.exports=n(38).Transform},function(e,t,n){e.exports=n(38).PassThrough},function(e,t,n){“use strict”;var r,i=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e=t)})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,“__esModule”,{value:!0});var a=function(e){function t(){return e.call(this,{writableObjectMode:!0,readableObjectMode:!1})||this}return i(t,e),t.prototype._transform=function(e,t,n){var r=e.toJSON(),i=JSON.stringify(r,(function(e,t){return“”===t?void 0:t}));this.push(i+“n”),n()},t}(n(7).Transform);t.default=a},function(e,t,n){“use strict”;(function(e){var r,i=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e=t)})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,“__esModule”,{value:!0});var a=n(7),o=n(108),c=function(t){function n(n){var r=t.call(this,{writableObjectMode:!1,readableObjectMode:!0})||this;return r.decodeDelimited=n,r.buffer=e.alloc(0),r}return i(n,t),n.prototype._transform=function(t,n,r){this.buffer=e.concat();var i=!1;do{try{var a=o.Reader.create(this.buffer),c=this.decodeDelimited(a);this.push©,this.buffer=this.buffer.slice(a.pos),i=!0}catch(e){if(e instanceof RangeError)break;throw e}}while(!i);r()},n}(a.Transform);t.default=c}).call(this,n(19).Buffer)},function(e,t,n){“use strict”;e.exports=n(109)},function(e,t,n){“use strict”;var r=e.exports=n(110);r.build=“full”,r.tokenize=n(71),r.parse=n(123),r.common=n(124),r.Root._configure(r.Type,r.parse,r.common)},function(e,t,n){“use strict”;var r=e.exports=n(61);r.build=“light”,r.load=function(e,t,n){return“function”==typeof t?(n=t,t=new r.Root):t||(t=new r.Root),t.load(e,n)},r.loadSync=function(e,t){return t||(t=new r.Root),t.loadSync(e)},r.encoder=n(66),r.decoder=n(67),r.verifier=n(68),r.converter=n(69),r.ReflectionObject=n(16),r.Namespace=n(21),r.Root=n(47),r.Enum=n(5),r.Type=n(42),r.Field=n(11),r.OneOf=n(27),r.MapField=n(43),r.Service=n(44),r.Method=n(45),r.Message=n(46),r.wrappers=n(70),r.types=n(17),r.util=n(3),r.ReflectionObject._configure(r.Root),r.Namespace._configure(r.Type,r.Service,r.Enum),r.Root._configure(r.Type),r.Field._configure(r.Type)},function(e,t,n){“use strict”;var r=t;r.length=function(e){var t=e.length;if(!t)return 0;for(var n=0;–t%4>1&&“=”===e.charAt(t);)++n;return Math.ceil(3*e.length)/4-n};for(var i=new Array(64),a=new Array(123),o=0;o<64;)a[i=o<26?o+65:o<52?o+71:o<62?o-4:o-59|43]=o++;r.encode=function(e,t,n){for(var r,a=null,o=[],c=0,s=0;t<n;){var u=e;switch(s){case 0:o=1:o=2:o=o=i,s=0}c>8191&&((a||(a=[])).push(String.fromCharCode.apply(String,o)),c=0)}return s&&(o=i,o=61,1===s&&(o=61)),a?(c&&a.push(String.fromCharCode.apply(String,o.slice(0,c))),a.join(”“)):String.fromCharCode.apply(String,o.slice(0,c))};r.decode=function(e,t,n){for(var r,i=n,o=0,c=0;c<e.length;){var s=e.charCodeAt(c++);if(61===s&&o>1)break;if(void 0===(s=a))throw Error(”invalid encoding“);switch(o){case 0:r=s,o=1;break;case 1:t=r<<2|(48&s)>>4,r=s,o=2;break;case 2:t=(15&r)<<4|(60&s)>>2,r=s,o=3;break;case 3:t=(3&r)<<6|s,o=0}}if(1===o)throw Error(”invalid encoding“);return n-i},r.test=function(e){return/^(?:{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(e)}},function(e,t,n){”use strict“;function r(){this._listeners={}}e.exports=r,r.prototype.on=function(e,t,n){return(this._listeners||(this._listeners=[])).push({fn:t,ctx:n||this}),this},r.prototype.off=function(e,t){if(void 0===e)this._listeners={};else if(void 0===t)this._listeners=[];else for(var n=this._listeners,r=0;r.fn===t?n.splice(r,1):++r;return this},r.prototype.emit=function(e){var t=this._listeners;if(t){for(var n=[],r=1;r);for(r=0;r.fn.apply(t.ctx,n)}return this}},function(e,t,n){”use strict“;function r(e){return”undefined“!=typeof Float32Array?function(){var t=new Float32Array(),n=new Uint8Array(t.buffer),r=128===n;function i(e,r,i){t=e,r=n,r=n,r=n,r=n}function a(e,r,i){t=e,r=n,r=n,r=n,r=n}function o(e,r){return n=e,n=e,n=e,n=e,t}function c(e,r){return n=e,n=e,n=e,n=e,t}e.writeFloatLE=r?i:a,e.writeFloatBE=r?a:i,e.readFloatLE=r?o:c,e.readFloatBE=r?c:o}():function(){function t(e,t,n,r){var i=t<0?1:0;if(i&&(t=-t),0===t)e(1/t>0?0:2147483648,n,r);else if(isNaN(t))e(2143289344,n,r);else if(t>34028234663852886e22)e((i<<31|2139095040)>>>0,n,r);else if(t<11754943508222875e-54)e((i<<31|Math.round(t/1401298464324817e-60))>>>0,n,r);else{var a=Math.floor(Math.log(t)/Math.LN2);e((i<<31|a+127<<23|8388607&Math.round(t*Math.pow(2,-a)*8388608))>>>0,n,r)}}function n(e,t,n){var r=e(t,n),i=2*(r>>31)+1,a=r>>>23&255,o=8388607&r;return 255===a?o?NaN:i*(1/0):0===a?1401298464324817e-60*i*o:i*Math.pow(2,a-150)*(o+8388608)}e.writeFloatLE=t.bind(null,i),e.writeFloatBE=t.bind(null,a),e.readFloatLE=n.bind(null,o),e.readFloatBE=n.bind(null,c)}(),”undefined“!=typeof Float64Array?function(){var t=new Float64Array(),n=new Uint8Array(t.buffer),r=128===n;function i(e,r,i){t=e,r=n,r=n,r=n,r=n,r=n,r=n,r=n,r=n}function a(e,r,i){t=e,r=n,r=n,r=n,r=n,r=n,r=n,r=n,r=n}function o(e,r){return n=e,n=e,n=e,n=e,n=e,n=e,n=e,n=e,t}function c(e,r){return n=e,n=e,n=e,n=e,n=e,n=e,n=e,n=e,t}e.writeDoubleLE=r?i:a,e.writeDoubleBE=r?a:i,e.readDoubleLE=r?o:c,e.readDoubleBE=r?c:o}():function(){function t(e,t,n,r,i,a){var o=r<0?1:0;if(o&&(r=-r),0===r)e(0,i,a+t),e(1/r>0?0:2147483648,i,a+n);else if(isNaN®)e(0,i,a+t),e(2146959360,i,a+n);else if(r>17976931348623157e292)e(0,i,a+t),e((o<<31|2146435072)>>>0,i,a+n);else{var c;if(r<22250738585072014e-324)e((c=r/5e-324)>>>0,i,a+t),e((o<<31|c/4294967296)>>>0,i,a+n);else{var s=Math.floor(Math.log®/Math.LN2);1024===s&&(s=1023),e(4503599627370496*(c=r*Math.pow(2,-s))>>>0,i,a+t),e((o<<31|s+1023<<20|1048576*c&1048575)>>>0,i,a+n)}}}function n(e,t,n,r,i){var a=e(r,i+t),o=e(r,i+n),c=2*(o>>31)+1,s=o>>>20&2047,u=4294967296*(1048575&o)+a;return 2047===s?u?NaN:c*(1/0):0===s?5e-324*c*u:c*Math.pow(2,s-1075)*(u+4503599627370496)}e.writeDoubleLE=t.bind(null,i,0,4),e.writeDoubleBE=t.bind(null,a,4,0),e.readDoubleLE=n.bind(null,o,0,4),e.readDoubleBE=n.bind(null,c,4,0)}(),e}function i(e,t,n){t=255&e,t=e>>>8&255,t=e>>>16&255,t=e>>>24}function a(e,t,n){t=e>>>24,t=e>>>16&255,t=e>>>8&255,t=255&e}function o(e,t){return(e|e<<8|e<<16|e<<24)>>>0}function c(e,t){return(e<<24|e<<16|e<<8|e)>>>0}e.exports=r®},function(e,t,n){”use strict“;var r=t;r.length=function(e){for(var t=0,n=0,r=0;r<e.length;++r)(n=e.charCodeAt®)<128?t+=1:n<2048?t+=2:55296==(64512&n)&&56320==(64512&e.charCodeAt(r+1))?(++r,t+=4):t+=3;return t},r.read=function(e,t,n){if(n-t<1)return”“;for(var r,i=null,a=[],o=0;t)<128?a=r:r>191&&r<224?a=(31&r)<<6|63&e:r>239&&r<365?(r=((7&r)<<18|(63&e)<<12|(63&e)<<6|63&e)-65536,a=55296+(r>>10),a=56320+(1023&r)):a=(15&r)<<12|(63&e)<<6|63&e,o>8191&&((i||(i=[])).push(String.fromCharCode.apply(String,a)),o=0);return i?(o&&i.push(String.fromCharCode.apply(String,a.slice(0,o))),i.join(”“)):String.fromCharCode.apply(String,a.slice(0,o))},r.write=function(e,t,n){for(var r,i,a=n,o=0;o=r:r<2048?(t=r>>6|192,t=63&r|128):55296==(64512&r)&&56320==(64512&(i=e.charCodeAt(o+1)))?(r=65536+((1023&r)<<10)+(1023&i),++o,t=r>>18|240,t=r>>12&63|128,t=r>>6&63|128,t=63&r|128):(t=r>>12|224,t=r>>6&63|128,t=63&r|128);return n-a}},function(e,t,n){”use strict“;e.exports=function(e,t,n){var r=n||8192,i=r>>>1,a=null,o=r;return function(n){if(n<1||n>i)return e(n);o+n>r&&(a=e®,o=0);var c=t.call(a,o,o+=n);return 7&o&&(o=1+(7|o)),c}}},function(e,t,n){”use strict“;e.exports=i;var r=n(6);function i(e,t){this.lo=e>>>0,this.hi=t>>>0}var a=i.zero=new i(0,0);a.toNumber=function(){return 0},a.zzEncode=a.zzDecode=function(){return this},a.length=function(){return 1};var o=i.zeroHash=”00000000“;i.fromNumber=function(e){if(0===e)return a;var t=e<0;t&&(e=-e);var n=e>>>0,r=(e-n)/4294967296>>>0;return t&&(r=~r>>>0,n=~n>>>0,++n>4294967295&&(n=0,++r>4294967295&&(r=0))),new i(n,r)},i.from=function(e){if(”number“==typeof e)return i.fromNumber(e);if(r.isString(e)){if(!r.Long)return i.fromNumber(parseInt(e,10));e=r.Long.fromString(e)}return e.low||e.high?new i(e.low>>>0,e.high>>>0):a},i.prototype.toNumber=function(e){if(!e&&this.hi>>>31){var t=1+~this.lo>>>0,n=~this.hi>>>0;return t||(n=n+1>>>0),-(t+4294967296*n)}return this.lo+4294967296*this.hi},i.prototype.toLong=function(e){return r.Long?new r.Long(0|this.lo,0|this.hi,Boolean(e)):{low:0|this.lo,high:0|this.hi,unsigned:Boolean(e)}};var c=String.prototype.charCodeAt;i.fromHash=function(e){return e===o?a:new i((c.call(e,0)|c.call(e,1)<<8|c.call(e,2)<<16|c.call(e,3)<<24)>>>0,(c.call(e,4)|c.call(e,5)<<8|c.call(e,6)<<16|c.call(e,7)<<24)>>>0)},i.prototype.toHash=function(){return String.fromCharCode(255&this.lo,this.lo>>>8&255,this.lo>>>16&255,this.lo>>>24,255&this.hi,this.hi>>>8&255,this.hi>>>16&255,this.hi>>>24)},i.prototype.zzEncode=function(){var e=this.hi>>31;return this.hi=((this.hi<<1|this.lo>>>31)^e)>>>0,this.lo=(this.lo<<1^e)>>>0,this},i.prototype.zzDecode=function(){var e=-(1&this.lo);return this.lo=((this.lo>>>1|this.hi<<31)^e)>>>0,this.hi=(this.hi>>>1^e)>>>0,this},i.prototype.length=function(){var e=this.lo,t=(this.lo>>>28|this.hi<<4)>>>0,n=this.hi>>>24;return 0===n?0===t?e<16384?e<128?1:2:e<2097152?3:4:t<16384?t<128?5:6:t<2097152?7:8:n<128?9:10}},function(e,t,n){”use strict“;e.exports=a;var r=n(40);(a.prototype=Object.create(r.prototype)).constructor=a;var i=n(6);function a(){r.call(this)}function o(e,t,n){e.length<40?i.utf8.write(e,t,n):t.utf8Write?t.utf8Write(e,n):t.write(e,n)}a._configure=function(){a.alloc=i._Buffer_allocUnsafe,a.writeBytesBuffer=i.Buffer&&i.Buffer.prototype instanceof Uint8Array&&”set“===i.Buffer.prototype.set.name?function(e,t,n){t.set(e,n)}:function(e,t,n){if(e.copy)e.copy(t,n,0,e.length);else for(var r=0;r=e}},a.prototype.bytes=function(e){i.isString(e)&&(e=i._Buffer_from(e,”base64“));var t=e.length>>>0;return this.uint32(t),t&&this._push(a.writeBytesBuffer,t,e),this},a.prototype.string=function(e){var t=i.Buffer.byteLength(e);return this.uint32(t),t&&this._push(o,t,e),this},a._configure()},function(e,t,n){”use strict“;e.exports=a;var r=n(41);(a.prototype=Object.create(r.prototype)).constructor=a;var i=n(6);function a(e){r.call(this,e)}a._configure=function(){i.Buffer&&(a.prototype._slice=i.Buffer.prototype.slice)},a.prototype.string=function(){var e=this.uint32();return this.buf.utf8Slice?this.buf.utf8Slice(this.pos,this.pos=Math.min(this.pos+e,this.len)):this.buf.toString(”utf-8“,this.pos,this.pos=Math.min(this.pos+e,this.len))},a._configure()},function(e,t,n){”use strict“;e.exports=i;var r=n(6);function i(e,t,n){if(”function“!=typeof e)throw TypeError(”rpcImpl must be a function“);r.EventEmitter.call(this),this.rpcImpl=e,this.requestDelimited=Boolean(t),this.responseDelimited=Boolean(n)}(i.prototype=Object.create(r.EventEmitter.prototype)).constructor=i,i.prototype.rpcCall=function e(t,n,i,a,o){if(!a)throw TypeError(”request must be specified“);var c=this;if(!o)return r.asPromise(e,c,t,n,i,a);if(c.rpcImpl)try{return c.rpcImpl(t,n(a).finish(),(function(e,n){if(e)return c.emit(”error“,e,t),o(e);if(null!==n){if(!(n instanceof i))try{n=i(n)}catch(e){return c.emit(”error“,e,t),o(e)}return c.emit(”data“,n,t),o(null,n)}c.end(!0)}))}catch(e){return c.emit(”error“,e,t),void setTimeout((function(){o(e)}),0)}else setTimeout((function(){o(Error(”already ended“))}),0)},i.prototype.end=function(e){return this.rpcImpl&&(e||this.rpcImpl(null,null,null),this.rpcImpl=null,this.emit(”end“).off()),this}},function(e,t,n){”use strict“;function r(e,t){”string“==typeof e&&(t=e,e=void 0);var n=[];function i(e){if(”string“!=typeof e){var t=a();if(r.verbose&&console.log(”codegen: “+t),t=”return “+t,e){for(var o=Object.keys(e),c=new Array(o.length+1),s=new Array(o.length),u=0;u=o,s=e[o];return c=t,Function.apply(null,c).apply(null,s)}return Function(t)()}for(var l=new Array(arguments.length-1),f=0;f=arguments;if(f=0,e=e.replace(/%()/g,(function(e,t){var n=l;switch(t){case”d“:case”f“:return String(Number(n));case”i“:return String(Math.floor(n));case”j“:return JSON.stringify(n);case”s“:return String(n)}return”%“})),f!==l.length)throw Error(”parameter count mismatch“);return n.push(e),i}function a®{return”function “+(r||t||”“)+”(“+(e&&e.join(”,“)||”“)+”){n “+n.join(”n “)+”n}“}return i.toString=a,i}e.exports=r,r.verbose=!1},function(e,t,n){”use strict“;e.exports=a;var r=n(62),i=n(63)(”fs“);function a(e,t,n){return”function“==typeof t?(n=t,t={}):t||(t={}),n?!t.xhr&&i&&i.readFile?i.readFile(e,(function(r,i){return r&&”undefined“!=typeof XMLHttpRequest?a.xhr(e,t,n):r?n®:n(null,t.binary?i:i.toString(”utf8“))})):a.xhr(e,t,n):r(a,this,e,t)}a.xhr=function(e,t,n){var r=new XMLHttpRequest;r.onreadystatechange=function(){if(4===r.readyState){if(0!==r.status&&200!==r.status)return n(Error(”status “+r.status));if(t.binary){var e=r.response;if(!e){e=[];for(var i=0;i<r.responseText.length;++i)e.push(255&r.responseText.charCodeAt(i))}return n(null,”undefined“!=typeof Uint8Array?new Uint8Array(e):e)}return n(null,r.responseText)}},t.binary&&(”overrideMimeType“in r&&r.overrideMimeType(”text/plain; charset=x-user-defined“),r.responseType=”arraybuffer“),r.open(”GET“,e),r.send()}},function(e,t,n){”use strict“;var r=t,i=r.isAbsolute=function(e){return/^(?:/|w+:)/.test(e)},a=r.normalize=function(e){var t=(e=e.replace(/\/g,”/“).replace(//{2,}/g,”/“)).split(”/“),n=i(e),r=”“;n&&(r=t.shift()+”/“);for(var a=0;a?a>0&&”..“!==t?t.splice(–a,2):n?t.splice(a,1):++a:”.“===t?t.splice(a,1):++a;return r+t.join(”/“)};r.resolve=function(e,t,n){return n||(t=a(t)),i(t)?t:(n||(e=a(e)),(e=e.replace(/(?:/|^)+$/,”“)).length?a(e+”/“+t):t)}},function(e,t,n){”use strict“;e.exports=_,_.filename=null,_.defaults={keepCase:!1};var r=n(71),i=n(47),a=n(42),o=n(11),c=n(43),s=n(27),u=n(5),l=n(44),f=n(45),h=n(17),d=n(3),p=/^[0-9]*$/,m=/^-?[0-9]*$/,v=/^0[0-9a-fA-F]+$/,g=/^-?0[0-9a-fA-F]+$/,y=/^0+$/,b=/^-?0+$/,w=/^(?!)[0-9]*(?:.*)?(?:[eE]?[0-9]+)?$/,x=/^[a-zA-Z_0-9]*$/,S=/^(?:.?[a-zA-Z_0-9]*)(?:.[a-zA-Z_0-9]*)*$/,k=/^(?:.[a-zA-Z_0-9]*)+$/;function _(e,t,n){t instanceof i||(n=t,t=new i),n||(n=_.defaults);var z,C,M,O,T,E=n.preferTrailingComment||!1,L=r(e,n.alternateCommentMode||!1),A=L.next,R=L.push,N=L.peek,H=L.skip,P=L.cmnt,j=!0,V=!1,D=t,I=n.keepCase?function(e){return e}:d.camelCase;function F(e,t,n){var r=_.filename;return n||(_.filename=null),Error(”illegal “+(t||”token“)+” '“e”' (“+(r?r+”, “:”“)+”line “L.line”)“)}function B(){var e,t=[];do{if('”'!==(e=A())&&“'”!==e)throw F(e);t.push(A()),H(e),e=N()}while('“'===e||”'“===e);return t.join(”“)}function U(e){var t=A();switch(t){case”'“:case'”':return R(t),B();case“true”:case“TRUE”:return!0;case“false”:case“FALSE”:return!1}try{return function(e,t){var n=1;“-”===e.charAt(0)&&(n=-1,e=e.substring(1));switch(e){case“inf”:case“INF”:case“Inf”:return n*(1/0);case“nan”:case“NAN”:case“Nan”:case“NaN”:return NaN;case“0”:return 0}if(p.test(e))return n*parseInt(e,10);if(v.test(e))return n*parseInt(e,16);if(y.test(e))return n*parseInt(e,8);if(w.test(e))return n*parseFloat(e);throw F(e,“number”,t)}(t,!0)}catch(n){if(e&&S.test(t))return t;throw F(t,“value”)}}function q(e,t){var n,r;do{!t||‘“’!==(n=N())&&”‘“!==n?e.push():e.push(B())}while(H(”,“,!0));H(”;“)}function G(e,t){switch(e){case”max“:case”MAX“:case”Max“:return 536870911;case”0“:return 0}if(!t&&”-“===e.charAt(0))throw F(e,”id“);if(m.test(e))return parseInt(e,10);if(g.test(e))return parseInt(e,16);if(b.test(e))return parseInt(e,8);throw F(e,”id“)}function W(){if(void 0!==z)throw F(”package“);if(z=A(),!S.test(z))throw F(z,”name“);D=D.define(z),H(”;“)}function Z(){var e,t=N();switch(t){case”weak“:e=M||(M=[]),A();break;case”public“:A();default:e=C||(C=)}t=B(),H(”;“),e.push(t)}function $(){if(H(”=“),O=B(),!(V=”proto3“===O)&&”proto2“!==O)throw F(O,”syntax“);H(”;“)}function J(e,t){switch(t){case”option“:return Y(e,t),H(”;“),!0;case”message“:return function(e,t){if(!x.test(t=A()))throw F(t,”type name“);var n=new a(t);K(n,(function(e){if(!J(n,e))switch(e){case”map“:!function(e){H(”<“);var t=A();if(void 0===h.mapKey)throw F(t,”type“);H(”,“);var n=A();if(!S.test(n))throw F(n,”type“);H(”>“);var r=A();if(!x.test®)throw F(r,”name“);H(”=“);var i=new c(I®,G(A()),t,n);K(i,(function(e){if(”option“!==e)throw F(e);Y(i,e),H(”;“)}),(function(){te(i)})),e.add(i)}(n);break;case”required“:case”optional“:case”repeated“:Q(n,e);break;case”oneof“:!function(e,t){if(!x.test(t=A()))throw F(t,”name“);var n=new s(I(t));K(n,(function(e){”option“===e?(Y(n,e),H(”;“)):(R(e),Q(n,”optional“))})),e.add(n)}(n,e);break;case”extensions“:q(n.extensions||(n.extensions=[]));break;case”reserved“:q(n.reserved||(n.reserved=),!0);break;default:if(!V||!S.test(e))throw F(e);R(e),Q(n,”optional“)}})),e.add(n)}(e,t),!0;case”enum“:return function(e,t){if(!x.test(t=A()))throw F(t,”name“);var n=new u(t);K(n,(function(e){switch(e){case”option“:Y(n,e),H(”;“);break;case”reserved“:q(n.reserved||(n.reserved=[]),!0);break;default:!function(e,t){if(!x.test(t))throw F(t,”name“);H(”=“);var n=G(A(),!0),r={};K(r,(function(e){if(”option“!==e)throw F(e);Y(r,e),H(”;“)}),(function(){te®})),e.add(t,n,r.comment)}(n,e)}})),e.add(n)}(e,t),!0;case”service“:return function(e,t){if(!x.test(t=A()))throw F(t,”service name“);var n=new l(t);K(n,(function(e){if(!J(n,e)){if(”rpc“!==e)throw F(e);!function(e,t){var n=P(),r=t;if(!x.test(t=A()))throw F(t,”name“);var i,a,o,c,s=t;H(”(“),H(”stream“,!0)&&(a=!0);if(!S.test(t=A()))throw F(t);i=t,H(”)“),H(”returns“),H(”(“),H(”stream“,!0)&&(c=!0);if(!S.test(t=A()))throw F(t);o=t,H(”)“);var u=new f(s,r,i,o,a,c);u.comment=n,K(u,(function(e){if(”option“!==e)throw F(e);Y(u,e),H(”;“)})),e.add(u)}(n,e)}})),e.add(n)}(e,t),!0;case”extend“:return function(e,t){if(!S.test(t=A()))throw F(t,”reference“);var n=t;K(null,(function(t){switch(t){case”required“:case”repeated“:case”optional“:Q(e,t,n);break;default:if(!V||!S.test(t))throw F(t);R(t),Q(e,”optional“,n)}}))}(e,t),!0}return!1}function K(e,t,n){var r=L.line;if(e&&(”string“!=typeof e.comment&&(e.comment=P()),e.filename=_.filename),H(”{“,!0)){for(var i;”}“!==(i=A());)t(i);H(”;“,!0)}else n&&n(),H(”;“),e&&(”string“!=typeof e.comment||E)&&(e.comment=P®||e.comment)}function Q(e,t,n){var r=A();if(”group“!==r){if(!S.test®)throw F(r,”type“);var i=A();if(!x.test(i))throw F(i,”name“);i=I(i),H(”=“);var c=new o(i,G(A()),r,t,n);K(c,(function(e){if(”option“!==e)throw F(e);Y(c,e),H(”;“)}),(function(){te©})),e.add©,V||!c.repeated||void 0===h.packed&&void 0!==h.basic||c.setOption(”packed“,!1,!0)}else!function(e,t){var n=A();if(!x.test(n))throw F(n,”name“);var r=d.lcFirst(n);n===r&&(n=d.ucFirst(n));H(”=“);var i=G(A()),c=new a(n);c.group=!0;var s=new o(r,i,n,t);s.filename=_.filename,K(c,(function(e){switch(e){case”option“:Y(c,e),H(”;“);break;case”required“:case”optional“:case”repeated“:Q(c,e);break;default:throw F(e)}})),e.add©.add(s)}(e,t)}function Y(e,t){var n=H(”(“,!0);if(!S.test(t=A()))throw F(t,”name“);var r,i=t,a=i;n&&(H(”)“),a=i=”(“i”)“,t=N(),k.test(t)&&(r=t.substr(1),i+=t,A())),H(”=“),function(e,t,n,r){e.setParsedOption&&e.setParsedOption(t,n,r)}(e,a,X(e,i),r)}function X(e,t){if(H(”{“,!0)){for(var n={};!H(”}“,!0);){if(!x.test(T=A()))throw F(T,”name“);var r,i=T;”{“===N()?r=X(e,t+”.“+T):(H(”:“),”{“===N()?r=X(e,t+”.“+T):(r=U(!0),ee(e,t+”.“+T,r)));var a=n;a&&(r=[].concat(a).concat®),n=r,H(”,“,!0)}return n}var o=U(!0);return ee(e,t,o),o}function ee(e,t,n){e.setOption&&e.setOption(t,n)}function te(e){if(H(”“)}return e}for(;null!==(T=A());)switch(T){case”package“:if(!j)throw F(T);W();break;case”import“:if(!j)throw F(T);Z();break;case”syntax“:if(!j)throw F(T);$();break;case”option“:Y(D,T),H(”;“);break;default:if(J(D,T)){j=!1;continue}throw F(T)}return _.filename=null,{package:z,imports:C,weakImports:M,syntax:O,root:t}}},function(e,t,n){”use strict“;e.exports=a;var r,i=//|./;function a(e,t){i.test(e)||(e=”google/protobuf/“e”.proto“,t={nested:{google:{nested:{protobuf:{nested:t}}}}}),a=t}a(”any“,{Any:{fields:{type_url:{type:”string“,id:1},value:{type:”bytes“,id:2}}}}),a(”duration“,{Duration:r={fields:{seconds:{type:”int64“,id:1},nanos:{type:”int32“,id:2}}}}),a(”timestamp“,{Timestamp:r}),a(”empty“,{Empty:{fields:{}}}),a(”struct“,{Struct:{fields:{fields:{keyType:”string“,type:”Value“,id:1}}},Value:{oneofs:{kind:{oneof:}},fields:{nullValue:{type:”NullValue“,id:1},numberValue:{type:”double“,id:2},stringValue:{type:”string“,id:3},boolValue:{type:”bool“,id:4},structValue:{type:”Struct“,id:5},listValue:{type:”ListValue“,id:6}}},NullValue:{values:{NULL_VALUE:0}},ListValue:{fields:{values:{rule:”repeated“,type:”Value“,id:1}}}}),a(”wrappers“,{DoubleValue:{fields:{value:{type:”double“,id:1}}},FloatValue:{fields:{value:{type:”float“,id:1}}},Int64Value:{fields:{value:{type:”int64“,id:1}}},UInt64Value:{fields:{value:{type:”uint64“,id:1}}},Int32Value:{fields:{value:{type:”int32“,id:1}}},UInt32Value:{fields:{value:{type:”uint32“,id:1}}},BoolValue:{fields:{value:{type:”bool“,id:1}}},StringValue:{fields:{value:{type:”string“,id:1}}},BytesValue:{fields:{value:{type:”bytes“,id:1}}}}),a(”field_mask“,{FieldMask:{fields:{paths:{rule:”repeated“,type:”string“,id:1}}}}),a.get=function(e){return a||null}},function(e,t,n){”use strict“;(function(e){var r,i=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e=t)})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}),a=this&&this.__values||function(e){var t=”function“==typeof Symbol&&Symbol.iterator,n=t&&e,r=0;if(n)return n.call(e);if(e&&”number“==typeof e.length)return{next:function(){return e&&r>=e.length&&(e=void 0),{value:e&&e,done:!e}}};throw new TypeError(t?”Object is not iterable.“:”Symbol.iterator is not defined.“)};Object.defineProperty(t,”__esModule“,{value:!0});var o=function(t){function n(e){var n=t.call(this,{writableObjectMode:!1,readableObjectMode:!0})||this;return n.fromObject=e,n}return i(n,t),n.prototype._transform=function(t,n,r){var i,o;void 0===this.buffer&&(this.buffer=”“),this.buffer+=e.isBuffer(t)?t.toString(”utf-8“):t;var c=this.buffer.split(”n“);this.buffer=c.pop();try{for(var s=a©,u=s.next();!u.done;u=s.next()){var l=u.value;this.push(this.fromObject(JSON.parse(l)))}}catch(e){i={error:e}}finally{try{u&&!u.done&&(o=s.return)&&o.call(s)}finally{if(i)throw i.error}}r()},n.prototype._flush=function(e){this.buffer&&this.push(this.fromObject(JSON.parse(this.buffer))),e()},n}(n(7).Transform);t.default=o}).call(this,n(19).Buffer)},function(e,t,n){”use strict“;Object.defineProperty(t,”__esModule“,{value:!0}),t.addDurations=t.durationToMilliseconds=t.timestampToMillisecondsSinceEpoch=t.millisecondsToDuration=t.millisecondsSinceEpochToTimestamp=void 0;var r=n(2);function i(e){return”number“==typeof e?e:e.toNumber()}function a(e){return{seconds:Math.floor(e/1e3),nanos:Math.floor(e%1e3*1e6)}}function o(e,t){return 1e3*i(e)+t/1e6}t.millisecondsSinceEpochToTimestamp=function(e){return new r.messages.Timestamp(a(e))},t.millisecondsToDuration=function(e){return new r.messages.Duration(a(e))},t.timestampToMillisecondsSinceEpoch=function(e){var t=e.nanos;return o(e.seconds,t)},t.durationToMilliseconds=function(e){var t=e.nanos;return o(e.seconds,t)},t.addDurations=function(e,t){var n=i(e.seconds)+i(t.seconds),a=e.nanos+t.nanos;return a>=1e9&&(n+=1,a-=1e9),new r.messages.Duration({seconds:n,nanos:a})}},function(e,t,n){”use strict“;Object.defineProperty(t,”__esModule“,{value:!0}),t.incrementing=t.uuid=void 0;var r=n(202);t.uuid=function(){return function(){return r.v4()}},t.incrementing=function(){var e=0;return function(){return(e++).toString()}}},function(e,t,n){”use strict“;var r,i,a,o=n(129),c=o.Reader,s=o.Writer,u=o.util,l=o.roots.default||(o.roots.default={});l.io=((a={}).cucumber=((i={}).messages=((r={}).Envelope=function(){function e(e){if(e)for(var t=Object.keys(e),n=0;n]&&(this[t]=e[t])}var t;return e.prototype.source=null,e.prototype.gherkinDocument=null,e.prototype.pickle=null,e.prototype.stepDefinition=null,e.prototype.hook=null,e.prototype.parameterType=null,e.prototype.testCase=null,e.prototype.undefinedParameterType=null,e.prototype.testRunStarted=null,e.prototype.testCaseStarted=null,e.prototype.testStepStarted=null,e.prototype.attachment=null,e.prototype.testStepFinished=null,e.prototype.testCaseFinished=null,e.prototype.testRunFinished=null,e.prototype.parseError=null,e.prototype.meta=null,Object.defineProperty(e.prototype,”message“,{get:u.oneOfGetter(t=),set:u.oneOfSetter(t)}),e.create=function(t){return new e(t)},e.encode=function(e,t){return t||(t=s.create()),null!=e.source&&Object.hasOwnProperty.call(e,”source“)&&l.io.cucumber.messages.Source.encode(e.source,t.uint32(10).fork()).ldelim(),null!=e.gherkinDocument&&Object.hasOwnProperty.call(e,”gherkinDocument“)&&l.io.cucumber.messages.GherkinDocument.encode(e.gherkinDocument,t.uint32(18).fork()).ldelim(),null!=e.pickle&&Object.hasOwnProperty.call(e,”pickle“)&&l.io.cucumber.messages.Pickle.encode(e.pickle,t.uint32(26).fork()).ldelim(),null!=e.stepDefinition&&Object.hasOwnProperty.call(e,”stepDefinition“)&&l.io.cucumber.messages.StepDefinition.encode(e.stepDefinition,t.uint32(34).fork()).ldelim(),null!=e.hook&&Object.hasOwnProperty.call(e,”hook“)&&l.io.cucumber.messages.Hook.encode(e.hook,t.uint32(42).fork()).ldelim(),null!=e.parameterType&&Object.hasOwnProperty.call(e,”parameterType“)&&l.io.cucumber.messages.ParameterType.encode(e.parameterType,t.uint32(50).fork()).ldelim(),null!=e.testCase&&Object.hasOwnProperty.call(e,”testCase“)&&l.io.cucumber.messages.TestCase.encode(e.testCase,t.uint32(58).fork()).ldelim(),null!=e.undefinedParameterType&&Object.hasOwnProperty.call(e,”undefinedParameterType“)&&l.io.cucumber.messages.UndefinedParameterType.encode(e.undefinedParameterType,t.uint32(66).fork()).ldelim(),null!=e.testRunStarted&&Object.hasOwnProperty.call(e,”testRunStarted“)&&l.io.cucumber.messages.TestRunStarted.encode(e.testRunStarted,t.uint32(74).fork()).ldelim(),null!=e.testCaseStarted&&Object.hasOwnProperty.call(e,”testCaseStarted“)&&l.io.cucumber.messages.TestCaseStarted.encode(e.testCaseStarted,t.uint32(82).fork()).ldelim(),null!=e.testStepStarted&&Object.hasOwnProperty.call(e,”testStepStarted“)&&l.io.cucumber.messages.TestStepStarted.encode(e.testStepStarted,t.uint32(90).fork()).ldelim(),null!=e.attachment&&Object.hasOwnProperty.call(e,”attachment“)&&l.io.cucumber.messages.Attachment.encode(e.attachment,t.uint32(98).fork()).ldelim(),null!=e.testStepFinished&&Object.hasOwnProperty.call(e,”testStepFinished“)&&l.io.cucumber.messages.TestStepFinished.encode(e.testStepFinished,t.uint32(106).fork()).ldelim(),null!=e.testCaseFinished&&Object.hasOwnProperty.call(e,”testCaseFinished“)&&l.io.cucumber.messages.TestCaseFinished.encode(e.testCaseFinished,t.uint32(114).fork()).ldelim(),null!=e.testRunFinished&&Object.hasOwnProperty.call(e,”testRunFinished“)&&l.io.cucumber.messages.TestRunFinished.encode(e.testRunFinished,t.uint32(122).fork()).ldelim(),null!=e.parseError&&Object.hasOwnProperty.call(e,”parseError“)&&l.io.cucumber.messages.ParseError.encode(e.parseError,t.uint32(130).fork()).ldelim(),null!=e.meta&&Object.hasOwnProperty.call(e,”meta“)&&l.io.cucumber.messages.Meta.encode(e.meta,t.uint32(138).fork()).ldelim(),t},e.encodeDelimited=function(e,t){return this.encode(e,t).ldelim()},e.decode=function(e,t){e instanceof c||(e=c.create(e));for(var n=void 0===t?e.len:e.pos+t,r=new l.io.cucumber.messages.Envelope;e.pos<n;){var i=e.uint32();switch(i>>>3){case 1:r.source=l.io.cucumber.messages.Source.decode(e,e.uint32());break;case 2:r.gherkinDocument=l.io.cucumber.messages.GherkinDocument.decode(e,e.uint32());break;case 3:r.pickle=l.io.cucumber.messages.Pickle.decode(e,e.uint32());break;case 4:r.stepDefinition=l.io.cucumber.messages.StepDefinition.decode(e,e.uint32());break;case 5:r.hook=l.io.cucumber.messages.Hook.decode(e,e.uint32());break;case 6:r.parameterType=l.io.cucumber.messages.ParameterType.decode(e,e.uint32());break;case 7:r.testCase=l.io.cucumber.messages.TestCase.decode(e,e.uint32());break;case 8:r.undefinedParameterType=l.io.cucumber.messages.UndefinedParameterType.decode(e,e.uint32());break;case 9:r.testRunStarted=l.io.cucumber.messages.TestRunStarted.decode(e,e.uint32());break;case 10:r.testCaseStarted=l.io.cucumber.messages.TestCaseStarted.decode(e,e.uint32());break;case 11:r.testStepStarted=l.io.cucumber.messages.TestStepStarted.decode(e,e.uint32());break;case 12:r.attachment=l.io.cucumber.messages.Attachment.decode(e,e.uint32());break;case 13:r.testStepFinished=l.io.cucumber.messages.TestStepFinished.decode(e,e.uint32());break;case 14:r.testCaseFinished=l.io.cucumber.messages.TestCaseFinished.decode(e,e.uint32());break;case 15:r.testRunFinished=l.io.cucumber.messages.TestRunFinished.decode(e,e.uint32());break;case 16:r.parseError=l.io.cucumber.messages.ParseError.decode(e,e.uint32());break;case 17:r.meta=l.io.cucumber.messages.Meta.decode(e,e.uint32());break;default:e.skipType(7&i)}}return r},e.decodeDelimited=function(e){return e instanceof c||(e=new c(e)),this.decode(e,e.uint32())},e.verify=function(e){if(”object“!=typeof e||null===e)return”object expected“;var t={};if(null!=e.source&&e.hasOwnProperty(”source“)&&(t.message=1,n=l.io.cucumber.messages.Source.verify(e.source)))return”source.“+n;if(null!=e.gherkinDocument&&e.hasOwnProperty(”gherkinDocument“)){if(1===t.message)return”message: multiple values“;if(t.message=1,n=l.io.cucumber.messages.GherkinDocument.verify(e.gherkinDocument))return”gherkinDocument.“+n}if(null!=e.pickle&&e.hasOwnProperty(”pickle“)){if(1===t.message)return”message: multiple values“;if(t.message=1,n=l.io.cucumber.messages.Pickle.verify(e.pickle))return”pickle.“+n}if(null!=e.stepDefinition&&e.hasOwnProperty(”stepDefinition“)){if(1===t.message)return”message: multiple values“;if(t.message=1,n=l.io.cucumber.messages.StepDefinition.verify(e.stepDefinition))return”stepDefinition.“+n}if(null!=e.hook&&e.hasOwnProperty(”hook“)){if(1===t.message)return”message: multiple values“;if(t.message=1,n=l.io.cucumber.messages.Hook.verify(e.hook))return”hook.“+n}if(null!=e.parameterType&&e.hasOwnProperty(”parameterType“)){if(1===t.message)return”message: multiple values“;if(t.message=1,n=l.io.cucumber.messages.ParameterType.verify(e.parameterType))return”parameterType.“+n}if(null!=e.testCase&&e.hasOwnProperty(”testCase“)){if(1===t.message)return”message: multiple values“;if(t.message=1,n=l.io.cucumber.messages.TestCase.verify(e.testCase))return”testCase.“+n}if(null!=e.undefinedParameterType&&e.hasOwnProperty(”undefinedParameterType“)){if(1===t.message)return”message: multiple values“;if(t.message=1,n=l.io.cucumber.messages.UndefinedParameterType.verify(e.undefinedParameterType))return”undefinedParameterType.“+n}if(null!=e.testRunStarted&&e.hasOwnProperty(”testRunStarted“)){if(1===t.message)return”message: multiple values“;if(t.message=1,n=l.io.cucumber.messages.TestRunStarted.verify(e.testRunStarted))return”testRunStarted.“+n}if(null!=e.testCaseStarted&&e.hasOwnProperty(”testCaseStarted“)){if(1===t.message)return”message: multiple values“;if(t.message=1,n=l.io.cucumber.messages.TestCaseStarted.verify(e.testCaseStarted))return”testCaseStarted.“+n}if(null!=e.testStepStarted&&e.hasOwnProperty(”testStepStarted“)){if(1===t.message)return”message: multiple values“;if(t.message=1,n=l.io.cucumber.messages.TestStepStarted.verify(e.testStepStarted))return”testStepStarted.“+n}if(null!=e.attachment&&e.hasOwnProperty(”attachment“)){if(1===t.message)return”message: multiple values“;if(t.message=1,n=l.io.cucumber.messages.Attachment.verify(e.attachment))return”attachment.“+n}if(null!=e.testStepFinished&&e.hasOwnProperty(”testStepFinished“)){if(1===t.message)return”message: multiple values“;if(t.message=1,n=l.io.cucumber.messages.TestStepFinished.verify(e.testStepFinished))return”testStepFinished.“+n}if(null!=e.testCaseFinished&&e.hasOwnProperty(”testCaseFinished“)){if(1===t.message)return”message: multiple values“;if(t.message=1,n=l.io.cucumber.messages.TestCaseFinished.verify(e.testCaseFinished))return”testCaseFinished.“+n}if(null!=e.testRunFinished&&e.hasOwnProperty(”testRunFinished“)){if(1===t.message)return”message: multiple values“;if(t.message=1,n=l.io.cucumber.messages.TestRunFinished.verify(e.testRunFinished))return”testRunFinished.“+n}if(null!=e.parseError&&e.hasOwnProperty(”parseError“)){if(1===t.message)return”message: multiple values“;if(t.message=1,n=l.io.cucumber.messages.ParseError.verify(e.parseError))return”parseError.“+n}if(null!=e.meta&&e.hasOwnProperty(”meta“)){if(1===t.message)return”message: multiple values“;var n;if(t.message=1,n=l.io.cucumber.messages.Meta.verify(e.meta))return”meta.“+n}return null},e.fromObject=function(e){if(e instanceof l.io.cucumber.messages.Envelope)return e;var t=new l.io.cucumber.messages.Envelope;if(null!=e.source){if(”object“!=typeof e.source)throw TypeError(”.io.cucumber.messages.Envelope.source: object expected“);t.source=l.io.cucumber.messages.Source.fromObject(e.source)}if(null!=e.gherkinDocument){if(”object“!=typeof e.gherkinDocument)throw TypeError(”.io.cucumber.messages.Envelope.gherkinDocument: object expected“);t.gherkinDocument=l.io.cucumber.messages.GherkinDocument.fromObject(e.gherkinDocument)}if(null!=e.pickle){if(”object“!=typeof e.pickle)throw TypeError(”.io.cucumber.messages.Envelope.pickle: object expected“);t.pickle=l.io.cucumber.messages.Pickle.fromObject(e.pickle)}if(null!=e.stepDefinition){if(”object“!=typeof e.stepDefinition)throw TypeError(”.io.cucumber.messages.Envelope.stepDefinition: object expected“);t.stepDefinition=l.io.cucumber.messages.StepDefinition.fromObject(e.stepDefinition)}if(null!=e.hook){if(”object“!=typeof e.hook)throw TypeError(”.io.cucumber.messages.Envelope.hook: object expected“);t.hook=l.io.cucumber.messages.Hook.fromObject(e.hook)}if(null!=e.parameterType){if(”object“!=typeof e.parameterType)throw TypeError(”.io.cucumber.messages.Envelope.parameterType: object expected“);t.parameterType=l.io.cucumber.messages.ParameterType.fromObject(e.parameterType)}if(null!=e.testCase){if(”object“!=typeof e.testCase)throw TypeError(”.io.cucumber.messages.Envelope.testCase: object expected“);t.testCase=l.io.cucumber.messages.TestCase.fromObject(e.testCase)}if(null!=e.undefinedParameterType){if(”object“!=typeof e.undefinedParameterType)throw TypeError(”.io.cucumber.messages.Envelope.undefinedParameterType: object expected“);t.undefinedParameterType=l.io.cucumber.messages.UndefinedParameterType.fromObject(e.undefinedParameterType)}if(null!=e.testRunStarted){if(”object“!=typeof e.testRunStarted)throw TypeError(”.io.cucumber.messages.Envelope.testRunStarted: object expected“);t.testRunStarted=l.io.cucumber.messages.TestRunStarted.fromObject(e.testRunStarted)}if(null!=e.testCaseStarted){if(”object“!=typeof e.testCaseStarted)throw TypeError(”.io.cucumber.messages.Envelope.testCaseStarted: object expected“);t.testCaseStarted=l.io.cucumber.messages.TestCaseStarted.fromObject(e.testCaseStarted)}if(null!=e.testStepStarted){if(”object“!=typeof e.testStepStarted)throw TypeError(”.io.cucumber.messages.Envelope.testStepStarted: object expected“);t.testStepStarted=l.io.cucumber.messages.TestStepStarted.fromObject(e.testStepStarted)}if(null!=e.attachment){if(”object“!=typeof e.attachment)throw TypeError(”.io.cucumber.messages.Envelope.attachment: object expected“);t.attachment=l.io.cucumber.messages.Attachment.fromObject(e.attachment)}if(null!=e.testStepFinished){if(”object“!=typeof e.testStepFinished)throw TypeError(”.io.cucumber.messages.Envelope.testStepFinished: object expected“);t.testStepFinished=l.io.cucumber.messages.TestStepFinished.fromObject(e.testStepFinished)}if(null!=e.testCaseFinished){if(”object“!=typeof e.testCaseFinished)throw TypeError(”.io.cucumber.messages.Envelope.testCaseFinished: object expected“);t.testCaseFinished=l.io.cucumber.messages.TestCaseFinished.fromObject(e.testCaseFinished)}if(null!=e.testRunFinished){if(”object“!=typeof e.testRunFinished)throw TypeError(”.io.cucumber.messages.Envelope.testRunFinished: object expected“);t.testRunFinished=l.io.cucumber.messages.TestRunFinished.fromObject(e.testRunFinished)}if(null!=e.parseError){if(”object“!=typeof e.parseError)throw TypeError(”.io.cucumber.messages.Envelope.parseError: object expected“);t.parseError=l.io.cucumber.messages.ParseError.fromObject(e.parseError)}if(null!=e.meta){if(”object“!=typeof e.meta)throw TypeError(”.io.cucumber.messages.Envelope.meta: object expected“);t.meta=l.io.cucumber.messages.Meta.fromObject(e.meta)}return t},e.toObject=function(e,t){t||(t={});var n={};return null!=e.source&&e.hasOwnProperty(”source“)&&(n.source=l.io.cucumber.messages.Source.toObject(e.source,t),t.oneofs&&(n.message=”source“)),null!=e.gherkinDocument&&e.hasOwnProperty(”gherkinDocument“)&&(n.gherkinDocument=l.io.cucumber.messages.GherkinDocument.toObject(e.gherkinDocument,t),t.oneofs&&(n.message=”gherkinDocument“)),null!=e.pickle&&e.hasOwnProperty(”pickle“)&&(n.pickle=l.io.cucumber.messages.Pickle.toObject(e.pickle,t),t.oneofs&&(n.message=”pickle“)),null!=e.stepDefinition&&e.hasOwnProperty(”stepDefinition“)&&(n.stepDefinition=l.io.cucumber.messages.StepDefinition.toObject(e.stepDefinition,t),t.oneofs&&(n.message=”stepDefinition“)),null!=e.hook&&e.hasOwnProperty(”hook“)&&(n.hook=l.io.cucumber.messages.Hook.toObject(e.hook,t),t.oneofs&&(n.message=”hook“)),null!=e.parameterType&&e.hasOwnProperty(”parameterType“)&&(n.parameterType=l.io.cucumber.messages.ParameterType.toObject(e.parameterType,t),t.oneofs&&(n.message=”parameterType“)),null!=e.testCase&&e.hasOwnProperty(”testCase“)&&(n.testCase=l.io.cucumber.messages.TestCase.toObject(e.testCase,t),t.oneofs&&(n.message=”testCase“)),null!=e.undefinedParameterType&&e.hasOwnProperty(”undefinedParameterType“)&&(n.undefinedParameterType=l.io.cucumber.messages.UndefinedParameterType.toObject(e.undefinedParameterType,t),t.oneofs&&(n.message=”undefinedParameterType“)),null!=e.testRunStarted&&e.hasOwnProperty(”testRunStarted“)&&(n.testRunStarted=l.io.cucumber.messages.TestRunStarted.toObject(e.testRunStarted,t),t.oneofs&&(n.message=”testRunStarted“)),null!=e.testCaseStarted&&e.hasOwnProperty(”testCaseStarted“)&&(n.testCaseStarted=l.io.cucumber.messages.TestCaseStarted.toObject(e.testCaseStarted,t),t.oneofs&&(n.message=”testCaseStarted“)),null!=e.testStepStarted&&e.hasOwnProperty(”testStepStarted“)&&(n.testStepStarted=l.io.cucumber.messages.TestStepStarted.toObject(e.testStepStarted,t),t.oneofs&&(n.message=”testStepStarted“)),null!=e.attachment&&e.hasOwnProperty(”attachment“)&&(n.attachment=l.io.cucumber.messages.Attachment.toObject(e.attachment,t),t.oneofs&&(n.message=”attachment“)),null!=e.testStepFinished&&e.hasOwnProperty(”testStepFinished“)&&(n.testStepFinished=l.io.cucumber.messages.TestStepFinished.toObject(e.testStepFinished,t),t.oneofs&&(n.message=”testStepFinished“)),null!=e.testCaseFinished&&e.hasOwnProperty(”testCaseFinished“)&&(n.testCaseFinished=l.io.cucumber.messages.TestCaseFinished.toObject(e.testCaseFinished,t),t.oneofs&&(n.message=”testCaseFinished“)),null!=e.testRunFinished&&e.hasOwnProperty(”testRunFinished“)&&(n.testRunFinished=l.io.cucumber.messages.TestRunFinished.toObject(e.testRunFinished,t),t.oneofs&&(n.message=”testRunFinished“)),null!=e.parseError&&e.hasOwnProperty(”parseError“)&&(n.parseError=l.io.cucumber.messages.ParseError.toObject(e.parseError,t),t.oneofs&&(n.message=”parseError“)),null!=e.meta&&e.hasOwnProperty(”meta“)&&(n.meta=l.io.cucumber.messages.Meta.toObject(e.meta,t),t.oneofs&&(n.message=”meta“)),n},e.prototype.toJSON=function(){return this.constructor.toObject(this,o.util.toJSONOptions)},e}(),r.Meta=function(){function e(e){if(e)for(var t=Object.keys(e),n=0;n]&&(this[t]=e[t])}return e.prototype.protocolVersion=”“,e.prototype.implementation=null,e.prototype.runtime=null,e.prototype.os=null,e.prototype.cpu=null,e.prototype.ci=null,e.create=function(t){return new e(t)},e.encode=function(e,t){return t||(t=s.create()),null!=e.protocolVersion&&Object.hasOwnProperty.call(e,”protocolVersion“)&&t.uint32(10).string(e.protocolVersion),null!=e.implementation&&Object.hasOwnProperty.call(e,”implementation“)&&l.io.cucumber.messages.Meta.Product.encode(e.implementation,t.uint32(18).fork()).ldelim(),null!=e.runtime&&Object.hasOwnProperty.call(e,”runtime“)&&l.io.cucumber.messages.Meta.Product.encode(e.runtime,t.uint32(26).fork()).ldelim(),null!=e.os&&Object.hasOwnProperty.call(e,”os“)&&l.io.cucumber.messages.Meta.Product.encode(e.os,t.uint32(34).fork()).ldelim(),null!=e.cpu&&Object.hasOwnProperty.call(e,”cpu“)&&l.io.cucumber.messages.Meta.Product.encode(e.cpu,t.uint32(42).fork()).ldelim(),null!=e.ci&&Object.hasOwnProperty.call(e,”ci“)&&l.io.cucumber.messages.Meta.CI.encode(e.ci,t.uint32(50).fork()).ldelim(),t},e.encodeDelimited=function(e,t){return this.encode(e,t).ldelim()},e.decode=function(e,t){e instanceof c||(e=c.create(e));for(var n=void 0===t?e.len:e.pos+t,r=new l.io.cucumber.messages.Meta;e.pos<n;){var i=e.uint32();switch(i>>>3){case 1:r.protocolVersion=e.string();break;case 2:r.implementation=l.io.cucumber.messages.Meta.Product.decode(e,e.uint32());break;case 3:r.runtime=l.io.cucumber.messages.Meta.Product.decode(e,e.uint32());break;case 4:r.os=l.io.cucumber.messages.Meta.Product.decode(e,e.uint32());break;case 5:r.cpu=l.io.cucumber.messages.Meta.Product.decode(e,e.uint32());break;case 6:r.ci=l.io.cucumber.messages.Meta.CI.decode(e,e.uint32());break;default:e.skipType(7&i)}}return r},e.decodeDelimited=function(e){return e instanceof c||(e=new c(e)),this.decode(e,e.uint32())},e.verify=function(e){return”object“!=typeof e||null===e?”object expected“:null!=e.protocolVersion&&e.hasOwnProperty(”protocolVersion“)&&!u.isString(e.protocolVersion)?”protocolVersion: string expected“:null!=e.implementation&&e.hasOwnProperty(”implementation“)&&(t=l.io.cucumber.messages.Meta.Product.verify(e.implementation))?”implementation.“+t:null!=e.runtime&&e.hasOwnProperty(”runtime“)&&(t=l.io.cucumber.messages.Meta.Product.verify(e.runtime))?”runtime.“+t:null!=e.os&&e.hasOwnProperty(”os“)&&(t=l.io.cucumber.messages.Meta.Product.verify(e.os))?”os.“+t:null!=e.cpu&&e.hasOwnProperty(”cpu“)&&(t=l.io.cucumber.messages.Meta.Product.verify(e.cpu))?”cpu.“+t:null!=e.ci&&e.hasOwnProperty(”ci“)&&(t=l.io.cucumber.messages.Meta.CI.verify(e.ci))?”ci.“+t:null;var t},e.fromObject=function(e){if(e instanceof l.io.cucumber.messages.Meta)return e;var t=new l.io.cucumber.messages.Meta;if(null!=e.protocolVersion&&(t.protocolVersion=String(e.protocolVersion)),null!=e.implementation){if(”object“!=typeof e.implementation)throw TypeError(”.io.cucumber.messages.Meta.implementation: object expected“);t.implementation=l.io.cucumber.messages.Meta.Product.fromObject(e.implementation)}if(null!=e.runtime){if(”object“!=typeof e.runtime)throw TypeError(”.io.cucumber.messages.Meta.runtime: object expected“);t.runtime=l.io.cucumber.messages.Meta.Product.fromObject(e.runtime)}if(null!=e.os){if(”object“!=typeof e.os)throw TypeError(”.io.cucumber.messages.Meta.os: object expected“);t.os=l.io.cucumber.messages.Meta.Product.fromObject(e.os)}if(null!=e.cpu){if(”object“!=typeof e.cpu)throw TypeError(”.io.cucumber.messages.Meta.cpu: object expected“);t.cpu=l.io.cucumber.messages.Meta.Product.fromObject(e.cpu)}if(null!=e.ci){if(”object“!=typeof e.ci)throw TypeError(”.io.cucumber.messages.Meta.ci: object expected“);t.ci=l.io.cucumber.messages.Meta.CI.fromObject(e.ci)}return t},e.toObject=function(e,t){t||(t={});var n={};return t.defaults&&(n.protocolVersion=”“,n.implementation=null,n.runtime=null,n.os=null,n.cpu=null,n.ci=null),null!=e.protocolVersion&&e.hasOwnProperty(”protocolVersion“)&&(n.protocolVersion=e.protocolVersion),null!=e.implementation&&e.hasOwnProperty(”implementation“)&&(n.implementation=l.io.cucumber.messages.Meta.Product.toObject(e.implementation,t)),null!=e.runtime&&e.hasOwnProperty(”runtime“)&&(n.runtime=l.io.cucumber.messages.Meta.Product.toObject(e.runtime,t)),null!=e.os&&e.hasOwnProperty(”os“)&&(n.os=l.io.cucumber.messages.Meta.Product.toObject(e.os,t)),null!=e.cpu&&e.hasOwnProperty(”cpu“)&&(n.cpu=l.io.cucumber.messages.Meta.Product.toObject(e.cpu,t)),null!=e.ci&&e.hasOwnProperty(”ci“)&&(n.ci=l.io.cucumber.messages.Meta.CI.toObject(e.ci,t)),n},e.prototype.toJSON=function(){return this.constructor.toObject(this,o.util.toJSONOptions)},e.Product=function(){function e(e){if(e)for(var t=Object.keys(e),n=0;n]&&(this[t]=e[t])}return e.prototype.name=”“,e.prototype.version=”“,e.create=function(t){return new e(t)},e.encode=function(e,t){return t||(t=s.create()),null!=e.name&&Object.hasOwnProperty.call(e,”name“)&&t.uint32(10).string(e.name),null!=e.version&&Object.hasOwnProperty.call(e,”version“)&&t.uint32(18).string(e.version),t},e.encodeDelimited=function(e,t){return this.encode(e,t).ldelim()},e.decode=function(e,t){e instanceof c||(e=c.create(e));for(var n=void 0===t?e.len:e.pos+t,r=new l.io.cucumber.messages.Meta.Product;e.pos<n;){var i=e.uint32();switch(i>>>3){case 1:r.name=e.string();break;case 2:r.version=e.string();break;default:e.skipType(7&i)}}return r},e.decodeDelimited=function(e){return e instanceof c||(e=new c(e)),this.decode(e,e.uint32())},e.verify=function(e){return”object“!=typeof e||null===e?”object expected“:null!=e.name&&e.hasOwnProperty(”name“)&&!u.isString(e.name)?”name: string expected“:null!=e.version&&e.hasOwnProperty(”version“)&&!u.isString(e.version)?”version: string expected“:null},e.fromObject=function(e){if(e instanceof l.io.cucumber.messages.Meta.Product)return e;var t=new l.io.cucumber.messages.Meta.Product;return null!=e.name&&(t.name=String(e.name)),null!=e.version&&(t.version=String(e.version)),t},e.toObject=function(e,t){t||(t={});var n={};return t.defaults&&(n.name=”“,n.version=”“),null!=e.name&&e.hasOwnProperty(”name“)&&(n.name=e.name),null!=e.version&&e.hasOwnProperty(”version“)&&(n.version=e.version),n},e.prototype.toJSON=function(){return this.constructor.toObject(this,o.util.toJSONOptions)},e}(),e.CI=function(){function e(e){if(e)for(var t=Object.keys(e),n=0;n]&&(this[t]=e[t])}return e.prototype.name=”“,e.prototype.url=”“,e.prototype.git=null,e.create=function(t){return new e(t)},e.encode=function(e,t){return t||(t=s.create()),null!=e.name&&Object.hasOwnProperty.call(e,”name“)&&t.uint32(10).string(e.name),null!=e.url&&Object.hasOwnProperty.call(e,”url“)&&t.uint32(18).string(e.url),null!=e.git&&Object.hasOwnProperty.call(e,”git“)&&l.io.cucumber.messages.Meta.CI.Git.encode(e.git,t.uint32(26).fork()).ldelim(),t},e.encodeDelimited=function(e,t){return this.encode(e,t).ldelim()},e.decode=function(e,t){e instanceof c||(e=c.create(e));for(var n=void 0===t?e.len:e.pos+t,r=new l.io.cucumber.messages.Meta.CI;e.pos<n;){var i=e.uint32();switch(i>>>3){case 1:r.name=e.string();break;case 2:r.url=e.string();break;case 3:r.git=l.io.cucumber.messages.Meta.CI.Git.decode(e,e.uint32());break;default:e.skipType(7&i)}}return r},e.decodeDelimited=function(e){return e instanceof c||(e=new c(e)),this.decode(e,e.uint32())},e.verify=function(e){if(”object“!=typeof e||null===e)return”object expected“;if(null!=e.name&&e.hasOwnProperty(”name“)&&!u.isString(e.name))return”name: string expected“;if(null!=e.url&&e.hasOwnProperty(”url“)&&!u.isString(e.url))return”url: string expected“;if(null!=e.git&&e.hasOwnProperty(”git“)){var t=l.io.cucumber.messages.Meta.CI.Git.verify(e.git);if(t)return”git.“+t}return null},e.fromObject=function(e){if(e instanceof l.io.cucumber.messages.Meta.CI)return e;var t=new l.io.cucumber.messages.Meta.CI;if(null!=e.name&&(t.name=String(e.name)),null!=e.url&&(t.url=String(e.url)),null!=e.git){if(”object“!=typeof e.git)throw TypeError(”.io.cucumber.messages.Meta.CI.git: object expected“);t.git=l.io.cucumber.messages.Meta.CI.Git.fromObject(e.git)}return t},e.toObject=function(e,t){t||(t={});var n={};return t.defaults&&(n.name=”“,n.url=”“,n.git=null),null!=e.name&&e.hasOwnProperty(”name“)&&(n.name=e.name),null!=e.url&&e.hasOwnProperty(”url“)&&(n.url=e.url),null!=e.git&&e.hasOwnProperty(”git“)&&(n.git=l.io.cucumber.messages.Meta.CI.Git.toObject(e.git,t)),n},e.prototype.toJSON=function(){return this.constructor.toObject(this,o.util.toJSONOptions)},e.Git=function(){function e(e){if(e)for(var t=Object.keys(e),n=0;n]&&(this[t]=e[t])}return e.prototype.remote=”“,e.prototype.revision=”“,e.prototype.branch=”“,e.prototype.tag=”“,e.create=function(t){return new e(t)},e.encode=function(e,t){return t||(t=s.create()),null!=e.remote&&Object.hasOwnProperty.call(e,”remote“)&&t.uint32(10).string(e.remote),null!=e.revision&&Object.hasOwnProperty.call(e,”revision“)&&t.uint32(18).string(e.revision),null!=e.branch&&Object.hasOwnProperty.call(e,”branch“)&&t.uint32(26).string(e.branch),null!=e.tag&&Object.hasOwnProperty.call(e,”tag“)&&t.uint32(34).string(e.tag),t},e.encodeDelimited=function(e,t){return this.encode(e,t).ldelim()},e.decode=function(e,t){e instanceof c||(e=c.create(e));for(var n=void 0===t?e.len:e.pos+t,r=new l.io.cucumber.messages.Meta.CI.Git;e.pos<n;){var i=e.uint32();switch(i>>>3){case 1:r.remote=e.string();break;case 2:r.revision=e.string();break;case 3:r.branch=e.string();break;case 4:r.tag=e.string();break;default:e.skipType(7&i)}}return r},e.decodeDelimited=function(e){return e instanceof c||(e=new c(e)),this.decode(e,e.uint32())},e.verify=function(e){return”object“!=typeof e||null===e?”object expected“:null!=e.remote&&e.hasOwnProperty(”remote“)&&!u.isString(e.remote)?”remote: string expected“:null!=e.revision&&e.hasOwnProperty(”revision“)&&!u.isString(e.revision)?”revision: string expected“:null!=e.branch&&e.hasOwnProperty(”branch“)&&!u.isString(e.branch)?”branch: string expected“:null!=e.tag&&e.hasOwnProperty(”tag“)&&!u.isString(e.tag)?”tag: string expected“:null},e.fromObject=function(e){if(e instanceof l.io.cucumber.messages.Meta.CI.Git)return e;var t=new l.io.cucumber.messages.Meta.CI.Git;return null!=e.remote&&(t.remote=String(e.remote)),null!=e.revision&&(t.revision=String(e.revision)),null!=e.branch&&(t.branch=String(e.branch)),null!=e.tag&&(t.tag=String(e.tag)),t},e.toObject=function(e,t){t||(t={});var n={};return t.defaults&&(n.remote=”“,n.revision=”“,n.branch=”“,n.tag=”“),null!=e.remote&&e.hasOwnProperty(”remote“)&&(n.remote=e.remote),null!=e.revision&&e.hasOwnProperty(”revision“)&&(n.revision=e.revision),null!=e.branch&&e.hasOwnProperty(”branch“)&&(n.branch=e.branch),null!=e.tag&&e.hasOwnProperty(”tag“)&&(n.tag=e.tag),n},e.prototype.toJSON=function(){return this.constructor.toObject(this,o.util.toJSONOptions)},e}(),e}(),e}(),r.Timestamp=function(){function e(e){if(e)for(var t=Object.keys(e),n=0;n]&&(this[t]=e[t])}return e.prototype.seconds=u.Long?u.Long.fromBits(0,0,!1):0,e.prototype.nanos=0,e.create=function(t){return new e(t)},e.encode=function(e,t){return t||(t=s.create()),null!=e.seconds&&Object.hasOwnProperty.call(e,”seconds“)&&t.uint32(8).int64(e.seconds),null!=e.nanos&&Object.hasOwnProperty.call(e,”nanos“)&&t.uint32(16).int32(e.nanos),t},e.encodeDelimited=function(e,t){return this.encode(e,t).ldelim()},e.decode=function(e,t){e instanceof c||(e=c.create(e));for(var n=void 0===t?e.len:e.pos+t,r=new l.io.cucumber.messages.Timestamp;e.pos<n;){var i=e.uint32();switch(i>>>3){case 1:r.seconds=e.int64();break;case 2:r.nanos=e.int32();break;default:e.skipType(7&i)}}return r},e.decodeDelimited=function(e){return e instanceof c||(e=new c(e)),this.decode(e,e.uint32())},e.verify=function(e){return”object“!=typeof e||null===e?”object expected“:null!=e.seconds&&e.hasOwnProperty(”seconds“)&&!(u.isInteger(e.seconds)||e.seconds&&u.isInteger(e.seconds.low)&&u.isInteger(e.seconds.high))?”seconds: integer|Long expected“:null!=e.nanos&&e.hasOwnProperty(”nanos“)&&!u.isInteger(e.nanos)?”nanos: integer expected“:null},e.fromObject=function(e){if(e instanceof l.io.cucumber.messages.Timestamp)return e;var t=new l.io.cucumber.messages.Timestamp;return null!=e.seconds&&(u.Long?(t.seconds=u.Long.fromValue(e.seconds)).unsigned=!1:”string“==typeof e.seconds?t.seconds=parseInt(e.seconds,10):”number“==typeof e.seconds?t.seconds=e.seconds:”object“==typeof e.seconds&&(t.seconds=new u.LongBits(e.seconds.low>>>0,e.seconds.high>>>0).toNumber())),null!=e.nanos&&(t.nanos=0|e.nanos),t},e.toObject=function(e,t){t||(t={});var n={};if(t.defaults){if(u.Long){var r=new u.Long(0,0,!1);n.seconds=t.longs===String?r.toString():t.longs===Number?r.toNumber():r}else n.seconds=t.longs===String?”0“:0;n.nanos=0}return null!=e.seconds&&e.hasOwnProperty(”seconds“)&&(”number“==typeof e.seconds?n.seconds=t.longs===String?String(e.seconds):e.seconds:n.seconds=t.longs===String?u.Long.prototype.toString.call(e.seconds):t.longs===Number?new u.LongBits(e.seconds.low>>>0,e.seconds.high>>>0).toNumber():e.seconds),null!=e.nanos&&e.hasOwnProperty(”nanos“)&&(n.nanos=e.nanos),n},e.prototype.toJSON=function(){return this.constructor.toObject(this,o.util.toJSONOptions)},e}(),r.Duration=function(){function e(e){if(e)for(var t=Object.keys(e),n=0;n]&&(this[t]=e[t])}return e.prototype.seconds=u.Long?u.Long.fromBits(0,0,!1):0,e.prototype.nanos=0,e.create=function(t){return new e(t)},e.encode=function(e,t){return t||(t=s.create()),null!=e.seconds&&Object.hasOwnProperty.call(e,”seconds“)&&t.uint32(8).int64(e.seconds),null!=e.nanos&&Object.hasOwnProperty.call(e,”nanos“)&&t.uint32(16).int32(e.nanos),t},e.encodeDelimited=function(e,t){return this.encode(e,t).ldelim()},e.decode=function(e,t){e instanceof c||(e=c.create(e));for(var n=void 0===t?e.len:e.pos+t,r=new l.io.cucumber.messages.Duration;e.pos<n;){var i=e.uint32();switch(i>>>3){case 1:r.seconds=e.int64();break;case 2:r.nanos=e.int32();break;default:e.skipType(7&i)}}return r},e.decodeDelimited=function(e){return e instanceof c||(e=new c(e)),this.decode(e,e.uint32())},e.verify=function(e){return”object“!=typeof e||null===e?”object expected“:null!=e.seconds&&e.hasOwnProperty(”seconds“)&&!(u.isInteger(e.seconds)||e.seconds&&u.isInteger(e.seconds.low)&&u.isInteger(e.seconds.high))?”seconds: integer|Long expected“:null!=e.nanos&&e.hasOwnProperty(”nanos“)&&!u.isInteger(e.nanos)?”nanos: integer expected“:null},e.fromObject=function(e){if(e instanceof l.io.cucumber.messages.Duration)return e;var t=new l.io.cucumber.messages.Duration;return null!=e.seconds&&(u.Long?(t.seconds=u.Long.fromValue(e.seconds)).unsigned=!1:”string“==typeof e.seconds?t.seconds=parseInt(e.seconds,10):”number“==typeof e.seconds?t.seconds=e.seconds:”object“==typeof e.seconds&&(t.seconds=new u.LongBits(e.seconds.low>>>0,e.seconds.high>>>0).toNumber())),null!=e.nanos&&(t.nanos=0|e.nanos),t},e.toObject=function(e,t){t||(t={});var n={};if(t.defaults){if(u.Long){var r=new u.Long(0,0,!1);n.seconds=t.longs===String?r.toString():t.longs===Number?r.toNumber():r}else n.seconds=t.longs===String?”0“:0;n.nanos=0}return null!=e.seconds&&e.hasOwnProperty(”seconds“)&&(”number“==typeof e.seconds?n.seconds=t.longs===String?String(e.seconds):e.seconds:n.seconds=t.longs===String?u.Long.prototype.toString.call(e.seconds):t.longs===Number?new u.LongBits(e.seconds.low>>>0,e.seconds.high>>>0).toNumber():e.seconds),null!=e.nanos&&e.hasOwnProperty(”nanos“)&&(n.nanos=e.nanos),n},e.prototype.toJSON=function(){return this.constructor.toObject(this,o.util.toJSONOptions)},e}(),r.Location=function(){function e(e){if(e)for(var t=Object.keys(e),n=0;n]&&(this[t]=e[t])}return e.prototype.line=0,e.prototype.column=0,e.create=function(t){return new e(t)},e.encode=function(e,t){return t||(t=s.create()),null!=e.line&&Object.hasOwnProperty.call(e,”line“)&&t.uint32(8).uint32(e.line),null!=e.column&&Object.hasOwnProperty.call(e,”column“)&&t.uint32(16).uint32(e.column),t},e.encodeDelimited=function(e,t){return this.encode(e,t).ldelim()},e.decode=function(e,t){e instanceof c||(e=c.create(e));for(var n=void 0===t?e.len:e.pos+t,r=new l.io.cucumber.messages.Location;e.pos<n;){var i=e.uint32();switch(i>>>3){case 1:r.line=e.uint32();break;case 2:r.column=e.uint32();break;default:e.skipType(7&i)}}return r},e.decodeDelimited=function(e){return e instanceof c||(e=new c(e)),this.decode(e,e.uint32())},e.verify=function(e){return”object“!=typeof e||null===e?”object expected“:null!=e.line&&e.hasOwnProperty(”line“)&&!u.isInteger(e.line)?”line: integer expected“:null!=e.column&&e.hasOwnProperty(”column“)&&!u.isInteger(e.column)?”column: integer expected“:null},e.fromObject=function(e){if(e instanceof l.io.cucumber.messages.Location)return e;var t=new l.io.cucumber.messages.Location;return null!=e.line&&(t.line=e.line>>>0),null!=e.column&&(t.column=e.column>>>0),t},e.toObject=function(e,t){t||(t={});var n={};return t.defaults&&(n.line=0,n.column=0),null!=e.line&&e.hasOwnProperty(”line“)&&(n.line=e.line),null!=e.column&&e.hasOwnProperty(”column“)&&(n.column=e.column),n},e.prototype.toJSON=function(){return this.constructor.toObject(this,o.util.toJSONOptions)},e}(),r.SourceReference=function(){function e(e){if(e)for(var t=Object.keys(e),n=0;n]&&(this[t]=e[t])}var t;return e.prototype.uri=”“,e.prototype.javaMethod=null,e.prototype.javaStackTraceElement=null,e.prototype.location=null,Object.defineProperty(e.prototype,”reference“,{get:u.oneOfGetter(t=),set:u.oneOfSetter(t)}),e.create=function(t){return new e(t)},e.encode=function(e,t){return t||(t=s.create()),null!=e.uri&&Object.hasOwnProperty.call(e,”uri“)&&t.uint32(10).string(e.uri),null!=e.location&&Object.hasOwnProperty.call(e,”location“)&&l.io.cucumber.messages.Location.encode(e.location,t.uint32(18).fork()).ldelim(),null!=e.javaMethod&&Object.hasOwnProperty.call(e,”javaMethod“)&&l.io.cucumber.messages.SourceReference.JavaMethod.encode(e.javaMethod,t.uint32(26).fork()).ldelim(),null!=e.javaStackTraceElement&&Object.hasOwnProperty.call(e,”javaStackTraceElement“)&&l.io.cucumber.messages.SourceReference.JavaStackTraceElement.encode(e.javaStackTraceElement,t.uint32(34).fork()).ldelim(),t},e.encodeDelimited=function(e,t){return this.encode(e,t).ldelim()},e.decode=function(e,t){e instanceof c||(e=c.create(e));for(var n=void 0===t?e.len:e.pos+t,r=new l.io.cucumber.messages.SourceReference;e.pos<n;){var i=e.uint32();switch(i>>>3){case 1:r.uri=e.string();break;case 3:r.javaMethod=l.io.cucumber.messages.SourceReference.JavaMethod.decode(e,e.uint32());break;case 4:r.javaStackTraceElement=l.io.cucumber.messages.SourceReference.JavaStackTraceElement.decode(e,e.uint32());break;case 2:r.location=l.io.cucumber.messages.Location.decode(e,e.uint32());break;default:e.skipType(7&i)}}return r},e.decodeDelimited=function(e){return e instanceof c||(e=new c(e)),this.decode(e,e.uint32())},e.verify=function(e){if(”object“!=typeof e||null===e)return”object expected“;var t={};if(null!=e.uri&&e.hasOwnProperty(”uri“)&&(t.reference=1,!u.isString(e.uri)))return”uri: string expected“;if(null!=e.javaMethod&&e.hasOwnProperty(”javaMethod“)){if(1===t.reference)return”reference: multiple values“;if(t.reference=1,n=l.io.cucumber.messages.SourceReference.JavaMethod.verify(e.javaMethod))return”javaMethod.“+n}if(null!=e.javaStackTraceElement&&e.hasOwnProperty(”javaStackTraceElement“)){if(1===t.reference)return”reference: multiple values“;var n;if(t.reference=1,n=l.io.cucumber.messages.SourceReference.JavaStackTraceElement.verify(e.javaStackTraceElement))return”javaStackTraceElement.“+n}return null!=e.location&&e.hasOwnProperty(”location“)&&(n=l.io.cucumber.messages.Location.verify(e.location))?”location.“+n:null},e.fromObject=function(e){if(e instanceof l.io.cucumber.messages.SourceReference)return e;var t=new l.io.cucumber.messages.SourceReference;if(null!=e.uri&&(t.uri=String(e.uri)),null!=e.javaMethod){if(”object“!=typeof e.javaMethod)throw TypeError(”.io.cucumber.messages.SourceReference.javaMethod: object expected“);t.javaMethod=l.io.cucumber.messages.SourceReference.JavaMethod.fromObject(e.javaMethod)}if(null!=e.javaStackTraceElement){if(”object“!=typeof e.javaStackTraceElement)throw TypeError(”.io.cucumber.messages.SourceReference.javaStackTraceElement: object expected“);t.javaStackTraceElement=l.io.cucumber.messages.SourceReference.JavaStackTraceElement.fromObject(e.javaStackTraceElement)}if(null!=e.location){if(”object“!=typeof e.location)throw TypeError(”.io.cucumber.messages.SourceReference.location: object expected“);t.location=l.io.cucumber.messages.Location.fromObject(e.location)}return t},e.toObject=function(e,t){t||(t={});var n={};return t.defaults&&(n.location=null),null!=e.uri&&e.hasOwnProperty(”uri“)&&(n.uri=e.uri,t.oneofs&&(n.reference=”uri“)),null!=e.location&&e.hasOwnProperty(”location“)&&(n.location=l.io.cucumber.messages.Location.toObject(e.location,t)),null!=e.javaMethod&&e.hasOwnProperty(”javaMethod“)&&(n.javaMethod=l.io.cucumber.messages.SourceReference.JavaMethod.toObject(e.javaMethod,t),t.oneofs&&(n.reference=”javaMethod“)),null!=e.javaStackTraceElement&&e.hasOwnProperty(”javaStackTraceElement“)&&(n.javaStackTraceElement=l.io.cucumber.messages.SourceReference.JavaStackTraceElement.toObject(e.javaStackTraceElement,t),t.oneofs&&(n.reference=”javaStackTraceElement“)),n},e.prototype.toJSON=function(){return this.constructor.toObject(this,o.util.toJSONOptions)},e.JavaMethod=function(){function e(e){if(this.methodParameterTypes=[],e)for(var t=Object.keys(e),n=0;n]&&(this[t]=e[t])}return e.prototype.className=”“,e.prototype.methodName=”“,e.prototype.methodParameterTypes=u.emptyArray,e.create=function(t){return new e(t)},e.encode=function(e,t){if(t||(t=s.create()),null!=e.className&&Object.hasOwnProperty.call(e,”className“)&&t.uint32(10).string(e.className),null!=e.methodName&&Object.hasOwnProperty.call(e,”methodName“)&&t.uint32(18).string(e.methodName),null!=e.methodParameterTypes&&e.methodParameterTypes.length)for(var n=0;n);return t},e.encodeDelimited=function(e,t){return this.encode(e,t).ldelim()},e.decode=function(e,t){e instanceof c||(e=c.create(e));for(var n=void 0===t?e.len:e.pos+t,r=new l.io.cucumber.messages.SourceReference.JavaMethod;e.pos<n;){var i=e.uint32();switch(i>>>3){case 1:r.className=e.string();break;case 2:r.methodName=e.string();break;case 3:r.methodParameterTypes&&r.methodParameterTypes.length||(r.methodParameterTypes=[]),r.methodParameterTypes.push(e.string());break;default:e.skipType(7&i)}}return r},e.decodeDelimited=function(e){return e instanceof c||(e=new c(e)),this.decode(e,e.uint32())},e.verify=function(e){if(”object“!=typeof e||null===e)return”object expected“;if(null!=e.className&&e.hasOwnProperty(”className“)&&!u.isString(e.className))return”className: string expected“;if(null!=e.methodName&&e.hasOwnProperty(”methodName“)&&!u.isString(e.methodName))return”methodName: string expected“;if(null!=e.methodParameterTypes&&e.hasOwnProperty(”methodParameterTypes“)){if(!Array.isArray(e.methodParameterTypes))return”methodParameterTypes: array expected“;for(var t=0;t))return”methodParameterTypes: string[] expected“}return null},e.fromObject=function(e){if(e instanceof l.io.cucumber.messages.SourceReference.JavaMethod)return e;var t=new l.io.cucumber.messages.SourceReference.JavaMethod;if(null!=e.className&&(t.className=String(e.className)),null!=e.methodName&&(t.methodName=String(e.methodName)),e.methodParameterTypes){if(!Array.isArray(e.methodParameterTypes))throw TypeError(”.io.cucumber.messages.SourceReference.JavaMethod.methodParameterTypes: array expected“);t.methodParameterTypes=[];for(var n=0;n=String(e.methodParameterTypes)}return t},e.toObject=function(e,t){t||(t={});var n={};if((t.arrays||t.defaults)&&(n.methodParameterTypes=[]),t.defaults&&(n.className=”“,n.methodName=”“),null!=e.className&&e.hasOwnProperty(”className“)&&(n.className=e.className),null!=e.methodName&&e.hasOwnProperty(”methodName“)&&(n.methodName=e.methodName),e.methodParameterTypes&&e.methodParameterTypes.length){n.methodParameterTypes=;for(var r=0;r=e.methodParameterTypes}return n},e.prototype.toJSON=function(){return this.constructor.toObject(this,o.util.toJSONOptions)},e}(),e.JavaStackTraceElement=function(){function e(e){if(e)for(var t=Object.keys(e),n=0;n]&&(this[t]=e[t])}return e.prototype.className=”“,e.prototype.methodName=”“,e.prototype.fileName=”“,e.create=function(t){return new e(t)},e.encode=function(e,t){return t||(t=s.create()),null!=e.className&&Object.hasOwnProperty.call(e,”className“)&&t.uint32(10).string(e.className),null!=e.methodName&&Object.hasOwnProperty.call(e,”methodName“)&&t.uint32(18).string(e.methodName),null!=e.fileName&&Object.hasOwnProperty.call(e,”fileName“)&&t.uint32(26).string(e.fileName),t},e.encodeDelimited=function(e,t){return this.encode(e,t).ldelim()},e.decode=function(e,t){e instanceof c||(e=c.create(e));for(var n=void 0===t?e.len:e.pos+t,r=new l.io.cucumber.messages.SourceReference.JavaStackTraceElement;e.pos<n;){var i=e.uint32();switch(i>>>3){case 1:r.className=e.string();break;case 2:r.methodName=e.string();break;case 3:r.fileName=e.string();break;default:e.skipType(7&i)}}return r},e.decodeDelimited=function(e){return e instanceof c||(e=new c(e)),this.decode(e,e.uint32())},e.verify=function(e){return”object“!=typeof e||null===e?”object expected“:null!=e.className&&e.hasOwnProperty(”className“)&&!u.isString(e.className)?”className: string expected“:null!=e.methodName&&e.hasOwnProperty(”methodName“)&&!u.isString(e.methodName)?”methodName: string expected“:null!=e.fileName&&e.hasOwnProperty(”fileName“)&&!u.isString(e.fileName)?”fileName: string expected“:null},e.fromObject=function(e){if(e instanceof l.io.cucumber.messages.SourceReference.JavaStackTraceElement)return e;var t=new l.io.cucumber.messages.SourceReference.JavaStackTraceElement;return null!=e.className&&(t.className=String(e.className)),null!=e.methodName&&(t.methodName=String(e.methodName)),null!=e.fileName&&(t.fileName=String(e.fileName)),t},e.toObject=function(e,t){t||(t={});var n={};return t.defaults&&(n.className=”“,n.methodName=”“,n.fileName=”“),null!=e.className&&e.hasOwnProperty(”className“)&&(n.className=e.className),null!=e.methodName&&e.hasOwnProperty(”methodName“)&&(n.methodName=e.methodName),null!=e.fileName&&e.hasOwnProperty(”fileName“)&&(n.fileName=e.fileName),n},e.prototype.toJSON=function(){return this.constructor.toObject(this,o.util.toJSONOptions)},e}(),e}(),r.Source=function(){function e(e){if(e)for(var t=Object.keys(e),n=0;n]&&(this[t]=e[t])}return e.prototype.uri=”“,e.prototype.data=”“,e.prototype.mediaType=”“,e.create=function(t){return new e(t)},e.encode=function(e,t){return t||(t=s.create()),null!=e.uri&&Object.hasOwnProperty.call(e,”uri“)&&t.uint32(10).string(e.uri),null!=e.data&&Object.hasOwnProperty.call(e,”data“)&&t.uint32(18).string(e.data),null!=e.mediaType&&Object.hasOwnProperty.call(e,”mediaType“)&&t.uint32(26).string(e.mediaType),t},e.encodeDelimited=function(e,t){return this.encode(e,t).ldelim()},e.decode=function(e,t){e instanceof c||(e=c.create(e));for(var n=void 0===t?e.len:e.pos+t,r=new l.io.cucumber.messages.Source;e.pos<n;){var i=e.uint32();switch(i>>>3){case 1:r.uri=e.string();break;case 2:r.data=e.string();break;case 3:r.mediaType=e.string();break;default:e.skipType(7&i)}}return r},e.decodeDelimited=function(e){return e instanceof c||(e=new c(e)),this.decode(e,e.uint32())},e.verify=function(e){return”object“!=typeof e||null===e?”object expected“:null!=e.uri&&e.hasOwnProperty(”uri“)&&!u.isString(e.uri)?”uri: string expected“:null!=e.data&&e.hasOwnProperty(”data“)&&!u.isString(e.data)?”data: string expected“:null!=e.mediaType&&e.hasOwnProperty(”mediaType“)&&!u.isString(e.mediaType)?”mediaType: string expected“:null},e.fromObject=function(e){if(e instanceof l.io.cucumber.messages.Source)return e;var t=new l.io.cucumber.messages.Source;return null!=e.uri&&(t.uri=String(e.uri)),null!=e.data&&(t.data=String(e.data)),null!=e.mediaType&&(t.mediaType=String(e.mediaType)),t},e.toObject=function(e,t){t||(t={});var n={};return t.defaults&&(n.uri=”“,n.data=”“,n.mediaType=”“),null!=e.uri&&e.hasOwnProperty(”uri“)&&(n.uri=e.uri),null!=e.data&&e.hasOwnProperty(”data“)&&(n.data=e.data),null!=e.mediaType&&e.hasOwnProperty(”mediaType“)&&(n.mediaType=e.mediaType),n},e.prototype.toJSON=function(){return this.constructor.toObject(this,o.util.toJSONOptions)},e}(),r.GherkinDocument=function(){function e(e){if(this.comments=[],e)for(var t=Object.keys(e),n=0;n]&&(this[t]=e[t])}return e.prototype.uri=”“,e.prototype.feature=null,e.prototype.comments=u.emptyArray,e.create=function(t){return new e(t)},e.encode=function(e,t){if(t||(t=s.create()),null!=e.uri&&Object.hasOwnProperty.call(e,”uri“)&&t.uint32(10).string(e.uri),null!=e.feature&&Object.hasOwnProperty.call(e,”feature“)&&l.io.cucumber.messages.GherkinDocument.Feature.encode(e.feature,t.uint32(18).fork()).ldelim(),null!=e.comments&&e.comments.length)for(var n=0;n,t.uint32(26).fork()).ldelim();return t},e.encodeDelimited=function(e,t){return this.encode(e,t).ldelim()},e.decode=function(e,t){e instanceof c||(e=c.create(e));for(var n=void 0===t?e.len:e.pos+t,r=new l.io.cucumber.messages.GherkinDocument;e.pos<n;){var i=e.uint32();switch(i>>>3){case 1:r.uri=e.string();break;case 2:r.feature=l.io.cucumber.messages.GherkinDocument.Feature.decode(e,e.uint32());break;case 3:r.comments&&r.comments.length||(r.comments=[]),r.comments.push(l.io.cucumber.messages.GherkinDocument.Comment.decode(e,e.uint32()));break;default:e.skipType(7&i)}}return r},e.decodeDelimited=function(e){return e instanceof c||(e=new c(e)),this.decode(e,e.uint32())},e.verify=function(e){if(”object“!=typeof e||null===e)return”object expected“;if(null!=e.uri&&e.hasOwnProperty(”uri“)&&!u.isString(e.uri))return”uri: string expected“;if(null!=e.feature&&e.hasOwnProperty(”feature“)&&(n=l.io.cucumber.messages.GherkinDocument.Feature.verify(e.feature)))return”feature.“+n;if(null!=e.comments&&e.hasOwnProperty(”comments“)){if(!Array.isArray(e.comments))return”comments: array expected“;for(var t=0;t<e.comments.length;++t){var n;if(n=l.io.cucumber.messages.GherkinDocument.Comment.verify(e.comments))return”comments.“+n}}return null},e.fromObject=function(e){if(e instanceof l.io.cucumber.messages.GherkinDocument)return e;var t=new l.io.cucumber.messages.GherkinDocument;if(null!=e.uri&&(t.uri=String(e.uri)),null!=e.feature){if(”object“!=typeof e.feature)throw TypeError(”.io.cucumber.messages.GherkinDocument.feature: object expected“);t.feature=l.io.cucumber.messages.GherkinDocument.Feature.fromObject(e.feature)}if(e.comments){if(!Array.isArray(e.comments))throw TypeError(”.io.cucumber.messages.GherkinDocument.comments: array expected“);t.comments=[];for(var n=0;n<e.comments.length;++n){if(”object“!=typeof e.comments)throw TypeError(”.io.cucumber.messages.GherkinDocument.comments: object expected“);t.comments=l.io.cucumber.messages.GherkinDocument.Comment.fromObject(e.comments)}}return t},e.toObject=function(e,t){t||(t={});var n={};if((t.arrays||t.defaults)&&(n.comments=[]),t.defaults&&(n.uri=”“,n.feature=null),null!=e.uri&&e.hasOwnProperty(”uri“)&&(n.uri=e.uri),null!=e.feature&&e.hasOwnProperty(”feature“)&&(n.feature=l.io.cucumber.messages.GherkinDocument.Feature.toObject(e.feature,t)),e.comments&&e.comments.length){n.comments=;for(var r=0;r=l.io.cucumber.messages.GherkinDocument.Comment.toObject(e.comments,t)}return n},e.prototype.toJSON=function(){return this.constructor.toObject(this,o.util.toJSONOptions)},e.Comment=function(){function e(e){if(e)for(var t=Object.keys(e),n=0;n]&&(this[t]=e[t])}return e.prototype.location=null,e.prototype.text=”“,e.create=function(t){return new e(t)},e.encode=function(e,t){return t||(t=s.create()),null!=e.location&&Object.hasOwnProperty.call(e,”location“)&&l.io.cucumber.messages.Location.encode(e.location,t.uint32(10).fork()).ldelim(),null!=e.text&&Object.hasOwnProperty.call(e,”text“)&&t.uint32(18).string(e.text),t},e.encodeDelimited=function(e,t){return this.encode(e,t).ldelim()},e.decode=function(e,t){e instanceof c||(e=c.create(e));for(var n=void 0===t?e.len:e.pos+t,r=new l.io.cucumber.messages.GherkinDocument.Comment;e.pos<n;){var i=e.uint32();switch(i>>>3){case 1:r.location=l.io.cucumber.messages.Location.decode(e,e.uint32());break;case 2:r.text=e.string();break;default:e.skipType(7&i)}}return r},e.decodeDelimited=function(e){return e instanceof c||(e=new c(e)),this.decode(e,e.uint32())},e.verify=function(e){if(”object“!=typeof e||null===e)return”object expected“;if(null!=e.location&&e.hasOwnProperty(”location“)){var t=l.io.cucumber.messages.Location.verify(e.location);if(t)return”location.“+t}return null!=e.text&&e.hasOwnProperty(”text“)&&!u.isString(e.text)?”text: string expected“:null},e.fromObject=function(e){if(e instanceof l.io.cucumber.messages.GherkinDocument.Comment)return e;var t=new l.io.cucumber.messages.GherkinDocument.Comment;if(null!=e.location){if(”object“!=typeof e.location)throw TypeError(”.io.cucumber.messages.GherkinDocument.Comment.location: object expected“);t.location=l.io.cucumber.messages.Location.fromObject(e.location)}return null!=e.text&&(t.text=String(e.text)),t},e.toObject=function(e,t){t||(t={});var n={};return t.defaults&&(n.location=null,n.text=”“),null!=e.location&&e.hasOwnProperty(”location“)&&(n.location=l.io.cucumber.messages.Location.toObject(e.location,t)),null!=e.text&&e.hasOwnProperty(”text“)&&(n.text=e.text),n},e.prototype.toJSON=function(){return this.constructor.toObject(this,o.util.toJSONOptions)},e}(),e.Feature=function(){function e(e){if(this.tags=[],this.children=,e)for(var t=Object.keys(e),n=0;n]&&(this[t]=e[t])}return e.prototype.location=null,e.prototype.tags=u.emptyArray,e.prototype.language=”“,e.prototype.keyword=”“,e.prototype.name=”“,e.prototype.description=”“,e.prototype.children=u.emptyArray,e.create=function(t){return new e(t)},e.encode=function(e,t){if(t||(t=s.create()),null!=e.location&&Object.hasOwnProperty.call(e,”location“)&&l.io.cucumber.messages.Location.encode(e.location,t.uint32(10).fork()).ldelim(),null!=e.tags&&e.tags.length)for(var n=0;n,t.uint32(18).fork()).ldelim();if(null!=e.language&&Object.hasOwnProperty.call(e,”language“)&&t.uint32(26).string(e.language),null!=e.keyword&&Object.hasOwnProperty.call(e,”keyword“)&&t.uint32(34).string(e.keyword),null!=e.name&&Object.hasOwnProperty.call(e,”name“)&&t.uint32(42).string(e.name),null!=e.description&&Object.hasOwnProperty.call(e,”description“)&&t.uint32(50).string(e.description),null!=e.children&&e.children.length)for(n=0;n,t.uint32(58).fork()).ldelim();return t},e.encodeDelimited=function(e,t){return this.encode(e,t).ldelim()},e.decode=function(e,t){e instanceof c||(e=c.create(e));for(var n=void 0===t?e.len:e.pos+t,r=new l.io.cucumber.messages.GherkinDocument.Feature;e.pos<n;){var i=e.uint32();switch(i>>>3){case 1:r.location=l.io.cucumber.messages.Location.decode(e,e.uint32());break;case 2:r.tags&&r.tags.length||(r.tags=[]),r.tags.push(l.io.cucumber.messages.GherkinDocument.Feature.Tag.decode(e,e.uint32()));break;case 3:r.language=e.string();break;case 4:r.keyword=e.string();break;case 5:r.name=e.string();break;case 6:r.description=e.string();break;case 7:r.children&&r.children.length||(r.children=[]),r.children.push(l.io.cucumber.messages.GherkinDocument.Feature.FeatureChild.decode(e,e.uint32()));break;default:e.skipType(7&i)}}return r},e.decodeDelimited=function(e){return e instanceof c||(e=new c(e)),this.decode(e,e.uint32())},e.verify=function(e){if(”object“!=typeof e||null===e)return”object expected“;if(null!=e.location&&e.hasOwnProperty(”location“)&&(n=l.io.cucumber.messages.Location.verify(e.location)))return”location.“+n;if(null!=e.tags&&e.hasOwnProperty(”tags“)){if(!Array.isArray(e.tags))return”tags: array expected“;for(var t=0;t))return”tags.“+n}if(null!=e.language&&e.hasOwnProperty(”language“)&&!u.isString(e.language))return”language: string expected“;if(null!=e.keyword&&e.hasOwnProperty(”keyword“)&&!u.isString(e.keyword))return”keyword: string expected“;if(null!=e.name&&e.hasOwnProperty(”name“)&&!u.isString(e.name))return”name: string expected“;if(null!=e.description&&e.hasOwnProperty(”description“)&&!u.isString(e.description))return”description: string expected“;if(null!=e.children&&e.hasOwnProperty(”children“)){if(!Array.isArray(e.children))return”children: array expected“;for(t=0;t<e.children.length;++t){var n;if(n=l.io.cucumber.messages.GherkinDocument.Feature.FeatureChild.verify(e.children))return”children.“+n}}return null},e.fromObject=function(e){if(e instanceof l.io.cucumber.messages.GherkinDocument.Feature)return e;var t=new l.io.cucumber.messages.GherkinDocument.Feature;if(null!=e.location){if(”object“!=typeof e.location)throw TypeError(”.io.cucumber.messages.GherkinDocument.Feature.location: object expected“);t.location=l.io.cucumber.messages.Location.fromObject(e.location)}if(e.tags){if(!Array.isArray(e.tags))throw TypeError(”.io.cucumber.messages.GherkinDocument.Feature.tags: array expected“);t.tags=[];for(var n=0;n<e.tags.length;++n){if(”object“!=typeof e.tags)throw TypeError(”.io.cucumber.messages.GherkinDocument.Feature.tags: object expected“);t.tags=l.io.cucumber.messages.GherkinDocument.Feature.Tag.fromObject(e.tags)}}if(null!=e.language&&(t.language=String(e.language)),null!=e.keyword&&(t.keyword=String(e.keyword)),null!=e.name&&(t.name=String(e.name)),null!=e.description&&(t.description=String(e.description)),e.children){if(!Array.isArray(e.children))throw TypeError(”.io.cucumber.messages.GherkinDocument.Feature.children: array expected“);for(t.children=[],n=0;n<e.children.length;++n){if(”object“!=typeof e.children)throw TypeError(”.io.cucumber.messages.GherkinDocument.Feature.children: object expected“);t.children=l.io.cucumber.messages.GherkinDocument.Feature.FeatureChild.fromObject(e.children)}}return t},e.toObject=function(e,t){t||(t={});var n={};if((t.arrays||t.defaults)&&(n.tags=[],n.children=),t.defaults&&(n.location=null,n.language=”“,n.keyword=”“,n.name=”“,n.description=”“),null!=e.location&&e.hasOwnProperty(”location“)&&(n.location=l.io.cucumber.messages.Location.toObject(e.location,t)),e.tags&&e.tags.length){n.tags=[];for(var r=0;r=l.io.cucumber.messages.GherkinDocument.Feature.Tag.toObject(e.tags,t)}if(null!=e.language&&e.hasOwnProperty(”language“)&&(n.language=e.language),null!=e.keyword&&e.hasOwnProperty(”keyword“)&&(n.keyword=e.keyword),null!=e.name&&e.hasOwnProperty(”name“)&&(n.name=e.name),null!=e.description&&e.hasOwnProperty(”description“)&&(n.description=e.description),e.children&&e.children.length)for(n.children=[],r=0;r=l.io.cucumber.messages.GherkinDocument.Feature.FeatureChild.toObject(e.children,t);return n},e.prototype.toJSON=function(){return this.constructor.toObject(this,o.util.toJSONOptions)},e.Tag=function(){function e(e){if(e)for(var t=Object.keys(e),n=0;n]&&(this[t]=e[t])}return e.prototype.location=null,e.prototype.name=”“,e.prototype.id=”“,e.create=function(t){return new e(t)},e.encode=function(e,t){return t||(t=s.create()),null!=e.location&&Object.hasOwnProperty.call(e,”location“)&&l.io.cucumber.messages.Location.encode(e.location,t.uint32(10).fork()).ldelim(),null!=e.name&&Object.hasOwnProperty.call(e,”name“)&&t.uint32(18).string(e.name),null!=e.id&&Object.hasOwnProperty.call(e,”id“)&&t.uint32(26).string(e.id),t},e.encodeDelimited=function(e,t){return this.encode(e,t).ldelim()},e.decode=function(e,t){e instanceof c||(e=c.create(e));for(var n=void 0===t?e.len:e.pos+t,r=new l.io.cucumber.messages.GherkinDocument.Feature.Tag;e.pos<n;){var i=e.uint32();switch(i>>>3){case 1:r.location=l.io.cucumber.messages.Location.decode(e,e.uint32());break;case 2:r.name=e.string();break;case 3:r.id=e.string();break;default:e.skipType(7&i)}}return r},e.decodeDelimited=function(e){return e instanceof c||(e=new c(e)),this.decode(e,e.uint32())},e.verify=function(e){if(”object“!=typeof e||null===e)return”object expected“;if(null!=e.location&&e.hasOwnProperty(”location“)){var t=l.io.cucumber.messages.Location.verify(e.location);if(t)return”location.“+t}return null!=e.name&&e.hasOwnProperty(”name“)&&!u.isString(e.name)?”name: string expected“:null!=e.id&&e.hasOwnProperty(”id“)&&!u.isString(e.id)?”id: string expected“:null},e.fromObject=function(e){if(e instanceof l.io.cucumber.messages.GherkinDocument.Feature.Tag)return e;var t=new l.io.cucumber.messages.GherkinDocument.Feature.Tag;if(null!=e.location){if(”object“!=typeof e.location)throw TypeError(”.io.cucumber.messages.GherkinDocument.Feature.Tag.location: object expected“);t.location=l.io.cucumber.messages.Location.fromObject(e.location)}return null!=e.name&&(t.name=String(e.name)),null!=e.id&&(t.id=String(e.id)),t},e.toObject=function(e,t){t||(t={});var n={};return t.defaults&&(n.location=null,n.name=”“,n.id=”“),null!=e.location&&e.hasOwnProperty(”location“)&&(n.location=l.io.cucumber.messages.Location.toObject(e.location,t)),null!=e.name&&e.hasOwnProperty(”name“)&&(n.name=e.name),null!=e.id&&e.hasOwnProperty(”id“)&&(n.id=e.id),n},e.prototype.toJSON=function(){return this.constructor.toObject(this,o.util.toJSONOptions)},e}(),e.FeatureChild=function(){function e(e){if(e)for(var t=Object.keys(e),n=0;n]&&(this[t]=e[t])}var t;return e.prototype.rule=null,e.prototype.background=null,e.prototype.scenario=null,Object.defineProperty(e.prototype,”value“,{get:u.oneOfGetter(t=),set:u.oneOfSetter(t)}),e.create=function(t){return new e(t)},e.encode=function(e,t){return t||(t=s.create()),null!=e.rule&&Object.hasOwnProperty.call(e,”rule“)&&l.io.cucumber.messages.GherkinDocument.Feature.FeatureChild.Rule.encode(e.rule,t.uint32(10).fork()).ldelim(),null!=e.background&&Object.hasOwnProperty.call(e,”background“)&&l.io.cucumber.messages.GherkinDocument.Feature.Background.encode(e.background,t.uint32(18).fork()).ldelim(),null!=e.scenario&&Object.hasOwnProperty.call(e,”scenario“)&&l.io.cucumber.messages.GherkinDocument.Feature.Scenario.encode(e.scenario,t.uint32(26).fork()).ldelim(),t},e.encodeDelimited=function(e,t){return this.encode(e,t).ldelim()},e.decode=function(e,t){e instanceof c||(e=c.create(e));for(var n=void 0===t?e.len:e.pos+t,r=new l.io.cucumber.messages.GherkinDocument.Feature.FeatureChild;e.pos<n;){var i=e.uint32();switch(i>>>3){case 1:r.rule=l.io.cucumber.messages.GherkinDocument.Feature.FeatureChild.Rule.decode(e,e.uint32());break;case 2:r.background=l.io.cucumber.messages.GherkinDocument.Feature.Background.decode(e,e.uint32());break;case 3:r.scenario=l.io.cucumber.messages.GherkinDocument.Feature.Scenario.decode(e,e.uint32());break;default:e.skipType(7&i)}}return r},e.decodeDelimited=function(e){return e instanceof c||(e=new c(e)),this.decode(e,e.uint32())},e.verify=function(e){if(”object“!=typeof e||null===e)return”object expected“;var t={};if(null!=e.rule&&e.hasOwnProperty(”rule“)&&(t.value=1,n=l.io.cucumber.messages.GherkinDocument.Feature.FeatureChild.Rule.verify(e.rule)))return”rule.“+n;if(null!=e.background&&e.hasOwnProperty(”background“)){if(1===t.value)return”value: multiple values“;if(t.value=1,n=l.io.cucumber.messages.GherkinDocument.Feature.Background.verify(e.background))return”background.“+n}if(null!=e.scenario&&e.hasOwnProperty(”scenario“)){if(1===t.value)return”value: multiple values“;var n;if(t.value=1,n=l.io.cucumber.messages.GherkinDocument.Feature.Scenario.verify(e.scenario))return”scenario.“+n}return null},e.fromObject=function(e){if(e instanceof l.io.cucumber.messages.GherkinDocument.Feature.FeatureChild)return e;var t=new l.io.cucumber.messages.GherkinDocument.Feature.FeatureChild;if(null!=e.rule){if(”object“!=typeof e.rule)throw TypeError(”.io.cucumber.messages.GherkinDocument.Feature.FeatureChild.rule: object expected“);t.rule=l.io.cucumber.messages.GherkinDocument.Feature.FeatureChild.Rule.fromObject(e.rule)}if(null!=e.background){if(”object“!=typeof e.background)throw TypeError(”.io.cucumber.messages.GherkinDocument.Feature.FeatureChild.background: object expected“);t.background=l.io.cucumber.messages.GherkinDocument.Feature.Background.fromObject(e.background)}if(null!=e.scenario){if(”object“!=typeof e.scenario)throw TypeError(”.io.cucumber.messages.GherkinDocument.Feature.FeatureChild.scenario: object expected“);t.scenario=l.io.cucumber.messages.GherkinDocument.Feature.Scenario.fromObject(e.scenario)}return t},e.toObject=function(e,t){t||(t={});var n={};return null!=e.rule&&e.hasOwnProperty(”rule“)&&(n.rule=l.io.cucumber.messages.GherkinDocument.Feature.FeatureChild.Rule.toObject(e.rule,t),t.oneofs&&(n.value=”rule“)),null!=e.background&&e.hasOwnProperty(”background“)&&(n.background=l.io.cucumber.messages.GherkinDocument.Feature.Background.toObject(e.background,t),t.oneofs&&(n.value=”background“)),null!=e.scenario&&e.hasOwnProperty(”scenario“)&&(n.scenario=l.io.cucumber.messages.GherkinDocument.Feature.Scenario.toObject(e.scenario,t),t.oneofs&&(n.value=”scenario“)),n},e.prototype.toJSON=function(){return this.constructor.toObject(this,o.util.toJSONOptions)},e.Rule=function(){function e(e){if(this.children=[],e)for(var t=Object.keys(e),n=0;n]&&(this[t]=e[t])}return e.prototype.location=null,e.prototype.keyword=”“,e.prototype.name=”“,e.prototype.description=”“,e.prototype.children=u.emptyArray,e.prototype.id=”“,e.create=function(t){return new e(t)},e.encode=function(e,t){if(t||(t=s.create()),null!=e.location&&Object.hasOwnProperty.call(e,”location“)&&l.io.cucumber.messages.Location.encode(e.location,t.uint32(10).fork()).ldelim(),null!=e.keyword&&Object.hasOwnProperty.call(e,”keyword“)&&t.uint32(18).string(e.keyword),null!=e.name&&Object.hasOwnProperty.call(e,”name“)&&t.uint32(26).string(e.name),null!=e.description&&Object.hasOwnProperty.call(e,”description“)&&t.uint32(34).string(e.description),null!=e.children&&e.children.length)for(var n=0;n,t.uint32(42).fork()).ldelim();return null!=e.id&&Object.hasOwnProperty.call(e,”id“)&&t.uint32(50).string(e.id),t},e.encodeDelimited=function(e,t){return this.encode(e,t).ldelim()},e.decode=function(e,t){e instanceof c||(e=c.create(e));for(var n=void 0===t?e.len:e.pos+t,r=new l.io.cucumber.messages.GherkinDocument.Feature.FeatureChild.Rule;e.pos<n;){var i=e.uint32();switch(i>>>3){case 1:r.location=l.io.cucumber.messages.Location.decode(e,e.uint32());break;case 2:r.keyword=e.string();break;case 3:r.name=e.string();break;case 4:r.description=e.string();break;case 5:r.children&&r.children.length||(r.children=[]),r.children.push(l.io.cucumber.messages.GherkinDocument.Feature.FeatureChild.RuleChild.decode(e,e.uint32()));break;case 6:r.id=e.string();break;default:e.skipType(7&i)}}return r},e.decodeDelimited=function(e){return e instanceof c||(e=new c(e)),this.decode(e,e.uint32())},e.verify=function(e){if(”object“!=typeof e||null===e)return”object expected“;if(null!=e.location&&e.hasOwnProperty(”location“)&&(n=l.io.cucumber.messages.Location.verify(e.location)))return”location.“+n;if(null!=e.keyword&&e.hasOwnProperty(”keyword“)&&!u.isString(e.keyword))return”keyword: string expected“;if(null!=e.name&&e.hasOwnProperty(”name“)&&!u.isString(e.name))return”name: string expected“;if(null!=e.description&&e.hasOwnProperty(”description“)&&!u.isString(e.description))return”description: string expected“;if(null!=e.children&&e.hasOwnProperty(”children“)){if(!Array.isArray(e.children))return”children: array expected“;for(var t=0;t<e.children.length;++t){var n;if(n=l.io.cucumber.messages.GherkinDocument.Feature.FeatureChild.RuleChild.verify(e.children))return”children.“+n}}return null!=e.id&&e.hasOwnProperty(”id“)&&!u.isString(e.id)?”id: string expected“:null},e.fromObject=function(e){if(e instanceof l.io.cucumber.messages.GherkinDocument.Feature.FeatureChild.Rule)return e;var t=new l.io.cucumber.messages.GherkinDocument.Feature.FeatureChild.Rule;if(null!=e.location){if(”object“!=typeof e.location)throw TypeError(”.io.cucumber.messages.GherkinDocument.Feature.FeatureChild.Rule.location: object expected“);t.location=l.io.cucumber.messages.Location.fromObject(e.location)}if(null!=e.keyword&&(t.keyword=String(e.keyword)),null!=e.name&&(t.name=String(e.name)),null!=e.description&&(t.description=String(e.description)),e.children){if(!Array.isArray(e.children))throw TypeError(”.io.cucumber.messages.GherkinDocument.Feature.FeatureChild.Rule.children: array expected“);t.children=[];for(var n=0;n<e.children.length;++n){if(”object“!=typeof e.children)throw TypeError(”.io.cucumber.messages.GherkinDocument.Feature.FeatureChild.Rule.children: object expected“);t.children=l.io.cucumber.messages.GherkinDocument.Feature.FeatureChild.RuleChild.fromObject(e.children)}}return null!=e.id&&(t.id=String(e.id)),t},e.toObject=function(e,t){t||(t={});var n={};if((t.arrays||t.defaults)&&(n.children=[]),t.defaults&&(n.location=null,n.keyword=”“,n.name=”“,n.description=”“,n.id=”“),null!=e.location&&e.hasOwnProperty(”location“)&&(n.location=l.io.cucumber.messages.Location.toObject(e.location,t)),null!=e.keyword&&e.hasOwnProperty(”keyword“)&&(n.keyword=e.keyword),null!=e.name&&e.hasOwnProperty(”name“)&&(n.name=e.name),null!=e.description&&e.hasOwnProperty(”description“)&&(n.description=e.description),e.children&&e.children.length){n.children=;for(var r=0;r=l.io.cucumber.messages.GherkinDocument.Feature.FeatureChild.RuleChild.toObject(e.children,t)}return null!=e.id&&e.hasOwnProperty(”id“)&&(n.id=e.id),n},e.prototype.toJSON=function(){return this.constructor.toObject(this,o.util.toJSONOptions)},e}(),e.RuleChild=function(){function e(e){if(e)for(var t=Object.keys(e),n=0;n]&&(this[t]=e[t])}var t;return e.prototype.background=null,e.prototype.scenario=null,Object.defineProperty(e.prototype,”value“,{get:u.oneOfGetter(t=),set:u.oneOfSetter(t)}),e.create=function(t){return new e(t)},e.encode=function(e,t){return t||(t=s.create()),null!=e.background&&Object.hasOwnProperty.call(e,”background“)&&l.io.cucumber.messages.GherkinDocument.Feature.Background.encode(e.background,t.uint32(10).fork()).ldelim(),null!=e.scenario&&Object.hasOwnProperty.call(e,”scenario“)&&l.io.cucumber.messages.GherkinDocument.Feature.Scenario.encode(e.scenario,t.uint32(18).fork()).ldelim(),t},e.encodeDelimited=function(e,t){return this.encode(e,t).ldelim()},e.decode=function(e,t){e instanceof c||(e=c.create(e));for(var n=void 0===t?e.len:e.pos+t,r=new l.io.cucumber.messages.GherkinDocument.Feature.FeatureChild.RuleChild;e.pos<n;){var i=e.uint32();switch(i>>>3){case 1:r.background=l.io.cucumber.messages.GherkinDocument.Feature.Background.decode(e,e.uint32());break;case 2:r.scenario=l.io.cucumber.messages.GherkinDocument.Feature.Scenario.decode(e,e.uint32());break;default:e.skipType(7&i)}}return r},e.decodeDelimited=function(e){return e instanceof c||(e=new c(e)),this.decode(e,e.uint32())},e.verify=function(e){if(”object“!=typeof e||null===e)return”object expected“;var t={};if(null!=e.background&&e.hasOwnProperty(”background“)&&(t.value=1,n=l.io.cucumber.messages.GherkinDocument.Feature.Background.verify(e.background)))return”background.“+n;if(null!=e.scenario&&e.hasOwnProperty(”scenario“)){if(1===t.value)return”value: multiple values“;var n;if(t.value=1,n=l.io.cucumber.messages.GherkinDocument.Feature.Scenario.verify(e.scenario))return”scenario.“+n}return null},e.fromObject=function(e){if(e instanceof l.io.cucumber.messages.GherkinDocument.Feature.FeatureChild.RuleChild)return e;var t=new l.io.cucumber.messages.GherkinDocument.Feature.FeatureChild.RuleChild;if(null!=e.background){if(”object“!=typeof e.background)throw TypeError(”.io.cucumber.messages.GherkinDocument.Feature.FeatureChild.RuleChild.background: object expected“);t.background=l.io.cucumber.messages.GherkinDocument.Feature.Background.fromObject(e.background)}if(null!=e.scenario){if(”object“!=typeof e.scenario)throw TypeError(”.io.cucumber.messages.GherkinDocument.Feature.FeatureChild.RuleChild.scenario: object expected“);t.scenario=l.io.cucumber.messages.GherkinDocument.Feature.Scenario.fromObject(e.scenario)}return t},e.toObject=function(e,t){t||(t={});var n={};return null!=e.background&&e.hasOwnProperty(”background“)&&(n.background=l.io.cucumber.messages.GherkinDocument.Feature.Background.toObject(e.background,t),t.oneofs&&(n.value=”background“)),null!=e.scenario&&e.hasOwnProperty(”scenario“)&&(n.scenario=l.io.cucumber.messages.GherkinDocument.Feature.Scenario.toObject(e.scenario,t),t.oneofs&&(n.value=”scenario“)),n},e.prototype.toJSON=function(){return this.constructor.toObject(this,o.util.toJSONOptions)},e}(),e}(),e.Background=function(){function e(e){if(this.steps=[],e)for(var t=Object.keys(e),n=0;n]&&(this[t]=e[t])}return e.prototype.location=null,e.prototype.keyword=”“,e.prototype.name=”“,e.prototype.description=”“,e.prototype.steps=u.emptyArray,e.prototype.id=”“,e.create=function(t){return new e(t)},e.encode=function(e,t){if(t||(t=s.create()),null!=e.location&&Object.hasOwnProperty.call(e,”location“)&&l.io.cucumber.messages.Location.encode(e.location,t.uint32(10).fork()).ldelim(),null!=e.keyword&&Object.hasOwnProperty.call(e,”keyword“)&&t.uint32(18).string(e.keyword),null!=e.name&&Object.hasOwnProperty.call(e,”name“)&&t.uint32(26).string(e.name),null!=e.description&&Object.hasOwnProperty.call(e,”description“)&&t.uint32(34).string(e.description),null!=e.steps&&e.steps.length)for(var n=0;n,t.uint32(42).fork()).ldelim();return null!=e.id&&Object.hasOwnProperty.call(e,”id“)&&t.uint32(50).string(e.id),t},e.encodeDelimited=function(e,t){return this.encode(e,t).ldelim()},e.decode=function(e,t){e instanceof c||(e=c.create(e));for(var n=void 0===t?e.len:e.pos+t,r=new l.io.cucumber.messages.GherkinDocument.Feature.Background;e.pos<n;){var i=e.uint32();switch(i>>>3){case 1:r.location=l.io.cucumber.messages.Location.decode(e,e.uint32());break;case 2:r.keyword=e.string();break;case 3:r.name=e.string();break;case 4:r.description=e.string();break;case 5:r.steps&&r.steps.length||(r.steps=[]),r.steps.push(l.io.cucumber.messages.GherkinDocument.Feature.Step.decode(e,e.uint32()));break;case 6:r.id=e.string();break;default:e.skipType(7&i)}}return r},e.decodeDelimited=function(e){return e instanceof c||(e=new c(e)),this.decode(e,e.uint32())},e.verify=function(e){if(”object“!=typeof e||null===e)return”object expected“;if(null!=e.location&&e.hasOwnProperty(”location“)&&(n=l.io.cucumber.messages.Location.verify(e.location)))return”location.“+n;if(null!=e.keyword&&e.hasOwnProperty(”keyword“)&&!u.isString(e.keyword))return”keyword: string expected“;if(null!=e.name&&e.hasOwnProperty(”name“)&&!u.isString(e.name))return”name: string expected“;if(null!=e.description&&e.hasOwnProperty(”description“)&&!u.isString(e.description))return”description: string expected“;if(null!=e.steps&&e.hasOwnProperty(”steps“)){if(!Array.isArray(e.steps))return”steps: array expected“;for(var t=0;t<e.steps.length;++t){var n;if(n=l.io.cucumber.messages.GherkinDocument.Feature.Step.verify(e.steps))return”steps.“+n}}return null!=e.id&&e.hasOwnProperty(”id“)&&!u.isString(e.id)?”id: string expected“:null},e.fromObject=function(e){if(e instanceof l.io.cucumber.messages.GherkinDocument.Feature.Background)return e;var t=new l.io.cucumber.messages.GherkinDocument.Feature.Background;if(null!=e.location){if(”object“!=typeof e.location)throw TypeError(”.io.cucumber.messages.GherkinDocument.Feature.Background.location: object expected“);t.location=l.io.cucumber.messages.Location.fromObject(e.location)}if(null!=e.keyword&&(t.keyword=String(e.keyword)),null!=e.name&&(t.name=String(e.name)),null!=e.description&&(t.description=String(e.description)),e.steps){if(!Array.isArray(e.steps))throw TypeError(”.io.cucumber.messages.GherkinDocument.Feature.Background.steps: array expected“);t.steps=[];for(var n=0;n<e.steps.length;++n){if(”object“!=typeof e.steps)throw TypeError(”.io.cucumber.messages.GherkinDocument.Feature.Background.steps: object expected“);t.steps=l.io.cucumber.messages.GherkinDocument.Feature.Step.fromObject(e.steps)}}return null!=e.id&&(t.id=String(e.id)),t},e.toObject=function(e,t){t||(t={});var n={};if((t.arrays||t.defaults)&&(n.steps=[]),t.defaults&&(n.location=null,n.keyword=”“,n.name=”“,n.description=”“,n.id=”“),null!=e.location&&e.hasOwnProperty(”location“)&&(n.location=l.io.cucumber.messages.Location.toObject(e.location,t)),null!=e.keyword&&e.hasOwnProperty(”keyword“)&&(n.keyword=e.keyword),null!=e.name&&e.hasOwnProperty(”name“)&&(n.name=e.name),null!=e.description&&e.hasOwnProperty(”description“)&&(n.description=e.description),e.steps&&e.steps.length){n.steps=;for(var r=0;r=l.io.cucumber.messages.GherkinDocument.Feature.Step.toObject(e.steps,t)}return null!=e.id&&e.hasOwnProperty(”id“)&&(n.id=e.id),n},e.prototype.toJSON=function(){return this.constructor.toObject(this,o.util.toJSONOptions)},e}(),e.Scenario=function(){function e(e){if(this.tags=[],this.steps=,this.examples=[],e)for(var t=Object.keys(e),n=0;n]&&(this[t]=e[t])}return e.prototype.location=null,e.prototype.tags=u.emptyArray,e.prototype.keyword=”“,e.prototype.name=”“,e.prototype.description=”“,e.prototype.steps=u.emptyArray,e.prototype.examples=u.emptyArray,e.prototype.id=”“,e.create=function(t){return new e(t)},e.encode=function(e,t){if(t||(t=s.create()),null!=e.location&&Object.hasOwnProperty.call(e,”location“)&&l.io.cucumber.messages.Location.encode(e.location,t.uint32(10).fork()).ldelim(),null!=e.tags&&e.tags.length)for(var n=0;n,t.uint32(18).fork()).ldelim();if(null!=e.keyword&&Object.hasOwnProperty.call(e,”keyword“)&&t.uint32(26).string(e.keyword),null!=e.name&&Object.hasOwnProperty.call(e,”name“)&&t.uint32(34).string(e.name),null!=e.description&&Object.hasOwnProperty.call(e,”description“)&&t.uint32(42).string(e.description),null!=e.steps&&e.steps.length)for(n=0;n,t.uint32(50).fork()).ldelim();if(null!=e.examples&&e.examples.length)for(n=0;n,t.uint32(58).fork()).ldelim();return null!=e.id&&Object.hasOwnProperty.call(e,”id“)&&t.uint32(66).string(e.id),t},e.encodeDelimited=function(e,t){return this.encode(e,t).ldelim()},e.decode=function(e,t){e instanceof c||(e=c.create(e));for(var n=void 0===t?e.len:e.pos+t,r=new l.io.cucumber.messages.GherkinDocument.Feature.Scenario;e.pos<n;){var i=e.uint32();switch(i>>>3){case 1:r.location=l.io.cucumber.messages.Location.decode(e,e.uint32());break;case 2:r.tags&&r.tags.length||(r.tags=[]),r.tags.push(l.io.cucumber.messages.GherkinDocument.Feature.Tag.decode(e,e.uint32()));break;case 3:r.keyword=e.string();break;case 4:r.name=e.string();break;case 5:r.description=e.string();break;case 6:r.steps&&r.steps.length||(r.steps=[]),r.steps.push(l.io.cucumber.messages.GherkinDocument.Feature.Step.decode(e,e.uint32()));break;case 7:r.examples&&r.examples.length||(r.examples=[]),r.examples.push(l.io.cucumber.messages.GherkinDocument.Feature.Scenario.Examples.decode(e,e.uint32()));break;case 8:r.id=e.string();break;default:e.skipType(7&i)}}return r},e.decodeDelimited=function(e){return e instanceof c||(e=new c(e)),this.decode(e,e.uint32())},e.verify=function(e){if(”object“!=typeof e||null===e)return”object expected“;if(null!=e.location&&e.hasOwnProperty(”location“)&&(n=l.io.cucumber.messages.Location.verify(e.location)))return”location.“+n;if(null!=e.tags&&e.hasOwnProperty(”tags“)){if(!Array.isArray(e.tags))return”tags: array expected“;for(var t=0;t))return”tags.“+n}if(null!=e.keyword&&e.hasOwnProperty(”keyword“)&&!u.isString(e.keyword))return”keyword: string expected“;if(null!=e.name&&e.hasOwnProperty(”name“)&&!u.isString(e.name))return”name: string expected“;if(null!=e.description&&e.hasOwnProperty(”description“)&&!u.isString(e.description))return”description: string expected“;if(null!=e.steps&&e.hasOwnProperty(”steps“)){if(!Array.isArray(e.steps))return”steps: array expected“;for(t=0;t))return”steps.“+n}if(null!=e.examples&&e.hasOwnProperty(”examples“)){if(!Array.isArray(e.examples))return”examples: array expected“;for(t=0;t<e.examples.length;++t){var n;if(n=l.io.cucumber.messages.GherkinDocument.Feature.Scenario.Examples.verify(e.examples))return”examples.“+n}}return null!=e.id&&e.hasOwnProperty(”id“)&&!u.isString(e.id)?”id: string expected“:null},e.fromObject=function(e){if(e instanceof l.io.cucumber.messages.GherkinDocument.Feature.Scenario)return e;var t=new l.io.cucumber.messages.GherkinDocument.Feature.Scenario;if(null!=e.location){if(”object“!=typeof e.location)throw TypeError(”.io.cucumber.messages.GherkinDocument.Feature.Scenario.location: object expected“);t.location=l.io.cucumber.messages.Location.fromObject(e.location)}if(e.tags){if(!Array.isArray(e.tags))throw TypeError(”.io.cucumber.messages.GherkinDocument.Feature.Scenario.tags: array expected“);t.tags=[];for(var n=0;n<e.tags.length;++n){if(”object“!=typeof e.tags)throw TypeError(”.io.cucumber.messages.GherkinDocument.Feature.Scenario.tags: object expected“);t.tags=l.io.cucumber.messages.GherkinDocument.Feature.Tag.fromObject(e.tags)}}if(null!=e.keyword&&(t.keyword=String(e.keyword)),null!=e.name&&(t.name=String(e.name)),null!=e.description&&(t.description=String(e.description)),e.steps){if(!Array.isArray(e.steps))throw TypeError(”.io.cucumber.messages.GherkinDocument.Feature.Scenario.steps: array expected“);for(t.steps=[],n=0;n<e.steps.length;++n){if(”object“!=typeof e.steps)throw TypeError(”.io.cucumber.messages.GherkinDocument.Feature.Scenario.steps: object expected“);t.steps=l.io.cucumber.messages.GherkinDocument.Feature.Step.fromObject(e.steps)}}if(e.examples){if(!Array.isArray(e.examples))throw TypeError(”.io.cucumber.messages.GherkinDocument.Feature.Scenario.examples: array expected“);for(t.examples=[],n=0;n<e.examples.length;++n){if(”object“!=typeof e.examples)throw TypeError(”.io.cucumber.messages.GherkinDocument.Feature.Scenario.examples: object expected“);t.examples=l.io.cucumber.messages.GherkinDocument.Feature.Scenario.Examples.fromObject(e.examples)}}return null!=e.id&&(t.id=String(e.id)),t},e.toObject=function(e,t){t||(t={});var n={};if((t.arrays||t.defaults)&&(n.tags=[],n.steps=,n.examples=[]),t.defaults&&(n.location=null,n.keyword=”“,n.name=”“,n.description=”“,n.id=”“),null!=e.location&&e.hasOwnProperty(”location“)&&(n.location=l.io.cucumber.messages.Location.toObject(e.location,t)),e.tags&&e.tags.length){n.tags=;for(var r=0;r=l.io.cucumber.messages.GherkinDocument.Feature.Tag.toObject(e.tags,t)}if(null!=e.keyword&&e.hasOwnProperty(”keyword“)&&(n.keyword=e.keyword),null!=e.name&&e.hasOwnProperty(”name“)&&(n.name=e.name),null!=e.description&&e.hasOwnProperty(”description“)&&(n.description=e.description),e.steps&&e.steps.length)for(n.steps=[],r=0;r=l.io.cucumber.messages.GherkinDocument.Feature.Step.toObject(e.steps,t);if(e.examples&&e.examples.length)for(n.examples=[],r=0;r=l.io.cucumber.messages.GherkinDocument.Feature.Scenario.Examples.toObject(e.examples,t);return null!=e.id&&e.hasOwnProperty(”id“)&&(n.id=e.id),n},e.prototype.toJSON=function(){return this.constructor.toObject(this,o.util.toJSONOptions)},e.Examples=function(){function e(e){if(this.tags=[],this.tableBody=,e)for(var t=Object.keys(e),n=0;n]&&(this[t]=e[t])}return e.prototype.location=null,e.prototype.tags=u.emptyArray,e.prototype.keyword=”“,e.prototype.name=”“,e.prototype.description=”“,e.prototype.tableHeader=null,e.prototype.tableBody=u.emptyArray,e.prototype.id=”“,e.create=function(t){return new e(t)},e.encode=function(e,t){if(t||(t=s.create()),null!=e.location&&Object.hasOwnProperty.call(e,”location“)&&l.io.cucumber.messages.Location.encode(e.location,t.uint32(10).fork()).ldelim(),null!=e.tags&&e.tags.length)for(var n=0;n,t.uint32(18).fork()).ldelim();if(null!=e.keyword&&Object.hasOwnProperty.call(e,”keyword“)&&t.uint32(26).string(e.keyword),null!=e.name&&Object.hasOwnProperty.call(e,”name“)&&t.uint32(34).string(e.name),null!=e.description&&Object.hasOwnProperty.call(e,”description“)&&t.uint32(42).string(e.description),null!=e.tableHeader&&Object.hasOwnProperty.call(e,”tableHeader“)&&l.io.cucumber.messages.GherkinDocument.Feature.TableRow.encode(e.tableHeader,t.uint32(50).fork()).ldelim(),null!=e.tableBody&&e.tableBody.length)for(n=0;n,t.uint32(58).fork()).ldelim();return null!=e.id&&Object.hasOwnProperty.call(e,”id“)&&t.uint32(66).string(e.id),t},e.encodeDelimited=function(e,t){return this.encode(e,t).ldelim()},e.decode=function(e,t){e instanceof c||(e=c.create(e));for(var n=void 0===t?e.len:e.pos+t,r=new l.io.cucumber.messages.GherkinDocument.Feature.Scenario.Examples;e.pos<n;){var i=e.uint32();switch(i>>>3){case 1:r.location=l.io.cucumber.messages.Location.decode(e,e.uint32());break;case 2:r.tags&&r.tags.length||(r.tags=[]),r.tags.push(l.io.cucumber.messages.GherkinDocument.Feature.Tag.decode(e,e.uint32()));break;case 3:r.keyword=e.string();break;case 4:r.name=e.string();break;case 5:r.description=e.string();break;case 6:r.tableHeader=l.io.cucumber.messages.GherkinDocument.Feature.TableRow.decode(e,e.uint32());break;case 7:r.tableBody&&r.tableBody.length||(r.tableBody=[]),r.tableBody.push(l.io.cucumber.messages.GherkinDocument.Feature.TableRow.decode(e,e.uint32()));break;case 8:r.id=e.string();break;default:e.skipType(7&i)}}return r},e.decodeDelimited=function(e){return e instanceof c||(e=new c(e)),this.decode(e,e.uint32())},e.verify=function(e){if(”object“!=typeof e||null===e)return”object expected“;if(null!=e.location&&e.hasOwnProperty(”location“)&&(n=l.io.cucumber.messages.Location.verify(e.location)))return”location.“+n;if(null!=e.tags&&e.hasOwnProperty(”tags“)){if(!Array.isArray(e.tags))return”tags: array expected“;for(var t=0;t))return”tags.“+n}if(null!=e.keyword&&e.hasOwnProperty(”keyword“)&&!u.isString(e.keyword))return”keyword: string expected“;if(null!=e.name&&e.hasOwnProperty(”name“)&&!u.isString(e.name))return”name: string expected“;if(null!=e.description&&e.hasOwnProperty(”description“)&&!u.isString(e.description))return”description: string expected“;if(null!=e.tableHeader&&e.hasOwnProperty(”tableHeader“)&&(n=l.io.cucumber.messages.GherkinDocument.Feature.TableRow.verify(e.tableHeader)))return”tableHeader.“+n;if(null!=e.tableBody&&e.hasOwnProperty(”tableBody“)){if(!Array.isArray(e.tableBody))return”tableBody: array expected“;for(t=0;t<e.tableBody.length;++t){var n;if(n=l.io.cucumber.messages.GherkinDocument.Feature.TableRow.verify(e.tableBody))return”tableBody.“+n}}return null!=e.id&&e.hasOwnProperty(”id“)&&!u.isString(e.id)?”id: string expected“:null},e.fromObject=function(e){if(e instanceof l.io.cucumber.messages.GherkinDocument.Feature.Scenario.Examples)return e;var t=new l.io.cucumber.messages.GherkinDocument.Feature.Scenario.Examples;if(null!=e.location){if(”object“!=typeof e.location)throw TypeError(”.io.cucumber.messages.GherkinDocument.Feature.Scenario.Examples.location: object expected“);t.location=l.io.cucumber.messages.Location.fromObject(e.location)}if(e.tags){if(!Array.isArray(e.tags))throw TypeError(”.io.cucumber.messages.GherkinDocument.Feature.Scenario.Examples.tags: array expected“);t.tags=[];for(var n=0;n<e.tags.length;++n){if(”object“!=typeof e.tags)throw TypeError(”.io.cucumber.messages.GherkinDocument.Feature.Scenario.Examples.tags: object expected“);t.tags=l.io.cucumber.messages.GherkinDocument.Feature.Tag.fromObject(e.tags)}}if(null!=e.keyword&&(t.keyword=String(e.keyword)),null!=e.name&&(t.name=String(e.name)),null!=e.description&&(t.description=String(e.description)),null!=e.tableHeader){if(”object“!=typeof e.tableHeader)throw TypeError(”.io.cucumber.messages.GherkinDocument.Feature.Scenario.Examples.tableHeader: object expected“);t.tableHeader=l.io.cucumber.messages.GherkinDocument.Feature.TableRow.fromObject(e.tableHeader)}if(e.tableBody){if(!Array.isArray(e.tableBody))throw TypeError(”.io.cucumber.messages.GherkinDocument.Feature.Scenario.Examples.tableBody: array expected“);for(t.tableBody=[],n=0;n<e.tableBody.length;++n){if(”object“!=typeof e.tableBody)throw TypeError(”.io.cucumber.messages.GherkinDocument.Feature.Scenario.Examples.tableBody: object expected“);t.tableBody=l.io.cucumber.messages.GherkinDocument.Feature.TableRow.fromObject(e.tableBody)}}return null!=e.id&&(t.id=String(e.id)),t},e.toObject=function(e,t){t||(t={});var n={};if((t.arrays||t.defaults)&&(n.tags=[],n.tableBody=),t.defaults&&(n.location=null,n.keyword=”“,n.name=”“,n.description=”“,n.tableHeader=null,n.id=”“),null!=e.location&&e.hasOwnProperty(”location“)&&(n.location=l.io.cucumber.messages.Location.toObject(e.location,t)),e.tags&&e.tags.length){n.tags=[];for(var r=0;r=l.io.cucumber.messages.GherkinDocument.Feature.Tag.toObject(e.tags,t)}if(null!=e.keyword&&e.hasOwnProperty(”keyword“)&&(n.keyword=e.keyword),null!=e.name&&e.hasOwnProperty(”name“)&&(n.name=e.name),null!=e.description&&e.hasOwnProperty(”description“)&&(n.description=e.description),null!=e.tableHeader&&e.hasOwnProperty(”tableHeader“)&&(n.tableHeader=l.io.cucumber.messages.GherkinDocument.Feature.TableRow.toObject(e.tableHeader,t)),e.tableBody&&e.tableBody.length)for(n.tableBody=[],r=0;r=l.io.cucumber.messages.GherkinDocument.Feature.TableRow.toObject(e.tableBody,t);return null!=e.id&&e.hasOwnProperty(”id“)&&(n.id=e.id),n},e.prototype.toJSON=function(){return this.constructor.toObject(this,o.util.toJSONOptions)},e}(),e}(),e.TableRow=function(){function e(e){if(this.cells=[],e)for(var t=Object.keys(e),n=0;n]&&(this[t]=e[t])}return e.prototype.location=null,e.prototype.cells=u.emptyArray,e.prototype.id=”“,e.create=function(t){return new e(t)},e.encode=function(e,t){if(t||(t=s.create()),null!=e.location&&Object.hasOwnProperty.call(e,”location“)&&l.io.cucumber.messages.Location.encode(e.location,t.uint32(10).fork()).ldelim(),null!=e.cells&&e.cells.length)for(var n=0;n,t.uint32(18).fork()).ldelim();return null!=e.id&&Object.hasOwnProperty.call(e,”id“)&&t.uint32(26).string(e.id),t},e.encodeDelimited=function(e,t){return this.encode(e,t).ldelim()},e.decode=function(e,t){e instanceof c||(e=c.create(e));for(var n=void 0===t?e.len:e.pos+t,r=new l.io.cucumber.messages.GherkinDocument.Feature.TableRow;e.pos<n;){var i=e.uint32();switch(i>>>3){case 1:r.location=l.io.cucumber.messages.Location.decode(e,e.uint32());break;case 2:r.cells&&r.cells.length||(r.cells=[]),r.cells.push(l.io.cucumber.messages.GherkinDocument.Feature.TableRow.TableCell.decode(e,e.uint32()));break;case 3:r.id=e.string();break;default:e.skipType(7&i)}}return r},e.decodeDelimited=function(e){return e instanceof c||(e=new c(e)),this.decode(e,e.uint32())},e.verify=function(e){if(”object“!=typeof e||null===e)return”object expected“;if(null!=e.location&&e.hasOwnProperty(”location“)&&(n=l.io.cucumber.messages.Location.verify(e.location)))return”location.“+n;if(null!=e.cells&&e.hasOwnProperty(”cells“)){if(!Array.isArray(e.cells))return”cells: array expected“;for(var t=0;t<e.cells.length;++t){var n;if(n=l.io.cucumber.messages.GherkinDocument.Feature.TableRow.TableCell.verify(e.cells))return”cells.“+n}}return null!=e.id&&e.hasOwnProperty(”id“)&&!u.isString(e.id)?”id: string expected“:null},e.fromObject=function(e){if(e instanceof l.io.cucumber.messages.GherkinDocument.Feature.TableRow)return e;var t=new l.io.cucumber.messages.GherkinDocument.Feature.TableRow;if(null!=e.location){if(”object“!=typeof e.location)throw TypeError(”.io.cucumber.messages.GherkinDocument.Feature.TableRow.location: object expected“);t.location=l.io.cucumber.messages.Location.fromObject(e.location)}if(e.cells){if(!Array.isArray(e.cells))throw TypeError(”.io.cucumber.messages.GherkinDocument.Feature.TableRow.cells: array expected“);t.cells=[];for(var n=0;n<e.cells.length;++n){if(”object“!=typeof e.cells)throw TypeError(”.io.cucumber.messages.GherkinDocument.Feature.TableRow.cells: object expected“);t.cells=l.io.cucumber.messages.GherkinDocument.Feature.TableRow.TableCell.fromObject(e.cells)}}return null!=e.id&&(t.id=String(e.id)),t},e.toObject=function(e,t){t||(t={});var n={};if((t.arrays||t.defaults)&&(n.cells=[]),t.defaults&&(n.location=null,n.id=”“),null!=e.location&&e.hasOwnProperty(”location“)&&(n.location=l.io.cucumber.messages.Location.toObject(e.location,t)),e.cells&&e.cells.length){n.cells=;for(var r=0;r=l.io.cucumber.messages.GherkinDocument.Feature.TableRow.TableCell.toObject(e.cells,t)}return null!=e.id&&e.hasOwnProperty(”id“)&&(n.id=e.id),n},e.prototype.toJSON=function(){return this.constructor.toObject(this,o.util.toJSONOptions)},e.TableCell=function(){function e(e){if(e)for(var t=Object.keys(e),n=0;n]&&(this[t]=e[t])}return e.prototype.location=null,e.prototype.value=”“,e.create=function(t){return new e(t)},e.encode=function(e,t){return t||(t=s.create()),null!=e.location&&Object.hasOwnProperty.call(e,”location“)&&l.io.cucumber.messages.Location.encode(e.location,t.uint32(10).fork()).ldelim(),null!=e.value&&Object.hasOwnProperty.call(e,”value“)&&t.uint32(18).string(e.value),t},e.encodeDelimited=function(e,t){return this.encode(e,t).ldelim()},e.decode=function(e,t){e instanceof c||(e=c.create(e));for(var n=void 0===t?e.len:e.pos+t,r=new l.io.cucumber.messages.GherkinDocument.Feature.TableRow.TableCell;e.pos<n;){var i=e.uint32();switch(i>>>3){case 1:r.location=l.io.cucumber.messages.Location.decode(e,e.uint32());break;case 2:r.value=e.string();break;default:e.skipType(7&i)}}return r},e.decodeDelimited=function(e){return e instanceof c||(e=new c(e)),this.decode(e,e.uint32())},e.verify=function(e){if(”object“!=typeof e||null===e)return”object expected“;if(null!=e.location&&e.hasOwnProperty(”location“)){var t=l.io.cucumber.messages.Location.verify(e.location);if(t)return”location.“+t}return null!=e.value&&e.hasOwnProperty(”value“)&&!u.isString(e.value)?”value: string expected“:null},e.fromObject=function(e){if(e instanceof l.io.cucumber.messages.GherkinDocument.Feature.TableRow.TableCell)return e;var t=new l.io.cucumber.messages.GherkinDocument.Feature.TableRow.TableCell;if(null!=e.location){if(”object“!=typeof e.location)throw TypeError(”.io.cucumber.messages.GherkinDocument.Feature.TableRow.TableCell.location: object expected“);t.location=l.io.cucumber.messages.Location.fromObject(e.location)}return null!=e.value&&(t.value=String(e.value)),t},e.toObject=function(e,t){t||(t={});var n={};return t.defaults&&(n.location=null,n.value=”“),null!=e.location&&e.hasOwnProperty(”location“)&&(n.location=l.io.cucumber.messages.Location.toObject(e.location,t)),null!=e.value&&e.hasOwnProperty(”value“)&&(n.value=e.value),n},e.prototype.toJSON=function(){return this.constructor.toObject(this,o.util.toJSONOptions)},e}(),e}(),e.Step=function(){function e(e){if(e)for(var t=Object.keys(e),n=0;n]&&(this[t]=e[t])}var t;return e.prototype.location=null,e.prototype.keyword=”“,e.prototype.text=”“,e.prototype.docString=null,e.prototype.dataTable=null,e.prototype.id=”“,Object.defineProperty(e.prototype,”argument“,{get:u.oneOfGetter(t=),set:u.oneOfSetter(t)}),e.create=function(t){return new e(t)},e.encode=function(e,t){return t||(t=s.create()),null!=e.location&&Object.hasOwnProperty.call(e,”location“)&&l.io.cucumber.messages.Location.encode(e.location,t.uint32(10).fork()).ldelim(),null!=e.keyword&&Object.hasOwnProperty.call(e,”keyword“)&&t.uint32(18).string(e.keyword),null!=e.text&&Object.hasOwnProperty.call(e,”text“)&&t.uint32(26).string(e.text),null!=e.docString&&Object.hasOwnProperty.call(e,”docString“)&&l.io.cucumber.messages.GherkinDocument.Feature.Step.DocString.encode(e.docString,t.uint32(34).fork()).ldelim(),null!=e.dataTable&&Object.hasOwnProperty.call(e,”dataTable“)&&l.io.cucumber.messages.GherkinDocument.Feature.Step.DataTable.encode(e.dataTable,t.uint32(42).fork()).ldelim(),null!=e.id&&Object.hasOwnProperty.call(e,”id“)&&t.uint32(50).string(e.id),t},e.encodeDelimited=function(e,t){return this.encode(e,t).ldelim()},e.decode=function(e,t){e instanceof c||(e=c.create(e));for(var n=void 0===t?e.len:e.pos+t,r=new l.io.cucumber.messages.GherkinDocument.Feature.Step;e.pos<n;){var i=e.uint32();switch(i>>>3){case 1:r.location=l.io.cucumber.messages.Location.decode(e,e.uint32());break;case 2:r.keyword=e.string();break;case 3:r.text=e.string();break;case 4:r.docString=l.io.cucumber.messages.GherkinDocument.Feature.Step.DocString.decode(e,e.uint32());break;case 5:r.dataTable=l.io.cucumber.messages.GherkinDocument.Feature.Step.DataTable.decode(e,e.uint32());break;case 6:r.id=e.string();break;default:e.skipType(7&i)}}return r},e.decodeDelimited=function(e){return e instanceof c||(e=new c(e)),this.decode(e,e.uint32())},e.verify=function(e){if(”object“!=typeof e||null===e)return”object expected“;var t={};if(null!=e.location&&e.hasOwnProperty(”location“)&&(n=l.io.cucumber.messages.Location.verify(e.location)))return”location.“+n;if(null!=e.keyword&&e.hasOwnProperty(”keyword“)&&!u.isString(e.keyword))return”keyword: string expected“;if(null!=e.text&&e.hasOwnProperty(”text“)&&!u.isString(e.text))return”text: string expected“;if(null!=e.docString&&e.hasOwnProperty(”docString“)&&(t.argument=1,n=l.io.cucumber.messages.GherkinDocument.Feature.Step.DocString.verify(e.docString)))return”docString.“+n;if(null!=e.dataTable&&e.hasOwnProperty(”dataTable“)){if(1===t.argument)return”argument: multiple values“;var n;if(t.argument=1,n=l.io.cucumber.messages.GherkinDocument.Feature.Step.DataTable.verify(e.dataTable))return”dataTable.“+n}return null!=e.id&&e.hasOwnProperty(”id“)&&!u.isString(e.id)?”id: string expected“:null},e.fromObject=function(e){if(e instanceof l.io.cucumber.messages.GherkinDocument.Feature.Step)return e;var t=new l.io.cucumber.messages.GherkinDocument.Feature.Step;if(null!=e.location){if(”object“!=typeof e.location)throw TypeError(”.io.cucumber.messages.GherkinDocument.Feature.Step.location: object expected“);t.location=l.io.cucumber.messages.Location.fromObject(e.location)}if(null!=e.keyword&&(t.keyword=String(e.keyword)),null!=e.text&&(t.text=String(e.text)),null!=e.docString){if(”object“!=typeof e.docString)throw TypeError(”.io.cucumber.messages.GherkinDocument.Feature.Step.docString: object expected“);t.docString=l.io.cucumber.messages.GherkinDocument.Feature.Step.DocString.fromObject(e.docString)}if(null!=e.dataTable){if(”object“!=typeof e.dataTable)throw TypeError(”.io.cucumber.messages.GherkinDocument.Feature.Step.dataTable: object expected“);t.dataTable=l.io.cucumber.messages.GherkinDocument.Feature.Step.DataTable.fromObject(e.dataTable)}return null!=e.id&&(t.id=String(e.id)),t},e.toObject=function(e,t){t||(t={});var n={};return t.defaults&&(n.location=null,n.keyword=”“,n.text=”“,n.id=”“),null!=e.location&&e.hasOwnProperty(”location“)&&(n.location=l.io.cucumber.messages.Location.toObject(e.location,t)),null!=e.keyword&&e.hasOwnProperty(”keyword“)&&(n.keyword=e.keyword),null!=e.text&&e.hasOwnProperty(”text“)&&(n.text=e.text),null!=e.docString&&e.hasOwnProperty(”docString“)&&(n.docString=l.io.cucumber.messages.GherkinDocument.Feature.Step.DocString.toObject(e.docString,t),t.oneofs&&(n.argument=”docString“)),null!=e.dataTable&&e.hasOwnProperty(”dataTable“)&&(n.dataTable=l.io.cucumber.messages.GherkinDocument.Feature.Step.DataTable.toObject(e.dataTable,t),t.oneofs&&(n.argument=”dataTable“)),null!=e.id&&e.hasOwnProperty(”id“)&&(n.id=e.id),n},e.prototype.toJSON=function(){return this.constructor.toObject(this,o.util.toJSONOptions)},e.DataTable=function(){function e(e){if(this.rows=[],e)for(var t=Object.keys(e),n=0;n]&&(this[t]=e[t])}return e.prototype.location=null,e.prototype.rows=u.emptyArray,e.create=function(t){return new e(t)},e.encode=function(e,t){if(t||(t=s.create()),null!=e.location&&Object.hasOwnProperty.call(e,”location“)&&l.io.cucumber.messages.Location.encode(e.location,t.uint32(10).fork()).ldelim(),null!=e.rows&&e.rows.length)for(var n=0;n,t.uint32(18).fork()).ldelim();return t},e.encodeDelimited=function(e,t){return this.encode(e,t).ldelim()},e.decode=function(e,t){e instanceof c||(e=c.create(e));for(var n=void 0===t?e.len:e.pos+t,r=new l.io.cucumber.messages.GherkinDocument.Feature.Step.DataTable;e.pos<n;){var i=e.uint32();switch(i>>>3){case 1:r.location=l.io.cucumber.messages.Location.decode(e,e.uint32());break;case 2:r.rows&&r.rows.length||(r.rows=[]),r.rows.push(l.io.cucumber.messages.GherkinDocument.Feature.TableRow.decode(e,e.uint32()));break;default:e.skipType(7&i)}}return r},e.decodeDelimited=function(e){return e instanceof c||(e=new c(e)),this.decode(e,e.uint32())},e.verify=function(e){if(”object“!=typeof e||null===e)return”object expected“;if(null!=e.location&&e.hasOwnProperty(”location“)&&(n=l.io.cucumber.messages.Location.verify(e.location)))return”location.“+n;if(null!=e.rows&&e.hasOwnProperty(”rows“)){if(!Array.isArray(e.rows))return”rows: array expected“;for(var t=0;t<e.rows.length;++t){var n;if(n=l.io.cucumber.messages.GherkinDocument.Feature.TableRow.verify(e.rows))return”rows.“+n}}return null},e.fromObject=function(e){if(e instanceof l.io.cucumber.messages.GherkinDocument.Feature.Step.DataTable)return e;var t=new l.io.cucumber.messages.GherkinDocument.Feature.Step.DataTable;if(null!=e.location){if(”object“!=typeof e.location)throw TypeError(”.io.cucumber.messages.GherkinDocument.Feature.Step.DataTable.location: object expected“);t.location=l.io.cucumber.messages.Location.fromObject(e.location)}if(e.rows){if(!Array.isArray(e.rows))throw TypeError(”.io.cucumber.messages.GherkinDocument.Feature.Step.DataTable.rows: array expected“);t.rows=[];for(var n=0;n<e.rows.length;++n){if(”object“!=typeof e.rows)throw TypeError(”.io.cucumber.messages.GherkinDocument.Feature.Step.DataTable.rows: object expected“);t.rows=l.io.cucumber.messages.GherkinDocument.Feature.TableRow.fromObject(e.rows)}}return t},e.toObject=function(e,t){t||(t={});var n={};if((t.arrays||t.defaults)&&(n.rows=[]),t.defaults&&(n.location=null),null!=e.location&&e.hasOwnProperty(”location“)&&(n.location=l.io.cucumber.messages.Location.toObject(e.location,t)),e.rows&&e.rows.length){n.rows=;for(var r=0;r=l.io.cucumber.messages.GherkinDocument.Feature.TableRow.toObject(e.rows,t)}return n},e.prototype.toJSON=function(){return this.constructor.toObject(this,o.util.toJSONOptions)},e}(),e.DocString=function(){function e(e){if(e)for(var t=Object.keys(e),n=0;n]&&(this[t]=e[t])}return e.prototype.location=null,e.prototype.mediaType=”“,e.prototype.content=”“,e.prototype.delimiter=”“,e.create=function(t){return new e(t)},e.encode=function(e,t){return t||(t=s.create()),null!=e.location&&Object.hasOwnProperty.call(e,”location“)&&l.io.cucumber.messages.Location.encode(e.location,t.uint32(10).fork()).ldelim(),null!=e.mediaType&&Object.hasOwnProperty.call(e,”mediaType“)&&t.uint32(18).string(e.mediaType),null!=e.content&&Object.hasOwnProperty.call(e,”content“)&&t.uint32(26).string(e.content),null!=e.delimiter&&Object.hasOwnProperty.call(e,”delimiter“)&&t.uint32(34).string(e.delimiter),t},e.encodeDelimited=function(e,t){return this.encode(e,t).ldelim()},e.decode=function(e,t){e instanceof c||(e=c.create(e));for(var n=void 0===t?e.len:e.pos+t,r=new l.io.cucumber.messages.GherkinDocument.Feature.Step.DocString;e.pos<n;){var i=e.uint32();switch(i>>>3){case 1:r.location=l.io.cucumber.messages.Location.decode(e,e.uint32());break;case 2:r.mediaType=e.string();break;case 3:r.content=e.string();break;case 4:r.delimiter=e.string();break;default:e.skipType(7&i)}}return r},e.decodeDelimited=function(e){return e instanceof c||(e=new c(e)),this.decode(e,e.uint32())},e.verify=function(e){if(”object“!=typeof e||null===e)return”object expected“;if(null!=e.location&&e.hasOwnProperty(”location“)){var t=l.io.cucumber.messages.Location.verify(e.location);if(t)return”location.“+t}return null!=e.mediaType&&e.hasOwnProperty(”mediaType“)&&!u.isString(e.mediaType)?”mediaType: string expected“:null!=e.content&&e.hasOwnProperty(”content“)&&!u.isString(e.content)?”content: string expected“:null!=e.delimiter&&e.hasOwnProperty(”delimiter“)&&!u.isString(e.delimiter)?”delimiter: string expected“:null},e.fromObject=function(e){if(e instanceof l.io.cucumber.messages.GherkinDocument.Feature.Step.DocString)return e;var t=new l.io.cucumber.messages.GherkinDocument.Feature.Step.DocString;if(null!=e.location){if(”object“!=typeof e.location)throw TypeError(”.io.cucumber.messages.GherkinDocument.Feature.Step.DocString.location: object expected“);t.location=l.io.cucumber.messages.Location.fromObject(e.location)}return null!=e.mediaType&&(t.mediaType=String(e.mediaType)),null!=e.content&&(t.content=String(e.content)),null!=e.delimiter&&(t.delimiter=String(e.delimiter)),t},e.toObject=function(e,t){t||(t={});var n={};return t.defaults&&(n.location=null,n.mediaType=”“,n.content=”“,n.delimiter=”“),null!=e.location&&e.hasOwnProperty(”location“)&&(n.location=l.io.cucumber.messages.Location.toObject(e.location,t)),null!=e.mediaType&&e.hasOwnProperty(”mediaType“)&&(n.mediaType=e.mediaType),null!=e.content&&e.hasOwnProperty(”content“)&&(n.content=e.content),null!=e.delimiter&&e.hasOwnProperty(”delimiter“)&&(n.delimiter=e.delimiter),n},e.prototype.toJSON=function(){return this.constructor.toObject(this,o.util.toJSONOptions)},e}(),e}(),e}(),e}(),r.Attachment=function(){function e(e){if(e)for(var t=Object.keys(e),n=0;n]&&(this[t]=e[t])}var t,n;return e.prototype.source=null,e.prototype.testStepId=”“,e.prototype.testCaseStartedId=”“,e.prototype.body=”“,e.prototype.mediaType=”“,e.prototype.contentEncoding=0,e.prototype.fileName=”“,e.create=function(t){return new e(t)},e.encode=function(e,t){return t||(t=s.create()),null!=e.source&&Object.hasOwnProperty.call(e,”source“)&&l.io.cucumber.messages.SourceReference.encode(e.source,t.uint32(10).fork()).ldelim(),null!=e.testStepId&&Object.hasOwnProperty.call(e,”testStepId“)&&t.uint32(18).string(e.testStepId),null!=e.testCaseStartedId&&Object.hasOwnProperty.call(e,”testCaseStartedId“)&&t.uint32(26).string(e.testCaseStartedId),null!=e.body&&Object.hasOwnProperty.call(e,”body“)&&t.uint32(34).string(e.body),null!=e.mediaType&&Object.hasOwnProperty.call(e,”mediaType“)&&t.uint32(42).string(e.mediaType),null!=e.contentEncoding&&Object.hasOwnProperty.call(e,”contentEncoding“)&&t.uint32(48).int32(e.contentEncoding),null!=e.fileName&&Object.hasOwnProperty.call(e,”fileName“)&&t.uint32(58).string(e.fileName),t},e.encodeDelimited=function(e,t){return this.encode(e,t).ldelim()},e.decode=function(e,t){e instanceof c||(e=c.create(e));for(var n=void 0===t?e.len:e.pos+t,r=new l.io.cucumber.messages.Attachment;e.pos<n;){var i=e.uint32();switch(i>>>3){case 1:r.source=l.io.cucumber.messages.SourceReference.decode(e,e.uint32());break;case 2:r.testStepId=e.string();break;case 3:r.testCaseStartedId=e.string();break;case 4:r.body=e.string();break;case 5:r.mediaType=e.string();break;case 6:r.contentEncoding=e.int32();break;case 7:r.fileName=e.string();break;default:e.skipType(7&i)}}return r},e.decodeDelimited=function(e){return e instanceof c||(e=new c(e)),this.decode(e,e.uint32())},e.verify=function(e){if(”object“!=typeof e||null===e)return”object expected“;if(null!=e.source&&e.hasOwnProperty(”source“)){var t=l.io.cucumber.messages.SourceReference.verify(e.source);if(t)return”source.“+t}if(null!=e.testStepId&&e.hasOwnProperty(”testStepId“)&&!u.isString(e.testStepId))return”testStepId: string expected“;if(null!=e.testCaseStartedId&&e.hasOwnProperty(”testCaseStartedId“)&&!u.isString(e.testCaseStartedId))return”testCaseStartedId: string expected“;if(null!=e.body&&e.hasOwnProperty(”body“)&&!u.isString(e.body))return”body: string expected“;if(null!=e.mediaType&&e.hasOwnProperty(”mediaType“)&&!u.isString(e.mediaType))return”mediaType: string expected“;if(null!=e.contentEncoding&&e.hasOwnProperty(”contentEncoding“))switch(e.contentEncoding){default:return”contentEncoding: enum value expected“;case 0:case 1:}return null!=e.fileName&&e.hasOwnProperty(”fileName“)&&!u.isString(e.fileName)?”fileName: string expected“:null},e.fromObject=function(e){if(e instanceof l.io.cucumber.messages.Attachment)return e;var t=new l.io.cucumber.messages.Attachment;if(null!=e.source){if(”object“!=typeof e.source)throw TypeError(”.io.cucumber.messages.Attachment.source: object expected“);t.source=l.io.cucumber.messages.SourceReference.fromObject(e.source)}switch(null!=e.testStepId&&(t.testStepId=String(e.testStepId)),null!=e.testCaseStartedId&&(t.testCaseStartedId=String(e.testCaseStartedId)),null!=e.body&&(t.body=String(e.body)),null!=e.mediaType&&(t.mediaType=String(e.mediaType)),e.contentEncoding){case”IDENTITY“:case 0:t.contentEncoding=0;break;case”BASE64“:case 1:t.contentEncoding=1}return null!=e.fileName&&(t.fileName=String(e.fileName)),t},e.toObject=function(e,t){t||(t={});var n={};return t.defaults&&(n.source=null,n.testStepId=”“,n.testCaseStartedId=”“,n.body=”“,n.mediaType=”“,n.contentEncoding=t.enums===String?”IDENTITY“:0,n.fileName=”“),null!=e.source&&e.hasOwnProperty(”source“)&&(n.source=l.io.cucumber.messages.SourceReference.toObject(e.source,t)),null!=e.testStepId&&e.hasOwnProperty(”testStepId“)&&(n.testStepId=e.testStepId),null!=e.testCaseStartedId&&e.hasOwnProperty(”testCaseStartedId“)&&(n.testCaseStartedId=e.testCaseStartedId),null!=e.body&&e.hasOwnProperty(”body“)&&(n.body=e.body),null!=e.mediaType&&e.hasOwnProperty(”mediaType“)&&(n.mediaType=e.mediaType),null!=e.contentEncoding&&e.hasOwnProperty(”contentEncoding“)&&(n.contentEncoding=t.enums===String?l.io.cucumber.messages.Attachment.ContentEncoding:e.contentEncoding),null!=e.fileName&&e.hasOwnProperty(”fileName“)&&(n.fileName=e.fileName),n},e.prototype.toJSON=function(){return this.constructor.toObject(this,o.util.toJSONOptions)},e.ContentEncoding=(t={},(n=Object.create(t))[t=”IDENTITY“]=0,n[t=”BASE64“]=1,n),e}(),r.Pickle=function(){function e(e){if(this.steps=[],this.tags=,this.astNodeIds=[],e)for(var t=Object.keys(e),n=0;n]&&(this[t]=e[t])}return e.prototype.id=”“,e.prototype.uri=”“,e.prototype.name=”“,e.prototype.language=”“,e.prototype.steps=u.emptyArray,e.prototype.tags=u.emptyArray,e.prototype.astNodeIds=u.emptyArray,e.create=function(t){return new e(t)},e.encode=function(e,t){if(t||(t=s.create()),null!=e.id&&Object.hasOwnProperty.call(e,”id“)&&t.uint32(10).string(e.id),null!=e.uri&&Object.hasOwnProperty.call(e,”uri“)&&t.uint32(18).string(e.uri),null!=e.name&&Object.hasOwnProperty.call(e,”name“)&&t.uint32(26).string(e.name),null!=e.language&&Object.hasOwnProperty.call(e,”language“)&&t.uint32(34).string(e.language),null!=e.steps&&e.steps.length)for(var n=0;n,t.uint32(42).fork()).ldelim();if(null!=e.tags&&e.tags.length)for(n=0;n,t.uint32(50).fork()).ldelim();if(null!=e.astNodeIds&&e.astNodeIds.length)for(n=0;n);return t},e.encodeDelimited=function(e,t){return this.encode(e,t).ldelim()},e.decode=function(e,t){e instanceof c||(e=c.create(e));for(var n=void 0===t?e.len:e.pos+t,r=new l.io.cucumber.messages.Pickle;e.pos<n;){var i=e.uint32();switch(i>>>3){case 1:r.id=e.string();break;case 2:r.uri=e.string();break;case 3:r.name=e.string();break;case 4:r.language=e.string();break;case 5:r.steps&&r.steps.length||(r.steps=[]),r.steps.push(l.io.cucumber.messages.Pickle.PickleStep.decode(e,e.uint32()));break;case 6:r.tags&&r.tags.length||(r.tags=[]),r.tags.push(l.io.cucumber.messages.Pickle.PickleTag.decode(e,e.uint32()));break;case 7:r.astNodeIds&&r.astNodeIds.length||(r.astNodeIds=[]),r.astNodeIds.push(e.string());break;default:e.skipType(7&i)}}return r},e.decodeDelimited=function(e){return e instanceof c||(e=new c(e)),this.decode(e,e.uint32())},e.verify=function(e){if(”object“!=typeof e||null===e)return”object expected“;if(null!=e.id&&e.hasOwnProperty(”id“)&&!u.isString(e.id))return”id: string expected“;if(null!=e.uri&&e.hasOwnProperty(”uri“)&&!u.isString(e.uri))return”uri: string expected“;if(null!=e.name&&e.hasOwnProperty(”name“)&&!u.isString(e.name))return”name: string expected“;if(null!=e.language&&e.hasOwnProperty(”language“)&&!u.isString(e.language))return”language: string expected“;if(null!=e.steps&&e.hasOwnProperty(”steps“)){if(!Array.isArray(e.steps))return”steps: array expected“;for(var t=0;t))return”steps.“+n}if(null!=e.tags&&e.hasOwnProperty(”tags“)){if(!Array.isArray(e.tags))return”tags: array expected“;for(t=0;t<e.tags.length;++t){var n;if(n=l.io.cucumber.messages.Pickle.PickleTag.verify(e.tags))return”tags.“+n}}if(null!=e.astNodeIds&&e.hasOwnProperty(”astNodeIds“)){if(!Array.isArray(e.astNodeIds))return”astNodeIds: array expected“;for(t=0;t))return”astNodeIds: string[] expected“}return null},e.fromObject=function(e){if(e instanceof l.io.cucumber.messages.Pickle)return e;var t=new l.io.cucumber.messages.Pickle;if(null!=e.id&&(t.id=String(e.id)),null!=e.uri&&(t.uri=String(e.uri)),null!=e.name&&(t.name=String(e.name)),null!=e.language&&(t.language=String(e.language)),e.steps){if(!Array.isArray(e.steps))throw TypeError(”.io.cucumber.messages.Pickle.steps: array expected“);t.steps=[];for(var n=0;n<e.steps.length;++n){if(”object“!=typeof e.steps)throw TypeError(”.io.cucumber.messages.Pickle.steps: object expected“);t.steps=l.io.cucumber.messages.Pickle.PickleStep.fromObject(e.steps)}}if(e.tags){if(!Array.isArray(e.tags))throw TypeError(”.io.cucumber.messages.Pickle.tags: array expected“);for(t.tags=[],n=0;n<e.tags.length;++n){if(”object“!=typeof e.tags)throw TypeError(”.io.cucumber.messages.Pickle.tags: object expected“);t.tags=l.io.cucumber.messages.Pickle.PickleTag.fromObject(e.tags)}}if(e.astNodeIds){if(!Array.isArray(e.astNodeIds))throw TypeError(”.io.cucumber.messages.Pickle.astNodeIds: array expected“);for(t.astNodeIds=[],n=0;n=String(e.astNodeIds)}return t},e.toObject=function(e,t){t||(t={});var n={};if((t.arrays||t.defaults)&&(n.steps=[],n.tags=,n.astNodeIds=[]),t.defaults&&(n.id=”“,n.uri=”“,n.name=”“,n.language=”“),null!=e.id&&e.hasOwnProperty(”id“)&&(n.id=e.id),null!=e.uri&&e.hasOwnProperty(”uri“)&&(n.uri=e.uri),null!=e.name&&e.hasOwnProperty(”name“)&&(n.name=e.name),null!=e.language&&e.hasOwnProperty(”language“)&&(n.language=e.language),e.steps&&e.steps.length){n.steps=;for(var r=0;r=l.io.cucumber.messages.Pickle.PickleStep.toObject(e.steps,t)}if(e.tags&&e.tags.length)for(n.tags=[],r=0;r=l.io.cucumber.messages.Pickle.PickleTag.toObject(e.tags,t);if(e.astNodeIds&&e.astNodeIds.length)for(n.astNodeIds=[],r=0;r=e.astNodeIds;return n},e.prototype.toJSON=function(){return this.constructor.toObject(this,o.util.toJSONOptions)},e.PickleTag=function(){function e(e){if(e)for(var t=Object.keys(e),n=0;n]&&(this[t]=e[t])}return e.prototype.name=”“,e.prototype.astNodeId=”“,e.create=function(t){return new e(t)},e.encode=function(e,t){return t||(t=s.create()),null!=e.name&&Object.hasOwnProperty.call(e,”name“)&&t.uint32(10).string(e.name),null!=e.astNodeId&&Object.hasOwnProperty.call(e,”astNodeId“)&&t.uint32(18).string(e.astNodeId),t},e.encodeDelimited=function(e,t){return this.encode(e,t).ldelim()},e.decode=function(e,t){e instanceof c||(e=c.create(e));for(var n=void 0===t?e.len:e.pos+t,r=new l.io.cucumber.messages.Pickle.PickleTag;e.pos<n;){var i=e.uint32();switch(i>>>3){case 1:r.name=e.string();break;case 2:r.astNodeId=e.string();break;default:e.skipType(7&i)}}return r},e.decodeDelimited=function(e){return e instanceof c||(e=new c(e)),this.decode(e,e.uint32())},e.verify=function(e){return”object“!=typeof e||null===e?”object expected“:null!=e.name&&e.hasOwnProperty(”name“)&&!u.isString(e.name)?”name: string expected“:null!=e.astNodeId&&e.hasOwnProperty(”astNodeId“)&&!u.isString(e.astNodeId)?”astNodeId: string expected“:null},e.fromObject=function(e){if(e instanceof l.io.cucumber.messages.Pickle.PickleTag)return e;var t=new l.io.cucumber.messages.Pickle.PickleTag;return null!=e.name&&(t.name=String(e.name)),null!=e.astNodeId&&(t.astNodeId=String(e.astNodeId)),t},e.toObject=function(e,t){t||(t={});var n={};return t.defaults&&(n.name=”“,n.astNodeId=”“),null!=e.name&&e.hasOwnProperty(”name“)&&(n.name=e.name),null!=e.astNodeId&&e.hasOwnProperty(”astNodeId“)&&(n.astNodeId=e.astNodeId),n},e.prototype.toJSON=function(){return this.constructor.toObject(this,o.util.toJSONOptions)},e}(),e.PickleStep=function(){function e(e){if(this.astNodeIds=[],e)for(var t=Object.keys(e),n=0;n]&&(this[t]=e[t])}return e.prototype.text=”“,e.prototype.argument=null,e.prototype.id=”“,e.prototype.astNodeIds=u.emptyArray,e.create=function(t){return new e(t)},e.encode=function(e,t){if(t||(t=s.create()),null!=e.text&&Object.hasOwnProperty.call(e,”text“)&&t.uint32(10).string(e.text),null!=e.argument&&Object.hasOwnProperty.call(e,”argument“)&&l.io.cucumber.messages.PickleStepArgument.encode(e.argument,t.uint32(18).fork()).ldelim(),null!=e.id&&Object.hasOwnProperty.call(e,”id“)&&t.uint32(26).string(e.id),null!=e.astNodeIds&&e.astNodeIds.length)for(var n=0;n);return t},e.encodeDelimited=function(e,t){return this.encode(e,t).ldelim()},e.decode=function(e,t){e instanceof c||(e=c.create(e));for(var n=void 0===t?e.len:e.pos+t,r=new l.io.cucumber.messages.Pickle.PickleStep;e.pos<n;){var i=e.uint32();switch(i>>>3){case 1:r.text=e.string();break;case 2:r.argument=l.io.cucumber.messages.PickleStepArgument.decode(e,e.uint32());break;case 3:r.id=e.string();break;case 4:r.astNodeIds&&r.astNodeIds.length||(r.astNodeIds=[]),r.astNodeIds.push(e.string());break;default:e.skipType(7&i)}}return r},e.decodeDelimited=function(e){return e instanceof c||(e=new c(e)),this.decode(e,e.uint32())},e.verify=function(e){if(”object“!=typeof e||null===e)return”object expected“;if(null!=e.text&&e.hasOwnProperty(”text“)&&!u.isString(e.text))return”text: string expected“;if(null!=e.argument&&e.hasOwnProperty(”argument“)){var t=l.io.cucumber.messages.PickleStepArgument.verify(e.argument);if(t)return”argument.“+t}if(null!=e.id&&e.hasOwnProperty(”id“)&&!u.isString(e.id))return”id: string expected“;if(null!=e.astNodeIds&&e.hasOwnProperty(”astNodeIds“)){if(!Array.isArray(e.astNodeIds))return”astNodeIds: array expected“;for(var n=0;n))return”astNodeIds: string[] expected“}return null},e.fromObject=function(e){if(e instanceof l.io.cucumber.messages.Pickle.PickleStep)return e;var t=new l.io.cucumber.messages.Pickle.PickleStep;if(null!=e.text&&(t.text=String(e.text)),null!=e.argument){if(”object“!=typeof e.argument)throw TypeError(”.io.cucumber.messages.Pickle.PickleStep.argument: object expected“);t.argument=l.io.cucumber.messages.PickleStepArgument.fromObject(e.argument)}if(null!=e.id&&(t.id=String(e.id)),e.astNodeIds){if(!Array.isArray(e.astNodeIds))throw TypeError(”.io.cucumber.messages.Pickle.PickleStep.astNodeIds: array expected“);t.astNodeIds=[];for(var n=0;n=String(e.astNodeIds)}return t},e.toObject=function(e,t){t||(t={});var n={};if((t.arrays||t.defaults)&&(n.astNodeIds=[]),t.defaults&&(n.text=”“,n.argument=null,n.id=”“),null!=e.text&&e.hasOwnProperty(”text“)&&(n.text=e.text),null!=e.argument&&e.hasOwnProperty(”argument“)&&(n.argument=l.io.cucumber.messages.PickleStepArgument.toObject(e.argument,t)),null!=e.id&&e.hasOwnProperty(”id“)&&(n.id=e.id),e.astNodeIds&&e.astNodeIds.length){n.astNodeIds=;for(var r=0;r=e.astNodeIds}return n},e.prototype.toJSON=function(){return this.constructor.toObject(this,o.util.toJSONOptions)},e}(),e}(),r.PickleStepArgument=function(){function e(e){if(e)for(var t=Object.keys(e),n=0;n]&&(this[t]=e[t])}var t;return e.prototype.docString=null,e.prototype.dataTable=null,Object.defineProperty(e.prototype,”message“,{get:u.oneOfGetter(t=),set:u.oneOfSetter(t)}),e.create=function(t){return new e(t)},e.encode=function(e,t){return t||(t=s.create()),null!=e.docString&&Object.hasOwnProperty.call(e,”docString“)&&l.io.cucumber.messages.PickleStepArgument.PickleDocString.encode(e.docString,t.uint32(10).fork()).ldelim(),null!=e.dataTable&&Object.hasOwnProperty.call(e,”dataTable“)&&l.io.cucumber.messages.PickleStepArgument.PickleTable.encode(e.dataTable,t.uint32(18).fork()).ldelim(),t},e.encodeDelimited=function(e,t){return this.encode(e,t).ldelim()},e.decode=function(e,t){e instanceof c||(e=c.create(e));for(var n=void 0===t?e.len:e.pos+t,r=new l.io.cucumber.messages.PickleStepArgument;e.pos<n;){var i=e.uint32();switch(i>>>3){case 1:r.docString=l.io.cucumber.messages.PickleStepArgument.PickleDocString.decode(e,e.uint32());break;case 2:r.dataTable=l.io.cucumber.messages.PickleStepArgument.PickleTable.decode(e,e.uint32());break;default:e.skipType(7&i)}}return r},e.decodeDelimited=function(e){return e instanceof c||(e=new c(e)),this.decode(e,e.uint32())},e.verify=function(e){if(”object“!=typeof e||null===e)return”object expected“;var t={};if(null!=e.docString&&e.hasOwnProperty(”docString“)&&(t.message=1,n=l.io.cucumber.messages.PickleStepArgument.PickleDocString.verify(e.docString)))return”docString.“+n;if(null!=e.dataTable&&e.hasOwnProperty(”dataTable“)){if(1===t.message)return”message: multiple values“;var n;if(t.message=1,n=l.io.cucumber.messages.PickleStepArgument.PickleTable.verify(e.dataTable))return”dataTable.“+n}return null},e.fromObject=function(e){if(e instanceof l.io.cucumber.messages.PickleStepArgument)return e;var t=new l.io.cucumber.messages.PickleStepArgument;if(null!=e.docString){if(”object“!=typeof e.docString)throw TypeError(”.io.cucumber.messages.PickleStepArgument.docString: object expected“);t.docString=l.io.cucumber.messages.PickleStepArgument.PickleDocString.fromObject(e.docString)}if(null!=e.dataTable){if(”object“!=typeof e.dataTable)throw TypeError(”.io.cucumber.messages.PickleStepArgument.dataTable: object expected“);t.dataTable=l.io.cucumber.messages.PickleStepArgument.PickleTable.fromObject(e.dataTable)}return t},e.toObject=function(e,t){t||(t={});var n={};return null!=e.docString&&e.hasOwnProperty(”docString“)&&(n.docString=l.io.cucumber.messages.PickleStepArgument.PickleDocString.toObject(e.docString,t),t.oneofs&&(n.message=”docString“)),null!=e.dataTable&&e.hasOwnProperty(”dataTable“)&&(n.dataTable=l.io.cucumber.messages.PickleStepArgument.PickleTable.toObject(e.dataTable,t),t.oneofs&&(n.message=”dataTable“)),n},e.prototype.toJSON=function(){return this.constructor.toObject(this,o.util.toJSONOptions)},e.PickleDocString=function(){function e(e){if(e)for(var t=Object.keys(e),n=0;n]&&(this[t]=e[t])}return e.prototype.mediaType=”“,e.prototype.content=”“,e.create=function(t){return new e(t)},e.encode=function(e,t){return t||(t=s.create()),null!=e.mediaType&&Object.hasOwnProperty.call(e,”mediaType“)&&t.uint32(10).string(e.mediaType),null!=e.content&&Object.hasOwnProperty.call(e,”content“)&&t.uint32(18).string(e.content),t},e.encodeDelimited=function(e,t){return this.encode(e,t).ldelim()},e.decode=function(e,t){e instanceof c||(e=c.create(e));for(var n=void 0===t?e.len:e.pos+t,r=new l.io.cucumber.messages.PickleStepArgument.PickleDocString;e.pos<n;){var i=e.uint32();switch(i>>>3){case 1:r.mediaType=e.string();break;case 2:r.content=e.string();break;default:e.skipType(7&i)}}return r},e.decodeDelimited=function(e){return e instanceof c||(e=new c(e)),this.decode(e,e.uint32())},e.verify=function(e){return”object“!=typeof e||null===e?”object expected“:null!=e.mediaType&&e.hasOwnProperty(”mediaType“)&&!u.isString(e.mediaType)?”mediaType: string expected“:null!=e.content&&e.hasOwnProperty(”content“)&&!u.isString(e.content)?”content: string expected“:null},e.fromObject=function(e){if(e instanceof l.io.cucumber.messages.PickleStepArgument.PickleDocString)return e;var t=new l.io.cucumber.messages.PickleStepArgument.PickleDocString;return null!=e.mediaType&&(t.mediaType=String(e.mediaType)),null!=e.content&&(t.content=String(e.content)),t},e.toObject=function(e,t){t||(t={});var n={};return t.defaults&&(n.mediaType=”“,n.content=”“),null!=e.mediaType&&e.hasOwnProperty(”mediaType“)&&(n.mediaType=e.mediaType),null!=e.content&&e.hasOwnProperty(”content“)&&(n.content=e.content),n},e.prototype.toJSON=function(){return this.constructor.toObject(this,o.util.toJSONOptions)},e}(),e.PickleTable=function(){function e(e){if(this.rows=[],e)for(var t=Object.keys(e),n=0;n]&&(this[t]=e[t])}return e.prototype.rows=u.emptyArray,e.create=function(t){return new e(t)},e.encode=function(e,t){if(t||(t=s.create()),null!=e.rows&&e.rows.length)for(var n=0;n,t.uint32(10).fork()).ldelim();return t},e.encodeDelimited=function(e,t){return this.encode(e,t).ldelim()},e.decode=function(e,t){e instanceof c||(e=c.create(e));for(var n=void 0===t?e.len:e.pos+t,r=new l.io.cucumber.messages.PickleStepArgument.PickleTable;e.pos<n;){var i=e.uint32();switch(i>>>3){case 1:r.rows&&r.rows.length||(r.rows=[]),r.rows.push(l.io.cucumber.messages.PickleStepArgument.PickleTable.PickleTableRow.decode(e,e.uint32()));break;default:e.skipType(7&i)}}return r},e.decodeDelimited=function(e){return e instanceof c||(e=new c(e)),this.decode(e,e.uint32())},e.verify=function(e){if(”object“!=typeof e||null===e)return”object expected“;if(null!=e.rows&&e.hasOwnProperty(”rows“)){if(!Array.isArray(e.rows))return”rows: array expected“;for(var t=0;t<e.rows.length;++t){var n=l.io.cucumber.messages.PickleStepArgument.PickleTable.PickleTableRow.verify(e.rows);if(n)return”rows.“+n}}return null},e.fromObject=function(e){if(e instanceof l.io.cucumber.messages.PickleStepArgument.PickleTable)return e;var t=new l.io.cucumber.messages.PickleStepArgument.PickleTable;if(e.rows){if(!Array.isArray(e.rows))throw TypeError(”.io.cucumber.messages.PickleStepArgument.PickleTable.rows: array expected“);t.rows=[];for(var n=0;n<e.rows.length;++n){if(”object“!=typeof e.rows)throw TypeError(”.io.cucumber.messages.PickleStepArgument.PickleTable.rows: object expected“);t.rows=l.io.cucumber.messages.PickleStepArgument.PickleTable.PickleTableRow.fromObject(e.rows)}}return t},e.toObject=function(e,t){t||(t={});var n={};if((t.arrays||t.defaults)&&(n.rows=[]),e.rows&&e.rows.length){n.rows=;for(var r=0;r=l.io.cucumber.messages.PickleStepArgument.PickleTable.PickleTableRow.toObject(e.rows,t)}return n},e.prototype.toJSON=function(){return this.constructor.toObject(this,o.util.toJSONOptions)},e.PickleTableRow=function(){function e(e){if(this.cells=[],e)for(var t=Object.keys(e),n=0;n]&&(this[t]=e[t])}return e.prototype.cells=u.emptyArray,e.create=function(t){return new e(t)},e.encode=function(e,t){if(t||(t=s.create()),null!=e.cells&&e.cells.length)for(var n=0;n,t.uint32(10).fork()).ldelim();return t},e.encodeDelimited=function(e,t){return this.encode(e,t).ldelim()},e.decode=function(e,t){e instanceof c||(e=c.create(e));for(var n=void 0===t?e.len:e.pos+t,r=new l.io.cucumber.messages.PickleStepArgument.PickleTable.PickleTableRow;e.pos<n;){var i=e.uint32();switch(i>>>3){case 1:r.cells&&r.cells.length||(r.cells=[]),r.cells.push(l.io.cucumber.messages.PickleStepArgument.PickleTable.PickleTableRow.PickleTableCell.decode(e,e.uint32()));break;default:e.skipType(7&i)}}return r},e.decodeDelimited=function(e){return e instanceof c||(e=new c(e)),this.decode(e,e.uint32())},e.verify=function(e){if(”object“!=typeof e||null===e)return”object expected“;if(null!=e.cells&&e.hasOwnProperty(”cells“)){if(!Array.isArray(e.cells))return”cells: array expected“;for(var t=0;t<e.cells.length;++t){var n=l.io.cucumber.messages.PickleStepArgument.PickleTable.PickleTableRow.PickleTableCell.verify(e.cells);if(n)return”cells.“+n}}return null},e.fromObject=function(e){if(e instanceof l.io.cucumber.messages.PickleStepArgument.PickleTable.PickleTableRow)return e;var t=new l.io.cucumber.messages.PickleStepArgument.PickleTable.PickleTableRow;if(e.cells){if(!Array.isArray(e.cells))throw TypeError(”.io.cucumber.messages.PickleStepArgument.PickleTable.PickleTableRow.cells: array expected“);t.cells=[];for(var n=0;n<e.cells.length;++n){if(”object“!=typeof e.cells)throw TypeError(”.io.cucumber.messages.PickleStepArgument.PickleTable.PickleTableRow.cells: object expected“);t.cells=l.io.cucumber.messages.PickleStepArgument.PickleTable.PickleTableRow.PickleTableCell.fromObject(e.cells)}}return t},e.toObject=function(e,t){t||(t={});var n={};if((t.arrays||t.defaults)&&(n.cells=[]),e.cells&&e.cells.length){n.cells=;for(var r=0;r=l.io.cucumber.messages.PickleStepArgument.PickleTable.PickleTableRow.PickleTableCell.toObject(e.cells,t)}return n},e.prototype.toJSON=function(){return this.constructor.toObject(this,o.util.toJSONOptions)},e.PickleTableCell=function(){function e(e){if(e)for(var t=Object.keys(e),n=0;n]&&(this[t]=e[t])}return e.prototype.value=”“,e.create=function(t){return new e(t)},e.encode=function(e,t){return t||(t=s.create()),null!=e.value&&Object.hasOwnProperty.call(e,”value“)&&t.uint32(10).string(e.value),t},e.encodeDelimited=function(e,t){return this.encode(e,t).ldelim()},e.decode=function(e,t){e instanceof c||(e=c.create(e));for(var n=void 0===t?e.len:e.pos+t,r=new l.io.cucumber.messages.PickleStepArgument.PickleTable.PickleTableRow.PickleTableCell;e.pos<n;){var i=e.uint32();switch(i>>>3){case 1:r.value=e.string();break;default:e.skipType(7&i)}}return r},e.decodeDelimited=function(e){return e instanceof c||(e=new c(e)),this.decode(e,e.uint32())},e.verify=function(e){return”object“!=typeof e||null===e?”object expected“:null!=e.value&&e.hasOwnProperty(”value“)&&!u.isString(e.value)?”value: string expected“:null},e.fromObject=function(e){if(e instanceof l.io.cucumber.messages.PickleStepArgument.PickleTable.PickleTableRow.PickleTableCell)return e;var t=new l.io.cucumber.messages.PickleStepArgument.PickleTable.PickleTableRow.PickleTableCell;return null!=e.value&&(t.value=String(e.value)),t},e.toObject=function(e,t){t||(t={});var n={};return t.defaults&&(n.value=”“),null!=e.value&&e.hasOwnProperty(”value“)&&(n.value=e.value),n},e.prototype.toJSON=function(){return this.constructor.toObject(this,o.util.toJSONOptions)},e}(),e}(),e}(),e}(),r.TestCase=function(){function e(e){if(this.testSteps=[],e)for(var t=Object.keys(e),n=0;n]&&(this[t]=e[t])}return e.prototype.id=”“,e.prototype.pickleId=”“,e.prototype.testSteps=u.emptyArray,e.create=function(t){return new e(t)},e.encode=function(e,t){if(t||(t=s.create()),null!=e.id&&Object.hasOwnProperty.call(e,”id“)&&t.uint32(10).string(e.id),null!=e.pickleId&&Object.hasOwnProperty.call(e,”pickleId“)&&t.uint32(18).string(e.pickleId),null!=e.testSteps&&e.testSteps.length)for(var n=0;n,t.uint32(26).fork()).ldelim();return t},e.encodeDelimited=function(e,t){return this.encode(e,t).ldelim()},e.decode=function(e,t){e instanceof c||(e=c.create(e));for(var n=void 0===t?e.len:e.pos+t,r=new l.io.cucumber.messages.TestCase;e.pos<n;){var i=e.uint32();switch(i>>>3){case 1:r.id=e.string();break;case 2:r.pickleId=e.string();break;case 3:r.testSteps&&r.testSteps.length||(r.testSteps=[]),r.testSteps.push(l.io.cucumber.messages.TestCase.TestStep.decode(e,e.uint32()));break;default:e.skipType(7&i)}}return r},e.decodeDelimited=function(e){return e instanceof c||(e=new c(e)),this.decode(e,e.uint32())},e.verify=function(e){if(”object“!=typeof e||null===e)return”object expected“;if(null!=e.id&&e.hasOwnProperty(”id“)&&!u.isString(e.id))return”id: string expected“;if(null!=e.pickleId&&e.hasOwnProperty(”pickleId“)&&!u.isString(e.pickleId))return”pickleId: string expected“;if(null!=e.testSteps&&e.hasOwnProperty(”testSteps“)){if(!Array.isArray(e.testSteps))return”testSteps: array expected“;for(var t=0;t<e.testSteps.length;++t){var n=l.io.cucumber.messages.TestCase.TestStep.verify(e.testSteps);if(n)return”testSteps.“+n}}return null},e.fromObject=function(e){if(e instanceof l.io.cucumber.messages.TestCase)return e;var t=new l.io.cucumber.messages.TestCase;if(null!=e.id&&(t.id=String(e.id)),null!=e.pickleId&&(t.pickleId=String(e.pickleId)),e.testSteps){if(!Array.isArray(e.testSteps))throw TypeError(”.io.cucumber.messages.TestCase.testSteps: array expected“);t.testSteps=[];for(var n=0;n<e.testSteps.length;++n){if(”object“!=typeof e.testSteps)throw TypeError(”.io.cucumber.messages.TestCase.testSteps: object expected“);t.testSteps=l.io.cucumber.messages.TestCase.TestStep.fromObject(e.testSteps)}}return t},e.toObject=function(e,t){t||(t={});var n={};if((t.arrays||t.defaults)&&(n.testSteps=[]),t.defaults&&(n.id=”“,n.pickleId=”“),null!=e.id&&e.hasOwnProperty(”id“)&&(n.id=e.id),null!=e.pickleId&&e.hasOwnProperty(”pickleId“)&&(n.pickleId=e.pickleId),e.testSteps&&e.testSteps.length){n.testSteps=;for(var r=0;r=l.io.cucumber.messages.TestCase.TestStep.toObject(e.testSteps,t)}return n},e.prototype.toJSON=function(){return this.constructor.toObject(this,o.util.toJSONOptions)},e.TestStep=function(){function e(e){if(this.stepDefinitionIds=[],this.stepMatchArgumentsLists=,e)for(var t=Object.keys(e),n=0;n]&&(this[t]=e[t])}return e.prototype.id=”“,e.prototype.pickleStepId=”“,e.prototype.stepDefinitionIds=u.emptyArray,e.prototype.stepMatchArgumentsLists=u.emptyArray,e.prototype.hookId=”“,e.create=function(t){return new e(t)},e.encode=function(e,t){if(t||(t=s.create()),null!=e.id&&Object.hasOwnProperty.call(e,”id“)&&t.uint32(10).string(e.id),null!=e.pickleStepId&&Object.hasOwnProperty.call(e,”pickleStepId“)&&t.uint32(18).string(e.pickleStepId),null!=e.stepDefinitionIds&&e.stepDefinitionIds.length)for(var n=0;n);if(null!=e.stepMatchArgumentsLists&&e.stepMatchArgumentsLists.length)for(n=0;n,t.uint32(34).fork()).ldelim();return null!=e.hookId&&Object.hasOwnProperty.call(e,”hookId“)&&t.uint32(42).string(e.hookId),t},e.encodeDelimited=function(e,t){return this.encode(e,t).ldelim()},e.decode=function(e,t){e instanceof c||(e=c.create(e));for(var n=void 0===t?e.len:e.pos+t,r=new l.io.cucumber.messages.TestCase.TestStep;e.pos<n;){var i=e.uint32();switch(i>>>3){case 1:r.id=e.string();break;case 2:r.pickleStepId=e.string();break;case 3:r.stepDefinitionIds&&r.stepDefinitionIds.length||(r.stepDefinitionIds=[]),r.stepDefinitionIds.push(e.string());break;case 4:r.stepMatchArgumentsLists&&r.stepMatchArgumentsLists.length||(r.stepMatchArgumentsLists=[]),r.stepMatchArgumentsLists.push(l.io.cucumber.messages.TestCase.TestStep.StepMatchArgumentsList.decode(e,e.uint32()));break;case 5:r.hookId=e.string();break;default:e.skipType(7&i)}}return r},e.decodeDelimited=function(e){return e instanceof c||(e=new c(e)),this.decode(e,e.uint32())},e.verify=function(e){if(”object“!=typeof e||null===e)return”object expected“;if(null!=e.id&&e.hasOwnProperty(”id“)&&!u.isString(e.id))return”id: string expected“;if(null!=e.pickleStepId&&e.hasOwnProperty(”pickleStepId“)&&!u.isString(e.pickleStepId))return”pickleStepId: string expected“;if(null!=e.stepDefinitionIds&&e.hasOwnProperty(”stepDefinitionIds“)){if(!Array.isArray(e.stepDefinitionIds))return”stepDefinitionIds: array expected“;for(var t=0;t))return”stepDefinitionIds: string[] expected“}if(null!=e.stepMatchArgumentsLists&&e.hasOwnProperty(”stepMatchArgumentsLists“)){if(!Array.isArray(e.stepMatchArgumentsLists))return”stepMatchArgumentsLists: array expected“;for(t=0;t<e.stepMatchArgumentsLists.length;++t){var n=l.io.cucumber.messages.TestCase.TestStep.StepMatchArgumentsList.verify(e.stepMatchArgumentsLists);if(n)return”stepMatchArgumentsLists.“+n}}return null!=e.hookId&&e.hasOwnProperty(”hookId“)&&!u.isString(e.hookId)?”hookId: string expected“:null},e.fromObject=function(e){if(e instanceof l.io.cucumber.messages.TestCase.TestStep)return e;var t=new l.io.cucumber.messages.TestCase.TestStep;if(null!=e.id&&(t.id=String(e.id)),null!=e.pickleStepId&&(t.pickleStepId=String(e.pickleStepId)),e.stepDefinitionIds){if(!Array.isArray(e.stepDefinitionIds))throw TypeError(”.io.cucumber.messages.TestCase.TestStep.stepDefinitionIds: array expected“);t.stepDefinitionIds=[];for(var n=0;n=String(e.stepDefinitionIds)}if(e.stepMatchArgumentsLists){if(!Array.isArray(e.stepMatchArgumentsLists))throw TypeError(”.io.cucumber.messages.TestCase.TestStep.stepMatchArgumentsLists: array expected“);for(t.stepMatchArgumentsLists=[],n=0;n<e.stepMatchArgumentsLists.length;++n){if(”object“!=typeof e.stepMatchArgumentsLists)throw TypeError(”.io.cucumber.messages.TestCase.TestStep.stepMatchArgumentsLists: object expected“);t.stepMatchArgumentsLists=l.io.cucumber.messages.TestCase.TestStep.StepMatchArgumentsList.fromObject(e.stepMatchArgumentsLists)}}return null!=e.hookId&&(t.hookId=String(e.hookId)),t},e.toObject=function(e,t){t||(t={});var n={};if((t.arrays||t.defaults)&&(n.stepDefinitionIds=[],n.stepMatchArgumentsLists=),t.defaults&&(n.id=”“,n.pickleStepId=”“,n.hookId=”“),null!=e.id&&e.hasOwnProperty(”id“)&&(n.id=e.id),null!=e.pickleStepId&&e.hasOwnProperty(”pickleStepId“)&&(n.pickleStepId=e.pickleStepId),e.stepDefinitionIds&&e.stepDefinitionIds.length){n.stepDefinitionIds=[];for(var r=0;r=e.stepDefinitionIds}if(e.stepMatchArgumentsLists&&e.stepMatchArgumentsLists.length)for(n.stepMatchArgumentsLists=[],r=0;r=l.io.cucumber.messages.TestCase.TestStep.StepMatchArgumentsList.toObject(e.stepMatchArgumentsLists,t);return null!=e.hookId&&e.hasOwnProperty(”hookId“)&&(n.hookId=e.hookId),n},e.prototype.toJSON=function(){return this.constructor.toObject(this,o.util.toJSONOptions)},e.StepMatchArgumentsList=function(){function e(e){if(this.stepMatchArguments=[],e)for(var t=Object.keys(e),n=0;n]&&(this[t]=e[t])}return e.prototype.stepMatchArguments=u.emptyArray,e.create=function(t){return new e(t)},e.encode=function(e,t){if(t||(t=s.create()),null!=e.stepMatchArguments&&e.stepMatchArguments.length)for(var n=0;n,t.uint32(10).fork()).ldelim();return t},e.encodeDelimited=function(e,t){return this.encode(e,t).ldelim()},e.decode=function(e,t){e instanceof c||(e=c.create(e));for(var n=void 0===t?e.len:e.pos+t,r=new l.io.cucumber.messages.TestCase.TestStep.StepMatchArgumentsList;e.pos<n;){var i=e.uint32();switch(i>>>3){case 1:r.stepMatchArguments&&r.stepMatchArguments.length||(r.stepMatchArguments=[]),r.stepMatchArguments.push(l.io.cucumber.messages.TestCase.TestStep.StepMatchArgumentsList.StepMatchArgument.decode(e,e.uint32()));break;default:e.skipType(7&i)}}return r},e.decodeDelimited=function(e){return e instanceof c||(e=new c(e)),this.decode(e,e.uint32())},e.verify=function(e){if(”object“!=typeof e||null===e)return”object expected“;if(null!=e.stepMatchArguments&&e.hasOwnProperty(”stepMatchArguments“)){if(!Array.isArray(e.stepMatchArguments))return”stepMatchArguments: array expected“;for(var t=0;t<e.stepMatchArguments.length;++t){var n=l.io.cucumber.messages.TestCase.TestStep.StepMatchArgumentsList.StepMatchArgument.verify(e.stepMatchArguments);if(n)return”stepMatchArguments.“+n}}return null},e.fromObject=function(e){if(e instanceof l.io.cucumber.messages.TestCase.TestStep.StepMatchArgumentsList)return e;var t=new l.io.cucumber.messages.TestCase.TestStep.StepMatchArgumentsList;if(e.stepMatchArguments){if(!Array.isArray(e.stepMatchArguments))throw TypeError(”.io.cucumber.messages.TestCase.TestStep.StepMatchArgumentsList.stepMatchArguments: array expected“);t.stepMatchArguments=[];for(var n=0;n<e.stepMatchArguments.length;++n){if(”object“!=typeof e.stepMatchArguments)throw TypeError(”.io.cucumber.messages.TestCase.TestStep.StepMatchArgumentsList.stepMatchArguments: object expected“);t.stepMatchArguments=l.io.cucumber.messages.TestCase.TestStep.StepMatchArgumentsList.StepMatchArgument.fromObject(e.stepMatchArguments)}}return t},e.toObject=function(e,t){t||(t={});var n={};if((t.arrays||t.defaults)&&(n.stepMatchArguments=[]),e.stepMatchArguments&&e.stepMatchArguments.length){n.stepMatchArguments=;for(var r=0;r=l.io.cucumber.messages.TestCase.TestStep.StepMatchArgumentsList.StepMatchArgument.toObject(e.stepMatchArguments,t)}return n},e.prototype.toJSON=function(){return this.constructor.toObject(this,o.util.toJSONOptions)},e.StepMatchArgument=function(){function e(e){if(e)for(var t=Object.keys(e),n=0;n]&&(this[t]=e[t])}return e.prototype.parameterTypeName=”“,e.prototype.group=null,e.create=function(t){return new e(t)},e.encode=function(e,t){return t||(t=s.create()),null!=e.parameterTypeName&&Object.hasOwnProperty.call(e,”parameterTypeName“)&&t.uint32(10).string(e.parameterTypeName),null!=e.group&&Object.hasOwnProperty.call(e,”group“)&&l.io.cucumber.messages.TestCase.TestStep.StepMatchArgumentsList.StepMatchArgument.Group.encode(e.group,t.uint32(18).fork()).ldelim(),t},e.encodeDelimited=function(e,t){return this.encode(e,t).ldelim()},e.decode=function(e,t){e instanceof c||(e=c.create(e));for(var n=void 0===t?e.len:e.pos+t,r=new l.io.cucumber.messages.TestCase.TestStep.StepMatchArgumentsList.StepMatchArgument;e.pos<n;){var i=e.uint32();switch(i>>>3){case 1:r.parameterTypeName=e.string();break;case 2:r.group=l.io.cucumber.messages.TestCase.TestStep.StepMatchArgumentsList.StepMatchArgument.Group.decode(e,e.uint32());break;default:e.skipType(7&i)}}return r},e.decodeDelimited=function(e){return e instanceof c||(e=new c(e)),this.decode(e,e.uint32())},e.verify=function(e){if(”object“!=typeof e||null===e)return”object expected“;if(null!=e.parameterTypeName&&e.hasOwnProperty(”parameterTypeName“)&&!u.isString(e.parameterTypeName))return”parameterTypeName: string expected“;if(null!=e.group&&e.hasOwnProperty(”group“)){var t=l.io.cucumber.messages.TestCase.TestStep.StepMatchArgumentsList.StepMatchArgument.Group.verify(e.group);if(t)return”group.“+t}return null},e.fromObject=function(e){if(e instanceof l.io.cucumber.messages.TestCase.TestStep.StepMatchArgumentsList.StepMatchArgument)return e;var t=new l.io.cucumber.messages.TestCase.TestStep.StepMatchArgumentsList.StepMatchArgument;if(null!=e.parameterTypeName&&(t.parameterTypeName=String(e.parameterTypeName)),null!=e.group){if(”object“!=typeof e.group)throw TypeError(”.io.cucumber.messages.TestCase.TestStep.StepMatchArgumentsList.StepMatchArgument.group: object expected“);t.group=l.io.cucumber.messages.TestCase.TestStep.StepMatchArgumentsList.StepMatchArgument.Group.fromObject(e.group)}return t},e.toObject=function(e,t){t||(t={});var n={};return t.defaults&&(n.parameterTypeName=”“,n.group=null),null!=e.parameterTypeName&&e.hasOwnProperty(”parameterTypeName“)&&(n.parameterTypeName=e.parameterTypeName),null!=e.group&&e.hasOwnProperty(”group“)&&(n.group=l.io.cucumber.messages.TestCase.TestStep.StepMatchArgumentsList.StepMatchArgument.Group.toObject(e.group,t)),n},e.prototype.toJSON=function(){return this.constructor.toObject(this,o.util.toJSONOptions)},e.Group=function(){function e(e){if(this.children=[],e)for(var t=Object.keys(e),n=0;n]&&(this[t]=e[t])}return e.prototype.start=0,e.prototype.value=”“,e.prototype.children=u.emptyArray,e.create=function(t){return new e(t)},e.encode=function(e,t){if(t||(t=s.create()),null!=e.start&&Object.hasOwnProperty.call(e,”start“)&&t.uint32(8).uint32(e.start),null!=e.value&&Object.hasOwnProperty.call(e,”value“)&&t.uint32(18).string(e.value),null!=e.children&&e.children.length)for(var n=0;n,t.uint32(26).fork()).ldelim();return t},e.encodeDelimited=function(e,t){return this.encode(e,t).ldelim()},e.decode=function(e,t){e instanceof c||(e=c.create(e));for(var n=void 0===t?e.len:e.pos+t,r=new l.io.cucumber.messages.TestCase.TestStep.StepMatchArgumentsList.StepMatchArgument.Group;e.pos<n;){var i=e.uint32();switch(i>>>3){case 1:r.start=e.uint32();break;case 2:r.value=e.string();break;case 3:r.children&&r.children.length||(r.children=[]),r.children.push(l.io.cucumber.messages.TestCase.TestStep.StepMatchArgumentsList.StepMatchArgument.Group.decode(e,e.uint32()));break;default:e.skipType(7&i)}}return r},e.decodeDelimited=function(e){return e instanceof c||(e=new c(e)),this.decode(e,e.uint32())},e.verify=function(e){if(”object“!=typeof e||null===e)return”object expected“;if(null!=e.start&&e.hasOwnProperty(”start“)&&!u.isInteger(e.start))return”start: integer expected“;if(null!=e.value&&e.hasOwnProperty(”value“)&&!u.isString(e.value))return”value: string expected“;if(null!=e.children&&e.hasOwnProperty(”children“)){if(!Array.isArray(e.children))return”children: array expected“;for(var t=0;t<e.children.length;++t){var n=l.io.cucumber.messages.TestCase.TestStep.StepMatchArgumentsList.StepMatchArgument.Group.verify(e.children);if(n)return”children.“+n}}return null},e.fromObject=function(e){if(e instanceof l.io.cucumber.messages.TestCase.TestStep.StepMatchArgumentsList.StepMatchArgument.Group)return e;var t=new l.io.cucumber.messages.TestCase.TestStep.StepMatchArgumentsList.StepMatchArgument.Group;if(null!=e.start&&(t.start=e.start>>>0),null!=e.value&&(t.value=String(e.value)),e.children){if(!Array.isArray(e.children))throw TypeError(”.io.cucumber.messages.TestCase.TestStep.StepMatchArgumentsList.StepMatchArgument.Group.children: array expected“);t.children=[];for(var n=0;n<e.children.length;++n){if(”object“!=typeof e.children)throw TypeError(”.io.cucumber.messages.TestCase.TestStep.StepMatchArgumentsList.StepMatchArgument.Group.children: object expected“);t.children=l.io.cucumber.messages.TestCase.TestStep.StepMatchArgumentsList.StepMatchArgument.Group.fromObject(e.children)}}return t},e.toObject=function(e,t){t||(t={});var n={};if((t.arrays||t.defaults)&&(n.children=[]),t.defaults&&(n.start=0,n.value=”“),null!=e.start&&e.hasOwnProperty(”start“)&&(n.start=e.start),null!=e.value&&e.hasOwnProperty(”value“)&&(n.value=e.value),e.children&&e.children.length){n.children=;for(var r=0;r=l.io.cucumber.messages.TestCase.TestStep.StepMatchArgumentsList.StepMatchArgument.Group.toObject(e.children,t)}return n},e.prototype.toJSON=function(){return this.constructor.toObject(this,o.util.toJSONOptions)},e}(),e}(),e}(),e}(),e}(),r.TestRunStarted=function(){function e(e){if(e)for(var t=Object.keys(e),n=0;n]&&(this[t]=e[t])}return e.prototype.timestamp=null,e.create=function(t){return new e(t)},e.encode=function(e,t){return t||(t=s.create()),null!=e.timestamp&&Object.hasOwnProperty.call(e,”timestamp“)&&l.io.cucumber.messages.Timestamp.encode(e.timestamp,t.uint32(10).fork()).ldelim(),t},e.encodeDelimited=function(e,t){return this.encode(e,t).ldelim()},e.decode=function(e,t){e instanceof c||(e=c.create(e));for(var n=void 0===t?e.len:e.pos+t,r=new l.io.cucumber.messages.TestRunStarted;e.pos<n;){var i=e.uint32();switch(i>>>3){case 1:r.timestamp=l.io.cucumber.messages.Timestamp.decode(e,e.uint32());break;default:e.skipType(7&i)}}return r},e.decodeDelimited=function(e){return e instanceof c||(e=new c(e)),this.decode(e,e.uint32())},e.verify=function(e){if(”object“!=typeof e||null===e)return”object expected“;if(null!=e.timestamp&&e.hasOwnProperty(”timestamp“)){var t=l.io.cucumber.messages.Timestamp.verify(e.timestamp);if(t)return”timestamp.“+t}return null},e.fromObject=function(e){if(e instanceof l.io.cucumber.messages.TestRunStarted)return e;var t=new l.io.cucumber.messages.TestRunStarted;if(null!=e.timestamp){if(”object“!=typeof e.timestamp)throw TypeError(”.io.cucumber.messages.TestRunStarted.timestamp: object expected“);t.timestamp=l.io.cucumber.messages.Timestamp.fromObject(e.timestamp)}return t},e.toObject=function(e,t){t||(t={});var n={};return t.defaults&&(n.timestamp=null),null!=e.timestamp&&e.hasOwnProperty(”timestamp“)&&(n.timestamp=l.io.cucumber.messages.Timestamp.toObject(e.timestamp,t)),n},e.prototype.toJSON=function(){return this.constructor.toObject(this,o.util.toJSONOptions)},e}(),r.TestCaseStarted=function(){function e(e){if(e)for(var t=Object.keys(e),n=0;n]&&(this[t]=e[t])}return e.prototype.timestamp=null,e.prototype.attempt=0,e.prototype.testCaseId=”“,e.prototype.id=”“,e.create=function(t){return new e(t)},e.encode=function(e,t){return t||(t=s.create()),null!=e.timestamp&&Object.hasOwnProperty.call(e,”timestamp“)&&l.io.cucumber.messages.Timestamp.encode(e.timestamp,t.uint32(10).fork()).ldelim(),null!=e.attempt&&Object.hasOwnProperty.call(e,”attempt“)&&t.uint32(24).uint32(e.attempt),null!=e.testCaseId&&Object.hasOwnProperty.call(e,”testCaseId“)&&t.uint32(34).string(e.testCaseId),null!=e.id&&Object.hasOwnProperty.call(e,”id“)&&t.uint32(42).string(e.id),t},e.encodeDelimited=function(e,t){return this.encode(e,t).ldelim()},e.decode=function(e,t){e instanceof c||(e=c.create(e));for(var n=void 0===t?e.len:e.pos+t,r=new l.io.cucumber.messages.TestCaseStarted;e.pos<n;){var i=e.uint32();switch(i>>>3){case 1:r.timestamp=l.io.cucumber.messages.Timestamp.decode(e,e.uint32());break;case 3:r.attempt=e.uint32();break;case 4:r.testCaseId=e.string();break;case 5:r.id=e.string();break;default:e.skipType(7&i)}}return r},e.decodeDelimited=function(e){return e instanceof c||(e=new c(e)),this.decode(e,e.uint32())},e.verify=function(e){if(”object“!=typeof e||null===e)return”object expected“;if(null!=e.timestamp&&e.hasOwnProperty(”timestamp“)){var t=l.io.cucumber.messages.Timestamp.verify(e.timestamp);if(t)return”timestamp.“+t}return null!=e.attempt&&e.hasOwnProperty(”attempt“)&&!u.isInteger(e.attempt)?”attempt: integer expected“:null!=e.testCaseId&&e.hasOwnProperty(”testCaseId“)&&!u.isString(e.testCaseId)?”testCaseId: string expected“:null!=e.id&&e.hasOwnProperty(”id“)&&!u.isString(e.id)?”id: string expected“:null},e.fromObject=function(e){if(e instanceof l.io.cucumber.messages.TestCaseStarted)return e;var t=new l.io.cucumber.messages.TestCaseStarted;if(null!=e.timestamp){if(”object“!=typeof e.timestamp)throw TypeError(”.io.cucumber.messages.TestCaseStarted.timestamp: object expected“);t.timestamp=l.io.cucumber.messages.Timestamp.fromObject(e.timestamp)}return null!=e.attempt&&(t.attempt=e.attempt>>>0),null!=e.testCaseId&&(t.testCaseId=String(e.testCaseId)),null!=e.id&&(t.id=String(e.id)),t},e.toObject=function(e,t){t||(t={});var n={};return t.defaults&&(n.timestamp=null,n.attempt=0,n.testCaseId=”“,n.id=”“),null!=e.timestamp&&e.hasOwnProperty(”timestamp“)&&(n.timestamp=l.io.cucumber.messages.Timestamp.toObject(e.timestamp,t)),null!=e.attempt&&e.hasOwnProperty(”attempt“)&&(n.attempt=e.attempt),null!=e.testCaseId&&e.hasOwnProperty(”testCaseId“)&&(n.testCaseId=e.testCaseId),null!=e.id&&e.hasOwnProperty(”id“)&&(n.id=e.id),n},e.prototype.toJSON=function(){return this.constructor.toObject(this,o.util.toJSONOptions)},e}(),r.TestCaseFinished=function(){function e(e){if(e)for(var t=Object.keys(e),n=0;n]&&(this[t]=e[t])}return e.prototype.timestamp=null,e.prototype.testCaseStartedId=”“,e.create=function(t){return new e(t)},e.encode=function(e,t){return t||(t=s.create()),null!=e.timestamp&&Object.hasOwnProperty.call(e,”timestamp“)&&l.io.cucumber.messages.Timestamp.encode(e.timestamp,t.uint32(10).fork()).ldelim(),null!=e.testCaseStartedId&&Object.hasOwnProperty.call(e,”testCaseStartedId“)&&t.uint32(26).string(e.testCaseStartedId),t},e.encodeDelimited=function(e,t){return this.encode(e,t).ldelim()},e.decode=function(e,t){e instanceof c||(e=c.create(e));for(var n=void 0===t?e.len:e.pos+t,r=new l.io.cucumber.messages.TestCaseFinished;e.pos<n;){var i=e.uint32();switch(i>>>3){case 1:r.timestamp=l.io.cucumber.messages.Timestamp.decode(e,e.uint32());break;case 3:r.testCaseStartedId=e.string();break;default:e.skipType(7&i)}}return r},e.decodeDelimited=function(e){return e instanceof c||(e=new c(e)),this.decode(e,e.uint32())},e.verify=function(e){if(”object“!=typeof e||null===e)return”object expected“;if(null!=e.timestamp&&e.hasOwnProperty(”timestamp“)){var t=l.io.cucumber.messages.Timestamp.verify(e.timestamp);if(t)return”timestamp.“+t}return null!=e.testCaseStartedId&&e.hasOwnProperty(”testCaseStartedId“)&&!u.isString(e.testCaseStartedId)?”testCaseStartedId: string expected“:null},e.fromObject=function(e){if(e instanceof l.io.cucumber.messages.TestCaseFinished)return e;var t=new l.io.cucumber.messages.TestCaseFinished;if(null!=e.timestamp){if(”object“!=typeof e.timestamp)throw TypeError(”.io.cucumber.messages.TestCaseFinished.timestamp: object expected“);t.timestamp=l.io.cucumber.messages.Timestamp.fromObject(e.timestamp)}return null!=e.testCaseStartedId&&(t.testCaseStartedId=String(e.testCaseStartedId)),t},e.toObject=function(e,t){t||(t={});var n={};return t.defaults&&(n.timestamp=null,n.testCaseStartedId=”“),null!=e.timestamp&&e.hasOwnProperty(”timestamp“)&&(n.timestamp=l.io.cucumber.messages.Timestamp.toObject(e.timestamp,t)),null!=e.testCaseStartedId&&e.hasOwnProperty(”testCaseStartedId“)&&(n.testCaseStartedId=e.testCaseStartedId),n},e.prototype.toJSON=function(){return this.constructor.toObject(this,o.util.toJSONOptions)},e}(),r.TestStepStarted=function(){function e(e){if(e)for(var t=Object.keys(e),n=0;n]&&(this[t]=e[t])}return e.prototype.timestamp=null,e.prototype.testStepId=”“,e.prototype.testCaseStartedId=”“,e.create=function(t){return new e(t)},e.encode=function(e,t){return t||(t=s.create()),null!=e.timestamp&&Object.hasOwnProperty.call(e,”timestamp“)&&l.io.cucumber.messages.Timestamp.encode(e.timestamp,t.uint32(10).fork()).ldelim(),null!=e.testStepId&&Object.hasOwnProperty.call(e,”testStepId“)&&t.uint32(18).string(e.testStepId),null!=e.testCaseStartedId&&Object.hasOwnProperty.call(e,”testCaseStartedId“)&&t.uint32(26).string(e.testCaseStartedId),t},e.encodeDelimited=function(e,t){return this.encode(e,t).ldelim()},e.decode=function(e,t){e instanceof c||(e=c.create(e));for(var n=void 0===t?e.len:e.pos+t,r=new l.io.cucumber.messages.TestStepStarted;e.pos<n;){var i=e.uint32();switch(i>>>3){case 1:r.timestamp=l.io.cucumber.messages.Timestamp.decode(e,e.uint32());break;case 2:r.testStepId=e.string();break;case 3:r.testCaseStartedId=e.string();break;default:e.skipType(7&i)}}return r},e.decodeDelimited=function(e){return e instanceof c||(e=new c(e)),this.decode(e,e.uint32())},e.verify=function(e){if(”object“!=typeof e||null===e)return”object expected“;if(null!=e.timestamp&&e.hasOwnProperty(”timestamp“)){var t=l.io.cucumber.messages.Timestamp.verify(e.timestamp);if(t)return”timestamp.“+t}return null!=e.testStepId&&e.hasOwnProperty(”testStepId“)&&!u.isString(e.testStepId)?”testStepId: string expected“:null!=e.testCaseStartedId&&e.hasOwnProperty(”testCaseStartedId“)&&!u.isString(e.testCaseStartedId)?”testCaseStartedId: string expected“:null},e.fromObject=function(e){if(e instanceof l.io.cucumber.messages.TestStepStarted)return e;var t=new l.io.cucumber.messages.TestStepStarted;if(null!=e.timestamp){if(”object“!=typeof e.timestamp)throw TypeError(”.io.cucumber.messages.TestStepStarted.timestamp: object expected“);t.timestamp=l.io.cucumber.messages.Timestamp.fromObject(e.timestamp)}return null!=e.testStepId&&(t.testStepId=String(e.testStepId)),null!=e.testCaseStartedId&&(t.testCaseStartedId=String(e.testCaseStartedId)),t},e.toObject=function(e,t){t||(t={});var n={};return t.defaults&&(n.timestamp=null,n.testStepId=”“,n.testCaseStartedId=”“),null!=e.timestamp&&e.hasOwnProperty(”timestamp“)&&(n.timestamp=l.io.cucumber.messages.Timestamp.toObject(e.timestamp,t)),null!=e.testStepId&&e.hasOwnProperty(”testStepId“)&&(n.testStepId=e.testStepId),null!=e.testCaseStartedId&&e.hasOwnProperty(”testCaseStartedId“)&&(n.testCaseStartedId=e.testCaseStartedId),n},e.prototype.toJSON=function(){return this.constructor.toObject(this,o.util.toJSONOptions)},e}(),r.TestStepFinished=function(){function e(e){if(e)for(var t=Object.keys(e),n=0;n]&&(this[t]=e[t])}return e.prototype.testStepResult=null,e.prototype.timestamp=null,e.prototype.testStepId=”“,e.prototype.testCaseStartedId=”“,e.create=function(t){return new e(t)},e.encode=function(e,t){return t||(t=s.create()),null!=e.testStepResult&&Object.hasOwnProperty.call(e,”testStepResult“)&&l.io.cucumber.messages.TestStepFinished.TestStepResult.encode(e.testStepResult,t.uint32(10).fork()).ldelim(),null!=e.timestamp&&Object.hasOwnProperty.call(e,”timestamp“)&&l.io.cucumber.messages.Timestamp.encode(e.timestamp,t.uint32(18).fork()).ldelim(),null!=e.testStepId&&Object.hasOwnProperty.call(e,”testStepId“)&&t.uint32(26).string(e.testStepId),null!=e.testCaseStartedId&&Object.hasOwnProperty.call(e,”testCaseStartedId“)&&t.uint32(34).string(e.testCaseStartedId),t},e.encodeDelimited=function(e,t){return this.encode(e,t).ldelim()},e.decode=function(e,t){e instanceof c||(e=c.create(e));for(var n=void 0===t?e.len:e.pos+t,r=new l.io.cucumber.messages.TestStepFinished;e.pos<n;){var i=e.uint32();switch(i>>>3){case 1:r.testStepResult=l.io.cucumber.messages.TestStepFinished.TestStepResult.decode(e,e.uint32());break;case 2:r.timestamp=l.io.cucumber.messages.Timestamp.decode(e,e.uint32());break;case 3:r.testStepId=e.string();break;case 4:r.testCaseStartedId=e.string();break;default:e.skipType(7&i)}}return r},e.decodeDelimited=function(e){return e instanceof c||(e=new c(e)),this.decode(e,e.uint32())},e.verify=function(e){return”object“!=typeof e||null===e?”object expected“:null!=e.testStepResult&&e.hasOwnProperty(”testStepResult“)&&(t=l.io.cucumber.messages.TestStepFinished.TestStepResult.verify(e.testStepResult))?”testStepResult.“+t:null!=e.timestamp&&e.hasOwnProperty(”timestamp“)&&(t=l.io.cucumber.messages.Timestamp.verify(e.timestamp))?”timestamp.“+t:null!=e.testStepId&&e.hasOwnProperty(”testStepId“)&&!u.isString(e.testStepId)?”testStepId: string expected“:null!=e.testCaseStartedId&&e.hasOwnProperty(”testCaseStartedId“)&&!u.isString(e.testCaseStartedId)?”testCaseStartedId: string expected“:null;var t},e.fromObject=function(e){if(e instanceof l.io.cucumber.messages.TestStepFinished)return e;var t=new l.io.cucumber.messages.TestStepFinished;if(null!=e.testStepResult){if(”object“!=typeof e.testStepResult)throw TypeError(”.io.cucumber.messages.TestStepFinished.testStepResult: object expected“);t.testStepResult=l.io.cucumber.messages.TestStepFinished.TestStepResult.fromObject(e.testStepResult)}if(null!=e.timestamp){if(”object“!=typeof e.timestamp)throw TypeError(”.io.cucumber.messages.TestStepFinished.timestamp: object expected“);t.timestamp=l.io.cucumber.messages.Timestamp.fromObject(e.timestamp)}return null!=e.testStepId&&(t.testStepId=String(e.testStepId)),null!=e.testCaseStartedId&&(t.testCaseStartedId=String(e.testCaseStartedId)),t},e.toObject=function(e,t){t||(t={});var n={};return t.defaults&&(n.testStepResult=null,n.timestamp=null,n.testStepId=”“,n.testCaseStartedId=”“),null!=e.testStepResult&&e.hasOwnProperty(”testStepResult“)&&(n.testStepResult=l.io.cucumber.messages.TestStepFinished.TestStepResult.toObject(e.testStepResult,t)),null!=e.timestamp&&e.hasOwnProperty(”timestamp“)&&(n.timestamp=l.io.cucumber.messages.Timestamp.toObject(e.timestamp,t)),null!=e.testStepId&&e.hasOwnProperty(”testStepId“)&&(n.testStepId=e.testStepId),null!=e.testCaseStartedId&&e.hasOwnProperty(”testCaseStartedId“)&&(n.testCaseStartedId=e.testCaseStartedId),n},e.prototype.toJSON=function(){return this.constructor.toObject(this,o.util.toJSONOptions)},e.TestStepResult=function(){function e(e){if(e)for(var t=Object.keys(e),n=0;n]&&(this[t]=e[t])}var t,n;return e.prototype.status=0,e.prototype.message=”“,e.prototype.duration=null,e.prototype.willBeRetried=!1,e.create=function(t){return new e(t)},e.encode=function(e,t){return t||(t=s.create()),null!=e.status&&Object.hasOwnProperty.call(e,”status“)&&t.uint32(8).int32(e.status),null!=e.message&&Object.hasOwnProperty.call(e,”message“)&&t.uint32(18).string(e.message),null!=e.duration&&Object.hasOwnProperty.call(e,”duration“)&&l.io.cucumber.messages.Duration.encode(e.duration,t.uint32(26).fork()).ldelim(),null!=e.willBeRetried&&Object.hasOwnProperty.call(e,”willBeRetried“)&&t.uint32(32).bool(e.willBeRetried),t},e.encodeDelimited=function(e,t){return this.encode(e,t).ldelim()},e.decode=function(e,t){e instanceof c||(e=c.create(e));for(var n=void 0===t?e.len:e.pos+t,r=new l.io.cucumber.messages.TestStepFinished.TestStepResult;e.pos<n;){var i=e.uint32();switch(i>>>3){case 1:r.status=e.int32();break;case 2:r.message=e.string();break;case 3:r.duration=l.io.cucumber.messages.Duration.decode(e,e.uint32());break;case 4:r.willBeRetried=e.bool();break;default:e.skipType(7&i)}}return r},e.decodeDelimited=function(e){return e instanceof c||(e=new c(e)),this.decode(e,e.uint32())},e.verify=function(e){if(”object“!=typeof e||null===e)return”object expected“;if(null!=e.status&&e.hasOwnProperty(”status“))switch(e.status){default:return”status: enum value expected“;case 0:case 1:case 2:case 3:case 4:case 5:case 6:}if(null!=e.message&&e.hasOwnProperty(”message“)&&!u.isString(e.message))return”message: string expected“;if(null!=e.duration&&e.hasOwnProperty(”duration“)){var t=l.io.cucumber.messages.Duration.verify(e.duration);if(t)return”duration.“+t}return null!=e.willBeRetried&&e.hasOwnProperty(”willBeRetried“)&&”boolean“!=typeof e.willBeRetried?”willBeRetried: boolean expected“:null},e.fromObject=function(e){if(e instanceof l.io.cucumber.messages.TestStepFinished.TestStepResult)return e;var t=new l.io.cucumber.messages.TestStepFinished.TestStepResult;switch(e.status){case”UNKNOWN“:case 0:t.status=0;break;case”PASSED“:case 1:t.status=1;break;case”SKIPPED“:case 2:t.status=2;break;case”PENDING“:case 3:t.status=3;break;case”UNDEFINED“:case 4:t.status=4;break;case”AMBIGUOUS“:case 5:t.status=5;break;case”FAILED“:case 6:t.status=6}if(null!=e.message&&(t.message=String(e.message)),null!=e.duration){if(”object“!=typeof e.duration)throw TypeError(”.io.cucumber.messages.TestStepFinished.TestStepResult.duration: object expected“);t.duration=l.io.cucumber.messages.Duration.fromObject(e.duration)}return null!=e.willBeRetried&&(t.willBeRetried=Boolean(e.willBeRetried)),t},e.toObject=function(e,t){t||(t={});var n={};return t.defaults&&(n.status=t.enums===String?”UNKNOWN“:0,n.message=”“,n.duration=null,n.willBeRetried=!1),null!=e.status&&e.hasOwnProperty(”status“)&&(n.status=t.enums===String?l.io.cucumber.messages.TestStepFinished.TestStepResult.Status:e.status),null!=e.message&&e.hasOwnProperty(”message“)&&(n.message=e.message),null!=e.duration&&e.hasOwnProperty(”duration“)&&(n.duration=l.io.cucumber.messages.Duration.toObject(e.duration,t)),null!=e.willBeRetried&&e.hasOwnProperty(”willBeRetried“)&&(n.willBeRetried=e.willBeRetried),n},e.prototype.toJSON=function(){return this.constructor.toObject(this,o.util.toJSONOptions)},e.Status=(t={},(n=Object.create(t))[t=”UNKNOWN“]=0,n[t=”PASSED“]=1,n[t=”SKIPPED“]=2,n[t=”PENDING“]=3,n[t=”UNDEFINED“]=4,n[t=”AMBIGUOUS“]=5,n[t=”FAILED“]=6,n),e}(),e}(),r.TestRunFinished=function(){function e(e){if(e)for(var t=Object.keys(e),n=0;n]&&(this[t]=e[t])}return e.prototype.success=!1,e.prototype.timestamp=null,e.prototype.message=”“,e.create=function(t){return new e(t)},e.encode=function(e,t){return t||(t=s.create()),null!=e.success&&Object.hasOwnProperty.call(e,”success“)&&t.uint32(8).bool(e.success),null!=e.timestamp&&Object.hasOwnProperty.call(e,”timestamp“)&&l.io.cucumber.messages.Timestamp.encode(e.timestamp,t.uint32(18).fork()).ldelim(),null!=e.message&&Object.hasOwnProperty.call(e,”message“)&&t.uint32(26).string(e.message),t},e.encodeDelimited=function(e,t){return this.encode(e,t).ldelim()},e.decode=function(e,t){e instanceof c||(e=c.create(e));for(var n=void 0===t?e.len:e.pos+t,r=new l.io.cucumber.messages.TestRunFinished;e.pos<n;){var i=e.uint32();switch(i>>>3){case 1:r.success=e.bool();break;case 2:r.timestamp=l.io.cucumber.messages.Timestamp.decode(e,e.uint32());break;case 3:r.message=e.string();break;default:e.skipType(7&i)}}return r},e.decodeDelimited=function(e){return e instanceof c||(e=new c(e)),this.decode(e,e.uint32())},e.verify=function(e){if(”object“!=typeof e||null===e)return”object expected“;if(null!=e.success&&e.hasOwnProperty(”success“)&&”boolean“!=typeof e.success)return”success: boolean expected“;if(null!=e.timestamp&&e.hasOwnProperty(”timestamp“)){var t=l.io.cucumber.messages.Timestamp.verify(e.timestamp);if(t)return”timestamp.“+t}return null!=e.message&&e.hasOwnProperty(”message“)&&!u.isString(e.message)?”message: string expected“:null},e.fromObject=function(e){if(e instanceof l.io.cucumber.messages.TestRunFinished)return e;var t=new l.io.cucumber.messages.TestRunFinished;if(null!=e.success&&(t.success=Boolean(e.success)),null!=e.timestamp){if(”object“!=typeof e.timestamp)throw TypeError(”.io.cucumber.messages.TestRunFinished.timestamp: object expected“);t.timestamp=l.io.cucumber.messages.Timestamp.fromObject(e.timestamp)}return null!=e.message&&(t.message=String(e.message)),t},e.toObject=function(e,t){t||(t={});var n={};return t.defaults&&(n.success=!1,n.timestamp=null,n.message=”“),null!=e.success&&e.hasOwnProperty(”success“)&&(n.success=e.success),null!=e.timestamp&&e.hasOwnProperty(”timestamp“)&&(n.timestamp=l.io.cucumber.messages.Timestamp.toObject(e.timestamp,t)),null!=e.message&&e.hasOwnProperty(”message“)&&(n.message=e.message),n},e.prototype.toJSON=function(){return this.constructor.toObject(this,o.util.toJSONOptions)},e}(),r.Hook=function(){function e(e){if(e)for(var t=Object.keys(e),n=0;n]&&(this[t]=e[t])}return e.prototype.id=”“,e.prototype.tagExpression=”“,e.prototype.sourceReference=null,e.create=function(t){return new e(t)},e.encode=function(e,t){return t||(t=s.create()),null!=e.id&&Object.hasOwnProperty.call(e,”id“)&&t.uint32(10).string(e.id),null!=e.tagExpression&&Object.hasOwnProperty.call(e,”tagExpression“)&&t.uint32(18).string(e.tagExpression),null!=e.sourceReference&&Object.hasOwnProperty.call(e,”sourceReference“)&&l.io.cucumber.messages.SourceReference.encode(e.sourceReference,t.uint32(26).fork()).ldelim(),t},e.encodeDelimited=function(e,t){return this.encode(e,t).ldelim()},e.decode=function(e,t){e instanceof c||(e=c.create(e));for(var n=void 0===t?e.len:e.pos+t,r=new l.io.cucumber.messages.Hook;e.pos<n;){var i=e.uint32();switch(i>>>3){case 1:r.id=e.string();break;case 2:r.tagExpression=e.string();break;case 3:r.sourceReference=l.io.cucumber.messages.SourceReference.decode(e,e.uint32());break;default:e.skipType(7&i)}}return r},e.decodeDelimited=function(e){return e instanceof c||(e=new c(e)),this.decode(e,e.uint32())},e.verify=function(e){if(”object“!=typeof e||null===e)return”object expected“;if(null!=e.id&&e.hasOwnProperty(”id“)&&!u.isString(e.id))return”id: string expected“;if(null!=e.tagExpression&&e.hasOwnProperty(”tagExpression“)&&!u.isString(e.tagExpression))return”tagExpression: string expected“;if(null!=e.sourceReference&&e.hasOwnProperty(”sourceReference“)){var t=l.io.cucumber.messages.SourceReference.verify(e.sourceReference);if(t)return”sourceReference.“+t}return null},e.fromObject=function(e){if(e instanceof l.io.cucumber.messages.Hook)return e;var t=new l.io.cucumber.messages.Hook;if(null!=e.id&&(t.id=String(e.id)),null!=e.tagExpression&&(t.tagExpression=String(e.tagExpression)),null!=e.sourceReference){if(”object“!=typeof e.sourceReference)throw TypeError(”.io.cucumber.messages.Hook.sourceReference: object expected“);t.sourceReference=l.io.cucumber.messages.SourceReference.fromObject(e.sourceReference)}return t},e.toObject=function(e,t){t||(t={});var n={};return t.defaults&&(n.id=”“,n.tagExpression=”“,n.sourceReference=null),null!=e.id&&e.hasOwnProperty(”id“)&&(n.id=e.id),null!=e.tagExpression&&e.hasOwnProperty(”tagExpression“)&&(n.tagExpression=e.tagExpression),null!=e.sourceReference&&e.hasOwnProperty(”sourceReference“)&&(n.sourceReference=l.io.cucumber.messages.SourceReference.toObject(e.sourceReference,t)),n},e.prototype.toJSON=function(){return this.constructor.toObject(this,o.util.toJSONOptions)},e}(),r.StepDefinition=function(){function e(e){if(e)for(var t=Object.keys(e),n=0;n]&&(this[t]=e[t])}return e.prototype.id=”“,e.prototype.pattern=null,e.prototype.sourceReference=null,e.create=function(t){return new e(t)},e.encode=function(e,t){return t||(t=s.create()),null!=e.id&&Object.hasOwnProperty.call(e,”id“)&&t.uint32(10).string(e.id),null!=e.pattern&&Object.hasOwnProperty.call(e,”pattern“)&&l.io.cucumber.messages.StepDefinition.StepDefinitionPattern.encode(e.pattern,t.uint32(18).fork()).ldelim(),null!=e.sourceReference&&Object.hasOwnProperty.call(e,”sourceReference“)&&l.io.cucumber.messages.SourceReference.encode(e.sourceReference,t.uint32(26).fork()).ldelim(),t},e.encodeDelimited=function(e,t){return this.encode(e,t).ldelim()},e.decode=function(e,t){e instanceof c||(e=c.create(e));for(var n=void 0===t?e.len:e.pos+t,r=new l.io.cucumber.messages.StepDefinition;e.pos<n;){var i=e.uint32();switch(i>>>3){case 1:r.id=e.string();break;case 2:r.pattern=l.io.cucumber.messages.StepDefinition.StepDefinitionPattern.decode(e,e.uint32());break;case 3:r.sourceReference=l.io.cucumber.messages.SourceReference.decode(e,e.uint32());break;default:e.skipType(7&i)}}return r},e.decodeDelimited=function(e){return e instanceof c||(e=new c(e)),this.decode(e,e.uint32())},e.verify=function(e){return”object“!=typeof e||null===e?”object expected“:null!=e.id&&e.hasOwnProperty(”id“)&&!u.isString(e.id)?”id: string expected“:null!=e.pattern&&e.hasOwnProperty(”pattern“)&&(t=l.io.cucumber.messages.StepDefinition.StepDefinitionPattern.verify(e.pattern))?”pattern.“+t:null!=e.sourceReference&&e.hasOwnProperty(”sourceReference“)&&(t=l.io.cucumber.messages.SourceReference.verify(e.sourceReference))?”sourceReference.“+t:null;var t},e.fromObject=function(e){if(e instanceof l.io.cucumber.messages.StepDefinition)return e;var t=new l.io.cucumber.messages.StepDefinition;if(null!=e.id&&(t.id=String(e.id)),null!=e.pattern){if(”object“!=typeof e.pattern)throw TypeError(”.io.cucumber.messages.StepDefinition.pattern: object expected“);t.pattern=l.io.cucumber.messages.StepDefinition.StepDefinitionPattern.fromObject(e.pattern)}if(null!=e.sourceReference){if(”object“!=typeof e.sourceReference)throw TypeError(”.io.cucumber.messages.StepDefinition.sourceReference: object expected“);t.sourceReference=l.io.cucumber.messages.SourceReference.fromObject(e.sourceReference)}return t},e.toObject=function(e,t){t||(t={});var n={};return t.defaults&&(n.id=”“,n.pattern=null,n.sourceReference=null),null!=e.id&&e.hasOwnProperty(”id“)&&(n.id=e.id),null!=e.pattern&&e.hasOwnProperty(”pattern“)&&(n.pattern=l.io.cucumber.messages.StepDefinition.StepDefinitionPattern.toObject(e.pattern,t)),null!=e.sourceReference&&e.hasOwnProperty(”sourceReference“)&&(n.sourceReference=l.io.cucumber.messages.SourceReference.toObject(e.sourceReference,t)),n},e.prototype.toJSON=function(){return this.constructor.toObject(this,o.util.toJSONOptions)},e.StepDefinitionPattern=function(){function e(e){if(e)for(var t=Object.keys(e),n=0;n]&&(this[t]=e[t])}var t,n;return e.prototype.source=”“,e.prototype.type=0,e.create=function(t){return new e(t)},e.encode=function(e,t){return t||(t=s.create()),null!=e.source&&Object.hasOwnProperty.call(e,”source“)&&t.uint32(10).string(e.source),null!=e.type&&Object.hasOwnProperty.call(e,”type“)&&t.uint32(16).int32(e.type),t},e.encodeDelimited=function(e,t){return this.encode(e,t).ldelim()},e.decode=function(e,t){e instanceof c||(e=c.create(e));for(var n=void 0===t?e.len:e.pos+t,r=new l.io.cucumber.messages.StepDefinition.StepDefinitionPattern;e.pos<n;){var i=e.uint32();switch(i>>>3){case 1:r.source=e.string();break;case 2:r.type=e.int32();break;default:e.skipType(7&i)}}return r},e.decodeDelimited=function(e){return e instanceof c||(e=new c(e)),this.decode(e,e.uint32())},e.verify=function(e){if(”object“!=typeof e||null===e)return”object expected“;if(null!=e.source&&e.hasOwnProperty(”source“)&&!u.isString(e.source))return”source: string expected“;if(null!=e.type&&e.hasOwnProperty(”type“))switch(e.type){default:return”type: enum value expected“;case 0:case 1:}return null},e.fromObject=function(e){if(e instanceof l.io.cucumber.messages.StepDefinition.StepDefinitionPattern)return e;var t=new l.io.cucumber.messages.StepDefinition.StepDefinitionPattern;switch(null!=e.source&&(t.source=String(e.source)),e.type){case”CUCUMBER_EXPRESSION“:case 0:t.type=0;break;case”REGULAR_EXPRESSION“:case 1:t.type=1}return t},e.toObject=function(e,t){t||(t={});var n={};return t.defaults&&(n.source=”“,n.type=t.enums===String?”CUCUMBER_EXPRESSION“:0),null!=e.source&&e.hasOwnProperty(”source“)&&(n.source=e.source),null!=e.type&&e.hasOwnProperty(”type“)&&(n.type=t.enums===String?l.io.cucumber.messages.StepDefinition.StepDefinitionPattern.StepDefinitionPatternType:e.type),n},e.prototype.toJSON=function(){return this.constructor.toObject(this,o.util.toJSONOptions)},e.StepDefinitionPatternType=(t={},(n=Object.create(t))[t=”CUCUMBER_EXPRESSION“]=0,n[t=”REGULAR_EXPRESSION“]=1,n),e}(),e}(),r.ParameterType=function(){function e(e){if(this.regularExpressions=[],e)for(var t=Object.keys(e),n=0;n]&&(this[t]=e[t])}return e.prototype.name=”“,e.prototype.regularExpressions=u.emptyArray,e.prototype.preferForRegularExpressionMatch=!1,e.prototype.useForSnippets=!1,e.prototype.id=”“,e.create=function(t){return new e(t)},e.encode=function(e,t){if(t||(t=s.create()),null!=e.name&&Object.hasOwnProperty.call(e,”name“)&&t.uint32(10).string(e.name),null!=e.regularExpressions&&e.regularExpressions.length)for(var n=0;n);return null!=e.preferForRegularExpressionMatch&&Object.hasOwnProperty.call(e,”preferForRegularExpressionMatch“)&&t.uint32(24).bool(e.preferForRegularExpressionMatch),null!=e.useForSnippets&&Object.hasOwnProperty.call(e,”useForSnippets“)&&t.uint32(32).bool(e.useForSnippets),null!=e.id&&Object.hasOwnProperty.call(e,”id“)&&t.uint32(42).string(e.id),t},e.encodeDelimited=function(e,t){return this.encode(e,t).ldelim()},e.decode=function(e,t){e instanceof c||(e=c.create(e));for(var n=void 0===t?e.len:e.pos+t,r=new l.io.cucumber.messages.ParameterType;e.pos<n;){var i=e.uint32();switch(i>>>3){case 1:r.name=e.string();break;case 2:r.regularExpressions&&r.regularExpressions.length||(r.regularExpressions=[]),r.regularExpressions.push(e.string());break;case 3:r.preferForRegularExpressionMatch=e.bool();break;case 4:r.useForSnippets=e.bool();break;case 5:r.id=e.string();break;default:e.skipType(7&i)}}return r},e.decodeDelimited=function(e){return e instanceof c||(e=new c(e)),this.decode(e,e.uint32())},e.verify=function(e){if(”object“!=typeof e||null===e)return”object expected“;if(null!=e.name&&e.hasOwnProperty(”name“)&&!u.isString(e.name))return”name: string expected“;if(null!=e.regularExpressions&&e.hasOwnProperty(”regularExpressions“)){if(!Array.isArray(e.regularExpressions))return”regularExpressions: array expected“;for(var t=0;t))return”regularExpressions: string[] expected“}return null!=e.preferForRegularExpressionMatch&&e.hasOwnProperty(”preferForRegularExpressionMatch“)&&”boolean“!=typeof e.preferForRegularExpressionMatch?”preferForRegularExpressionMatch: boolean expected“:null!=e.useForSnippets&&e.hasOwnProperty(”useForSnippets“)&&”boolean“!=typeof e.useForSnippets?”useForSnippets: boolean expected“:null!=e.id&&e.hasOwnProperty(”id“)&&!u.isString(e.id)?”id: string expected“:null},e.fromObject=function(e){if(e instanceof l.io.cucumber.messages.ParameterType)return e;var t=new l.io.cucumber.messages.ParameterType;if(null!=e.name&&(t.name=String(e.name)),e.regularExpressions){if(!Array.isArray(e.regularExpressions))throw TypeError(”.io.cucumber.messages.ParameterType.regularExpressions: array expected“);t.regularExpressions=[];for(var n=0;n=String(e.regularExpressions)}return null!=e.preferForRegularExpressionMatch&&(t.preferForRegularExpressionMatch=Boolean(e.preferForRegularExpressionMatch)),null!=e.useForSnippets&&(t.useForSnippets=Boolean(e.useForSnippets)),null!=e.id&&(t.id=String(e.id)),t},e.toObject=function(e,t){t||(t={});var n={};if((t.arrays||t.defaults)&&(n.regularExpressions=[]),t.defaults&&(n.name=”“,n.preferForRegularExpressionMatch=!1,n.useForSnippets=!1,n.id=”“),null!=e.name&&e.hasOwnProperty(”name“)&&(n.name=e.name),e.regularExpressions&&e.regularExpressions.length){n.regularExpressions=;for(var r=0;r=e.regularExpressions}return null!=e.preferForRegularExpressionMatch&&e.hasOwnProperty(”preferForRegularExpressionMatch“)&&(n.preferForRegularExpressionMatch=e.preferForRegularExpressionMatch),null!=e.useForSnippets&&e.hasOwnProperty(”useForSnippets“)&&(n.useForSnippets=e.useForSnippets),null!=e.id&&e.hasOwnProperty(”id“)&&(n.id=e.id),n},e.prototype.toJSON=function(){return this.constructor.toObject(this,o.util.toJSONOptions)},e}(),r.UndefinedParameterType=function(){function e(e){if(e)for(var t=Object.keys(e),n=0;n]&&(this[t]=e[t])}return e.prototype.name=”“,e.prototype.expression=”“,e.create=function(t){return new e(t)},e.encode=function(e,t){return t||(t=s.create()),null!=e.name&&Object.hasOwnProperty.call(e,”name“)&&t.uint32(10).string(e.name),null!=e.expression&&Object.hasOwnProperty.call(e,”expression“)&&t.uint32(18).string(e.expression),t},e.encodeDelimited=function(e,t){return this.encode(e,t).ldelim()},e.decode=function(e,t){e instanceof c||(e=c.create(e));for(var n=void 0===t?e.len:e.pos+t,r=new l.io.cucumber.messages.UndefinedParameterType;e.pos<n;){var i=e.uint32();switch(i>>>3){case 1:r.name=e.string();break;case 2:r.expression=e.string();break;default:e.skipType(7&i)}}return r},e.decodeDelimited=function(e){return e instanceof c||(e=new c(e)),this.decode(e,e.uint32())},e.verify=function(e){return”object“!=typeof e||null===e?”object expected“:null!=e.name&&e.hasOwnProperty(”name“)&&!u.isString(e.name)?”name: string expected“:null!=e.expression&&e.hasOwnProperty(”expression“)&&!u.isString(e.expression)?”expression: string expected“:null},e.fromObject=function(e){if(e instanceof l.io.cucumber.messages.UndefinedParameterType)return e;var t=new l.io.cucumber.messages.UndefinedParameterType;return null!=e.name&&(t.name=String(e.name)),null!=e.expression&&(t.expression=String(e.expression)),t},e.toObject=function(e,t){t||(t={});var n={};return t.defaults&&(n.name=”“,n.expression=”“),null!=e.name&&e.hasOwnProperty(”name“)&&(n.name=e.name),null!=e.expression&&e.hasOwnProperty(”expression“)&&(n.expression=e.expression),n},e.prototype.toJSON=function(){return this.constructor.toObject(this,o.util.toJSONOptions)},e}(),r.ParseError=function(){function e(e){if(e)for(var t=Object.keys(e),n=0;n]&&(this[t]=e[t])}return e.prototype.source=null,e.prototype.message=”“,e.create=function(t){return new e(t)},e.encode=function(e,t){return t||(t=s.create()),null!=e.source&&Object.hasOwnProperty.call(e,”source“)&&l.io.cucumber.messages.SourceReference.encode(e.source,t.uint32(10).fork()).ldelim(),null!=e.message&&Object.hasOwnProperty.call(e,”message“)&&t.uint32(18).string(e.message),t},e.encodeDelimited=function(e,t){return this.encode(e,t).ldelim()},e.decode=function(e,t){e instanceof c||(e=c.create(e));for(var n=void 0===t?e.len:e.pos+t,r=new l.io.cucumber.messages.ParseError;e.pos<n;){var i=e.uint32();switch(i>>>3){case 1:r.source=l.io.cucumber.messages.SourceReference.decode(e,e.uint32());break;case 2:r.message=e.string();break;default:e.skipType(7&i)}}return r},e.decodeDelimited=function(e){return e instanceof c||(e=new c(e)),this.decode(e,e.uint32())},e.verify=function(e){if(”object“!=typeof e||null===e)return”object expected“;if(null!=e.source&&e.hasOwnProperty(”source“)){var t=l.io.cucumber.messages.SourceReference.verify(e.source);if(t)return”source.“+t}return null!=e.message&&e.hasOwnProperty(”message“)&&!u.isString(e.message)?”message: string expected“:null},e.fromObject=function(e){if(e instanceof l.io.cucumber.messages.ParseError)return e;var t=new l.io.cucumber.messages.ParseError;if(null!=e.source){if(”object“!=typeof e.source)throw TypeError(”.io.cucumber.messages.ParseError.source: object expected“);t.source=l.io.cucumber.messages.SourceReference.fromObject(e.source)}return null!=e.message&&(t.message=String(e.message)),t},e.toObject=function(e,t){t||(t={});var n={};return t.defaults&&(n.source=null,n.message=”“),null!=e.source&&e.hasOwnProperty(”source“)&&(n.source=l.io.cucumber.messages.SourceReference.toObject(e.source,t)),null!=e.message&&e.hasOwnProperty(”message“)&&(n.message=e.message),n},e.prototype.toJSON=function(){return this.constructor.toObject(this,o.util.toJSONOptions)},e}(),r),i),a),e.exports=l},function(e,t,n){”use strict“;e.exports=n(61)},function(e){e.exports=JSON.parse('{”name“:”@cucumber/messages“,”version“:”13.0.1“,”description“:”Protocol Buffer messages for Cucumber's inter-process communication“,”main“:”dist/src/index.js“,”types“:”dist/src/index.d.ts“,”repository“:{”type“:”git“,”url“:”git://github.com/cucumber/messages-javascript.git“},”author“:”Cucumber Limited <cukes@googlegroups.com>“,”license“:”MIT“,”scripts“:{”test“:”mocha“,”lint“:”eslint –ext ts –max-warnings 0 src test“,”lint-fix“:”eslint –ext ts –max-warnings 0 –fix src test“,”coverage“:”nyc –reporter=html –reporter=text mocha“,”pbjs“:”pbjs –target static-module –wrap commonjs messages.proto –out src/messages.js“,”pbts“:”pbts src/messages.js > src/messages.d.ts“,”build“:”tsc && make src/messages.js && make src/messages.d.ts && copyfiles src/messages.js src/messages.d.ts dist“,”prepublishOnly“:”npm run build“},”dependencies“:{”@types/uuid“:”^8.0.1“,”protobufjs“:”^6.10.1“,”uuid“:”^8.3.0“},”devDependencies“:{”@types/mocha“:”^8.0.1“,”@types/node“:”^14.0.27“,”@typescript-eslint/eslint-plugin“:”^3.8.0“,”@typescript-eslint/parser“:”^3.8.0“,”copyfiles“:”^2.3.0“,”eslint“:”^7.6.0“,”eslint-config-prettier“:”^6.11.0“,”eslint-plugin-node“:”^11.1.0“,”eslint-plugin-prettier“:”^3.1.4“,”eslint-plugin-react“:”^7.20.5“,”json-schema“:”^0.2.5“,”mocha“:”^8.1.1“,”nyc“:”^15.1.0“,”prettier“:”^2.0.5“,”ts-node“:”^8.10.2“,”typescript“:”^3.9.7“},”bugs“:{”url“:”github.com/cucumber/messages-javascript/issues“},”homepage“:”https://github.com/cucumber/messages-javascript#readme“,”directories“:{”test“:”test“},”keywords“:[]}’)},function(e,t,n){”use strict“;var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,”__esModule“,{value:!0});var i=r(n(0)),a=r(n(133)),o=n(2),c=n(174),s=r(n(52)),u=r(n(12)),l=r(n(9)),f=r(n(34));t.default=function(e){var t=e.gherkinDocuments,n=i.default.useContext(u.default),r=i.default.useContext(l.default),h=void 0===t?n.getGherkinDocuments():t,d=h.map((function(e){var t=e.feature?r.getWorstTestStepResult(r.getPickleTestStepResults(n.getPickleIds(e.uri))).status:o.messages.TestStepFinished.TestStepResult.Status.UNDEFINED;return})),p=new Map(d),m=h.filter((function(e){return p.get(e.uri)!==o.messages.TestStepFinished.TestStepResult.Status.PASSED})).map((function(e){return e.uri}));return i.default.createElement(”div“,{className:”gherkin-document-list“},i.default.createElement(c.Accordion,{allowMultipleExpanded:!0,allowZeroExpanded:!0,preExpanded:m},h.map((function(e){var t=p.get(e.uri);return i.default.createElement(c.AccordionItem,{key:e.uri,uuid:e.uri},i.default.createElement(c.AccordionItemHeading,null,i.default.createElement(c.AccordionItemButton,null,i.default.createElement(”span“,{className:”cucumber-feature__icon“},i.default.createElement(f.default,{status:t})),i.default.createElement(”span“,null,e.uri))),i.default.createElement(c.AccordionItemPanel,null,i.default.createElement(s.default.Provider,{value:e.uri},i.default.createElement(a.default,{gherkinDocument:e}))))}))))}},function(e,t,n){”use strict“; /** @license React v16.13.1

              + +
              * react.production.min.js
              +*
              +* Copyright (c) Facebook, Inc. and its affiliates.
              +*
              +* This source code is licensed under the MIT license found in the
              +* LICENSE file in the root directory of this source tree.
              +*/var r=n(73),i="function"==typeof Symbol&&Symbol.for,a=i?Symbol.for("react.element"):60103,o=i?Symbol.for("react.portal"):60106,c=i?Symbol.for("react.fragment"):60107,s=i?Symbol.for("react.strict_mode"):60108,u=i?Symbol.for("react.profiler"):60114,l=i?Symbol.for("react.provider"):60109,f=i?Symbol.for("react.context"):60110,h=i?Symbol.for("react.forward_ref"):60112,d=i?Symbol.for("react.suspense"):60113,p=i?Symbol.for("react.memo"):60115,m=i?Symbol.for("react.lazy"):60116,v="function"==typeof Symbol&&Symbol.iterator;function g(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n<arguments.length;n++)t+="&args[]="+encodeURIComponent(arguments[n]);return"Minified React error #"+e+"; visit "+t+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}var y={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},b={};function w(e,t,n){this.props=e,this.context=t,this.refs=b,this.updater=n||y}function x(){}function S(e,t,n){this.props=e,this.context=t,this.refs=b,this.updater=n||y}w.prototype.isReactComponent={},w.prototype.setState=function(e,t){if("object"!=typeof e&&"function"!=typeof e&&null!=e)throw Error(g(85));this.updater.enqueueSetState(this,e,t,"setState")},w.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")},x.prototype=w.prototype;var k=S.prototype=new x;k.constructor=S,r(k,w.prototype),k.isPureReactComponent=!0;var _={current:null},z=Object.prototype.hasOwnProperty,C={key:!0,ref:!0,__self:!0,__source:!0};function M(e,t,n){var r,i={},o=null,c=null;if(null!=t)for(r in void 0!==t.ref&&(c=t.ref),void 0!==t.key&&(o=""+t.key),t)z.call(t,r)&&!C.hasOwnProperty(r)&&(i[r]=t[r]);var s=arguments.length-2;if(1===s)i.children=n;else if(1<s){for(var u=Array(s),l=0;l<s;l++)u[l]=arguments[l+2];i.children=u}if(e&&e.defaultProps)for(r in s=e.defaultProps)void 0===i[r]&&(i[r]=s[r]);return{$$typeof:a,type:e,key:o,ref:c,props:i,_owner:_.current}}function O(e){return"object"==typeof e&&null!==e&&e.$$typeof===a}var T=/\/+/g,E=[];function L(e,t,n,r){if(E.length){var i=E.pop();return i.result=e,i.keyPrefix=t,i.func=n,i.context=r,i.count=0,i}return{result:e,keyPrefix:t,func:n,context:r,count:0}}function A(e){e.result=null,e.keyPrefix=null,e.func=null,e.context=null,e.count=0,10>E.length&&E.push(e)}function R(e,t,n){return null==e?0:function e(t,n,r,i){var c=typeof t;"undefined"!==c&&"boolean"!==c||(t=null);var s=!1;if(null===t)s=!0;else switch(c){case"string":case"number":s=!0;break;case"object":switch(t.$$typeof){case a:case o:s=!0}}if(s)return r(i,t,""===n?"."+N(t,0):n),1;if(s=0,n=""===n?".":n+":",Array.isArray(t))for(var u=0;u<t.length;u++){var l=n+N(c=t[u],u);s+=e(c,l,r,i)}else if(null===t||"object"!=typeof t?l=null:l="function"==typeof(l=v&&t[v]||t["@@iterator"])?l:null,"function"==typeof l)for(t=l.call(t),u=0;!(c=t.next()).done;)s+=e(c=c.value,l=n+N(c,u++),r,i);else if("object"===c)throw r=""+t,Error(g(31,"[object Object]"===r?"object with keys {"+Object.keys(t).join(", ")+"}":r,""));return s}(e,"",t,n)}function N(e,t){return"object"==typeof e&&null!==e&&null!=e.key?function(e){var t={"=":"=0",":":"=2"};return"$"+(""+e).replace(/[=:]/g,(function(e){return t[e]}))}(e.key):t.toString(36)}function H(e,t){e.func.call(e.context,t,e.count++)}function P(e,t,n){var r=e.result,i=e.keyPrefix;e=e.func.call(e.context,t,e.count++),Array.isArray(e)?j(e,r,n,(function(e){return e})):null!=e&&(O(e)&&(e=function(e,t){return{$$typeof:a,type:e.type,key:t,ref:e.ref,props:e.props,_owner:e._owner}}(e,i+(!e.key||t&&t.key===e.key?"":(""+e.key).replace(T,"$&/")+"/")+n)),r.push(e))}function j(e,t,n,r,i){var a="";null!=n&&(a=(""+n).replace(T,"$&/")+"/"),R(e,P,t=L(t,a,r,i)),A(t)}var V={current:null};function D(){var e=V.current;if(null===e)throw Error(g(321));return e}var I={ReactCurrentDispatcher:V,ReactCurrentBatchConfig:{suspense:null},ReactCurrentOwner:_,IsSomeRendererActing:{current:!1},assign:r};t.Children={map:function(e,t,n){if(null==e)return e;var r=[];return j(e,r,null,t,n),r},forEach:function(e,t,n){if(null==e)return e;R(e,H,t=L(null,null,t,n)),A(t)},count:function(e){return R(e,(function(){return null}),null)},toArray:function(e){var t=[];return j(e,t,null,(function(e){return e})),t},only:function(e){if(!O(e))throw Error(g(143));return e}},t.Component=w,t.Fragment=c,t.Profiler=u,t.PureComponent=S,t.StrictMode=s,t.Suspense=d,t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=I,t.cloneElement=function(e,t,n){if(null==e)throw Error(g(267,e));var i=r({},e.props),o=e.key,c=e.ref,s=e._owner;if(null!=t){if(void 0!==t.ref&&(c=t.ref,s=_.current),void 0!==t.key&&(o=""+t.key),e.type&&e.type.defaultProps)var u=e.type.defaultProps;for(l in t)z.call(t,l)&&!C.hasOwnProperty(l)&&(i[l]=void 0===t[l]&&void 0!==u?u[l]:t[l])}var l=arguments.length-2;if(1===l)i.children=n;else if(1<l){u=Array(l);for(var f=0;f<l;f++)u[f]=arguments[f+2];i.children=u}return{$$typeof:a,type:e.type,key:o,ref:c,props:i,_owner:s}},t.createContext=function(e,t){return void 0===t&&(t=null),(e={$$typeof:f,_calculateChangedBits:t,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null}).Provider={$$typeof:l,_context:e},e.Consumer=e},t.createElement=M,t.createFactory=function(e){var t=M.bind(null,e);return t.type=e,t},t.createRef=function(){return{current:null}},t.forwardRef=function(e){return{$$typeof:h,render:e}},t.isValidElement=O,t.lazy=function(e){return{$$typeof:m,_ctor:e,_status:-1,_result:null}},t.memo=function(e,t){return{$$typeof:p,type:e,compare:void 0===t?null:t}},t.useCallback=function(e,t){return D().useCallback(e,t)},t.useContext=function(e,t){return D().useContext(e,t)},t.useDebugValue=function(){},t.useEffect=function(e,t){return D().useEffect(e,t)},t.useImperativeHandle=function(e,t,n){return D().useImperativeHandle(e,t,n)},t.useLayoutEffect=function(e,t){return D().useLayoutEffect(e,t)},t.useMemo=function(e,t){return D().useMemo(e,t)},t.useReducer=function(e,t,n){return D().useReducer(e,t,n)},t.useRef=function(e){return D().useRef(e)},t.useState=function(e){return D().useState(e)},t.version="16.13.1"},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var i=r(n(0)),a=r(n(134));t.default=function(e){var t=e.gherkinDocument;return t.feature?i.default.createElement(a.default,{feature:t.feature}):null}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var i=r(n(0)),a=r(n(48)),o=r(n(29)),c=r(n(23)),s=r(n(74)),u=r(n(170)),l=r(n(90)),f=r(n(173)),h=new o.default;t.default=function(e){var t=e.feature,n=h.generate(t.name);return i.default.createElement("section",{className:"cucumber-feature"},i.default.createElement(a.default,{tags:t.tags}),i.default.createElement(f.default,{id:n,feature:t}),t.description?i.default.createElement(c.default,{description:t.description}):null,i.default.createElement("div",{className:"cucumber-children"},(t.children||[]).map((function(e,t){if(e.background)return i.default.createElement(l.default,{key:t,background:e.background});if(e.scenario)return i.default.createElement(s.default,{key:t,scenario:e.scenario});if(e.rule)return i.default.createElement(u.default,{key:t,rule:e.rule});throw new Error("Expected background, scenario or rule")}))))}},function(e,t,n){"use strict";var r=this&&this.__values||function(e){var t="function"==typeof Symbol&&Symbol.iterator,n=t&&e[t],r=0;if(n)return n.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&r>=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(t,"__esModule",{value:!0}),t.fillInChunks=t.findChunks=t.combineChunks=t.findAll=void 0,t.findAll=function(e){var n=e.autoEscape,r=e.caseSensitive,a=void 0!==r&&r,o=e.findChunks,c=void 0===o?i:o,s=e.sanitize,u=e.searchWords,l=e.textToHighlight,f=e.htmlText;return t.fillInChunks({chunksToHighlight:t.combineChunks({chunks:c({autoEscape:n,caseSensitive:a,sanitize:s,searchWords:u,textToHighlight:l,htmlText:f})}),totalLength:l?l.length:0})},t.combineChunks=function(e){var t=e.chunks;return t=t.sort((function(e,t){return e.start-t.start})).reduce((function(e,t){if(0===e.length)return[t];var n=e.pop();if(t.start<=n.end){var r=Math.max(n.end,t.end);e.push({highlight:!1,start:n.start,end:r})}else e.push(n,t);return e}),[])};var i=function(e){var t=e.autoEscape,n=e.caseSensitive,r=e.sanitize,i=void 0===r?a:r,c=e.searchWords,s=e.textToHighlight,u=e.htmlText;s=i(s);var l=u?function(e){var t,n=new RegExp(/<\/?\w+((\s+\w+(\s*=\s*(?:".*?"|'.*?'|[\^'">\s]+))?)+\s*|\s*)\/?>/,"g"),r=[];for(;t=n.exec(e);)r.push({start:t.index,end:n.lastIndex}),t.index===n.lastIndex&&n.lastIndex++;return r}(s):[];return c.filter((function(e){return e})).reduce((function(e,r){r=i(r),t&&(r=r.replace(/[\-\[\]/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&"));for(var a,c=new RegExp(r,n?"g":"gi");a=c.exec(s);){var f=a.index,h=c.lastIndex;h>f&&(u&&o(f,h,l)||e.push({highlight:!1,start:f,end:h})),a.index===c.lastIndex&&c.lastIndex++}return e}),[])};function a(e){return e}function o(e,t,n){var i,a;try{for(var o=r(n),c=o.next();!c.done;c=o.next()){var s=c.value;if(e>s.start&&t<s.end)return!0}}catch(e){i={error:e}}finally{try{c&&!c.done&&(a=o.return)&&a.call(o)}finally{if(i)throw i.error}}return!1}t.findChunks=i,t.fillInChunks=function(e){var t=e.chunksToHighlight,n=e.totalLength,r=[],i=function(e,t,n){t-e>0&&r.push({start:e,end:t,highlight:n})};if(0===t.length)i(0,n,!1);else{var a=0;t.forEach((function(e){i(a,e.start,!1),i(e.start,e.end,!0),a=e.end})),i(a,n,!1)}return r}},function(e,t,n){e.exports=function(){"use strict";function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function t(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function n(e,n){var r;if("undefined"==typeof Symbol||null==e[Symbol.iterator]){if(Array.isArray(e)||(r=function(e,n){if(e){if("string"==typeof e)return t(e,n);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?t(e,n):void 0}}(e))||n&&e&&"number"==typeof e.length){r&&(e=r);var i=0;return function(){return i>=e.length?{done:!0}:{done:!1,value:e[i++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}return(r=e[Symbol.iterator]()).next.bind(r)}var r=function(e,t){return e(t={exports:{}},t.exports),t.exports}((function(e){function t(){return{baseUrl:null,breaks:!1,gfm:!0,headerIds:!0,headerPrefix:"",highlight:null,langPrefix:"language-",mangle:!0,pedantic:!1,renderer:null,sanitize:!1,sanitizer:null,silent:!1,smartLists:!1,smartypants:!1,tokenizer:null,walkTokens:null,xhtml:!1}}e.exports={defaults:{baseUrl:null,breaks:!1,gfm:!0,headerIds:!0,headerPrefix:"",highlight:null,langPrefix:"language-",mangle:!0,pedantic:!1,renderer:null,sanitize:!1,sanitizer:null,silent:!1,smartLists:!1,smartypants:!1,tokenizer:null,walkTokens:null,xhtml:!1},getDefaults:t,changeDefaults:function(t){e.exports.defaults=t}}})),i=(r.defaults,r.getDefaults,r.changeDefaults,/[&<>"']/),a=/[&<>"']/g,o=/[<>"']|&(?!#?\w+;)/,c=/[<>"']|&(?!#?\w+;)/g,s={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"},u=function(e){return s[e]},l=/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/gi;function f(e){return e.replace(l,(function(e,t){return"colon"===(t=t.toLowerCase())?":":"#"===t.charAt(0)?"x"===t.charAt(1)?String.fromCharCode(parseInt(t.substring(2),16)):String.fromCharCode(+t.substring(1)):""}))}var h=/(^|[^\[])\^/g,d=/[^\w:]/g,p=/^$|^[a-z][a-z0-9+.-]*:|^[?#]/i,m={},v=/^[^:]+:\/*[^/]*$/,g=/^([^:]+:)[\s\S]*$/,y=/^([^:]+:\/*[^/]*)[\s\S]*$/;function b(e,t){m[" "+e]||(v.test(e)?m[" "+e]=e+"/":m[" "+e]=w(e,"/",!0));var n=-1===(e=m[" "+e]).indexOf(":");return"//"===t.substring(0,2)?n?t:e.replace(g,"$1")+t:"/"===t.charAt(0)?n?t:e.replace(y,"$1")+t:e+t}function w(e,t,n){var r=e.length;if(0===r)return"";for(var i=0;i<r;){var a=e.charAt(r-i-1);if(a!==t||n){if(a===t||!n)break;i++}else i++}return e.substr(0,r-i)}var x=function(e,t){if(t){if(i.test(e))return e.replace(a,u)}else if(o.test(e))return e.replace(c,u);return e},S=f,k=function(e,t){e=e.source||e,t=t||"";var n={replace:function(t,r){return r=(r=r.source||r).replace(h,"$1"),e=e.replace(t,r),n},getRegex:function(){return new RegExp(e,t)}};return n},_=function(e,t,n){if(e){var r;try{r=decodeURIComponent(f(n)).replace(d,"").toLowerCase()}catch(e){return null}if(0===r.indexOf("javascript:")||0===r.indexOf("vbscript:")||0===r.indexOf("data:"))return null}t&&!p.test(n)&&(n=b(t,n));try{n=encodeURI(n).replace(/%25/g,"%")}catch(e){return null}return n},z={exec:function(){}},C=function(e){for(var t,n,r=1;r<arguments.length;r++)for(n in t=arguments[r])Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e},M=function(e,t){var n=e.replace(/\|/g,(function(e,t,n){for(var r=!1,i=t;--i>=0&&"\\"===n[i];)r=!r;return r?"|":" |"})).split(/ \|/),r=0;if(n.length>t)n.splice(t);else for(;n.length<t;)n.push("");for(;r<n.length;r++)n[r]=n[r].trim().replace(/\\\|/g,"|");return n},O=w,T=function(e,t){if(-1===e.indexOf(t[1]))return-1;for(var n=e.length,r=0,i=0;i<n;i++)if("\\"===e[i])i++;else if(e[i]===t[0])r++;else if(e[i]===t[1]&&--r<0)return i;return-1},E=function(e){e&&e.sanitize&&!e.silent&&console.warn("marked(): sanitize and sanitizer parameters are deprecated since version 0.7.0, should not be used and will be removed in the future. Read more here: https://marked.js.org/#/USING_ADVANCED.md#options")},L=r.defaults,A=O,R=M,N=x,H=T;function P(e,t,n){var r=t.href,i=t.title?N(t.title):null,a=e[1].replace(/\\([\[\]])/g,"$1");return"!"!==e[0].charAt(0)?{type:"link",raw:n,href:r,title:i,text:a}:{type:"image",raw:n,href:r,title:i,text:N(a)}}var j=function(){function e(e){this.options=e||L}var t=e.prototype;return t.space=function(e){var t=this.rules.block.newline.exec(e);if(t)return t[0].length>1?{type:"space",raw:t[0]}:{raw:"\n"}},t.code=function(e,t){var n=this.rules.block.code.exec(e);if(n){var r=t[t.length-1];if(r&&"paragraph"===r.type)return{raw:n[0],text:n[0].trimRight()};var i=n[0].replace(/^ {4}/gm,"");return{type:"code",raw:n[0],codeBlockStyle:"indented",text:this.options.pedantic?i:A(i,"\n")}}},t.fences=function(e){var t=this.rules.block.fences.exec(e);if(t){var n=t[0],r=function(e,t){var n=e.match(/^(\s+)(?:```)/);if(null===n)return t;var r=n[1];return t.split("\n").map((function(e){var t=e.match(/^\s+/);return null===t?e:t[0].length>=r.length?e.slice(r.length):e})).join("\n")}(n,t[3]||"");return{type:"code",raw:n,lang:t[2]?t[2].trim():t[2],text:r}}},t.heading=function(e){var t=this.rules.block.heading.exec(e);if(t)return{type:"heading",raw:t[0],depth:t[1].length,text:t[2]}},t.nptable=function(e){var t=this.rules.block.nptable.exec(e);if(t){var n={type:"table",header:R(t[1].replace(/^ *| *\| *$/g,"")),align:t[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:t[3]?t[3].replace(/\n$/,"").split("\n"):[],raw:t[0]};if(n.header.length===n.align.length){var r,i=n.align.length;for(r=0;r<i;r++)/^ *-+: *$/.test(n.align[r])?n.align[r]="right":/^ *:-+: *$/.test(n.align[r])?n.align[r]="center":/^ *:-+ *$/.test(n.align[r])?n.align[r]="left":n.align[r]=null;for(i=n.cells.length,r=0;r<i;r++)n.cells[r]=R(n.cells[r],n.header.length);return n}}},t.hr=function(e){var t=this.rules.block.hr.exec(e);if(t)return{type:"hr",raw:t[0]}},t.blockquote=function(e){var t=this.rules.block.blockquote.exec(e);if(t){var n=t[0].replace(/^ *> ?/gm,"");return{type:"blockquote",raw:t[0],text:n}}},t.list=function(e){var t=this.rules.block.list.exec(e);if(t){for(var n,r,i,a,o,c,s,u=t[0],l=t[2],f=l.length>1,h=")"===l[l.length-1],d={type:"list",raw:u,ordered:f,start:f?+l.slice(0,-1):"",loose:!1,items:[]},p=t[0].match(this.rules.block.item),m=!1,v=p.length,g=0;g<v;g++)u=n=p[g],r=n.length,~(n=n.replace(/^ *([*+-]|\d+[.)]) */,"")).indexOf("\n ")&&(r-=n.length,n=this.options.pedantic?n.replace(/^ {1,4}/gm,""):n.replace(new RegExp("^ {1,"+r+"}","gm"),"")),g!==v-1&&(i=this.rules.block.bullet.exec(p[g+1])[0],(f?1===i.length||!h&&")"===i[i.length-1]:i.length>1||this.options.smartLists&&i!==l)&&(a=p.slice(g+1).join("\n"),d.raw=d.raw.substring(0,d.raw.length-a.length),g=v-1)),o=m||/\n\n(?!\s*$)/.test(n),g!==v-1&&(m="\n"===n.charAt(n.length-1),o||(o=m)),o&&(d.loose=!0),s=void 0,(c=/^\[[ xX]\] /.test(n))&&(s=" "!==n[1],n=n.replace(/^\[[ xX]\] +/,"")),d.items.push({type:"list_item",raw:u,task:c,checked:s,loose:o,text:n});return d}},t.html=function(e){var t=this.rules.block.html.exec(e);if(t)return{type:this.options.sanitize?"paragraph":"html",raw:t[0],pre:!this.options.sanitizer&&("pre"===t[1]||"script"===t[1]||"style"===t[1]),text:this.options.sanitize?this.options.sanitizer?this.options.sanitizer(t[0]):N(t[0]):t[0]}},t.def=function(e){var t=this.rules.block.def.exec(e);if(t)return t[3]&&(t[3]=t[3].substring(1,t[3].length-1)),{tag:t[1].toLowerCase().replace(/\s+/g," "),raw:t[0],href:t[2],title:t[3]}},t.table=function(e){var t=this.rules.block.table.exec(e);if(t){var n={type:"table",header:R(t[1].replace(/^ *| *\| *$/g,"")),align:t[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:t[3]?t[3].replace(/\n$/,"").split("\n"):[]};if(n.header.length===n.align.length){n.raw=t[0];var r,i=n.align.length;for(r=0;r<i;r++)/^ *-+: *$/.test(n.align[r])?n.align[r]="right":/^ *:-+: *$/.test(n.align[r])?n.align[r]="center":/^ *:-+ *$/.test(n.align[r])?n.align[r]="left":n.align[r]=null;for(i=n.cells.length,r=0;r<i;r++)n.cells[r]=R(n.cells[r].replace(/^ *\| *| *\| *$/g,""),n.header.length);return n}}},t.lheading=function(e){var t=this.rules.block.lheading.exec(e);if(t)return{type:"heading",raw:t[0],depth:"="===t[2].charAt(0)?1:2,text:t[1]}},t.paragraph=function(e){var t=this.rules.block.paragraph.exec(e);if(t)return{type:"paragraph",raw:t[0],text:"\n"===t[1].charAt(t[1].length-1)?t[1].slice(0,-1):t[1]}},t.text=function(e,t){var n=this.rules.block.text.exec(e);if(n){var r=t[t.length-1];return r&&"text"===r.type?{raw:n[0],text:n[0]}:{type:"text",raw:n[0],text:n[0]}}},t.escape=function(e){var t=this.rules.inline.escape.exec(e);if(t)return{type:"escape",raw:t[0],text:N(t[1])}},t.tag=function(e,t,n){var r=this.rules.inline.tag.exec(e);if(r)return!t&&/^<a /i.test(r[0])?t=!0:t&&/^<\/a>/i.test(r[0])&&(t=!1),!n&&/^<(pre|code|kbd|script)(\s|>)/i.test(r[0])?n=!0:n&&/^<\/(pre|code|kbd|script)(\s|>)/i.test(r[0])&&(n=!1),{type:this.options.sanitize?"text":"html",raw:r[0],inLink:t,inRawBlock:n,text:this.options.sanitize?this.options.sanitizer?this.options.sanitizer(r[0]):N(r[0]):r[0]}},t.link=function(e){var t=this.rules.inline.link.exec(e);if(t){var n=H(t[2],"()");if(n>-1){var r=(0===t[0].indexOf("!")?5:4)+t[1].length+n;t[2]=t[2].substring(0,n),t[0]=t[0].substring(0,r).trim(),t[3]=""}var i=t[2],a="";if(this.options.pedantic){var o=/^([^'"]*[^\s])\s+(['"])(.*)\2/.exec(i);o?(i=o[1],a=o[3]):a=""}else a=t[3]?t[3].slice(1,-1):"";return P(t,{href:(i=i.trim().replace(/^<([\s\S]*)>$/,"$1"))?i.replace(this.rules.inline._escapes,"$1"):i,title:a?a.replace(this.rules.inline._escapes,"$1"):a},t[0])}},t.reflink=function(e,t){var n;if((n=this.rules.inline.reflink.exec(e))||(n=this.rules.inline.nolink.exec(e))){var r=(n[2]||n[1]).replace(/\s+/g," ");if(!(r=t[r.toLowerCase()])||!r.href){var i=n[0].charAt(0);return{type:"text",raw:i,text:i}}return P(n,r,n[0])}},t.strong=function(e,t,n){void 0===n&&(n="");var r=this.rules.inline.strong.start.exec(e);if(r&&(!r[1]||r[1]&&(""===n||this.rules.inline.punctuation.exec(n)))){t=t.slice(-1*e.length);var i,a="**"===r[0]?this.rules.inline.strong.endAst:this.rules.inline.strong.endUnd;for(a.lastIndex=0;null!=(r=a.exec(t));)if(i=this.rules.inline.strong.middle.exec(t.slice(0,r.index+3)))return{type:"strong",raw:e.slice(0,i[0].length),text:e.slice(2,i[0].length-2)}}},t.em=function(e,t,n){void 0===n&&(n="");var r=this.rules.inline.em.start.exec(e);if(r&&(!r[1]||r[1]&&(""===n||this.rules.inline.punctuation.exec(n)))){t=t.slice(-1*e.length);var i,a="*"===r[0]?this.rules.inline.em.endAst:this.rules.inline.em.endUnd;for(a.lastIndex=0;null!=(r=a.exec(t));)if(i=this.rules.inline.em.middle.exec(t.slice(0,r.index+2)))return{type:"em",raw:e.slice(0,i[0].length),text:e.slice(1,i[0].length-1)}}},t.codespan=function(e){var t=this.rules.inline.code.exec(e);if(t){var n=t[2].replace(/\n/g," "),r=/[^ ]/.test(n),i=n.startsWith(" ")&&n.endsWith(" ");return r&&i&&(n=n.substring(1,n.length-1)),n=N(n,!0),{type:"codespan",raw:t[0],text:n}}},t.br=function(e){var t=this.rules.inline.br.exec(e);if(t)return{type:"br",raw:t[0]}},t.del=function(e){var t=this.rules.inline.del.exec(e);if(t)return{type:"del",raw:t[0],text:t[1]}},t.autolink=function(e,t){var n,r,i=this.rules.inline.autolink.exec(e);if(i)return r="@"===i[2]?"mailto:"+(n=N(this.options.mangle?t(i[1]):i[1])):n=N(i[1]),{type:"link",raw:i[0],text:n,href:r,tokens:[{type:"text",raw:n,text:n}]}},t.url=function(e,t){var n;if(n=this.rules.inline.url.exec(e)){var r,i;if("@"===n[2])i="mailto:"+(r=N(this.options.mangle?t(n[0]):n[0]));else{var a;do{a=n[0],n[0]=this.rules.inline._backpedal.exec(n[0])[0]}while(a!==n[0]);r=N(n[0]),i="www."===n[1]?"http://"+r:r}return{type:"link",raw:n[0],text:r,href:i,tokens:[{type:"text",raw:r,text:r}]}}},t.inlineText=function(e,t,n){var r,i=this.rules.inline.text.exec(e);if(i)return r=t?this.options.sanitize?this.options.sanitizer?this.options.sanitizer(i[0]):N(i[0]):i[0]:N(this.options.smartypants?n(i[0]):i[0]),{type:"text",raw:i[0],text:r}},e}(),V=z,D=k,I=C,F={newline:/^\n+/,code:/^( {4}[^\n]+\n*)+/,fences:/^ {0,3}(`{3,}(?=[^`\n]*\n)|~{3,})([^\n]*)\n(?:|([\s\S]*?)\n)(?: {0,3}\1[~`]* *(?:\n+|$)|$)/,hr:/^ {0,3}((?:- *){3,}|(?:_ *){3,}|(?:\* *){3,})(?:\n+|$)/,heading:/^ {0,3}(#{1,6}) +([^\n]*?)(?: +#+)? *(?:\n+|$)/,blockquote:/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/,list:/^( {0,3})(bull) [\s\S]+?(?:hr|def|\n{2,}(?! )(?!\1bull )\n*|\s*$)/,html:"^ {0,3}(?:<(script|pre|style)[\\s>][\\s\\S]*?(?:</\\1>[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?\\?>\\n*|<![A-Z][\\s\\S]*?>\\n*|<!\\[CDATA\\[[\\s\\S]*?\\]\\]>\\n*|</?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:\\n{2,}|$)|<(?!script|pre|style)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:\\n{2,}|$)|</(?!script|pre|style)[a-z][\\w-]*\\s*>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:\\n{2,}|$))",def:/^ {0,3}\[(label)\]: *\n? *<?([^\s>]+)>?(?:(?: +\n? *| *\n *)(title))? *(?:\n+|$)/,nptable:V,table:V,lheading:/^([^\n]+)\n {0,3}(=+|-+) *(?:\n+|$)/,_paragraph:/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html)[^\n]+)*)/,text:/^[^\n]+/,_label:/(?!\s*\])(?:\\[\[\]]|[^\[\]])+/,_title:/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/};F.def=D(F.def).replace("label",F._label).replace("title",F._title).getRegex(),F.bullet=/(?:[*+-]|\d{1,9}[.)])/,F.item=/^( *)(bull) ?[^\n]*(?:\n(?!\1bull ?)[^\n]*)*/,F.item=D(F.item,"gm").replace(/bull/g,F.bullet).getRegex(),F.list=D(F.list).replace(/bull/g,F.bullet).replace("hr","\\n+(?=\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$))").replace("def","\\n+(?="+F.def.source+")").getRegex(),F._tag="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",F._comment=/<!--(?!-?>)[\s\S]*?-->/,F.html=D(F.html,"i").replace("comment",F._comment).replace("tag",F._tag).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),F.paragraph=D(F._paragraph).replace("hr",F.hr).replace("heading"," {0,3}#{1,6} ").replace("|lheading","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|!--)").replace("tag",F._tag).getRegex(),F.blockquote=D(F.blockquote).replace("paragraph",F.paragraph).getRegex(),F.normal=I({},F),F.gfm=I({},F.normal,{nptable:"^ *([^|\\n ].*\\|.*)\\n *([-:]+ *\\|[-| :]*)(?:\\n((?:(?!\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)",table:"^ *\\|(.+)\\n *\\|?( *[-:]+[-| :]*)(?:\\n *((?:(?!\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)"}),F.gfm.nptable=D(F.gfm.nptable).replace("hr",F.hr).replace("heading"," {0,3}#{1,6} ").replace("blockquote"," {0,3}>").replace("code"," {4}[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|!--)").replace("tag",F._tag).getRegex(),F.gfm.table=D(F.gfm.table).replace("hr",F.hr).replace("heading"," {0,3}#{1,6} ").replace("blockquote"," {0,3}>").replace("code"," {4}[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|!--)").replace("tag",F._tag).getRegex(),F.pedantic=I({},F.normal,{html:D("^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)|<tag(?:\"[^\"]*\"|'[^']*'|\\s[^'\"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))").replace("comment",F._comment).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^ *(#{1,6}) *([^\n]+?) *(?:#+ *)?(?:\n+|$)/,fences:V,paragraph:D(F.normal._paragraph).replace("hr",F.hr).replace("heading"," *#{1,6} *[^\n]").replace("lheading",F.lheading).replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").getRegex()});var B={escape:/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,autolink:/^<(scheme:[^\s\x00-\x1f<>]*|email)>/,url:V,tag:"^comment|^</[a-zA-Z][\\w:-]*\\s*>|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^<![a-zA-Z]+\\s[\\s\\S]*?>|^<!\\[CDATA\\[[\\s\\S]*?\\]\\]>",link:/^!?\[(label)\]\(\s*(href)(?:\s+(title))?\s*\)/,reflink:/^!?\[(label)\]\[(?!\s*\])((?:\\[\[\]]?|[^\[\]\\])+)\]/,nolink:/^!?\[(?!\s*\])((?:\[[^\[\]]*\]|\\[\[\]]|[^\[\]])*)\](?:\[\])?/,reflinkSearch:"reflink|nolink(?!\\()",strong:{start:/^(?:(\*\*(?=[*punctuation]))|\*\*)(?![\s])|__/,middle:/^\*\*(?:(?:(?!overlapSkip)(?:[^*]|\\\*)|overlapSkip)|\*(?:(?!overlapSkip)(?:[^*]|\\\*)|overlapSkip)*?\*)+?\*\*$|^__(?![\s])((?:(?:(?!overlapSkip)(?:[^_]|\\_)|overlapSkip)|_(?:(?!overlapSkip)(?:[^_]|\\_)|overlapSkip)*?_)+?)__$/,endAst:/[^punctuation\s]\*\*(?!\*)|[punctuation]\*\*(?!\*)(?:(?=[punctuation\s]|$))/,endUnd:/[^\s]__(?!_)(?:(?=[punctuation\s])|$)/},em:{start:/^(?:(\*(?=[punctuation]))|\*)(?![*\s])|_/,middle:/^\*(?:(?:(?!overlapSkip)(?:[^*]|\\\*)|overlapSkip)|\*(?:(?!overlapSkip)(?:[^*]|\\\*)|overlapSkip)*?\*)+?\*$|^_(?![_\s])(?:(?:(?!overlapSkip)(?:[^_]|\\_)|overlapSkip)|_(?:(?!overlapSkip)(?:[^_]|\\_)|overlapSkip)*?_)+?_$/,endAst:/[^punctuation\s]\*(?!\*)|[punctuation]\*(?!\*)(?:(?=[punctuation\s]|$))/,endUnd:/[^\s]_(?!_)(?:(?=[punctuation\s])|$)/},code:/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,br:/^( {2,}|\\)\n(?!\s*$)/,del:V,text:/^(`+|[^`])(?:[\s\S]*?(?:(?=[\\<!\[`*]|\b_|$)|[^ ](?= {2,}\n))|(?= {2,}\n))/,punctuation:/^([\s*punctuation])/,_punctuation:"!\"#$%&'()+\\-.,/:;<=>?@\\[\\]`^{|}~"};B.punctuation=D(B.punctuation).replace(/punctuation/g,B._punctuation).getRegex(),B._blockSkip="\\[[^\\]]*?\\]\\([^\\)]*?\\)|`[^`]*?`|<[^>]*?>",B._overlapSkip="__[^_]*?__|\\*\\*\\[^\\*\\]*?\\*\\*",B.em.start=D(B.em.start).replace(/punctuation/g,B._punctuation).getRegex(),B.em.middle=D(B.em.middle).replace(/punctuation/g,B._punctuation).replace(/overlapSkip/g,B._overlapSkip).getRegex(),B.em.endAst=D(B.em.endAst,"g").replace(/punctuation/g,B._punctuation).getRegex(),B.em.endUnd=D(B.em.endUnd,"g").replace(/punctuation/g,B._punctuation).getRegex(),B.strong.start=D(B.strong.start).replace(/punctuation/g,B._punctuation).getRegex(),B.strong.middle=D(B.strong.middle).replace(/punctuation/g,B._punctuation).replace(/blockSkip/g,B._blockSkip).getRegex(),B.strong.endAst=D(B.strong.endAst,"g").replace(/punctuation/g,B._punctuation).getRegex(),B.strong.endUnd=D(B.strong.endUnd,"g").replace(/punctuation/g,B._punctuation).getRegex(),B.blockSkip=D(B._blockSkip,"g").getRegex(),B.overlapSkip=D(B._overlapSkip,"g").getRegex(),B._escapes=/\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/g,B._scheme=/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/,B._email=/[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])?)+(?![-_])/,B.autolink=D(B.autolink).replace("scheme",B._scheme).replace("email",B._email).getRegex(),B._attribute=/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/,B.tag=D(B.tag).replace("comment",F._comment).replace("attribute",B._attribute).getRegex(),B._label=/(?:\[(?:\\.|[^\[\]\\])*\]|\\.|`[^`]*`|[^\[\]\\`])*?/,B._href=/<(?:\\[<>]?|[^\s<>\\])*>|[^\s\x00-\x1f]*/,B._title=/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/,B.link=D(B.link).replace("label",B._label).replace("href",B._href).replace("title",B._title).getRegex(),B.reflink=D(B.reflink).replace("label",B._label).getRegex(),B.reflinkSearch=D(B.reflinkSearch,"g").replace("reflink",B.reflink).replace("nolink",B.nolink).getRegex(),B.normal=I({},B),B.pedantic=I({},B.normal,{strong:{start:/^__|\*\*/,middle:/^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/,endAst:/\*\*(?!\*)/g,endUnd:/__(?!_)/g},em:{start:/^_|\*/,middle:/^()\*(?=\S)([\s\S]*?\S)\*(?!\*)|^_(?=\S)([\s\S]*?\S)_(?!_)/,endAst:/\*(?!\*)/g,endUnd:/_(?!_)/g},link:D(/^!?\[(label)\]\((.*?)\)/).replace("label",B._label).getRegex(),reflink:D(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",B._label).getRegex()}),B.gfm=I({},B.normal,{escape:D(B.escape).replace("])","~|])").getRegex(),_extended_email:/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/,url:/^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/,_backpedal:/(?:[^?!.,:;*_~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_~)]+(?!$))+/,del:/^~+(?=\S)([\s\S]*?\S)~+/,text:/^(`+|[^`])(?:[\s\S]*?(?:(?=[\\<!\[`*~]|\b_|https?:\/\/|ftp:\/\/|www\.|$)|[^ ](?= {2,}\n)|[^a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-](?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@))|(?= {2,}\n|[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@))/}),B.gfm.url=D(B.gfm.url,"i").replace("email",B.gfm._extended_email).getRegex(),B.breaks=I({},B.gfm,{br:D(B.br).replace("{2,}","*").getRegex(),text:D(B.gfm.text).replace("\\b_","\\b_| {2,}\\n").replace(/\{2,\}/g,"*").getRegex()});var U={block:F,inline:B},q=r.defaults,G=U.block,W=U.inline;function Z(e){return e.replace(/---/g,"—").replace(/--/g,"–").replace(/(^|[-\u2014/(\[{"\s])'/g,"$1‘").replace(/'/g,"’").replace(/(^|[-\u2014/(\[{\u2018\s])"/g,"$1“").replace(/"/g,"”").replace(/\.{3}/g,"…")}function $(e){var t,n,r="",i=e.length;for(t=0;t<i;t++)n=e.charCodeAt(t),Math.random()>.5&&(n="x"+n.toString(16)),r+="&#"+n+";";return r}var J=function(){function t(e){this.tokens=[],this.tokens.links=Object.create(null),this.options=e||q,this.options.tokenizer=this.options.tokenizer||new j,this.tokenizer=this.options.tokenizer,this.tokenizer.options=this.options;var t={block:G.normal,inline:W.normal};this.options.pedantic?(t.block=G.pedantic,t.inline=W.pedantic):this.options.gfm&&(t.block=G.gfm,this.options.breaks?t.inline=W.breaks:t.inline=W.gfm),this.tokenizer.rules=t}t.lex=function(e,n){return new t(n).lex(e)};var n,r,i,a=t.prototype;return a.lex=function(e){return e=e.replace(/\r\n|\r/g,"\n").replace(/\t/g,"    "),this.blockTokens(e,this.tokens,!0),this.inline(this.tokens),this.tokens},a.blockTokens=function(e,t,n){var r,i,a,o;for(void 0===t&&(t=[]),void 0===n&&(n=!0),e=e.replace(/^ +$/gm,"");e;)if(r=this.tokenizer.space(e))e=e.substring(r.raw.length),r.type&&t.push(r);else if(r=this.tokenizer.code(e,t))e=e.substring(r.raw.length),r.type?t.push(r):((o=t[t.length-1]).raw+="\n"+r.raw,o.text+="\n"+r.text);else if(r=this.tokenizer.fences(e))e=e.substring(r.raw.length),t.push(r);else if(r=this.tokenizer.heading(e))e=e.substring(r.raw.length),t.push(r);else if(r=this.tokenizer.nptable(e))e=e.substring(r.raw.length),t.push(r);else if(r=this.tokenizer.hr(e))e=e.substring(r.raw.length),t.push(r);else if(r=this.tokenizer.blockquote(e))e=e.substring(r.raw.length),r.tokens=this.blockTokens(r.text,[],n),t.push(r);else if(r=this.tokenizer.list(e)){for(e=e.substring(r.raw.length),a=r.items.length,i=0;i<a;i++)r.items[i].tokens=this.blockTokens(r.items[i].text,[],!1);t.push(r)}else if(r=this.tokenizer.html(e))e=e.substring(r.raw.length),t.push(r);else if(n&&(r=this.tokenizer.def(e)))e=e.substring(r.raw.length),this.tokens.links[r.tag]||(this.tokens.links[r.tag]={href:r.href,title:r.title});else if(r=this.tokenizer.table(e))e=e.substring(r.raw.length),t.push(r);else if(r=this.tokenizer.lheading(e))e=e.substring(r.raw.length),t.push(r);else if(n&&(r=this.tokenizer.paragraph(e)))e=e.substring(r.raw.length),t.push(r);else if(r=this.tokenizer.text(e,t))e=e.substring(r.raw.length),r.type?t.push(r):((o=t[t.length-1]).raw+="\n"+r.raw,o.text+="\n"+r.text);else if(e){var c="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent){console.error(c);break}throw new Error(c)}return t},a.inline=function(e){var t,n,r,i,a,o,c=e.length;for(t=0;t<c;t++)switch((o=e[t]).type){case"paragraph":case"text":case"heading":o.tokens=[],this.inlineTokens(o.text,o.tokens);break;case"table":for(o.tokens={header:[],cells:[]},i=o.header.length,n=0;n<i;n++)o.tokens.header[n]=[],this.inlineTokens(o.header[n],o.tokens.header[n]);for(i=o.cells.length,n=0;n<i;n++)for(a=o.cells[n],o.tokens.cells[n]=[],r=0;r<a.length;r++)o.tokens.cells[n][r]=[],this.inlineTokens(a[r],o.tokens.cells[n][r]);break;case"blockquote":this.inline(o.tokens);break;case"list":for(i=o.items.length,n=0;n<i;n++)this.inline(o.items[n].tokens)}return e},a.inlineTokens=function(e,t,n,r,i){var a;void 0===t&&(t=[]),void 0===n&&(n=!1),void 0===r&&(r=!1),void 0===i&&(i="");var o,c=e;if(this.tokens.links){var s=Object.keys(this.tokens.links);if(s.length>0)for(;null!=(o=this.tokenizer.rules.inline.reflinkSearch.exec(c));)s.includes(o[0].slice(o[0].lastIndexOf("[")+1,-1))&&(c=c.slice(0,o.index)+"["+"a".repeat(o[0].length-2)+"]"+c.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;null!=(o=this.tokenizer.rules.inline.blockSkip.exec(c));)c=c.slice(0,o.index)+"["+"a".repeat(o[0].length-2)+"]"+c.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);for(;e;)if(a=this.tokenizer.escape(e))e=e.substring(a.raw.length),t.push(a);else if(a=this.tokenizer.tag(e,n,r))e=e.substring(a.raw.length),n=a.inLink,r=a.inRawBlock,t.push(a);else if(a=this.tokenizer.link(e))e=e.substring(a.raw.length),"link"===a.type&&(a.tokens=this.inlineTokens(a.text,[],!0,r)),t.push(a);else if(a=this.tokenizer.reflink(e,this.tokens.links))e=e.substring(a.raw.length),"link"===a.type&&(a.tokens=this.inlineTokens(a.text,[],!0,r)),t.push(a);else if(a=this.tokenizer.strong(e,c,i))e=e.substring(a.raw.length),a.tokens=this.inlineTokens(a.text,[],n,r),t.push(a);else if(a=this.tokenizer.em(e,c,i))e=e.substring(a.raw.length),a.tokens=this.inlineTokens(a.text,[],n,r),t.push(a);else if(a=this.tokenizer.codespan(e))e=e.substring(a.raw.length),t.push(a);else if(a=this.tokenizer.br(e))e=e.substring(a.raw.length),t.push(a);else if(a=this.tokenizer.del(e))e=e.substring(a.raw.length),a.tokens=this.inlineTokens(a.text,[],n,r),t.push(a);else if(a=this.tokenizer.autolink(e,$))e=e.substring(a.raw.length),t.push(a);else if(n||!(a=this.tokenizer.url(e,$))){if(a=this.tokenizer.inlineText(e,r,Z))e=e.substring(a.raw.length),i=a.raw.slice(-1),t.push(a);else if(e){var u="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent){console.error(u);break}throw new Error(u)}}else e=e.substring(a.raw.length),t.push(a);return t},n=t,i=[{key:"rules",get:function(){return{block:G,inline:W}}}],(r=null)&&e(n.prototype,r),i&&e(n,i),t}(),K=r.defaults,Q=_,Y=x,X=function(){function e(e){this.options=e||K}var t=e.prototype;return t.code=function(e,t,n){var r=(t||"").match(/\S*/)[0];if(this.options.highlight){var i=this.options.highlight(e,r);null!=i&&i!==e&&(n=!0,e=i)}return r?'<pre><code class="'+this.options.langPrefix+Y(r,!0)+'">'+(n?e:Y(e,!0))+"</code></pre>\n":"<pre><code>"+(n?e:Y(e,!0))+"</code></pre>\n"},t.blockquote=function(e){return"<blockquote>\n"+e+"</blockquote>\n"},t.html=function(e){return e},t.heading=function(e,t,n,r){return this.options.headerIds?"<h"+t+' id="'+this.options.headerPrefix+r.slug(n)+'">'+e+"</h"+t+">\n":"<h"+t+">"+e+"</h"+t+">\n"},t.hr=function(){return this.options.xhtml?"<hr/>\n":"<hr>\n"},t.list=function(e,t,n){var r=t?"ol":"ul";return"<"+r+(t&&1!==n?' start="'+n+'"':"")+">\n"+e+"</"+r+">\n"},t.listitem=function(e){return"<li>"+e+"</li>\n"},t.checkbox=function(e){return"<input "+(e?'checked="" ':"")+'disabled="" type="checkbox"'+(this.options.xhtml?" /":"")+"> "},t.paragraph=function(e){return"<p>"+e+"</p>\n"},t.table=function(e,t){return t&&(t="<tbody>"+t+"</tbody>"),"<table>\n<thead>\n"+e+"</thead>\n"+t+"</table>\n"},t.tablerow=function(e){return"<tr>\n"+e+"</tr>\n"},t.tablecell=function(e,t){var n=t.header?"th":"td";return(t.align?"<"+n+' align="'+t.align+'">':"<"+n+">")+e+"</"+n+">\n"},t.strong=function(e){return"<strong>"+e+"</strong>"},t.em=function(e){return"<em>"+e+"</em>"},t.codespan=function(e){return"<code>"+e+"</code>"},t.br=function(){return this.options.xhtml?"<br/>":"<br>"},t.del=function(e){return"<del>"+e+"</del>"},t.link=function(e,t,n){if(null===(e=Q(this.options.sanitize,this.options.baseUrl,e)))return n;var r='<a href="'+Y(e)+'"';return t&&(r+=' title="'+t+'"'),r+=">"+n+"</a>"},t.image=function(e,t,n){if(null===(e=Q(this.options.sanitize,this.options.baseUrl,e)))return n;var r='<img src="'+e+'" alt="'+n+'"';return t&&(r+=' title="'+t+'"'),r+=this.options.xhtml?"/>":">"},t.text=function(e){return e},e}(),ee=function(){function e(){}var t=e.prototype;return t.strong=function(e){return e},t.em=function(e){return e},t.codespan=function(e){return e},t.del=function(e){return e},t.html=function(e){return e},t.text=function(e){return e},t.link=function(e,t,n){return""+n},t.image=function(e,t,n){return""+n},t.br=function(){return""},e}(),te=function(){function e(){this.seen={}}return e.prototype.slug=function(e){var t=e.toLowerCase().trim().replace(/<[!\/a-z].*?>/gi,"").replace(/[\u2000-\u206F\u2E00-\u2E7F\\'!"#$%&()*+,./:;<=>?@[\]^`{|}~]/g,"").replace(/\s/g,"-");if(this.seen.hasOwnProperty(t)){var n=t;do{this.seen[n]++,t=n+"-"+this.seen[n]}while(this.seen.hasOwnProperty(t))}return this.seen[t]=0,t},e}(),ne=r.defaults,re=S,ie=function(){function e(e){this.options=e||ne,this.options.renderer=this.options.renderer||new X,this.renderer=this.options.renderer,this.renderer.options=this.options,this.textRenderer=new ee,this.slugger=new te}e.parse=function(t,n){return new e(n).parse(t)};var t=e.prototype;return t.parse=function(e,t){void 0===t&&(t=!0);var n,r,i,a,o,c,s,u,l,f,h,d,p,m,v,g,y,b,w="",x=e.length;for(n=0;n<x;n++)switch((f=e[n]).type){case"space":continue;case"hr":w+=this.renderer.hr();continue;case"heading":w+=this.renderer.heading(this.parseInline(f.tokens),f.depth,re(this.parseInline(f.tokens,this.textRenderer)),this.slugger);continue;case"code":w+=this.renderer.code(f.text,f.lang,f.escaped);continue;case"table":for(u="",s="",a=f.header.length,r=0;r<a;r++)s+=this.renderer.tablecell(this.parseInline(f.tokens.header[r]),{header:!0,align:f.align[r]});for(u+=this.renderer.tablerow(s),l="",a=f.cells.length,r=0;r<a;r++){for(s="",o=(c=f.tokens.cells[r]).length,i=0;i<o;i++)s+=this.renderer.tablecell(this.parseInline(c[i]),{header:!1,align:f.align[i]});l+=this.renderer.tablerow(s)}w+=this.renderer.table(u,l);continue;case"blockquote":l=this.parse(f.tokens),w+=this.renderer.blockquote(l);continue;case"list":for(h=f.ordered,d=f.start,p=f.loose,a=f.items.length,l="",r=0;r<a;r++)g=(v=f.items[r]).checked,y=v.task,m="",v.task&&(b=this.renderer.checkbox(g),p?v.tokens.length>0&&"text"===v.tokens[0].type?(v.tokens[0].text=b+" "+v.tokens[0].text,v.tokens[0].tokens&&v.tokens[0].tokens.length>0&&"text"===v.tokens[0].tokens[0].type&&(v.tokens[0].tokens[0].text=b+" "+v.tokens[0].tokens[0].text)):v.tokens.unshift({type:"text",text:b}):m+=b),m+=this.parse(v.tokens,p),l+=this.renderer.listitem(m,y,g);w+=this.renderer.list(l,h,d);continue;case"html":w+=this.renderer.html(f.text);continue;case"paragraph":w+=this.renderer.paragraph(this.parseInline(f.tokens));continue;case"text":for(l=f.tokens?this.parseInline(f.tokens):f.text;n+1<x&&"text"===e[n+1].type;)l+="\n"+((f=e[++n]).tokens?this.parseInline(f.tokens):f.text);w+=t?this.renderer.paragraph(l):l;continue;default:var S='Token with "'+f.type+'" type was not found.';if(this.options.silent)return void console.error(S);throw new Error(S)}return w},t.parseInline=function(e,t){t=t||this.renderer;var n,r,i="",a=e.length;for(n=0;n<a;n++)switch((r=e[n]).type){case"escape":i+=t.text(r.text);break;case"html":i+=t.html(r.text);break;case"link":i+=t.link(r.href,r.title,this.parseInline(r.tokens,t));break;case"image":i+=t.image(r.href,r.title,r.text);break;case"strong":i+=t.strong(this.parseInline(r.tokens,t));break;case"em":i+=t.em(this.parseInline(r.tokens,t));break;case"codespan":i+=t.codespan(r.text);break;case"br":i+=t.br();break;case"del":i+=t.del(this.parseInline(r.tokens,t));break;case"text":i+=t.text(r.text);break;default:var o='Token with "'+r.type+'" type was not found.';if(this.options.silent)return void console.error(o);throw new Error(o)}return i},e}(),ae=C,oe=E,ce=x,se=r.getDefaults,ue=r.changeDefaults,le=r.defaults;function fe(e,t,n){if(null==e)throw new Error("marked(): input parameter is undefined or null");if("string"!=typeof e)throw new Error("marked(): input parameter is of type "+Object.prototype.toString.call(e)+", string expected");if("function"==typeof t&&(n=t,t=null),t=ae({},fe.defaults,t||{}),oe(t),n){var r,i=t.highlight;try{r=J.lex(e,t)}catch(e){return n(e)}var a=function(e){var a;if(!e)try{a=ie.parse(r,t)}catch(t){e=t}return t.highlight=i,e?n(e):n(null,a)};if(!i||i.length<3)return a();if(delete t.highlight,!r.length)return a();var o=0;return fe.walkTokens(r,(function(e){"code"===e.type&&(o++,setTimeout((function(){i(e.text,e.lang,(function(t,n){if(t)return a(t);null!=n&&n!==e.text&&(e.text=n,e.escaped=!0),0==--o&&a()}))}),0))})),void(0===o&&a())}try{var c=J.lex(e,t);return t.walkTokens&&fe.walkTokens(c,t.walkTokens),ie.parse(c,t)}catch(e){if(e.message+="\nPlease report this to https://github.com/markedjs/marked.",t.silent)return"<p>An error occurred:</p><pre>"+ce(e.message+"",!0)+"</pre>";throw e}}return fe.options=fe.setOptions=function(e){return ae(fe.defaults,e),ue(fe.defaults),fe},fe.getDefaults=se,fe.defaults=le,fe.use=function(e){var t=ae({},e);if(e.renderer&&function(){var n=fe.defaults.renderer||new X,r=function(t){var r=n[t];n[t]=function(){for(var i=arguments.length,a=new Array(i),o=0;o<i;o++)a[o]=arguments[o];var c=e.renderer[t].apply(n,a);return!1===c&&(c=r.apply(n,a)),c}};for(var i in e.renderer)r(i);t.renderer=n}(),e.tokenizer&&function(){var n=fe.defaults.tokenizer||new j,r=function(t){var r=n[t];n[t]=function(){for(var i=arguments.length,a=new Array(i),o=0;o<i;o++)a[o]=arguments[o];var c=e.tokenizer[t].apply(n,a);return!1===c&&(c=r.apply(n,a)),c}};for(var i in e.tokenizer)r(i);t.tokenizer=n}(),e.walkTokens){var n=fe.defaults.walkTokens;t.walkTokens=function(t){e.walkTokens(t),n&&n(t)}}fe.setOptions(t)},fe.walkTokens=function(e,t){for(var r,i=n(e);!(r=i()).done;){var a=r.value;switch(t(a),a.type){case"table":for(var o,c=n(a.tokens.header);!(o=c()).done;){var s=o.value;fe.walkTokens(s,t)}for(var u,l=n(a.tokens.cells);!(u=l()).done;)for(var f,h=n(u.value);!(f=h()).done;){var d=f.value;fe.walkTokens(d,t)}break;case"list":fe.walkTokens(a.items,t);break;default:a.tokens&&fe.walkTokens(a.tokens,t)}}},fe.Parser=ie,fe.parser=ie.parse,fe.Renderer=X,fe.TextRenderer=ee,fe.Lexer=J,fe.lexer=J.lex,fe.Tokenizer=j,fe.Slugger=te,fe.parse=fe,fe}()},function(e,t,n){"use strict";(function(n){var r,i,a,o;function c(e,t){var n;if("undefined"==typeof Symbol||null==e[Symbol.iterator]){if(Array.isArray(e)||(n=function(e,t){if(!e)return;if("string"==typeof e)return s(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return s(e,t)}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var r=0,i=function(){};return{s:i,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,o=!0,c=!1;return{s:function(){n=e[Symbol.iterator]()},n:function(){var e=n.next();return o=e.done,e},e:function(e){c=!0,a=e},f:function(){try{o||null==n.return||n.return()}finally{if(c)throw a}}}}function s(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function u(e){return(u="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}o=function(){return function e(t,n,r){function i(o,c){if(!n[o]){if(!t[o]){if(a)return a(o,!0);var s=new Error("Cannot find module '"+o+"'");throw s.code="MODULE_NOT_FOUND",s}var u=n[o]={exports:{}};t[o][0].call(u.exports,(function(e){return i(t[o][1][e]||e)}),u,u.exports,e,t,n,r)}return n[o].exports}for(var a=!1,o=0;o<r.length;o++)i(r[o]);return i}({1:[function(e,t,n){n.byteLength=function(e){var t=u(e),n=t[0],r=t[1];return 3*(n+r)/4-r},n.toByteArray=function(e){var t,n,r=u(e),o=r[0],c=r[1],s=new a(function(e,t,n){return 3*(t+n)/4-n}(0,o,c)),l=0,f=c>0?o-4:o;for(n=0;n<f;n+=4)t=i[e.charCodeAt(n)]<<18|i[e.charCodeAt(n+1)]<<12|i[e.charCodeAt(n+2)]<<6|i[e.charCodeAt(n+3)],s[l++]=t>>16&255,s[l++]=t>>8&255,s[l++]=255&t;return 2===c&&(t=i[e.charCodeAt(n)]<<2|i[e.charCodeAt(n+1)]>>4,s[l++]=255&t),1===c&&(t=i[e.charCodeAt(n)]<<10|i[e.charCodeAt(n+1)]<<4|i[e.charCodeAt(n+2)]>>2,s[l++]=t>>8&255,s[l++]=255&t),s},n.fromByteArray=function(e){for(var t,n=e.length,i=n%3,a=[],o=0,c=n-i;o<c;o+=16383)a.push(l(e,o,o+16383>c?c:o+16383));return 1===i?(t=e[n-1],a.push(r[t>>2]+r[t<<4&63]+"==")):2===i&&(t=(e[n-2]<<8)+e[n-1],a.push(r[t>>10]+r[t>>4&63]+r[t<<2&63]+"=")),a.join("")};for(var r=[],i=[],a="undefined"!=typeof Uint8Array?Uint8Array:Array,o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",c=0,s=o.length;c<s;++c)r[c]=o[c],i[o.charCodeAt(c)]=c;function u(e){var t=e.length;if(t%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var n=e.indexOf("=");return-1===n&&(n=t),[n,n===t?0:4-n%4]}function l(e,t,n){for(var i,a,o=[],c=t;c<n;c+=3)i=(e[c]<<16&16711680)+(e[c+1]<<8&65280)+(255&e[c+2]),o.push(r[(a=i)>>18&63]+r[a>>12&63]+r[a>>6&63]+r[63&a]);return o.join("")}i["-".charCodeAt(0)]=62,i["_".charCodeAt(0)]=63},{}],2:[function(e,t,n){},{}],3:[function(e,t,n){(function(t){var r=e("base64-js"),i=e("ieee754");function a(e){if(e>2147483647)throw new RangeError('The value "'+e+'" is invalid for option "size"');var n=new Uint8Array(e);return n.__proto__=t.prototype,n}function t(e,t,n){if("number"==typeof e){if("string"==typeof t)throw new TypeError('The "string" argument must be of type string. Received type number');return s(e)}return o(e,t,n)}function o(e,n,r){if("string"==typeof e)return function(e,n){if("string"==typeof n&&""!==n||(n="utf8"),!t.isEncoding(n))throw new TypeError("Unknown encoding: "+n);var r=0|h(e,n),i=a(r),o=i.write(e,n);return o!==r&&(i=i.slice(0,o)),i}(e,n);if(ArrayBuffer.isView(e))return l(e);if(null==e)throw TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+u(e));if(V(e,ArrayBuffer)||e&&V(e.buffer,ArrayBuffer))return function(e,n,r){if(n<0||e.byteLength<n)throw new RangeError('"offset" is outside of buffer bounds');if(e.byteLength<n+(r||0))throw new RangeError('"length" is outside of buffer bounds');var i;return(i=void 0===n&&void 0===r?new Uint8Array(e):void 0===r?new Uint8Array(e,n):new Uint8Array(e,n,r)).__proto__=t.prototype,i}(e,n,r);if("number"==typeof e)throw new TypeError('The "value" argument must not be of type number. Received type number');var i=e.valueOf&&e.valueOf();if(null!=i&&i!==e)return t.from(i,n,r);var o=function(e){if(t.isBuffer(e)){var n=0|f(e.length),r=a(n);return 0===r.length||e.copy(r,0,0,n),r}return void 0!==e.length?"number"!=typeof e.length||D(e.length)?a(0):l(e):"Buffer"===e.type&&Array.isArray(e.data)?l(e.data):void 0}(e);if(o)return o;if("undefined"!=typeof Symbol&&null!=Symbol.toPrimitive&&"function"==typeof e[Symbol.toPrimitive])return t.from(e[Symbol.toPrimitive]("string"),n,r);throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+u(e))}function c(e){if("number"!=typeof e)throw new TypeError('"size" argument must be of type number');if(e<0)throw new RangeError('The value "'+e+'" is invalid for option "size"')}function s(e){return c(e),a(e<0?0:0|f(e))}function l(e){for(var t=e.length<0?0:0|f(e.length),n=a(t),r=0;r<t;r+=1)n[r]=255&e[r];return n}function f(e){if(e>=2147483647)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+2147483647..toString(16)+" bytes");return 0|e}function h(e,n){if(t.isBuffer(e))return e.length;if(ArrayBuffer.isView(e)||V(e,ArrayBuffer))return e.byteLength;if("string"!=typeof e)throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+u(e));var r=e.length,i=arguments.length>2&&!0===arguments[2];if(!i&&0===r)return 0;for(var a=!1;;)switch(n){case"ascii":case"latin1":case"binary":return r;case"utf8":case"utf-8":return H(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*r;case"hex":return r>>>1;case"base64":return P(e).length;default:if(a)return i?-1:H(e).length;n=(""+n).toLowerCase(),a=!0}}function d(e,t,n){var r=!1;if((void 0===t||t<0)&&(t=0),t>this.length)return"";if((void 0===n||n>this.length)&&(n=this.length),n<=0)return"";if((n>>>=0)<=(t>>>=0))return"";for(e||(e="utf8");;)switch(e){case"hex":return M(this,t,n);case"utf8":case"utf-8":return _(this,t,n);case"ascii":return z(this,t,n);case"latin1":case"binary":return C(this,t,n);case"base64":return k(this,t,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return O(this,t,n);default:if(r)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),r=!0}}function p(e,t,n){var r=e[t];e[t]=e[n],e[n]=r}function m(e,n,r,i,a){if(0===e.length)return-1;if("string"==typeof r?(i=r,r=0):r>2147483647?r=2147483647:r<-2147483648&&(r=-2147483648),D(r=+r)&&(r=a?0:e.length-1),r<0&&(r=e.length+r),r>=e.length){if(a)return-1;r=e.length-1}else if(r<0){if(!a)return-1;r=0}if("string"==typeof n&&(n=t.from(n,i)),t.isBuffer(n))return 0===n.length?-1:v(e,n,r,i,a);if("number"==typeof n)return n&=255,"function"==typeof Uint8Array.prototype.indexOf?a?Uint8Array.prototype.indexOf.call(e,n,r):Uint8Array.prototype.lastIndexOf.call(e,n,r):v(e,[n],r,i,a);throw new TypeError("val must be string, number or Buffer")}function v(e,t,n,r,i){var a,o=1,c=e.length,s=t.length;if(void 0!==r&&("ucs2"===(r=String(r).toLowerCase())||"ucs-2"===r||"utf16le"===r||"utf-16le"===r)){if(e.length<2||t.length<2)return-1;o=2,c/=2,s/=2,n/=2}function u(e,t){return 1===o?e[t]:e.readUInt16BE(t*o)}if(i){var l=-1;for(a=n;a<c;a++)if(u(e,a)===u(t,-1===l?0:a-l)){if(-1===l&&(l=a),a-l+1===s)return l*o}else-1!==l&&(a-=a-l),l=-1}else for(n+s>c&&(n=c-s),a=n;a>=0;a--){for(var f=!0,h=0;h<s;h++)if(u(e,a+h)!==u(t,h)){f=!1;break}if(f)return a}return-1}function g(e,t,n,r){n=Number(n)||0;var i=e.length-n;r?(r=Number(r))>i&&(r=i):r=i;var a=t.length;r>a/2&&(r=a/2);for(var o=0;o<r;++o){var c=parseInt(t.substr(2*o,2),16);if(D(c))return o;e[n+o]=c}return o}function y(e,t,n,r){return j(H(t,e.length-n),e,n,r)}function b(e,t,n,r){return j(function(e){for(var t=[],n=0;n<e.length;++n)t.push(255&e.charCodeAt(n));return t}(t),e,n,r)}function w(e,t,n,r){return b(e,t,n,r)}function x(e,t,n,r){return j(P(t),e,n,r)}function S(e,t,n,r){return j(function(e,t){for(var n,r,i,a=[],o=0;o<e.length&&!((t-=2)<0);++o)n=e.charCodeAt(o),r=n>>8,i=n%256,a.push(i),a.push(r);return a}(t,e.length-n),e,n,r)}function k(e,t,n){return 0===t&&n===e.length?r.fromByteArray(e):r.fromByteArray(e.slice(t,n))}function _(e,t,n){n=Math.min(e.length,n);for(var r=[],i=t;i<n;){var a,o,c,s,u=e[i],l=null,f=u>239?4:u>223?3:u>191?2:1;if(i+f<=n)switch(f){case 1:u<128&&(l=u);break;case 2:128==(192&(a=e[i+1]))&&(s=(31&u)<<6|63&a)>127&&(l=s);break;case 3:a=e[i+1],o=e[i+2],128==(192&a)&&128==(192&o)&&(s=(15&u)<<12|(63&a)<<6|63&o)>2047&&(s<55296||s>57343)&&(l=s);break;case 4:a=e[i+1],o=e[i+2],c=e[i+3],128==(192&a)&&128==(192&o)&&128==(192&c)&&(s=(15&u)<<18|(63&a)<<12|(63&o)<<6|63&c)>65535&&s<1114112&&(l=s)}null===l?(l=65533,f=1):l>65535&&(l-=65536,r.push(l>>>10&1023|55296),l=56320|1023&l),r.push(l),i+=f}return function(e){var t=e.length;if(t<=4096)return String.fromCharCode.apply(String,e);for(var n="",r=0;r<t;)n+=String.fromCharCode.apply(String,e.slice(r,r+=4096));return n}(r)}function z(e,t,n){var r="";n=Math.min(e.length,n);for(var i=t;i<n;++i)r+=String.fromCharCode(127&e[i]);return r}function C(e,t,n){var r="";n=Math.min(e.length,n);for(var i=t;i<n;++i)r+=String.fromCharCode(e[i]);return r}function M(e,t,n){var r,i=e.length;(!t||t<0)&&(t=0),(!n||n<0||n>i)&&(n=i);for(var a="",o=t;o<n;++o)a+=(r=e[o])<16?"0"+r.toString(16):r.toString(16);return a}function O(e,t,n){for(var r=e.slice(t,n),i="",a=0;a<r.length;a+=2)i+=String.fromCharCode(r[a]+256*r[a+1]);return i}function T(e,t,n){if(e%1!=0||e<0)throw new RangeError("offset is not uint");if(e+t>n)throw new RangeError("Trying to access beyond buffer length")}function E(e,n,r,i,a,o){if(!t.isBuffer(e))throw new TypeError('"buffer" argument must be a Buffer instance');if(n>a||n<o)throw new RangeError('"value" argument is out of bounds');if(r+i>e.length)throw new RangeError("Index out of range")}function L(e,t,n,r,i,a){if(n+r>e.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("Index out of range")}function A(e,t,n,r,a){return t=+t,n>>>=0,a||L(e,0,n,4),i.write(e,t,n,r,23,4),n+4}function R(e,t,n,r,a){return t=+t,n>>>=0,a||L(e,0,n,8),i.write(e,t,n,r,52,8),n+8}n.Buffer=t,n.SlowBuffer=function(e){return+e!=e&&(e=0),t.alloc(+e)},n.INSPECT_MAX_BYTES=50,n.kMaxLength=2147483647,t.TYPED_ARRAY_SUPPORT=function(){try{var e=new Uint8Array(1);return e.__proto__={__proto__:Uint8Array.prototype,foo:function(){return 42}},42===e.foo()}catch(e){return!1}}(),t.TYPED_ARRAY_SUPPORT||"undefined"==typeof console||"function"!=typeof console.error||console.error("This browser lacks typed array (Uint8Array) support which is required by `buffer` v5.x. Use `buffer` v4.x if you require old browser support."),Object.defineProperty(t.prototype,"parent",{enumerable:!0,get:function(){if(t.isBuffer(this))return this.buffer}}),Object.defineProperty(t.prototype,"offset",{enumerable:!0,get:function(){if(t.isBuffer(this))return this.byteOffset}}),"undefined"!=typeof Symbol&&null!=Symbol.species&&t[Symbol.species]===t&&Object.defineProperty(t,Symbol.species,{value:null,configurable:!0,enumerable:!1,writable:!1}),t.poolSize=8192,t.from=function(e,t,n){return o(e,t,n)},t.prototype.__proto__=Uint8Array.prototype,t.__proto__=Uint8Array,t.alloc=function(e,t,n){return function(e,t,n){return c(e),e<=0?a(e):void 0!==t?"string"==typeof n?a(e).fill(t,n):a(e).fill(t):a(e)}(e,t,n)},t.allocUnsafe=function(e){return s(e)},t.allocUnsafeSlow=function(e){return s(e)},t.isBuffer=function(e){return null!=e&&!0===e._isBuffer&&e!==t.prototype},t.compare=function(e,n){if(V(e,Uint8Array)&&(e=t.from(e,e.offset,e.byteLength)),V(n,Uint8Array)&&(n=t.from(n,n.offset,n.byteLength)),!t.isBuffer(e)||!t.isBuffer(n))throw new TypeError('The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array');if(e===n)return 0;for(var r=e.length,i=n.length,a=0,o=Math.min(r,i);a<o;++a)if(e[a]!==n[a]){r=e[a],i=n[a];break}return r<i?-1:i<r?1:0},t.isEncoding=function(e){switch(String(e).toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"latin1":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return!0;default:return!1}},t.concat=function(e,n){if(!Array.isArray(e))throw new TypeError('"list" argument must be an Array of Buffers');if(0===e.length)return t.alloc(0);var r;if(void 0===n)for(n=0,r=0;r<e.length;++r)n+=e[r].length;var i=t.allocUnsafe(n),a=0;for(r=0;r<e.length;++r){var o=e[r];if(V(o,Uint8Array)&&(o=t.from(o)),!t.isBuffer(o))throw new TypeError('"list" argument must be an Array of Buffers');o.copy(i,a),a+=o.length}return i},t.byteLength=h,t.prototype._isBuffer=!0,t.prototype.swap16=function(){var e=this.length;if(e%2!=0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(var t=0;t<e;t+=2)p(this,t,t+1);return this},t.prototype.swap32=function(){var e=this.length;if(e%4!=0)throw new RangeError("Buffer size must be a multiple of 32-bits");for(var t=0;t<e;t+=4)p(this,t,t+3),p(this,t+1,t+2);return this},t.prototype.swap64=function(){var e=this.length;if(e%8!=0)throw new RangeError("Buffer size must be a multiple of 64-bits");for(var t=0;t<e;t+=8)p(this,t,t+7),p(this,t+1,t+6),p(this,t+2,t+5),p(this,t+3,t+4);return this},t.prototype.toString=function(){var e=this.length;return 0===e?"":0===arguments.length?_(this,0,e):d.apply(this,arguments)},t.prototype.toLocaleString=t.prototype.toString,t.prototype.equals=function(e){if(!t.isBuffer(e))throw new TypeError("Argument must be a Buffer");return this===e||0===t.compare(this,e)},t.prototype.inspect=function(){var e="",t=n.INSPECT_MAX_BYTES;return e=this.toString("hex",0,t).replace(/(.{2})/g,"$1 ").trim(),this.length>t&&(e+=" ... "),"<Buffer "+e+">"},t.prototype.compare=function(e,n,r,i,a){if(V(e,Uint8Array)&&(e=t.from(e,e.offset,e.byteLength)),!t.isBuffer(e))throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+u(e));if(void 0===n&&(n=0),void 0===r&&(r=e?e.length:0),void 0===i&&(i=0),void 0===a&&(a=this.length),n<0||r>e.length||i<0||a>this.length)throw new RangeError("out of range index");if(i>=a&&n>=r)return 0;if(i>=a)return-1;if(n>=r)return 1;if(this===e)return 0;for(var o=(a>>>=0)-(i>>>=0),c=(r>>>=0)-(n>>>=0),s=Math.min(o,c),l=this.slice(i,a),f=e.slice(n,r),h=0;h<s;++h)if(l[h]!==f[h]){o=l[h],c=f[h];break}return o<c?-1:c<o?1:0},t.prototype.includes=function(e,t,n){return-1!==this.indexOf(e,t,n)},t.prototype.indexOf=function(e,t,n){return m(this,e,t,n,!0)},t.prototype.lastIndexOf=function(e,t,n){return m(this,e,t,n,!1)},t.prototype.write=function(e,t,n,r){if(void 0===t)r="utf8",n=this.length,t=0;else if(void 0===n&&"string"==typeof t)r=t,n=this.length,t=0;else{if(!isFinite(t))throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");t>>>=0,isFinite(n)?(n>>>=0,void 0===r&&(r="utf8")):(r=n,n=void 0)}var i=this.length-t;if((void 0===n||n>i)&&(n=i),e.length>0&&(n<0||t<0)||t>this.length)throw new RangeError("Attempt to write outside buffer bounds");r||(r="utf8");for(var a=!1;;)switch(r){case"hex":return g(this,e,t,n);case"utf8":case"utf-8":return y(this,e,t,n);case"ascii":return b(this,e,t,n);case"latin1":case"binary":return w(this,e,t,n);case"base64":return x(this,e,t,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return S(this,e,t,n);default:if(a)throw new TypeError("Unknown encoding: "+r);r=(""+r).toLowerCase(),a=!0}},t.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}},t.prototype.slice=function(e,n){var r=this.length;(e=~~e)<0?(e+=r)<0&&(e=0):e>r&&(e=r),(n=void 0===n?r:~~n)<0?(n+=r)<0&&(n=0):n>r&&(n=r),n<e&&(n=e);var i=this.subarray(e,n);return i.__proto__=t.prototype,i},t.prototype.readUIntLE=function(e,t,n){e>>>=0,t>>>=0,n||T(e,t,this.length);for(var r=this[e],i=1,a=0;++a<t&&(i*=256);)r+=this[e+a]*i;return r},t.prototype.readUIntBE=function(e,t,n){e>>>=0,t>>>=0,n||T(e,t,this.length);for(var r=this[e+--t],i=1;t>0&&(i*=256);)r+=this[e+--t]*i;return r},t.prototype.readUInt8=function(e,t){return e>>>=0,t||T(e,1,this.length),this[e]},t.prototype.readUInt16LE=function(e,t){return e>>>=0,t||T(e,2,this.length),this[e]|this[e+1]<<8},t.prototype.readUInt16BE=function(e,t){return e>>>=0,t||T(e,2,this.length),this[e]<<8|this[e+1]},t.prototype.readUInt32LE=function(e,t){return e>>>=0,t||T(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},t.prototype.readUInt32BE=function(e,t){return e>>>=0,t||T(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},t.prototype.readIntLE=function(e,t,n){e>>>=0,t>>>=0,n||T(e,t,this.length);for(var r=this[e],i=1,a=0;++a<t&&(i*=256);)r+=this[e+a]*i;return r>=(i*=128)&&(r-=Math.pow(2,8*t)),r},t.prototype.readIntBE=function(e,t,n){e>>>=0,t>>>=0,n||T(e,t,this.length);for(var r=t,i=1,a=this[e+--r];r>0&&(i*=256);)a+=this[e+--r]*i;return a>=(i*=128)&&(a-=Math.pow(2,8*t)),a},t.prototype.readInt8=function(e,t){return e>>>=0,t||T(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},t.prototype.readInt16LE=function(e,t){e>>>=0,t||T(e,2,this.length);var n=this[e]|this[e+1]<<8;return 32768&n?4294901760|n:n},t.prototype.readInt16BE=function(e,t){e>>>=0,t||T(e,2,this.length);var n=this[e+1]|this[e]<<8;return 32768&n?4294901760|n:n},t.prototype.readInt32LE=function(e,t){return e>>>=0,t||T(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},t.prototype.readInt32BE=function(e,t){return e>>>=0,t||T(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},t.prototype.readFloatLE=function(e,t){return e>>>=0,t||T(e,4,this.length),i.read(this,e,!0,23,4)},t.prototype.readFloatBE=function(e,t){return e>>>=0,t||T(e,4,this.length),i.read(this,e,!1,23,4)},t.prototype.readDoubleLE=function(e,t){return e>>>=0,t||T(e,8,this.length),i.read(this,e,!0,52,8)},t.prototype.readDoubleBE=function(e,t){return e>>>=0,t||T(e,8,this.length),i.read(this,e,!1,52,8)},t.prototype.writeUIntLE=function(e,t,n,r){e=+e,t>>>=0,n>>>=0,r||E(this,e,t,n,Math.pow(2,8*n)-1,0);var i=1,a=0;for(this[t]=255&e;++a<n&&(i*=256);)this[t+a]=e/i&255;return t+n},t.prototype.writeUIntBE=function(e,t,n,r){e=+e,t>>>=0,n>>>=0,r||E(this,e,t,n,Math.pow(2,8*n)-1,0);var i=n-1,a=1;for(this[t+i]=255&e;--i>=0&&(a*=256);)this[t+i]=e/a&255;return t+n},t.prototype.writeUInt8=function(e,t,n){return e=+e,t>>>=0,n||E(this,e,t,1,255,0),this[t]=255&e,t+1},t.prototype.writeUInt16LE=function(e,t,n){return e=+e,t>>>=0,n||E(this,e,t,2,65535,0),this[t]=255&e,this[t+1]=e>>>8,t+2},t.prototype.writeUInt16BE=function(e,t,n){return e=+e,t>>>=0,n||E(this,e,t,2,65535,0),this[t]=e>>>8,this[t+1]=255&e,t+2},t.prototype.writeUInt32LE=function(e,t,n){return e=+e,t>>>=0,n||E(this,e,t,4,4294967295,0),this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e,t+4},t.prototype.writeUInt32BE=function(e,t,n){return e=+e,t>>>=0,n||E(this,e,t,4,4294967295,0),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e,t+4},t.prototype.writeIntLE=function(e,t,n,r){if(e=+e,t>>>=0,!r){var i=Math.pow(2,8*n-1);E(this,e,t,n,i-1,-i)}var a=0,o=1,c=0;for(this[t]=255&e;++a<n&&(o*=256);)e<0&&0===c&&0!==this[t+a-1]&&(c=1),this[t+a]=(e/o>>0)-c&255;return t+n},t.prototype.writeIntBE=function(e,t,n,r){if(e=+e,t>>>=0,!r){var i=Math.pow(2,8*n-1);E(this,e,t,n,i-1,-i)}var a=n-1,o=1,c=0;for(this[t+a]=255&e;--a>=0&&(o*=256);)e<0&&0===c&&0!==this[t+a+1]&&(c=1),this[t+a]=(e/o>>0)-c&255;return t+n},t.prototype.writeInt8=function(e,t,n){return e=+e,t>>>=0,n||E(this,e,t,1,127,-128),e<0&&(e=255+e+1),this[t]=255&e,t+1},t.prototype.writeInt16LE=function(e,t,n){return e=+e,t>>>=0,n||E(this,e,t,2,32767,-32768),this[t]=255&e,this[t+1]=e>>>8,t+2},t.prototype.writeInt16BE=function(e,t,n){return e=+e,t>>>=0,n||E(this,e,t,2,32767,-32768),this[t]=e>>>8,this[t+1]=255&e,t+2},t.prototype.writeInt32LE=function(e,t,n){return e=+e,t>>>=0,n||E(this,e,t,4,2147483647,-2147483648),this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24,t+4},t.prototype.writeInt32BE=function(e,t,n){return e=+e,t>>>=0,n||E(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e,t+4},t.prototype.writeFloatLE=function(e,t,n){return A(this,e,t,!0,n)},t.prototype.writeFloatBE=function(e,t,n){return A(this,e,t,!1,n)},t.prototype.writeDoubleLE=function(e,t,n){return R(this,e,t,!0,n)},t.prototype.writeDoubleBE=function(e,t,n){return R(this,e,t,!1,n)},t.prototype.copy=function(e,n,r,i){if(!t.isBuffer(e))throw new TypeError("argument should be a Buffer");if(r||(r=0),i||0===i||(i=this.length),n>=e.length&&(n=e.length),n||(n=0),i>0&&i<r&&(i=r),i===r)return 0;if(0===e.length||0===this.length)return 0;if(n<0)throw new RangeError("targetStart out of bounds");if(r<0||r>=this.length)throw new RangeError("Index out of range");if(i<0)throw new RangeError("sourceEnd out of bounds");i>this.length&&(i=this.length),e.length-n<i-r&&(i=e.length-n+r);var a=i-r;if(this===e&&"function"==typeof Uint8Array.prototype.copyWithin)this.copyWithin(n,r,i);else if(this===e&&r<n&&n<i)for(var o=a-1;o>=0;--o)e[o+n]=this[o+r];else Uint8Array.prototype.set.call(e,this.subarray(r,i),n);return a},t.prototype.fill=function(e,n,r,i){if("string"==typeof e){if("string"==typeof n?(i=n,n=0,r=this.length):"string"==typeof r&&(i=r,r=this.length),void 0!==i&&"string"!=typeof i)throw new TypeError("encoding must be a string");if("string"==typeof i&&!t.isEncoding(i))throw new TypeError("Unknown encoding: "+i);if(1===e.length){var a=e.charCodeAt(0);("utf8"===i&&a<128||"latin1"===i)&&(e=a)}}else"number"==typeof e&&(e&=255);if(n<0||this.length<n||this.length<r)throw new RangeError("Out of range index");if(r<=n)return this;var o;if(n>>>=0,r=void 0===r?this.length:r>>>0,e||(e=0),"number"==typeof e)for(o=n;o<r;++o)this[o]=e;else{var c=t.isBuffer(e)?e:t.from(e,i),s=c.length;if(0===s)throw new TypeError('The value "'+e+'" is invalid for argument "value"');for(o=0;o<r-n;++o)this[o+n]=c[o%s]}return this};var N=/[^+/0-9A-Za-z-_]/g;function H(e,t){var n;t=t||1/0;for(var r=e.length,i=null,a=[],o=0;o<r;++o){if((n=e.charCodeAt(o))>55295&&n<57344){if(!i){if(n>56319){(t-=3)>-1&&a.push(239,191,189);continue}if(o+1===r){(t-=3)>-1&&a.push(239,191,189);continue}i=n;continue}if(n<56320){(t-=3)>-1&&a.push(239,191,189),i=n;continue}n=65536+(i-55296<<10|n-56320)}else i&&(t-=3)>-1&&a.push(239,191,189);if(i=null,n<128){if((t-=1)<0)break;a.push(n)}else if(n<2048){if((t-=2)<0)break;a.push(n>>6|192,63&n|128)}else if(n<65536){if((t-=3)<0)break;a.push(n>>12|224,n>>6&63|128,63&n|128)}else{if(!(n<1114112))throw new Error("Invalid code point");if((t-=4)<0)break;a.push(n>>18|240,n>>12&63|128,n>>6&63|128,63&n|128)}}return a}function P(e){return r.toByteArray(function(e){if((e=(e=e.split("=")[0]).trim().replace(N,"")).length<2)return"";for(;e.length%4!=0;)e+="=";return e}(e))}function j(e,t,n,r){for(var i=0;i<r&&!(i+n>=t.length||i>=e.length);++i)t[i+n]=e[i];return i}function V(e,t){return e instanceof t||null!=e&&null!=e.constructor&&null!=e.constructor.name&&e.constructor.name===t.name}function D(e){return e!=e}}).call(this,e("buffer").Buffer)},{"base64-js":1,buffer:3,ieee754:32}],4:[function(e,t,n){t.exports={elementNames:{altglyph:"altGlyph",altglyphdef:"altGlyphDef",altglyphitem:"altGlyphItem",animatecolor:"animateColor",animatemotion:"animateMotion",animatetransform:"animateTransform",clippath:"clipPath",feblend:"feBlend",fecolormatrix:"feColorMatrix",fecomponenttransfer:"feComponentTransfer",fecomposite:"feComposite",feconvolvematrix:"feConvolveMatrix",fediffuselighting:"feDiffuseLighting",fedisplacementmap:"feDisplacementMap",fedistantlight:"feDistantLight",fedropshadow:"feDropShadow",feflood:"feFlood",fefunca:"feFuncA",fefuncb:"feFuncB",fefuncg:"feFuncG",fefuncr:"feFuncR",fegaussianblur:"feGaussianBlur",feimage:"feImage",femerge:"feMerge",femergenode:"feMergeNode",femorphology:"feMorphology",feoffset:"feOffset",fepointlight:"fePointLight",fespecularlighting:"feSpecularLighting",fespotlight:"feSpotLight",fetile:"feTile",feturbulence:"feTurbulence",foreignobject:"foreignObject",glyphref:"glyphRef",lineargradient:"linearGradient",radialgradient:"radialGradient",textpath:"textPath"},attributeNames:{definitionurl:"definitionURL",attributename:"attributeName",attributetype:"attributeType",basefrequency:"baseFrequency",baseprofile:"baseProfile",calcmode:"calcMode",clippathunits:"clipPathUnits",diffuseconstant:"diffuseConstant",edgemode:"edgeMode",filterunits:"filterUnits",glyphref:"glyphRef",gradienttransform:"gradientTransform",gradientunits:"gradientUnits",kernelmatrix:"kernelMatrix",kernelunitlength:"kernelUnitLength",keypoints:"keyPoints",keysplines:"keySplines",keytimes:"keyTimes",lengthadjust:"lengthAdjust",limitingconeangle:"limitingConeAngle",markerheight:"markerHeight",markerunits:"markerUnits",markerwidth:"markerWidth",maskcontentunits:"maskContentUnits",maskunits:"maskUnits",numoctaves:"numOctaves",pathlength:"pathLength",patterncontentunits:"patternContentUnits",patterntransform:"patternTransform",patternunits:"patternUnits",pointsatx:"pointsAtX",pointsaty:"pointsAtY",pointsatz:"pointsAtZ",preservealpha:"preserveAlpha",preserveaspectratio:"preserveAspectRatio",primitiveunits:"primitiveUnits",refx:"refX",refy:"refY",repeatcount:"repeatCount",repeatdur:"repeatDur",requiredextensions:"requiredExtensions",requiredfeatures:"requiredFeatures",specularconstant:"specularConstant",specularexponent:"specularExponent",spreadmethod:"spreadMethod",startoffset:"startOffset",stddeviation:"stdDeviation",stitchtiles:"stitchTiles",surfacescale:"surfaceScale",systemlanguage:"systemLanguage",tablevalues:"tableValues",targetx:"targetX",targety:"targetY",textlength:"textLength",viewbox:"viewBox",viewtarget:"viewTarget",xchannelselector:"xChannelSelector",ychannelselector:"yChannelSelector",zoomandpan:"zoomAndPan"}}},{}],5:[function(e,t,n){var r=e("domelementtype"),i=e("entities"),a=e("./foreignNames.json");a.elementNames.__proto__=null,a.attributeNames.__proto__=null;var o={__proto__:null,style:!0,script:!0,xmp:!0,iframe:!0,noembed:!0,noframes:!0,plaintext:!0,noscript:!0},c={__proto__:null,area:!0,base:!0,basefont:!0,br:!0,col:!0,command:!0,embed:!0,frame:!0,hr:!0,img:!0,input:!0,isindex:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0},s=t.exports=function(e,t){Array.isArray(e)||e.cheerio||(e=[e]),t=t||{};for(var n="",i=0;i<e.length;i++){var a=e[i];"root"===a.type?n+=s(a.children,t):r.isTag(a)?n+=l(a,t):a.type===r.Directive?n+=f(a):a.type===r.Comment?n+=p(a):a.type===r.CDATA?n+=d(a):n+=h(a,t)}return n},u=["mi","mo","mn","ms","mtext","annotation-xml","foreignObject","desc","title"];function l(e,t){"foreign"===t.xmlMode&&(e.name=a.elementNames[e.name]||e.name,e.parent&&u.indexOf(e.parent.name)>=0&&(t=Object.assign({},t,{xmlMode:!1}))),!t.xmlMode&&["svg","math"].indexOf(e.name)>=0&&(t=Object.assign({},t,{xmlMode:"foreign"}));var n="<"+e.name,r=function(e,t){if(e){var n,r="";for(var o in e)n=e[o],r&&(r+=" "),"foreign"===t.xmlMode&&(o=a.attributeNames[o]||o),r+=o,(null!==n&&""!==n||t.xmlMode)&&(r+='="'+(t.decodeEntities?i.encodeXML(n):n.replace(/\"/g,"&quot;"))+'"');return r}}(e.attribs,t);return r&&(n+=" "+r),!t.xmlMode||e.children&&0!==e.children.length?(n+=">",e.children&&(n+=s(e.children,t)),c[e.name]&&!t.xmlMode||(n+="</"+e.name+">")):n+="/>",n}function f(e){return"<"+e.data+">"}function h(e,t){var n=e.data||"";return!t.decodeEntities||e.parent&&e.parent.name in o||(n=i.encodeXML(n)),n}function d(e){return"<![CDATA["+e.children[0].data+"]]>"}function p(e){return"\x3c!--"+e.data+"--\x3e"}},{"./foreignNames.json":4,domelementtype:6,entities:20}],6:[function(e,t,n){Object.defineProperty(n,"__esModule",{value:!0}),n.isTag=function(e){return"tag"===e.type||"script"===e.type||"style"===e.type},n.Text="text",n.Directive="directive",n.Comment="comment",n.Script="script",n.Style="style",n.Tag="tag",n.CDATA="cdata",n.Doctype="doctype"},{}],7:[function(e,t,n){Object.defineProperty(n,"__esModule",{value:!0});var r=e("./node");n.Node=r.Node,n.Element=r.Element,n.DataNode=r.DataNode,n.NodeWithChildren=r.NodeWithChildren;var i=/\s+/g,a={normalizeWhitespace:!1,withStartIndices:!1,withEndIndices:!1},o=function(){function e(e,t,n){this.dom=[],this._done=!1,this._tagStack=[],this._lastNode=null,this._parser=null,"function"==typeof t&&(n=t,t=a),"object"===u(e)&&(t=e,e=void 0),this._callback=e||null,this._options=t||a,this._elementCB=n||null}return e.prototype.onparserinit=function(e){this._parser=e},e.prototype.onreset=function(){this.dom=[],this._done=!1,this._tagStack=[],this._lastNode=null,this._parser=this._parser||null},e.prototype.onend=function(){this._done||(this._done=!0,this._parser=null,this.handleCallback(null))},e.prototype.onerror=function(e){this.handleCallback(e)},e.prototype.onclosetag=function(){this._lastNode=null;var e=this._tagStack.pop();e&&this._parser&&(this._options.withEndIndices&&(e.endIndex=this._parser.endIndex),this._elementCB&&this._elementCB(e))},e.prototype.onopentag=function(e,t){var n=new r.Element(e,t);this.addNode(n),this._tagStack.push(n)},e.prototype.ontext=function(e){var t=this._options.normalizeWhitespace,n=this._lastNode;if(n&&"text"===n.type)t?n.data=(n.data+e).replace(i," "):n.data+=e;else{t&&(e=e.replace(i," "));var a=new r.DataNode("text",e);this.addNode(a),this._lastNode=a}},e.prototype.oncomment=function(e){if(this._lastNode&&"comment"===this._lastNode.type)this._lastNode.data+=e;else{var t=new r.DataNode("comment",e);this.addNode(t),this._lastNode=t}},e.prototype.oncommentend=function(){this._lastNode=null},e.prototype.oncdatastart=function(){var e=new r.DataNode("text",""),t=new r.NodeWithChildren("cdata",[e]);this.addNode(t),e.parent=t,this._lastNode=e},e.prototype.oncdataend=function(){this._lastNode=null},e.prototype.onprocessinginstruction=function(e,t){var n=new r.ProcessingInstruction(e,t);this.addNode(n)},e.prototype.handleCallback=function(e){if("function"==typeof this._callback)this._callback(e,this.dom);else if(e)throw e},e.prototype.addNode=function(e){var t=this._tagStack[this._tagStack.length-1],n=t?t.children:this.dom,r=n[n.length-1];this._parser&&(this._options.withStartIndices&&(e.startIndex=this._parser.startIndex),this._options.withEndIndices&&(e.endIndex=this._parser.endIndex)),n.push(e),r&&(e.prev=r,r.next=e),t&&(e.parent=t),this._lastNode=null},e.prototype.addDataNode=function(e){this.addNode(e),this._lastNode=e},e}();n.DomHandler=o,n.default=o},{"./node":8}],8:[function(e,t,n){var r,i=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(n,"__esModule",{value:!0});var a=new Map([["tag",1],["script",1],["style",1],["directive",1],["text",3],["cdata",4],["comment",8]]),o=function(){function e(e){this.type=e,this.parent=null,this.prev=null,this.next=null,this.startIndex=null,this.endIndex=null}return Object.defineProperty(e.prototype,"nodeType",{get:function(){return a.get(this.type)||1},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"parentNode",{get:function(){return this.parent||null},set:function(e){this.parent=e},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"previousSibling",{get:function(){return this.prev||null},set:function(e){this.prev=e},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"nextSibling",{get:function(){return this.next||null},set:function(e){this.next=e},enumerable:!0,configurable:!0}),e}();n.Node=o;var c=function(e){function t(t,n){var r=e.call(this,t)||this;return r.data=n,r}return i(t,e),Object.defineProperty(t.prototype,"nodeValue",{get:function(){return this.data},set:function(e){this.data=e},enumerable:!0,configurable:!0}),t}(o);n.DataNode=c;var s=function(e){function t(t,n){var r=e.call(this,"directive",n)||this;return r.name=t,r}return i(t,e),t}(c);n.ProcessingInstruction=s;var u=function(e){function t(t,n){var r=e.call(this,t)||this;return r.children=n,r}return i(t,e),Object.defineProperty(t.prototype,"firstChild",{get:function(){return this.children[0]||null},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"lastChild",{get:function(){return this.children[this.children.length-1]||null},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"childNodes",{get:function(){return this.children},set:function(e){this.children=e},enumerable:!0,configurable:!0}),t}(o);n.NodeWithChildren=u;var l=function(e){function t(t,n){var r=e.call(this,"script"===t?"script":"style"===t?"style":"tag",[])||this;return r.name=t,r.attribs=n,r.attribs=n,r}return i(t,e),Object.defineProperty(t.prototype,"tagName",{get:function(){return this.name},set:function(e){this.name=e},enumerable:!0,configurable:!0}),t}(u);n.Element=l},{}],9:[function(e,t,n){Object.defineProperty(n,"__esModule",{value:!0});var r=e("./tagtypes");function i(e,t){var n=[],i=[];if(e===t)return 0;for(var a=r.hasChildren(e)?e:e.parent;a;)n.unshift(a),a=a.parent;for(a=r.hasChildren(t)?t:t.parent;a;)i.unshift(a),a=a.parent;for(var o=0;n[o]===i[o];)o++;if(0===o)return 1;var c=n[o-1],s=c.children,u=n[o],l=i[o];return s.indexOf(u)>s.indexOf(l)?c===t?20:4:c===e?10:2}n.removeSubsets=function(e){for(var t=e.length;--t>=0;){var n=e[t];if(t>0&&e.lastIndexOf(n,t-1)>=0)e.splice(t,1);else for(var r=n.parent;r;r=r.parent)if(e.indexOf(r)>-1){e.splice(t,1);break}}return e},n.compareDocumentPosition=i,n.uniqueSort=function(e){return(e=e.filter((function(e,t,n){return!n.includes(e,t+1)}))).sort((function(e,t){var n=i(e,t);return 2&n?-1:4&n?1:0})),e}},{"./tagtypes":15}],10:[function(e,t,n){function r(e){for(var t in e)n.hasOwnProperty(t)||(n[t]=e[t])}Object.defineProperty(n,"__esModule",{value:!0}),r(e("./stringify")),r(e("./traversal")),r(e("./manipulation")),r(e("./querying")),r(e("./legacy")),r(e("./helpers")),r(e("./tagtypes"))},{"./helpers":9,"./legacy":11,"./manipulation":12,"./querying":13,"./stringify":14,"./tagtypes":15,"./traversal":16}],11:[function(e,t,n){Object.defineProperty(n,"__esModule",{value:!0});var r=e("./querying"),i=e("./tagtypes");function a(e){return"text"===e.type}var o={tag_name:function(e){return"function"==typeof e?function(t){return i.isTag(t)&&e(t.name)}:"*"===e?i.isTag:function(t){return i.isTag(t)&&t.name===e}},tag_type:function(e){return"function"==typeof e?function(t){return e(t.type)}:function(t){return t.type===e}},tag_contains:function(e){return"function"==typeof e?function(t){return a(t)&&e(t.data)}:function(t){return a(t)&&t.data===e}}};function c(e,t){return"function"==typeof t?function(n){return i.isTag(n)&&t(n.attribs[e])}:function(n){return i.isTag(n)&&n.attribs[e]===t}}function s(e,t){return function(n){return e(n)||t(n)}}function u(e){var t=Object.keys(e).map((function(t){var n=e[t];return t in o?o[t](n):c(t,n)}));return 0===t.length?null:t.reduce(s)}n.testElement=function(e,t){var n=u(e);return!n||n(t)},n.getElements=function(e,t,n,i){void 0===i&&(i=1/0);var a=u(e);return a?r.filter(a,t,n,i):[]},n.getElementById=function(e,t,n){return void 0===n&&(n=!0),Array.isArray(t)||(t=[t]),r.findOne(c("id",e),t,n)},n.getElementsByTagName=function(e,t,n,i){return void 0===i&&(i=1/0),r.filter(o.tag_name(e),t,n,i)},n.getElementsByTagType=function(e,t,n,i){return void 0===n&&(n=!0),void 0===i&&(i=1/0),r.filter(o.tag_type(e),t,n,i)}},{"./querying":13,"./tagtypes":15}],12:[function(e,t,n){Object.defineProperty(n,"__esModule",{value:!0}),n.removeElement=function(e){if(e.prev&&(e.prev.next=e.next),e.next&&(e.next.prev=e.prev),e.parent){var t=e.parent.children;t.splice(t.lastIndexOf(e),1)}},n.replaceElement=function(e,t){var n=t.prev=e.prev;n&&(n.next=t);var r=t.next=e.next;r&&(r.prev=t);var i=t.parent=e.parent;if(i){var a=i.children;a[a.lastIndexOf(e)]=t}},n.appendChild=function(e,t){if(t.parent=e,1!==e.children.push(t)){var n=e.children[e.children.length-2];n.next=t,t.prev=n,t.next=null}},n.append=function(e,t){var n=e.parent,r=e.next;if(t.next=r,t.prev=e,e.next=t,t.parent=n,r){if(r.prev=t,n){var i=n.children;i.splice(i.lastIndexOf(r),0,t)}}else n&&n.children.push(t)},n.prepend=function(e,t){var n=e.parent;if(n){var r=n.children;r.splice(r.lastIndexOf(e),0,t)}e.prev&&(e.prev.next=t),t.parent=n,t.prev=e.prev,t.next=e,e.prev=t}},{}],13:[function(e,t,n){Object.defineProperty(n,"__esModule",{value:!0});var r=e("./tagtypes");function i(e,t,n,a){for(var o=[],c=0,s=t;c<s.length;c++){var u=s[c];if(e(u)&&(o.push(u),--a<=0))break;if(n&&r.hasChildren(u)&&u.children.length>0){var l=i(e,u.children,n,a);if(o.push.apply(o,l),(a-=l.length)<=0)break}}return o}n.filter=function(e,t,n,r){return void 0===n&&(n=!0),void 0===r&&(r=1/0),Array.isArray(t)||(t=[t]),i(e,t,n,r)},n.find=i,n.findOneChild=function(e,t){return t.find(e)},n.findOne=function e(t,n,i){void 0===i&&(i=!0);for(var a=null,o=0;o<n.length&&!a;o++){var c=n[o];r.isTag(c)&&(t(c)?a=c:i&&c.children.length>0&&(a=e(t,c.children)))}return a},n.existsOne=function e(t,n){return n.some((function(n){return r.isTag(n)&&(t(n)||n.children.length>0&&e(t,n.children))}))},n.findAll=function(e,t){for(var n,i,a=[],o=t.filter(r.isTag);i=o.shift();){var c=null===(n=i.children)||void 0===n?void 0:n.filter(r.isTag);c&&c.length>0&&o.unshift.apply(o,c),e(i)&&a.push(i)}return a}},{"./tagtypes":15}],14:[function(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(n,"__esModule",{value:!0});var i=e("./tagtypes"),a=r(e("dom-serializer"));function o(e,t){return a.default(e,t)}n.getOuterHTML=o,n.getInnerHTML=function(e,t){return i.hasChildren(e)?e.children.map((function(e){return o(e,t)})).join(""):""},n.getText=function e(t){return Array.isArray(t)?t.map(e).join(""):i.isTag(t)?"br"===t.name?"\n":e(t.children):i.isCDATA(t)?e(t.children):i.isText(t)?t.data:""}},{"./tagtypes":15,"dom-serializer":5}],15:[function(e,t,n){Object.defineProperty(n,"__esModule",{value:!0});var r=e("domelementtype");n.isTag=function(e){return r.isTag(e)},n.isCDATA=function(e){return"cdata"===e.type},n.isText=function(e){return"text"===e.type},n.isComment=function(e){return"comment"===e.type},n.hasChildren=function(e){return Object.prototype.hasOwnProperty.call(e,"children")}},{domelementtype:6}],16:[function(e,t,n){function r(e){return e.children||null}function i(e){return e.parent||null}Object.defineProperty(n,"__esModule",{value:!0}),n.getChildren=r,n.getParent=i,n.getSiblings=function(e){var t=i(e);return t?r(t):[e]},n.getAttributeValue=function(e,t){var n;return null===(n=e.attribs)||void 0===n?void 0:n[t]},n.hasAttrib=function(e,t){return!!e.attribs&&Object.prototype.hasOwnProperty.call(e.attribs,t)&&null!=e.attribs[t]},n.getName=function(e){return e.name}},{}],17:[function(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(n,"__esModule",{value:!0});var i=r(e("./maps/entities.json")),a=r(e("./maps/legacy.json")),o=r(e("./maps/xml.json")),c=r(e("./decode_codepoint"));function s(e){var t=Object.keys(e).join("|"),n=l(e),r=new RegExp("&(?:"+(t+="|#[xX][\\da-fA-F]+|#\\d+")+");","g");return function(e){return String(e).replace(r,n)}}n.decodeXML=s(o.default),n.decodeHTMLStrict=s(i.default);var u=function(e,t){return e<t?1:-1};function l(e){return function(t){if("#"===t.charAt(1)){var n=t.charAt(2);return"X"===n||"x"===n?c.default(parseInt(t.substr(3),16)):c.default(parseInt(t.substr(2),10))}return e[t.slice(1,-1)]}}n.decodeHTML=function(){for(var e=Object.keys(a.default).sort(u),t=Object.keys(i.default).sort(u),n=0,r=0;n<t.length;n++)e[r]===t[n]?(t[n]+=";?",r++):t[n]+=";";var o=new RegExp("&(?:"+t.join("|")+"|#[xX][\\da-fA-F]+;?|#\\d+;?)","g"),c=l(i.default);function s(e){return";"!==e.substr(-1)&&(e+=";"),c(e)}return function(e){return String(e).replace(o,s)}}()},{"./decode_codepoint":18,"./maps/entities.json":22,"./maps/legacy.json":23,"./maps/xml.json":24}],18:[function(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(n,"__esModule",{value:!0});var i=r(e("./maps/decode.json"));n.default=function(e){if(e>=55296&&e<=57343||e>1114111)return"�";e in i.default&&(e=i.default[e]);var t="";return e>65535&&(e-=65536,t+=String.fromCharCode(e>>>10&1023|55296),e=56320|1023&e),t+=String.fromCharCode(e)}},{"./maps/decode.json":21}],19:[function(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(n,"__esModule",{value:!0});var i=s(r(e("./maps/xml.json")).default),a=u(i);n.encodeXML=h(i,a);var o=s(r(e("./maps/entities.json")).default),c=u(o);function s(e){return Object.keys(e).sort().reduce((function(t,n){return t[e[n]]="&"+n+";",t}),{})}function u(e){for(var t=[],n=[],r=0,i=Object.keys(e);r<i.length;r++){var a=i[r];1===a.length?t.push("\\"+a):n.push(a)}t.sort();for(var o=0;o<t.length-1;o++){for(var c=o;c<t.length-1&&t[c].charCodeAt(1)+1===t[c+1].charCodeAt(1);)c+=1;var s=1+c-o;s<3||t.splice(o,s,t[o]+"-"+t[c])}return n.unshift("["+t.join("")+"]"),new RegExp(n.join("|"),"g")}n.encodeHTML=h(o,c);var l=/(?:[\x80-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])/g;function f(e){return"&#x"+e.codePointAt(0).toString(16).toUpperCase()+";"}function h(e,t){return function(n){return n.replace(t,(function(t){return e[t]})).replace(l,f)}}var d=u(i);n.escape=function(e){return e.replace(d,f).replace(l,f)}},{"./maps/entities.json":22,"./maps/xml.json":24}],20:[function(e,t,n){Object.defineProperty(n,"__esModule",{value:!0});var r=e("./decode"),i=e("./encode");n.decode=function(e,t){return(!t||t<=0?r.decodeXML:r.decodeHTML)(e)},n.decodeStrict=function(e,t){return(!t||t<=0?r.decodeXML:r.decodeHTMLStrict)(e)},n.encode=function(e,t){return(!t||t<=0?i.encodeXML:i.encodeHTML)(e)};var a=e("./encode");n.encodeXML=a.encodeXML,n.encodeHTML=a.encodeHTML,n.escape=a.escape,n.encodeHTML4=a.encodeHTML,n.encodeHTML5=a.encodeHTML;var o=e("./decode");n.decodeXML=o.decodeXML,n.decodeHTML=o.decodeHTML,n.decodeHTMLStrict=o.decodeHTMLStrict,n.decodeHTML4=o.decodeHTML,n.decodeHTML5=o.decodeHTML,n.decodeHTML4Strict=o.decodeHTMLStrict,n.decodeHTML5Strict=o.decodeHTMLStrict,n.decodeXMLStrict=o.decodeXML},{"./decode":17,"./encode":19}],21:[function(e,t,n){t.exports={0:65533,128:8364,130:8218,131:402,132:8222,133:8230,134:8224,135:8225,136:710,137:8240,138:352,139:8249,140:338,142:381,145:8216,146:8217,147:8220,148:8221,149:8226,150:8211,151:8212,152:732,153:8482,154:353,155:8250,156:339,158:382,159:376}},{}],22:[function(e,t,n){t.exports={Aacute:"Á",aacute:"á",Abreve:"Ă",abreve:"ă",ac:"∾",acd:"∿",acE:"∾̳",Acirc:"Â",acirc:"â",acute:"´",Acy:"А",acy:"а",AElig:"Æ",aelig:"æ",af:"⁡",Afr:"𝔄",afr:"𝔞",Agrave:"À",agrave:"à",alefsym:"ℵ",aleph:"ℵ",Alpha:"Α",alpha:"α",Amacr:"Ā",amacr:"ā",amalg:"⨿",amp:"&",AMP:"&",andand:"⩕",And:"⩓",and:"∧",andd:"⩜",andslope:"⩘",andv:"⩚",ang:"∠",ange:"⦤",angle:"∠",angmsdaa:"⦨",angmsdab:"⦩",angmsdac:"⦪",angmsdad:"⦫",angmsdae:"⦬",angmsdaf:"⦭",angmsdag:"⦮",angmsdah:"⦯",angmsd:"∡",angrt:"∟",angrtvb:"⊾",angrtvbd:"⦝",angsph:"∢",angst:"Å",angzarr:"⍼",Aogon:"Ą",aogon:"ą",Aopf:"𝔸",aopf:"𝕒",apacir:"⩯",ap:"≈",apE:"⩰",ape:"≊",apid:"≋",apos:"'",ApplyFunction:"⁡",approx:"≈",approxeq:"≊",Aring:"Å",aring:"å",Ascr:"𝒜",ascr:"𝒶",Assign:"≔",ast:"*",asymp:"≈",asympeq:"≍",Atilde:"Ã",atilde:"ã",Auml:"Ä",auml:"ä",awconint:"∳",awint:"⨑",backcong:"≌",backepsilon:"϶",backprime:"‵",backsim:"∽",backsimeq:"⋍",Backslash:"∖",Barv:"⫧",barvee:"⊽",barwed:"⌅",Barwed:"⌆",barwedge:"⌅",bbrk:"⎵",bbrktbrk:"⎶",bcong:"≌",Bcy:"Б",bcy:"б",bdquo:"„",becaus:"∵",because:"∵",Because:"∵",bemptyv:"⦰",bepsi:"϶",bernou:"ℬ",Bernoullis:"ℬ",Beta:"Β",beta:"β",beth:"ℶ",between:"≬",Bfr:"𝔅",bfr:"𝔟",bigcap:"⋂",bigcirc:"◯",bigcup:"⋃",bigodot:"⨀",bigoplus:"⨁",bigotimes:"⨂",bigsqcup:"⨆",bigstar:"★",bigtriangledown:"▽",bigtriangleup:"△",biguplus:"⨄",bigvee:"⋁",bigwedge:"⋀",bkarow:"⤍",blacklozenge:"⧫",blacksquare:"▪",blacktriangle:"▴",blacktriangledown:"▾",blacktriangleleft:"◂",blacktriangleright:"▸",blank:"␣",blk12:"▒",blk14:"░",blk34:"▓",block:"█",bne:"=⃥",bnequiv:"≡⃥",bNot:"⫭",bnot:"⌐",Bopf:"𝔹",bopf:"𝕓",bot:"⊥",bottom:"⊥",bowtie:"⋈",boxbox:"⧉",boxdl:"┐",boxdL:"╕",boxDl:"╖",boxDL:"╗",boxdr:"┌",boxdR:"╒",boxDr:"╓",boxDR:"╔",boxh:"─",boxH:"═",boxhd:"┬",boxHd:"╤",boxhD:"╥",boxHD:"╦",boxhu:"┴",boxHu:"╧",boxhU:"╨",boxHU:"╩",boxminus:"⊟",boxplus:"⊞",boxtimes:"⊠",boxul:"┘",boxuL:"╛",boxUl:"╜",boxUL:"╝",boxur:"└",boxuR:"╘",boxUr:"╙",boxUR:"╚",boxv:"│",boxV:"║",boxvh:"┼",boxvH:"╪",boxVh:"╫",boxVH:"╬",boxvl:"┤",boxvL:"╡",boxVl:"╢",boxVL:"╣",boxvr:"├",boxvR:"╞",boxVr:"╟",boxVR:"╠",bprime:"‵",breve:"˘",Breve:"˘",brvbar:"¦",bscr:"𝒷",Bscr:"ℬ",bsemi:"⁏",bsim:"∽",bsime:"⋍",bsolb:"⧅",bsol:"\\",bsolhsub:"⟈",bull:"•",bullet:"•",bump:"≎",bumpE:"⪮",bumpe:"≏",Bumpeq:"≎",bumpeq:"≏",Cacute:"Ć",cacute:"ć",capand:"⩄",capbrcup:"⩉",capcap:"⩋",cap:"∩",Cap:"⋒",capcup:"⩇",capdot:"⩀",CapitalDifferentialD:"ⅅ",caps:"∩︀",caret:"⁁",caron:"ˇ",Cayleys:"ℭ",ccaps:"⩍",Ccaron:"Č",ccaron:"č",Ccedil:"Ç",ccedil:"ç",Ccirc:"Ĉ",ccirc:"ĉ",Cconint:"∰",ccups:"⩌",ccupssm:"⩐",Cdot:"Ċ",cdot:"ċ",cedil:"¸",Cedilla:"¸",cemptyv:"⦲",cent:"¢",centerdot:"·",CenterDot:"·",cfr:"𝔠",Cfr:"ℭ",CHcy:"Ч",chcy:"ч",check:"✓",checkmark:"✓",Chi:"Χ",chi:"χ",circ:"ˆ",circeq:"≗",circlearrowleft:"↺",circlearrowright:"↻",circledast:"⊛",circledcirc:"⊚",circleddash:"⊝",CircleDot:"⊙",circledR:"®",circledS:"Ⓢ",CircleMinus:"⊖",CirclePlus:"⊕",CircleTimes:"⊗",cir:"○",cirE:"⧃",cire:"≗",cirfnint:"⨐",cirmid:"⫯",cirscir:"⧂",ClockwiseContourIntegral:"∲",CloseCurlyDoubleQuote:"”",CloseCurlyQuote:"’",clubs:"♣",clubsuit:"♣",colon:":",Colon:"∷",Colone:"⩴",colone:"≔",coloneq:"≔",comma:",",commat:"@",comp:"∁",compfn:"∘",complement:"∁",complexes:"ℂ",cong:"≅",congdot:"⩭",Congruent:"≡",conint:"∮",Conint:"∯",ContourIntegral:"∮",copf:"𝕔",Copf:"ℂ",coprod:"∐",Coproduct:"∐",copy:"©",COPY:"©",copysr:"℗",CounterClockwiseContourIntegral:"∳",crarr:"↵",cross:"✗",Cross:"⨯",Cscr:"𝒞",cscr:"𝒸",csub:"⫏",csube:"⫑",csup:"⫐",csupe:"⫒",ctdot:"⋯",cudarrl:"⤸",cudarrr:"⤵",cuepr:"⋞",cuesc:"⋟",cularr:"↶",cularrp:"⤽",cupbrcap:"⩈",cupcap:"⩆",CupCap:"≍",cup:"∪",Cup:"⋓",cupcup:"⩊",cupdot:"⊍",cupor:"⩅",cups:"∪︀",curarr:"↷",curarrm:"⤼",curlyeqprec:"⋞",curlyeqsucc:"⋟",curlyvee:"⋎",curlywedge:"⋏",curren:"¤",curvearrowleft:"↶",curvearrowright:"↷",cuvee:"⋎",cuwed:"⋏",cwconint:"∲",cwint:"∱",cylcty:"⌭",dagger:"†",Dagger:"‡",daleth:"ℸ",darr:"↓",Darr:"↡",dArr:"⇓",dash:"‐",Dashv:"⫤",dashv:"⊣",dbkarow:"⤏",dblac:"˝",Dcaron:"Ď",dcaron:"ď",Dcy:"Д",dcy:"д",ddagger:"‡",ddarr:"⇊",DD:"ⅅ",dd:"ⅆ",DDotrahd:"⤑",ddotseq:"⩷",deg:"°",Del:"∇",Delta:"Δ",delta:"δ",demptyv:"⦱",dfisht:"⥿",Dfr:"𝔇",dfr:"𝔡",dHar:"⥥",dharl:"⇃",dharr:"⇂",DiacriticalAcute:"´",DiacriticalDot:"˙",DiacriticalDoubleAcute:"˝",DiacriticalGrave:"`",DiacriticalTilde:"˜",diam:"⋄",diamond:"⋄",Diamond:"⋄",diamondsuit:"♦",diams:"♦",die:"¨",DifferentialD:"ⅆ",digamma:"ϝ",disin:"⋲",div:"÷",divide:"÷",divideontimes:"⋇",divonx:"⋇",DJcy:"Ђ",djcy:"ђ",dlcorn:"⌞",dlcrop:"⌍",dollar:"$",Dopf:"𝔻",dopf:"𝕕",Dot:"¨",dot:"˙",DotDot:"⃜",doteq:"≐",doteqdot:"≑",DotEqual:"≐",dotminus:"∸",dotplus:"∔",dotsquare:"⊡",doublebarwedge:"⌆",DoubleContourIntegral:"∯",DoubleDot:"¨",DoubleDownArrow:"⇓",DoubleLeftArrow:"⇐",DoubleLeftRightArrow:"⇔",DoubleLeftTee:"⫤",DoubleLongLeftArrow:"⟸",DoubleLongLeftRightArrow:"⟺",DoubleLongRightArrow:"⟹",DoubleRightArrow:"⇒",DoubleRightTee:"⊨",DoubleUpArrow:"⇑",DoubleUpDownArrow:"⇕",DoubleVerticalBar:"∥",DownArrowBar:"⤓",downarrow:"↓",DownArrow:"↓",Downarrow:"⇓",DownArrowUpArrow:"⇵",DownBreve:"̑",downdownarrows:"⇊",downharpoonleft:"⇃",downharpoonright:"⇂",DownLeftRightVector:"⥐",DownLeftTeeVector:"⥞",DownLeftVectorBar:"⥖",DownLeftVector:"↽",DownRightTeeVector:"⥟",DownRightVectorBar:"⥗",DownRightVector:"⇁",DownTeeArrow:"↧",DownTee:"⊤",drbkarow:"⤐",drcorn:"⌟",drcrop:"⌌",Dscr:"𝒟",dscr:"𝒹",DScy:"Ѕ",dscy:"ѕ",dsol:"⧶",Dstrok:"Đ",dstrok:"đ",dtdot:"⋱",dtri:"▿",dtrif:"▾",duarr:"⇵",duhar:"⥯",dwangle:"⦦",DZcy:"Џ",dzcy:"џ",dzigrarr:"⟿",Eacute:"É",eacute:"é",easter:"⩮",Ecaron:"Ě",ecaron:"ě",Ecirc:"Ê",ecirc:"ê",ecir:"≖",ecolon:"≕",Ecy:"Э",ecy:"э",eDDot:"⩷",Edot:"Ė",edot:"ė",eDot:"≑",ee:"ⅇ",efDot:"≒",Efr:"𝔈",efr:"𝔢",eg:"⪚",Egrave:"È",egrave:"è",egs:"⪖",egsdot:"⪘",el:"⪙",Element:"∈",elinters:"⏧",ell:"ℓ",els:"⪕",elsdot:"⪗",Emacr:"Ē",emacr:"ē",empty:"∅",emptyset:"∅",EmptySmallSquare:"◻",emptyv:"∅",EmptyVerySmallSquare:"▫",emsp13:" ",emsp14:" ",emsp:" ",ENG:"Ŋ",eng:"ŋ",ensp:" ",Eogon:"Ę",eogon:"ę",Eopf:"𝔼",eopf:"𝕖",epar:"⋕",eparsl:"⧣",eplus:"⩱",epsi:"ε",Epsilon:"Ε",epsilon:"ε",epsiv:"ϵ",eqcirc:"≖",eqcolon:"≕",eqsim:"≂",eqslantgtr:"⪖",eqslantless:"⪕",Equal:"⩵",equals:"=",EqualTilde:"≂",equest:"≟",Equilibrium:"⇌",equiv:"≡",equivDD:"⩸",eqvparsl:"⧥",erarr:"⥱",erDot:"≓",escr:"ℯ",Escr:"ℰ",esdot:"≐",Esim:"⩳",esim:"≂",Eta:"Η",eta:"η",ETH:"Ð",eth:"ð",Euml:"Ë",euml:"ë",euro:"€",excl:"!",exist:"∃",Exists:"∃",expectation:"ℰ",exponentiale:"ⅇ",ExponentialE:"ⅇ",fallingdotseq:"≒",Fcy:"Ф",fcy:"ф",female:"♀",ffilig:"ffi",fflig:"ff",ffllig:"ffl",Ffr:"𝔉",ffr:"𝔣",filig:"fi",FilledSmallSquare:"◼",FilledVerySmallSquare:"▪",fjlig:"fj",flat:"♭",fllig:"fl",fltns:"▱",fnof:"ƒ",Fopf:"𝔽",fopf:"𝕗",forall:"∀",ForAll:"∀",fork:"⋔",forkv:"⫙",Fouriertrf:"ℱ",fpartint:"⨍",frac12:"½",frac13:"⅓",frac14:"¼",frac15:"⅕",frac16:"⅙",frac18:"⅛",frac23:"⅔",frac25:"⅖",frac34:"¾",frac35:"⅗",frac38:"⅜",frac45:"⅘",frac56:"⅚",frac58:"⅝",frac78:"⅞",frasl:"⁄",frown:"⌢",fscr:"𝒻",Fscr:"ℱ",gacute:"ǵ",Gamma:"Γ",gamma:"γ",Gammad:"Ϝ",gammad:"ϝ",gap:"⪆",Gbreve:"Ğ",gbreve:"ğ",Gcedil:"Ģ",Gcirc:"Ĝ",gcirc:"ĝ",Gcy:"Г",gcy:"г",Gdot:"Ġ",gdot:"ġ",ge:"≥",gE:"≧",gEl:"⪌",gel:"⋛",geq:"≥",geqq:"≧",geqslant:"⩾",gescc:"⪩",ges:"⩾",gesdot:"⪀",gesdoto:"⪂",gesdotol:"⪄",gesl:"⋛︀",gesles:"⪔",Gfr:"𝔊",gfr:"𝔤",gg:"≫",Gg:"⋙",ggg:"⋙",gimel:"ℷ",GJcy:"Ѓ",gjcy:"ѓ",gla:"⪥",gl:"≷",glE:"⪒",glj:"⪤",gnap:"⪊",gnapprox:"⪊",gne:"⪈",gnE:"≩",gneq:"⪈",gneqq:"≩",gnsim:"⋧",Gopf:"𝔾",gopf:"𝕘",grave:"`",GreaterEqual:"≥",GreaterEqualLess:"⋛",GreaterFullEqual:"≧",GreaterGreater:"⪢",GreaterLess:"≷",GreaterSlantEqual:"⩾",GreaterTilde:"≳",Gscr:"𝒢",gscr:"ℊ",gsim:"≳",gsime:"⪎",gsiml:"⪐",gtcc:"⪧",gtcir:"⩺",gt:">",GT:">",Gt:"≫",gtdot:"⋗",gtlPar:"⦕",gtquest:"⩼",gtrapprox:"⪆",gtrarr:"⥸",gtrdot:"⋗",gtreqless:"⋛",gtreqqless:"⪌",gtrless:"≷",gtrsim:"≳",gvertneqq:"≩︀",gvnE:"≩︀",Hacek:"ˇ",hairsp:" ",half:"½",hamilt:"ℋ",HARDcy:"Ъ",hardcy:"ъ",harrcir:"⥈",harr:"↔",hArr:"⇔",harrw:"↭",Hat:"^",hbar:"ℏ",Hcirc:"Ĥ",hcirc:"ĥ",hearts:"♥",heartsuit:"♥",hellip:"…",hercon:"⊹",hfr:"𝔥",Hfr:"ℌ",HilbertSpace:"ℋ",hksearow:"⤥",hkswarow:"⤦",hoarr:"⇿",homtht:"∻",hookleftarrow:"↩",hookrightarrow:"↪",hopf:"𝕙",Hopf:"ℍ",horbar:"―",HorizontalLine:"─",hscr:"𝒽",Hscr:"ℋ",hslash:"ℏ",Hstrok:"Ħ",hstrok:"ħ",HumpDownHump:"≎",HumpEqual:"≏",hybull:"⁃",hyphen:"‐",Iacute:"Í",iacute:"í",ic:"⁣",Icirc:"Î",icirc:"î",Icy:"И",icy:"и",Idot:"İ",IEcy:"Е",iecy:"е",iexcl:"¡",iff:"⇔",ifr:"𝔦",Ifr:"ℑ",Igrave:"Ì",igrave:"ì",ii:"ⅈ",iiiint:"⨌",iiint:"∭",iinfin:"⧜",iiota:"℩",IJlig:"IJ",ijlig:"ij",Imacr:"Ī",imacr:"ī",image:"ℑ",ImaginaryI:"ⅈ",imagline:"ℐ",imagpart:"ℑ",imath:"ı",Im:"ℑ",imof:"⊷",imped:"Ƶ",Implies:"⇒",incare:"℅",in:"∈",infin:"∞",infintie:"⧝",inodot:"ı",intcal:"⊺",int:"∫",Int:"∬",integers:"ℤ",Integral:"∫",intercal:"⊺",Intersection:"⋂",intlarhk:"⨗",intprod:"⨼",InvisibleComma:"⁣",InvisibleTimes:"⁢",IOcy:"Ё",iocy:"ё",Iogon:"Į",iogon:"į",Iopf:"𝕀",iopf:"𝕚",Iota:"Ι",iota:"ι",iprod:"⨼",iquest:"¿",iscr:"𝒾",Iscr:"ℐ",isin:"∈",isindot:"⋵",isinE:"⋹",isins:"⋴",isinsv:"⋳",isinv:"∈",it:"⁢",Itilde:"Ĩ",itilde:"ĩ",Iukcy:"І",iukcy:"і",Iuml:"Ï",iuml:"ï",Jcirc:"Ĵ",jcirc:"ĵ",Jcy:"Й",jcy:"й",Jfr:"𝔍",jfr:"𝔧",jmath:"ȷ",Jopf:"𝕁",jopf:"𝕛",Jscr:"𝒥",jscr:"𝒿",Jsercy:"Ј",jsercy:"ј",Jukcy:"Є",jukcy:"є",Kappa:"Κ",kappa:"κ",kappav:"ϰ",Kcedil:"Ķ",kcedil:"ķ",Kcy:"К",kcy:"к",Kfr:"𝔎",kfr:"𝔨",kgreen:"ĸ",KHcy:"Х",khcy:"х",KJcy:"Ќ",kjcy:"ќ",Kopf:"𝕂",kopf:"𝕜",Kscr:"𝒦",kscr:"𝓀",lAarr:"⇚",Lacute:"Ĺ",lacute:"ĺ",laemptyv:"⦴",lagran:"ℒ",Lambda:"Λ",lambda:"λ",lang:"⟨",Lang:"⟪",langd:"⦑",langle:"⟨",lap:"⪅",Laplacetrf:"ℒ",laquo:"«",larrb:"⇤",larrbfs:"⤟",larr:"←",Larr:"↞",lArr:"⇐",larrfs:"⤝",larrhk:"↩",larrlp:"↫",larrpl:"⤹",larrsim:"⥳",larrtl:"↢",latail:"⤙",lAtail:"⤛",lat:"⪫",late:"⪭",lates:"⪭︀",lbarr:"⤌",lBarr:"⤎",lbbrk:"❲",lbrace:"{",lbrack:"[",lbrke:"⦋",lbrksld:"⦏",lbrkslu:"⦍",Lcaron:"Ľ",lcaron:"ľ",Lcedil:"Ļ",lcedil:"ļ",lceil:"⌈",lcub:"{",Lcy:"Л",lcy:"л",ldca:"⤶",ldquo:"“",ldquor:"„",ldrdhar:"⥧",ldrushar:"⥋",ldsh:"↲",le:"≤",lE:"≦",LeftAngleBracket:"⟨",LeftArrowBar:"⇤",leftarrow:"←",LeftArrow:"←",Leftarrow:"⇐",LeftArrowRightArrow:"⇆",leftarrowtail:"↢",LeftCeiling:"⌈",LeftDoubleBracket:"⟦",LeftDownTeeVector:"⥡",LeftDownVectorBar:"⥙",LeftDownVector:"⇃",LeftFloor:"⌊",leftharpoondown:"↽",leftharpoonup:"↼",leftleftarrows:"⇇",leftrightarrow:"↔",LeftRightArrow:"↔",Leftrightarrow:"⇔",leftrightarrows:"⇆",leftrightharpoons:"⇋",leftrightsquigarrow:"↭",LeftRightVector:"⥎",LeftTeeArrow:"↤",LeftTee:"⊣",LeftTeeVector:"⥚",leftthreetimes:"⋋",LeftTriangleBar:"⧏",LeftTriangle:"⊲",LeftTriangleEqual:"⊴",LeftUpDownVector:"⥑",LeftUpTeeVector:"⥠",LeftUpVectorBar:"⥘",LeftUpVector:"↿",LeftVectorBar:"⥒",LeftVector:"↼",lEg:"⪋",leg:"⋚",leq:"≤",leqq:"≦",leqslant:"⩽",lescc:"⪨",les:"⩽",lesdot:"⩿",lesdoto:"⪁",lesdotor:"⪃",lesg:"⋚︀",lesges:"⪓",lessapprox:"⪅",lessdot:"⋖",lesseqgtr:"⋚",lesseqqgtr:"⪋",LessEqualGreater:"⋚",LessFullEqual:"≦",LessGreater:"≶",lessgtr:"≶",LessLess:"⪡",lesssim:"≲",LessSlantEqual:"⩽",LessTilde:"≲",lfisht:"⥼",lfloor:"⌊",Lfr:"𝔏",lfr:"𝔩",lg:"≶",lgE:"⪑",lHar:"⥢",lhard:"↽",lharu:"↼",lharul:"⥪",lhblk:"▄",LJcy:"Љ",ljcy:"љ",llarr:"⇇",ll:"≪",Ll:"⋘",llcorner:"⌞",Lleftarrow:"⇚",llhard:"⥫",lltri:"◺",Lmidot:"Ŀ",lmidot:"ŀ",lmoustache:"⎰",lmoust:"⎰",lnap:"⪉",lnapprox:"⪉",lne:"⪇",lnE:"≨",lneq:"⪇",lneqq:"≨",lnsim:"⋦",loang:"⟬",loarr:"⇽",lobrk:"⟦",longleftarrow:"⟵",LongLeftArrow:"⟵",Longleftarrow:"⟸",longleftrightarrow:"⟷",LongLeftRightArrow:"⟷",Longleftrightarrow:"⟺",longmapsto:"⟼",longrightarrow:"⟶",LongRightArrow:"⟶",Longrightarrow:"⟹",looparrowleft:"↫",looparrowright:"↬",lopar:"⦅",Lopf:"𝕃",lopf:"𝕝",loplus:"⨭",lotimes:"⨴",lowast:"∗",lowbar:"_",LowerLeftArrow:"↙",LowerRightArrow:"↘",loz:"◊",lozenge:"◊",lozf:"⧫",lpar:"(",lparlt:"⦓",lrarr:"⇆",lrcorner:"⌟",lrhar:"⇋",lrhard:"⥭",lrm:"‎",lrtri:"⊿",lsaquo:"‹",lscr:"𝓁",Lscr:"ℒ",lsh:"↰",Lsh:"↰",lsim:"≲",lsime:"⪍",lsimg:"⪏",lsqb:"[",lsquo:"‘",lsquor:"‚",Lstrok:"Ł",lstrok:"ł",ltcc:"⪦",ltcir:"⩹",lt:"<",LT:"<",Lt:"≪",ltdot:"⋖",lthree:"⋋",ltimes:"⋉",ltlarr:"⥶",ltquest:"⩻",ltri:"◃",ltrie:"⊴",ltrif:"◂",ltrPar:"⦖",lurdshar:"⥊",luruhar:"⥦",lvertneqq:"≨︀",lvnE:"≨︀",macr:"¯",male:"♂",malt:"✠",maltese:"✠",Map:"⤅",map:"↦",mapsto:"↦",mapstodown:"↧",mapstoleft:"↤",mapstoup:"↥",marker:"▮",mcomma:"⨩",Mcy:"М",mcy:"м",mdash:"—",mDDot:"∺",measuredangle:"∡",MediumSpace:" ",Mellintrf:"ℳ",Mfr:"𝔐",mfr:"𝔪",mho:"℧",micro:"µ",midast:"*",midcir:"⫰",mid:"∣",middot:"·",minusb:"⊟",minus:"−",minusd:"∸",minusdu:"⨪",MinusPlus:"∓",mlcp:"⫛",mldr:"…",mnplus:"∓",models:"⊧",Mopf:"𝕄",mopf:"𝕞",mp:"∓",mscr:"𝓂",Mscr:"ℳ",mstpos:"∾",Mu:"Μ",mu:"μ",multimap:"⊸",mumap:"⊸",nabla:"∇",Nacute:"Ń",nacute:"ń",nang:"∠⃒",nap:"≉",napE:"⩰̸",napid:"≋̸",napos:"ʼn",napprox:"≉",natural:"♮",naturals:"ℕ",natur:"♮",nbsp:" ",nbump:"≎̸",nbumpe:"≏̸",ncap:"⩃",Ncaron:"Ň",ncaron:"ň",Ncedil:"Ņ",ncedil:"ņ",ncong:"≇",ncongdot:"⩭̸",ncup:"⩂",Ncy:"Н",ncy:"н",ndash:"–",nearhk:"⤤",nearr:"↗",neArr:"⇗",nearrow:"↗",ne:"≠",nedot:"≐̸",NegativeMediumSpace:"​",NegativeThickSpace:"​",NegativeThinSpace:"​",NegativeVeryThinSpace:"​",nequiv:"≢",nesear:"⤨",nesim:"≂̸",NestedGreaterGreater:"≫",NestedLessLess:"≪",NewLine:"\n",nexist:"∄",nexists:"∄",Nfr:"𝔑",nfr:"𝔫",ngE:"≧̸",nge:"≱",ngeq:"≱",ngeqq:"≧̸",ngeqslant:"⩾̸",nges:"⩾̸",nGg:"⋙̸",ngsim:"≵",nGt:"≫⃒",ngt:"≯",ngtr:"≯",nGtv:"≫̸",nharr:"↮",nhArr:"⇎",nhpar:"⫲",ni:"∋",nis:"⋼",nisd:"⋺",niv:"∋",NJcy:"Њ",njcy:"њ",nlarr:"↚",nlArr:"⇍",nldr:"‥",nlE:"≦̸",nle:"≰",nleftarrow:"↚",nLeftarrow:"⇍",nleftrightarrow:"↮",nLeftrightarrow:"⇎",nleq:"≰",nleqq:"≦̸",nleqslant:"⩽̸",nles:"⩽̸",nless:"≮",nLl:"⋘̸",nlsim:"≴",nLt:"≪⃒",nlt:"≮",nltri:"⋪",nltrie:"⋬",nLtv:"≪̸",nmid:"∤",NoBreak:"⁠",NonBreakingSpace:" ",nopf:"𝕟",Nopf:"ℕ",Not:"⫬",not:"¬",NotCongruent:"≢",NotCupCap:"≭",NotDoubleVerticalBar:"∦",NotElement:"∉",NotEqual:"≠",NotEqualTilde:"≂̸",NotExists:"∄",NotGreater:"≯",NotGreaterEqual:"≱",NotGreaterFullEqual:"≧̸",NotGreaterGreater:"≫̸",NotGreaterLess:"≹",NotGreaterSlantEqual:"⩾̸",NotGreaterTilde:"≵",NotHumpDownHump:"≎̸",NotHumpEqual:"≏̸",notin:"∉",notindot:"⋵̸",notinE:"⋹̸",notinva:"∉",notinvb:"⋷",notinvc:"⋶",NotLeftTriangleBar:"⧏̸",NotLeftTriangle:"⋪",NotLeftTriangleEqual:"⋬",NotLess:"≮",NotLessEqual:"≰",NotLessGreater:"≸",NotLessLess:"≪̸",NotLessSlantEqual:"⩽̸",NotLessTilde:"≴",NotNestedGreaterGreater:"⪢̸",NotNestedLessLess:"⪡̸",notni:"∌",notniva:"∌",notnivb:"⋾",notnivc:"⋽",NotPrecedes:"⊀",NotPrecedesEqual:"⪯̸",NotPrecedesSlantEqual:"⋠",NotReverseElement:"∌",NotRightTriangleBar:"⧐̸",NotRightTriangle:"⋫",NotRightTriangleEqual:"⋭",NotSquareSubset:"⊏̸",NotSquareSubsetEqual:"⋢",NotSquareSuperset:"⊐̸",NotSquareSupersetEqual:"⋣",NotSubset:"⊂⃒",NotSubsetEqual:"⊈",NotSucceeds:"⊁",NotSucceedsEqual:"⪰̸",NotSucceedsSlantEqual:"⋡",NotSucceedsTilde:"≿̸",NotSuperset:"⊃⃒",NotSupersetEqual:"⊉",NotTilde:"≁",NotTildeEqual:"≄",NotTildeFullEqual:"≇",NotTildeTilde:"≉",NotVerticalBar:"∤",nparallel:"∦",npar:"∦",nparsl:"⫽⃥",npart:"∂̸",npolint:"⨔",npr:"⊀",nprcue:"⋠",nprec:"⊀",npreceq:"⪯̸",npre:"⪯̸",nrarrc:"⤳̸",nrarr:"↛",nrArr:"⇏",nrarrw:"↝̸",nrightarrow:"↛",nRightarrow:"⇏",nrtri:"⋫",nrtrie:"⋭",nsc:"⊁",nsccue:"⋡",nsce:"⪰̸",Nscr:"𝒩",nscr:"𝓃",nshortmid:"∤",nshortparallel:"∦",nsim:"≁",nsime:"≄",nsimeq:"≄",nsmid:"∤",nspar:"∦",nsqsube:"⋢",nsqsupe:"⋣",nsub:"⊄",nsubE:"⫅̸",nsube:"⊈",nsubset:"⊂⃒",nsubseteq:"⊈",nsubseteqq:"⫅̸",nsucc:"⊁",nsucceq:"⪰̸",nsup:"⊅",nsupE:"⫆̸",nsupe:"⊉",nsupset:"⊃⃒",nsupseteq:"⊉",nsupseteqq:"⫆̸",ntgl:"≹",Ntilde:"Ñ",ntilde:"ñ",ntlg:"≸",ntriangleleft:"⋪",ntrianglelefteq:"⋬",ntriangleright:"⋫",ntrianglerighteq:"⋭",Nu:"Ν",nu:"ν",num:"#",numero:"№",numsp:" ",nvap:"≍⃒",nvdash:"⊬",nvDash:"⊭",nVdash:"⊮",nVDash:"⊯",nvge:"≥⃒",nvgt:">⃒",nvHarr:"⤄",nvinfin:"⧞",nvlArr:"⤂",nvle:"≤⃒",nvlt:"<⃒",nvltrie:"⊴⃒",nvrArr:"⤃",nvrtrie:"⊵⃒",nvsim:"∼⃒",nwarhk:"⤣",nwarr:"↖",nwArr:"⇖",nwarrow:"↖",nwnear:"⤧",Oacute:"Ó",oacute:"ó",oast:"⊛",Ocirc:"Ô",ocirc:"ô",ocir:"⊚",Ocy:"О",ocy:"о",odash:"⊝",Odblac:"Ő",odblac:"ő",odiv:"⨸",odot:"⊙",odsold:"⦼",OElig:"Œ",oelig:"œ",ofcir:"⦿",Ofr:"𝔒",ofr:"𝔬",ogon:"˛",Ograve:"Ò",ograve:"ò",ogt:"⧁",ohbar:"⦵",ohm:"Ω",oint:"∮",olarr:"↺",olcir:"⦾",olcross:"⦻",oline:"‾",olt:"⧀",Omacr:"Ō",omacr:"ō",Omega:"Ω",omega:"ω",Omicron:"Ο",omicron:"ο",omid:"⦶",ominus:"⊖",Oopf:"𝕆",oopf:"𝕠",opar:"⦷",OpenCurlyDoubleQuote:"“",OpenCurlyQuote:"‘",operp:"⦹",oplus:"⊕",orarr:"↻",Or:"⩔",or:"∨",ord:"⩝",order:"ℴ",orderof:"ℴ",ordf:"ª",ordm:"º",origof:"⊶",oror:"⩖",orslope:"⩗",orv:"⩛",oS:"Ⓢ",Oscr:"𝒪",oscr:"ℴ",Oslash:"Ø",oslash:"ø",osol:"⊘",Otilde:"Õ",otilde:"õ",otimesas:"⨶",Otimes:"⨷",otimes:"⊗",Ouml:"Ö",ouml:"ö",ovbar:"⌽",OverBar:"‾",OverBrace:"⏞",OverBracket:"⎴",OverParenthesis:"⏜",para:"¶",parallel:"∥",par:"∥",parsim:"⫳",parsl:"⫽",part:"∂",PartialD:"∂",Pcy:"П",pcy:"п",percnt:"%",period:".",permil:"‰",perp:"⊥",pertenk:"‱",Pfr:"𝔓",pfr:"𝔭",Phi:"Φ",phi:"φ",phiv:"ϕ",phmmat:"ℳ",phone:"☎",Pi:"Π",pi:"π",pitchfork:"⋔",piv:"ϖ",planck:"ℏ",planckh:"ℎ",plankv:"ℏ",plusacir:"⨣",plusb:"⊞",pluscir:"⨢",plus:"+",plusdo:"∔",plusdu:"⨥",pluse:"⩲",PlusMinus:"±",plusmn:"±",plussim:"⨦",plustwo:"⨧",pm:"±",Poincareplane:"ℌ",pointint:"⨕",popf:"𝕡",Popf:"ℙ",pound:"£",prap:"⪷",Pr:"⪻",pr:"≺",prcue:"≼",precapprox:"⪷",prec:"≺",preccurlyeq:"≼",Precedes:"≺",PrecedesEqual:"⪯",PrecedesSlantEqual:"≼",PrecedesTilde:"≾",preceq:"⪯",precnapprox:"⪹",precneqq:"⪵",precnsim:"⋨",pre:"⪯",prE:"⪳",precsim:"≾",prime:"′",Prime:"″",primes:"ℙ",prnap:"⪹",prnE:"⪵",prnsim:"⋨",prod:"∏",Product:"∏",profalar:"⌮",profline:"⌒",profsurf:"⌓",prop:"∝",Proportional:"∝",Proportion:"∷",propto:"∝",prsim:"≾",prurel:"⊰",Pscr:"𝒫",pscr:"𝓅",Psi:"Ψ",psi:"ψ",puncsp:" ",Qfr:"𝔔",qfr:"𝔮",qint:"⨌",qopf:"𝕢",Qopf:"ℚ",qprime:"⁗",Qscr:"𝒬",qscr:"𝓆",quaternions:"ℍ",quatint:"⨖",quest:"?",questeq:"≟",quot:'"',QUOT:'"',rAarr:"⇛",race:"∽̱",Racute:"Ŕ",racute:"ŕ",radic:"√",raemptyv:"⦳",rang:"⟩",Rang:"⟫",rangd:"⦒",range:"⦥",rangle:"⟩",raquo:"»",rarrap:"⥵",rarrb:"⇥",rarrbfs:"⤠",rarrc:"⤳",rarr:"→",Rarr:"↠",rArr:"⇒",rarrfs:"⤞",rarrhk:"↪",rarrlp:"↬",rarrpl:"⥅",rarrsim:"⥴",Rarrtl:"⤖",rarrtl:"↣",rarrw:"↝",ratail:"⤚",rAtail:"⤜",ratio:"∶",rationals:"ℚ",rbarr:"⤍",rBarr:"⤏",RBarr:"⤐",rbbrk:"❳",rbrace:"}",rbrack:"]",rbrke:"⦌",rbrksld:"⦎",rbrkslu:"⦐",Rcaron:"Ř",rcaron:"ř",Rcedil:"Ŗ",rcedil:"ŗ",rceil:"⌉",rcub:"}",Rcy:"Р",rcy:"р",rdca:"⤷",rdldhar:"⥩",rdquo:"”",rdquor:"”",rdsh:"↳",real:"ℜ",realine:"ℛ",realpart:"ℜ",reals:"ℝ",Re:"ℜ",rect:"▭",reg:"®",REG:"®",ReverseElement:"∋",ReverseEquilibrium:"⇋",ReverseUpEquilibrium:"⥯",rfisht:"⥽",rfloor:"⌋",rfr:"𝔯",Rfr:"ℜ",rHar:"⥤",rhard:"⇁",rharu:"⇀",rharul:"⥬",Rho:"Ρ",rho:"ρ",rhov:"ϱ",RightAngleBracket:"⟩",RightArrowBar:"⇥",rightarrow:"→",RightArrow:"→",Rightarrow:"⇒",RightArrowLeftArrow:"⇄",rightarrowtail:"↣",RightCeiling:"⌉",RightDoubleBracket:"⟧",RightDownTeeVector:"⥝",RightDownVectorBar:"⥕",RightDownVector:"⇂",RightFloor:"⌋",rightharpoondown:"⇁",rightharpoonup:"⇀",rightleftarrows:"⇄",rightleftharpoons:"⇌",rightrightarrows:"⇉",rightsquigarrow:"↝",RightTeeArrow:"↦",RightTee:"⊢",RightTeeVector:"⥛",rightthreetimes:"⋌",RightTriangleBar:"⧐",RightTriangle:"⊳",RightTriangleEqual:"⊵",RightUpDownVector:"⥏",RightUpTeeVector:"⥜",RightUpVectorBar:"⥔",RightUpVector:"↾",RightVectorBar:"⥓",RightVector:"⇀",ring:"˚",risingdotseq:"≓",rlarr:"⇄",rlhar:"⇌",rlm:"‏",rmoustache:"⎱",rmoust:"⎱",rnmid:"⫮",roang:"⟭",roarr:"⇾",robrk:"⟧",ropar:"⦆",ropf:"𝕣",Ropf:"ℝ",roplus:"⨮",rotimes:"⨵",RoundImplies:"⥰",rpar:")",rpargt:"⦔",rppolint:"⨒",rrarr:"⇉",Rrightarrow:"⇛",rsaquo:"›",rscr:"𝓇",Rscr:"ℛ",rsh:"↱",Rsh:"↱",rsqb:"]",rsquo:"’",rsquor:"’",rthree:"⋌",rtimes:"⋊",rtri:"▹",rtrie:"⊵",rtrif:"▸",rtriltri:"⧎",RuleDelayed:"⧴",ruluhar:"⥨",rx:"℞",Sacute:"Ś",sacute:"ś",sbquo:"‚",scap:"⪸",Scaron:"Š",scaron:"š",Sc:"⪼",sc:"≻",sccue:"≽",sce:"⪰",scE:"⪴",Scedil:"Ş",scedil:"ş",Scirc:"Ŝ",scirc:"ŝ",scnap:"⪺",scnE:"⪶",scnsim:"⋩",scpolint:"⨓",scsim:"≿",Scy:"С",scy:"с",sdotb:"⊡",sdot:"⋅",sdote:"⩦",searhk:"⤥",searr:"↘",seArr:"⇘",searrow:"↘",sect:"§",semi:";",seswar:"⤩",setminus:"∖",setmn:"∖",sext:"✶",Sfr:"𝔖",sfr:"𝔰",sfrown:"⌢",sharp:"♯",SHCHcy:"Щ",shchcy:"щ",SHcy:"Ш",shcy:"ш",ShortDownArrow:"↓",ShortLeftArrow:"←",shortmid:"∣",shortparallel:"∥",ShortRightArrow:"→",ShortUpArrow:"↑",shy:"­",Sigma:"Σ",sigma:"σ",sigmaf:"ς",sigmav:"ς",sim:"∼",simdot:"⩪",sime:"≃",simeq:"≃",simg:"⪞",simgE:"⪠",siml:"⪝",simlE:"⪟",simne:"≆",simplus:"⨤",simrarr:"⥲",slarr:"←",SmallCircle:"∘",smallsetminus:"∖",smashp:"⨳",smeparsl:"⧤",smid:"∣",smile:"⌣",smt:"⪪",smte:"⪬",smtes:"⪬︀",SOFTcy:"Ь",softcy:"ь",solbar:"⌿",solb:"⧄",sol:"/",Sopf:"𝕊",sopf:"𝕤",spades:"♠",spadesuit:"♠",spar:"∥",sqcap:"⊓",sqcaps:"⊓︀",sqcup:"⊔",sqcups:"⊔︀",Sqrt:"√",sqsub:"⊏",sqsube:"⊑",sqsubset:"⊏",sqsubseteq:"⊑",sqsup:"⊐",sqsupe:"⊒",sqsupset:"⊐",sqsupseteq:"⊒",square:"□",Square:"□",SquareIntersection:"⊓",SquareSubset:"⊏",SquareSubsetEqual:"⊑",SquareSuperset:"⊐",SquareSupersetEqual:"⊒",SquareUnion:"⊔",squarf:"▪",squ:"□",squf:"▪",srarr:"→",Sscr:"𝒮",sscr:"𝓈",ssetmn:"∖",ssmile:"⌣",sstarf:"⋆",Star:"⋆",star:"☆",starf:"★",straightepsilon:"ϵ",straightphi:"ϕ",strns:"¯",sub:"⊂",Sub:"⋐",subdot:"⪽",subE:"⫅",sube:"⊆",subedot:"⫃",submult:"⫁",subnE:"⫋",subne:"⊊",subplus:"⪿",subrarr:"⥹",subset:"⊂",Subset:"⋐",subseteq:"⊆",subseteqq:"⫅",SubsetEqual:"⊆",subsetneq:"⊊",subsetneqq:"⫋",subsim:"⫇",subsub:"⫕",subsup:"⫓",succapprox:"⪸",succ:"≻",succcurlyeq:"≽",Succeeds:"≻",SucceedsEqual:"⪰",SucceedsSlantEqual:"≽",SucceedsTilde:"≿",succeq:"⪰",succnapprox:"⪺",succneqq:"⪶",succnsim:"⋩",succsim:"≿",SuchThat:"∋",sum:"∑",Sum:"∑",sung:"♪",sup1:"¹",sup2:"²",sup3:"³",sup:"⊃",Sup:"⋑",supdot:"⪾",supdsub:"⫘",supE:"⫆",supe:"⊇",supedot:"⫄",Superset:"⊃",SupersetEqual:"⊇",suphsol:"⟉",suphsub:"⫗",suplarr:"⥻",supmult:"⫂",supnE:"⫌",supne:"⊋",supplus:"⫀",supset:"⊃",Supset:"⋑",supseteq:"⊇",supseteqq:"⫆",supsetneq:"⊋",supsetneqq:"⫌",supsim:"⫈",supsub:"⫔",supsup:"⫖",swarhk:"⤦",swarr:"↙",swArr:"⇙",swarrow:"↙",swnwar:"⤪",szlig:"ß",Tab:"\t",target:"⌖",Tau:"Τ",tau:"τ",tbrk:"⎴",Tcaron:"Ť",tcaron:"ť",Tcedil:"Ţ",tcedil:"ţ",Tcy:"Т",tcy:"т",tdot:"⃛",telrec:"⌕",Tfr:"𝔗",tfr:"𝔱",there4:"∴",therefore:"∴",Therefore:"∴",Theta:"Θ",theta:"θ",thetasym:"ϑ",thetav:"ϑ",thickapprox:"≈",thicksim:"∼",ThickSpace:"  ",ThinSpace:" ",thinsp:" ",thkap:"≈",thksim:"∼",THORN:"Þ",thorn:"þ",tilde:"˜",Tilde:"∼",TildeEqual:"≃",TildeFullEqual:"≅",TildeTilde:"≈",timesbar:"⨱",timesb:"⊠",times:"×",timesd:"⨰",tint:"∭",toea:"⤨",topbot:"⌶",topcir:"⫱",top:"⊤",Topf:"𝕋",topf:"𝕥",topfork:"⫚",tosa:"⤩",tprime:"‴",trade:"™",TRADE:"™",triangle:"▵",triangledown:"▿",triangleleft:"◃",trianglelefteq:"⊴",triangleq:"≜",triangleright:"▹",trianglerighteq:"⊵",tridot:"◬",trie:"≜",triminus:"⨺",TripleDot:"⃛",triplus:"⨹",trisb:"⧍",tritime:"⨻",trpezium:"⏢",Tscr:"𝒯",tscr:"𝓉",TScy:"Ц",tscy:"ц",TSHcy:"Ћ",tshcy:"ћ",Tstrok:"Ŧ",tstrok:"ŧ",twixt:"≬",twoheadleftarrow:"↞",twoheadrightarrow:"↠",Uacute:"Ú",uacute:"ú",uarr:"↑",Uarr:"↟",uArr:"⇑",Uarrocir:"⥉",Ubrcy:"Ў",ubrcy:"ў",Ubreve:"Ŭ",ubreve:"ŭ",Ucirc:"Û",ucirc:"û",Ucy:"У",ucy:"у",udarr:"⇅",Udblac:"Ű",udblac:"ű",udhar:"⥮",ufisht:"⥾",Ufr:"𝔘",ufr:"𝔲",Ugrave:"Ù",ugrave:"ù",uHar:"⥣",uharl:"↿",uharr:"↾",uhblk:"▀",ulcorn:"⌜",ulcorner:"⌜",ulcrop:"⌏",ultri:"◸",Umacr:"Ū",umacr:"ū",uml:"¨",UnderBar:"_",UnderBrace:"⏟",UnderBracket:"⎵",UnderParenthesis:"⏝",Union:"⋃",UnionPlus:"⊎",Uogon:"Ų",uogon:"ų",Uopf:"𝕌",uopf:"𝕦",UpArrowBar:"⤒",uparrow:"↑",UpArrow:"↑",Uparrow:"⇑",UpArrowDownArrow:"⇅",updownarrow:"↕",UpDownArrow:"↕",Updownarrow:"⇕",UpEquilibrium:"⥮",upharpoonleft:"↿",upharpoonright:"↾",uplus:"⊎",UpperLeftArrow:"↖",UpperRightArrow:"↗",upsi:"υ",Upsi:"ϒ",upsih:"ϒ",Upsilon:"Υ",upsilon:"υ",UpTeeArrow:"↥",UpTee:"⊥",upuparrows:"⇈",urcorn:"⌝",urcorner:"⌝",urcrop:"⌎",Uring:"Ů",uring:"ů",urtri:"◹",Uscr:"𝒰",uscr:"𝓊",utdot:"⋰",Utilde:"Ũ",utilde:"ũ",utri:"▵",utrif:"▴",uuarr:"⇈",Uuml:"Ü",uuml:"ü",uwangle:"⦧",vangrt:"⦜",varepsilon:"ϵ",varkappa:"ϰ",varnothing:"∅",varphi:"ϕ",varpi:"ϖ",varpropto:"∝",varr:"↕",vArr:"⇕",varrho:"ϱ",varsigma:"ς",varsubsetneq:"⊊︀",varsubsetneqq:"⫋︀",varsupsetneq:"⊋︀",varsupsetneqq:"⫌︀",vartheta:"ϑ",vartriangleleft:"⊲",vartriangleright:"⊳",vBar:"⫨",Vbar:"⫫",vBarv:"⫩",Vcy:"В",vcy:"в",vdash:"⊢",vDash:"⊨",Vdash:"⊩",VDash:"⊫",Vdashl:"⫦",veebar:"⊻",vee:"∨",Vee:"⋁",veeeq:"≚",vellip:"⋮",verbar:"|",Verbar:"‖",vert:"|",Vert:"‖",VerticalBar:"∣",VerticalLine:"|",VerticalSeparator:"❘",VerticalTilde:"≀",VeryThinSpace:" ",Vfr:"𝔙",vfr:"𝔳",vltri:"⊲",vnsub:"⊂⃒",vnsup:"⊃⃒",Vopf:"𝕍",vopf:"𝕧",vprop:"∝",vrtri:"⊳",Vscr:"𝒱",vscr:"𝓋",vsubnE:"⫋︀",vsubne:"⊊︀",vsupnE:"⫌︀",vsupne:"⊋︀",Vvdash:"⊪",vzigzag:"⦚",Wcirc:"Ŵ",wcirc:"ŵ",wedbar:"⩟",wedge:"∧",Wedge:"⋀",wedgeq:"≙",weierp:"℘",Wfr:"𝔚",wfr:"𝔴",Wopf:"𝕎",wopf:"𝕨",wp:"℘",wr:"≀",wreath:"≀",Wscr:"𝒲",wscr:"𝓌",xcap:"⋂",xcirc:"◯",xcup:"⋃",xdtri:"▽",Xfr:"𝔛",xfr:"𝔵",xharr:"⟷",xhArr:"⟺",Xi:"Ξ",xi:"ξ",xlarr:"⟵",xlArr:"⟸",xmap:"⟼",xnis:"⋻",xodot:"⨀",Xopf:"𝕏",xopf:"𝕩",xoplus:"⨁",xotime:"⨂",xrarr:"⟶",xrArr:"⟹",Xscr:"𝒳",xscr:"𝓍",xsqcup:"⨆",xuplus:"⨄",xutri:"△",xvee:"⋁",xwedge:"⋀",Yacute:"Ý",yacute:"ý",YAcy:"Я",yacy:"я",Ycirc:"Ŷ",ycirc:"ŷ",Ycy:"Ы",ycy:"ы",yen:"¥",Yfr:"𝔜",yfr:"𝔶",YIcy:"Ї",yicy:"ї",Yopf:"𝕐",yopf:"𝕪",Yscr:"𝒴",yscr:"𝓎",YUcy:"Ю",yucy:"ю",yuml:"ÿ",Yuml:"Ÿ",Zacute:"Ź",zacute:"ź",Zcaron:"Ž",zcaron:"ž",Zcy:"З",zcy:"з",Zdot:"Ż",zdot:"ż",zeetrf:"ℨ",ZeroWidthSpace:"​",Zeta:"Ζ",zeta:"ζ",zfr:"𝔷",Zfr:"ℨ",ZHcy:"Ж",zhcy:"ж",zigrarr:"⇝",zopf:"𝕫",Zopf:"ℤ",Zscr:"𝒵",zscr:"𝓏",zwj:"‍",zwnj:"‌"}},{}],23:[function(e,t,n){t.exports={Aacute:"Á",aacute:"á",Acirc:"Â",acirc:"â",acute:"´",AElig:"Æ",aelig:"æ",Agrave:"À",agrave:"à",amp:"&",AMP:"&",Aring:"Å",aring:"å",Atilde:"Ã",atilde:"ã",Auml:"Ä",auml:"ä",brvbar:"¦",Ccedil:"Ç",ccedil:"ç",cedil:"¸",cent:"¢",copy:"©",COPY:"©",curren:"¤",deg:"°",divide:"÷",Eacute:"É",eacute:"é",Ecirc:"Ê",ecirc:"ê",Egrave:"È",egrave:"è",ETH:"Ð",eth:"ð",Euml:"Ë",euml:"ë",frac12:"½",frac14:"¼",frac34:"¾",gt:">",GT:">",Iacute:"Í",iacute:"í",Icirc:"Î",icirc:"î",iexcl:"¡",Igrave:"Ì",igrave:"ì",iquest:"¿",Iuml:"Ï",iuml:"ï",laquo:"«",lt:"<",LT:"<",macr:"¯",micro:"µ",middot:"·",nbsp:" ",not:"¬",Ntilde:"Ñ",ntilde:"ñ",Oacute:"Ó",oacute:"ó",Ocirc:"Ô",ocirc:"ô",Ograve:"Ò",ograve:"ò",ordf:"ª",ordm:"º",Oslash:"Ø",oslash:"ø",Otilde:"Õ",otilde:"õ",Ouml:"Ö",ouml:"ö",para:"¶",plusmn:"±",pound:"£",quot:'"',QUOT:'"',raquo:"»",reg:"®",REG:"®",sect:"§",shy:"­",sup1:"¹",sup2:"²",sup3:"³",szlig:"ß",THORN:"Þ",thorn:"þ",times:"×",Uacute:"Ú",uacute:"ú",Ucirc:"Û",ucirc:"û",Ugrave:"Ù",ugrave:"ù",uml:"¨",Uuml:"Ü",uuml:"ü",Yacute:"Ý",yacute:"ý",yen:"¥",yuml:"ÿ"}},{}],24:[function(e,t,n){t.exports={amp:"&",apos:"'",gt:">",lt:"<",quot:'"'}},{}],25:[function(e,t,n){var r=Object.create||function(e){var t=function(){};return t.prototype=e,new t},i=Object.keys||function(e){var t=[];for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.push(n);return n},a=Function.prototype.bind||function(e){var t=this;return function(){return t.apply(e,arguments)}};function o(){this._events&&Object.prototype.hasOwnProperty.call(this,"_events")||(this._events=r(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0}t.exports=o,o.EventEmitter=o,o.prototype._events=void 0,o.prototype._maxListeners=void 0;var c,s=10;try{var l={};Object.defineProperty&&Object.defineProperty(l,"x",{value:0}),c=0===l.x}catch(e){c=!1}function f(e){return void 0===e._maxListeners?o.defaultMaxListeners:e._maxListeners}function h(e,t,n){if(t)e.call(n);else for(var r=e.length,i=S(e,r),a=0;a<r;++a)i[a].call(n)}function d(e,t,n,r){if(t)e.call(n,r);else for(var i=e.length,a=S(e,i),o=0;o<i;++o)a[o].call(n,r)}function p(e,t,n,r,i){if(t)e.call(n,r,i);else for(var a=e.length,o=S(e,a),c=0;c<a;++c)o[c].call(n,r,i)}function m(e,t,n,r,i,a){if(t)e.call(n,r,i,a);else for(var o=e.length,c=S(e,o),s=0;s<o;++s)c[s].call(n,r,i,a)}function v(e,t,n,r){if(t)e.apply(n,r);else for(var i=e.length,a=S(e,i),o=0;o<i;++o)a[o].apply(n,r)}function g(e,t,n,i){var a,o,c;if("function"!=typeof n)throw new TypeError('"listener" argument must be a function');if((o=e._events)?(o.newListener&&(e.emit("newListener",t,n.listener?n.listener:n),o=e._events),c=o[t]):(o=e._events=r(null),e._eventsCount=0),c){if("function"==typeof c?c=o[t]=i?[n,c]:[c,n]:i?c.unshift(n):c.push(n),!c.warned&&(a=f(e))&&a>0&&c.length>a){c.warned=!0;var s=new Error("Possible EventEmitter memory leak detected. "+c.length+' "'+String(t)+'" listeners added. Use emitter.setMaxListeners() to increase limit.');s.name="MaxListenersExceededWarning",s.emitter=e,s.type=t,s.count=c.length,"object"===("undefined"==typeof console?"undefined":u(console))&&console.warn&&console.warn("%s: %s",s.name,s.message)}}else c=o[t]=n,++e._eventsCount;return e}function y(){if(!this.fired)switch(this.target.removeListener(this.type,this.wrapFn),this.fired=!0,arguments.length){case 0:return this.listener.call(this.target);case 1:return this.listener.call(this.target,arguments[0]);case 2:return this.listener.call(this.target,arguments[0],arguments[1]);case 3:return this.listener.call(this.target,arguments[0],arguments[1],arguments[2]);default:for(var e=new Array(arguments.length),t=0;t<e.length;++t)e[t]=arguments[t];this.listener.apply(this.target,e)}}function b(e,t,n){var r={fired:!1,wrapFn:void 0,target:e,type:t,listener:n},i=a.call(y,r);return i.listener=n,r.wrapFn=i,i}function w(e,t,n){var r=e._events;if(!r)return[];var i=r[t];return i?"function"==typeof i?n?[i.listener||i]:[i]:n?function(e){for(var t=new Array(e.length),n=0;n<t.length;++n)t[n]=e[n].listener||e[n];return t}(i):S(i,i.length):[]}function x(e){var t=this._events;if(t){var n=t[e];if("function"==typeof n)return 1;if(n)return n.length}return 0}function S(e,t){for(var n=new Array(t),r=0;r<t;++r)n[r]=e[r];return n}c?Object.defineProperty(o,"defaultMaxListeners",{enumerable:!0,get:function(){return s},set:function(e){if("number"!=typeof e||e<0||e!=e)throw new TypeError('"defaultMaxListeners" must be a positive number');s=e}}):o.defaultMaxListeners=s,o.prototype.setMaxListeners=function(e){if("number"!=typeof e||e<0||isNaN(e))throw new TypeError('"n" argument must be a positive number');return this._maxListeners=e,this},o.prototype.getMaxListeners=function(){return f(this)},o.prototype.emit=function(e){var t,n,r,i,a,o,c="error"===e;if(o=this._events)c=c&&null==o.error;else if(!c)return!1;if(c){if(arguments.length>1&&(t=arguments[1]),t instanceof Error)throw t;var s=new Error('Unhandled "error" event. ('+t+")");throw s.context=t,s}if(!(n=o[e]))return!1;var u="function"==typeof n;switch(r=arguments.length){case 1:h(n,u,this);break;case 2:d(n,u,this,arguments[1]);break;case 3:p(n,u,this,arguments[1],arguments[2]);break;case 4:m(n,u,this,arguments[1],arguments[2],arguments[3]);break;default:for(i=new Array(r-1),a=1;a<r;a++)i[a-1]=arguments[a];v(n,u,this,i)}return!0},o.prototype.addListener=function(e,t){return g(this,e,t,!1)},o.prototype.on=o.prototype.addListener,o.prototype.prependListener=function(e,t){return g(this,e,t,!0)},o.prototype.once=function(e,t){if("function"!=typeof t)throw new TypeError('"listener" argument must be a function');return this.on(e,b(this,e,t)),this},o.prototype.prependOnceListener=function(e,t){if("function"!=typeof t)throw new TypeError('"listener" argument must be a function');return this.prependListener(e,b(this,e,t)),this},o.prototype.removeListener=function(e,t){var n,i,a,o,c;if("function"!=typeof t)throw new TypeError('"listener" argument must be a function');if(!(i=this._events))return this;if(!(n=i[e]))return this;if(n===t||n.listener===t)0==--this._eventsCount?this._events=r(null):(delete i[e],i.removeListener&&this.emit("removeListener",e,n.listener||t));else if("function"!=typeof n){for(a=-1,o=n.length-1;o>=0;o--)if(n[o]===t||n[o].listener===t){c=n[o].listener,a=o;break}if(a<0)return this;0===a?n.shift():function(e,t){for(var n=t,r=n+1,i=e.length;r<i;n+=1,r+=1)e[n]=e[r];e.pop()}(n,a),1===n.length&&(i[e]=n[0]),i.removeListener&&this.emit("removeListener",e,c||t)}return this},o.prototype.removeAllListeners=function(e){var t,n,a;if(!(n=this._events))return this;if(!n.removeListener)return 0===arguments.length?(this._events=r(null),this._eventsCount=0):n[e]&&(0==--this._eventsCount?this._events=r(null):delete n[e]),this;if(0===arguments.length){var o,c=i(n);for(a=0;a<c.length;++a)"removeListener"!==(o=c[a])&&this.removeAllListeners(o);return this.removeAllListeners("removeListener"),this._events=r(null),this._eventsCount=0,this}if("function"==typeof(t=n[e]))this.removeListener(e,t);else if(t)for(a=t.length-1;a>=0;a--)this.removeListener(e,t[a]);return this},o.prototype.listeners=function(e){return w(this,e,!0)},o.prototype.rawListeners=function(e){return w(this,e,!1)},o.listenerCount=function(e,t){return"function"==typeof e.listenerCount?e.listenerCount(t):x.call(e,t)},o.prototype.listenerCount=x,o.prototype.eventNames=function(){return this._eventsCount>0?Reflect.ownKeys(this._events):[]}},{}],26:[function(e,t,n){var r,i=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}),a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(n,"__esModule",{value:!0});var o=function(e){function t(t){void 0===t&&(t={});var n=e.call(this,(function(e){for(var t,r=[],i=1;i<arguments.length;i++)r[i-1]=arguments[i];n.events.push([e].concat(r)),n._cbs[e]&&(t=n._cbs)[e].apply(t,r)}))||this;return n._cbs=t,n.events=[],n}return i(t,e),t.prototype.onreset=function(){this.events=[],this._cbs.onreset&&this._cbs.onreset()},t.prototype.restart=function(){var e;this._cbs.onreset&&this._cbs.onreset();for(var t=0;t<this.events.length;t++){var n=this.events[t],r=n[0],i=n.slice(1);this._cbs[r]&&(e=this._cbs)[r].apply(e,i)}},t}(a(e("./MultiplexHandler")).default);n.CollectingHandler=o},{"./MultiplexHandler":28}],27:[function(e,t,n){var r,i=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}),a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}},o=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t};Object.defineProperty(n,"__esModule",{value:!0});var c=a(e("domhandler")),s=o(e("domutils")),l=e("./Parser"),f=function(e){function t(t,n){return"object"===u(t)&&null!==t&&(n=t=void 0),e.call(this,t,n)||this}return i(t,e),t.prototype.onend=function(){var e={},t=d(g,this.dom);if(t)if("feed"===t.name){var n=t.children;e.type="atom",v(e,"id","id",n),v(e,"title","title",n);var r=m("href",d("link",n));r&&(e.link=r),v(e,"description","subtitle",n),(i=p("updated",n))&&(e.updated=new Date(i)),v(e,"author","email",n,!0),e.items=h("entry",n).map((function(e){var t={},n=e.children;v(t,"id","id",n),v(t,"title","title",n);var r=m("href",d("link",n));r&&(t.link=r);var i=p("summary",n)||p("content",n);i&&(t.description=i);var a=p("updated",n);return a&&(t.pubDate=new Date(a)),t}))}else{var i;n=d("channel",t.children).children,e.type=t.name.substr(0,3),e.id="",v(e,"title","title",n),v(e,"link","link",n),v(e,"description","description",n),(i=p("lastBuildDate",n))&&(e.updated=new Date(i)),v(e,"author","managingEditor",n,!0),e.items=h("item",t.children).map((function(e){var t={},n=e.children;v(t,"id","guid",n),v(t,"title","title",n),v(t,"link","link",n),v(t,"description","description",n);var r=p("pubDate",n);return r&&(t.pubDate=new Date(r)),t}))}this.feed=e,this.handleCallback(t?null:Error("couldn't find root of feed"))},t}(c.default);function h(e,t){return s.getElementsByTagName(e,t,!0)}function d(e,t){return s.getElementsByTagName(e,t,!0,1)[0]}function p(e,t,n){return void 0===n&&(n=!1),s.getText(s.getElementsByTagName(e,t,n,1)).trim()}function m(e,t){return t?t.attribs[e]:null}function v(e,t,n,r,i){void 0===i&&(i=!1);var a=p(n,r,i);a&&(e[t]=a)}function g(e){return"rss"===e||"feed"===e||"rdf:RDF"===e}n.FeedHandler=f;var y={xmlMode:!0};n.parseFeed=function(e,t){void 0===t&&(t=y);var n=new f(t);return new l.Parser(n,t).end(e),n.feed}},{"./Parser":29,domhandler:7,domutils:10}],28:[function(e,t,n){Object.defineProperty(n,"__esModule",{value:!0});var r=function(){function e(e){this._func=e}return e.prototype.onattribute=function(e,t){this._func("onattribute",e,t)},e.prototype.oncdatastart=function(){this._func("oncdatastart")},e.prototype.oncdataend=function(){this._func("oncdataend")},e.prototype.ontext=function(e){this._func("ontext",e)},e.prototype.onprocessinginstruction=function(e,t){this._func("onprocessinginstruction",e,t)},e.prototype.oncomment=function(e){this._func("oncomment",e)},e.prototype.oncommentend=function(){this._func("oncommentend")},e.prototype.onclosetag=function(e){this._func("onclosetag",e)},e.prototype.onopentag=function(e,t){this._func("onopentag",e,t)},e.prototype.onopentagname=function(e){this._func("onopentagname",e)},e.prototype.onerror=function(e){this._func("onerror",e)},e.prototype.onend=function(){this._func("onend")},e.prototype.onparserinit=function(e){this._func("onparserinit",e)},e.prototype.onreset=function(){this._func("onreset")},e}();n.default=r},{}],29:[function(e,t,n){var r,i=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}),a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(n,"__esModule",{value:!0});var o=a(e("./Tokenizer")),c=e("events"),s=new Set(["input","option","optgroup","select","button","datalist","textarea"]),u=new Set(["p"]),l={tr:new Set(["tr","th","td"]),th:new Set(["th"]),td:new Set(["thead","th","td"]),body:new Set(["head","link","script"]),li:new Set(["li"]),p:u,h1:u,h2:u,h3:u,h4:u,h5:u,h6:u,select:s,input:s,output:s,button:s,datalist:s,textarea:s,option:new Set(["option"]),optgroup:new Set(["optgroup","option"]),dd:new Set(["dt","dd"]),dt:new Set(["dt","dd"]),address:u,article:u,aside:u,blockquote:u,details:u,div:u,dl:u,fieldset:u,figcaption:u,figure:u,footer:u,form:u,header:u,hr:u,main:u,nav:u,ol:u,pre:u,section:u,table:u,ul:u,rt:new Set(["rt","rp"]),rp:new Set(["rt","rp"]),tbody:new Set(["thead","tbody"]),tfoot:new Set(["thead","tbody"])},f=new Set(["area","base","basefont","br","col","command","embed","frame","hr","img","input","isindex","keygen","link","meta","param","source","track","wbr"]),h=new Set(["math","svg"]),d=new Set(["mi","mo","mn","ms","mtext","annotation-xml","foreignObject","desc","title"]),p=/\s|\//,m=function(e){function t(n,r){var i=e.call(this)||this;return i._tagname="",i._attribname="",i._attribvalue="",i._attribs=null,i._stack=[],i._foreignContext=[],i.startIndex=0,i.endIndex=null,i.parseChunk=t.prototype.write,i.done=t.prototype.end,i._options=r||{},i._cbs=n||{},i._tagname="",i._attribname="",i._attribvalue="",i._attribs=null,i._stack=[],i._foreignContext=[],i.startIndex=0,i.endIndex=null,i._lowerCaseTagNames="lowerCaseTags"in i._options?!!i._options.lowerCaseTags:!i._options.xmlMode,i._lowerCaseAttributeNames="lowerCaseAttributeNames"in i._options?!!i._options.lowerCaseAttributeNames:!i._options.xmlMode,i._tokenizer=new(i._options.Tokenizer||o.default)(i._options,i),i._cbs.onparserinit&&i._cbs.onparserinit(i),i}return i(t,e),t.prototype._updatePosition=function(e){null===this.endIndex?this._tokenizer._sectionStart<=e?this.startIndex=0:this.startIndex=this._tokenizer._sectionStart-e:this.startIndex=this.endIndex+1,this.endIndex=this._tokenizer.getAbsoluteIndex()},t.prototype.ontext=function(e){this._updatePosition(1),this.endIndex--,this._cbs.ontext&&this._cbs.ontext(e)},t.prototype.onopentagname=function(e){if(this._lowerCaseTagNames&&(e=e.toLowerCase()),this._tagname=e,!this._options.xmlMode&&Object.prototype.hasOwnProperty.call(l,e))for(var t=void 0;l[e].has(t=this._stack[this._stack.length-1]);this.onclosetag(t));!this._options.xmlMode&&f.has(e)||(this._stack.push(e),h.has(e)?this._foreignContext.push(!0):d.has(e)&&this._foreignContext.push(!1)),this._cbs.onopentagname&&this._cbs.onopentagname(e),this._cbs.onopentag&&(this._attribs={})},t.prototype.onopentagend=function(){this._updatePosition(1),this._attribs&&(this._cbs.onopentag&&this._cbs.onopentag(this._tagname,this._attribs),this._attribs=null),!this._options.xmlMode&&this._cbs.onclosetag&&f.has(this._tagname)&&this._cbs.onclosetag(this._tagname),this._tagname=""},t.prototype.onclosetag=function(e){if(this._updatePosition(1),this._lowerCaseTagNames&&(e=e.toLowerCase()),(h.has(e)||d.has(e))&&this._foreignContext.pop(),!this._stack.length||!this._options.xmlMode&&f.has(e))this._options.xmlMode||"br"!==e&&"p"!==e||(this.onopentagname(e),this._closeCurrentTag());else{var t=this._stack.lastIndexOf(e);if(-1!==t)if(this._cbs.onclosetag)for(t=this._stack.length-t;t--;)this._cbs.onclosetag(this._stack.pop());else this._stack.length=t;else"p"!==e||this._options.xmlMode||(this.onopentagname(e),this._closeCurrentTag())}},t.prototype.onselfclosingtag=function(){this._options.xmlMode||this._options.recognizeSelfClosing||this._foreignContext[this._foreignContext.length-1]?this._closeCurrentTag():this.onopentagend()},t.prototype._closeCurrentTag=function(){var e=this._tagname;this.onopentagend(),this._stack[this._stack.length-1]===e&&(this._cbs.onclosetag&&this._cbs.onclosetag(e),this._stack.pop())},t.prototype.onattribname=function(e){this._lowerCaseAttributeNames&&(e=e.toLowerCase()),this._attribname=e},t.prototype.onattribdata=function(e){this._attribvalue+=e},t.prototype.onattribend=function(){this._cbs.onattribute&&this._cbs.onattribute(this._attribname,this._attribvalue),this._attribs&&!Object.prototype.hasOwnProperty.call(this._attribs,this._attribname)&&(this._attribs[this._attribname]=this._attribvalue),this._attribname="",this._attribvalue=""},t.prototype._getInstructionName=function(e){var t=e.search(p),n=t<0?e:e.substr(0,t);return this._lowerCaseTagNames&&(n=n.toLowerCase()),n},t.prototype.ondeclaration=function(e){if(this._cbs.onprocessinginstruction){var t=this._getInstructionName(e);this._cbs.onprocessinginstruction("!"+t,"!"+e)}},t.prototype.onprocessinginstruction=function(e){if(this._cbs.onprocessinginstruction){var t=this._getInstructionName(e);this._cbs.onprocessinginstruction("?"+t,"?"+e)}},t.prototype.oncomment=function(e){this._updatePosition(4),this._cbs.oncomment&&this._cbs.oncomment(e),this._cbs.oncommentend&&this._cbs.oncommentend()},t.prototype.oncdata=function(e){this._updatePosition(1),this._options.xmlMode||this._options.recognizeCDATA?(this._cbs.oncdatastart&&this._cbs.oncdatastart(),this._cbs.ontext&&this._cbs.ontext(e),this._cbs.oncdataend&&this._cbs.oncdataend()):this.oncomment("[CDATA["+e+"]]")},t.prototype.onerror=function(e){this._cbs.onerror&&this._cbs.onerror(e)},t.prototype.onend=function(){if(this._cbs.onclosetag)for(var e=this._stack.length;e>0;this._cbs.onclosetag(this._stack[--e]));this._cbs.onend&&this._cbs.onend()},t.prototype.reset=function(){this._cbs.onreset&&this._cbs.onreset(),this._tokenizer.reset(),this._tagname="",this._attribname="",this._attribs=null,this._stack=[],this._cbs.onparserinit&&this._cbs.onparserinit(this)},t.prototype.parseComplete=function(e){this.reset(),this.end(e)},t.prototype.write=function(e){this._tokenizer.write(e)},t.prototype.end=function(e){this._tokenizer.end(e)},t.prototype.pause=function(){this._tokenizer.pause()},t.prototype.resume=function(){this._tokenizer.resume()},t}(c.EventEmitter);n.Parser=m},{"./Tokenizer":30,events:25}],30:[function(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(n,"__esModule",{value:!0});var i=r(e("entities/lib/decode_codepoint")),a=r(e("entities/lib/maps/entities.json")),o=r(e("entities/lib/maps/legacy.json")),c=r(e("entities/lib/maps/xml.json"));function s(e){return" "===e||"\n"===e||"\t"===e||"\f"===e||"\r"===e}function u(e,t,n){var r=e.toLowerCase();return e===r?function(e,i){i===r?e._state=t:(e._state=n,e._index--)}:function(i,a){a===r||a===e?i._state=t:(i._state=n,i._index--)}}function l(e,t){var n=e.toLowerCase();return function(r,i){i===n||i===e?r._state=t:(r._state=3,r._index--)}}var f=u("C",23,16),h=u("D",24,16),d=u("A",25,16),p=u("T",26,16),m=u("A",27,16),v=l("R",34),g=l("I",35),y=l("P",36),b=l("T",37),w=u("R",39,1),x=u("I",40,1),S=u("P",41,1),k=u("T",42,1),_=l("Y",44),z=l("L",45),C=l("E",46),M=u("Y",48,1),O=u("L",49,1),T=u("E",50,1),E=u("#",52,53),L=u("X",55,54),A=function(){function e(e,t){this._state=1,this._buffer="",this._sectionStart=0,this._index=0,this._bufferOffset=0,this._baseState=1,this._special=1,this._running=!0,this._ended=!1,this._cbs=t,this._xmlMode=!(!e||!e.xmlMode),this._decodeEntities=!(!e||!e.decodeEntities)}return e.prototype.reset=function(){this._state=1,this._buffer="",this._sectionStart=0,this._index=0,this._bufferOffset=0,this._baseState=1,this._special=1,this._running=!0,this._ended=!1},e.prototype._stateText=function(e){"<"===e?(this._index>this._sectionStart&&this._cbs.ontext(this._getSection()),this._state=2,this._sectionStart=this._index):this._decodeEntities&&1===this._special&&"&"===e&&(this._index>this._sectionStart&&this._cbs.ontext(this._getSection()),this._baseState=1,this._state=51,this._sectionStart=this._index)},e.prototype._stateBeforeTagName=function(e){"/"===e?this._state=5:"<"===e?(this._cbs.ontext(this._getSection()),this._sectionStart=this._index):">"===e||1!==this._special||s(e)?this._state=1:"!"===e?(this._state=15,this._sectionStart=this._index+1):"?"===e?(this._state=17,this._sectionStart=this._index+1):(this._state=this._xmlMode||"s"!==e&&"S"!==e?3:31,this._sectionStart=this._index)},e.prototype._stateInTagName=function(e){("/"===e||">"===e||s(e))&&(this._emitToken("onopentagname"),this._state=8,this._index--)},e.prototype._stateBeforeClosingTagName=function(e){s(e)||(">"===e?this._state=1:1!==this._special?"s"===e||"S"===e?this._state=32:(this._state=1,this._index--):(this._state=6,this._sectionStart=this._index))},e.prototype._stateInClosingTagName=function(e){(">"===e||s(e))&&(this._emitToken("onclosetag"),this._state=7,this._index--)},e.prototype._stateAfterClosingTagName=function(e){">"===e&&(this._state=1,this._sectionStart=this._index+1)},e.prototype._stateBeforeAttributeName=function(e){">"===e?(this._cbs.onopentagend(),this._state=1,this._sectionStart=this._index+1):"/"===e?this._state=4:s(e)||(this._state=9,this._sectionStart=this._index)},e.prototype._stateInSelfClosingTag=function(e){">"===e?(this._cbs.onselfclosingtag(),this._state=1,this._sectionStart=this._index+1):s(e)||(this._state=8,this._index--)},e.prototype._stateInAttributeName=function(e){("="===e||"/"===e||">"===e||s(e))&&(this._cbs.onattribname(this._getSection()),this._sectionStart=-1,this._state=10,this._index--)},e.prototype._stateAfterAttributeName=function(e){"="===e?this._state=11:"/"===e||">"===e?(this._cbs.onattribend(),this._state=8,this._index--):s(e)||(this._cbs.onattribend(),this._state=9,this._sectionStart=this._index)},e.prototype._stateBeforeAttributeValue=function(e){'"'===e?(this._state=12,this._sectionStart=this._index+1):"'"===e?(this._state=13,this._sectionStart=this._index+1):s(e)||(this._state=14,this._sectionStart=this._index,this._index--)},e.prototype._stateInAttributeValueDoubleQuotes=function(e){'"'===e?(this._emitToken("onattribdata"),this._cbs.onattribend(),this._state=8):this._decodeEntities&&"&"===e&&(this._emitToken("onattribdata"),this._baseState=this._state,this._state=51,this._sectionStart=this._index)},e.prototype._stateInAttributeValueSingleQuotes=function(e){"'"===e?(this._emitToken("onattribdata"),this._cbs.onattribend(),this._state=8):this._decodeEntities&&"&"===e&&(this._emitToken("onattribdata"),this._baseState=this._state,this._state=51,this._sectionStart=this._index)},e.prototype._stateInAttributeValueNoQuotes=function(e){s(e)||">"===e?(this._emitToken("onattribdata"),this._cbs.onattribend(),this._state=8,this._index--):this._decodeEntities&&"&"===e&&(this._emitToken("onattribdata"),this._baseState=this._state,this._state=51,this._sectionStart=this._index)},e.prototype._stateBeforeDeclaration=function(e){this._state="["===e?22:"-"===e?18:16},e.prototype._stateInDeclaration=function(e){">"===e&&(this._cbs.ondeclaration(this._getSection()),this._state=1,this._sectionStart=this._index+1)},e.prototype._stateInProcessingInstruction=function(e){">"===e&&(this._cbs.onprocessinginstruction(this._getSection()),this._state=1,this._sectionStart=this._index+1)},e.prototype._stateBeforeComment=function(e){"-"===e?(this._state=19,this._sectionStart=this._index+1):this._state=16},e.prototype._stateInComment=function(e){"-"===e&&(this._state=20)},e.prototype._stateAfterComment1=function(e){this._state="-"===e?21:19},e.prototype._stateAfterComment2=function(e){">"===e?(this._cbs.oncomment(this._buffer.substring(this._sectionStart,this._index-2)),this._state=1,this._sectionStart=this._index+1):"-"!==e&&(this._state=19)},e.prototype._stateBeforeCdata6=function(e){"["===e?(this._state=28,this._sectionStart=this._index+1):(this._state=16,this._index--)},e.prototype._stateInCdata=function(e){"]"===e&&(this._state=29)},e.prototype._stateAfterCdata1=function(e){this._state="]"===e?30:28},e.prototype._stateAfterCdata2=function(e){">"===e?(this._cbs.oncdata(this._buffer.substring(this._sectionStart,this._index-2)),this._state=1,this._sectionStart=this._index+1):"]"!==e&&(this._state=28)},e.prototype._stateBeforeSpecial=function(e){"c"===e||"C"===e?this._state=33:"t"===e||"T"===e?this._state=43:(this._state=3,this._index--)},e.prototype._stateBeforeSpecialEnd=function(e){2!==this._special||"c"!==e&&"C"!==e?3!==this._special||"t"!==e&&"T"!==e?this._state=1:this._state=47:this._state=38},e.prototype._stateBeforeScript5=function(e){("/"===e||">"===e||s(e))&&(this._special=2),this._state=3,this._index--},e.prototype._stateAfterScript5=function(e){">"===e||s(e)?(this._special=1,this._state=6,this._sectionStart=this._index-6,this._index--):this._state=1},e.prototype._stateBeforeStyle4=function(e){("/"===e||">"===e||s(e))&&(this._special=3),this._state=3,this._index--},e.prototype._stateAfterStyle4=function(e){">"===e||s(e)?(this._special=1,this._state=6,this._sectionStart=this._index-5,this._index--):this._state=1},e.prototype._parseNamedEntityStrict=function(){if(this._sectionStart+1<this._index){var e=this._buffer.substring(this._sectionStart+1,this._index),t=this._xmlMode?c.default:a.default;Object.prototype.hasOwnProperty.call(t,e)&&(this._emitPartial(t[e]),this._sectionStart=this._index+1)}},e.prototype._parseLegacyEntity=function(){var e=this._sectionStart+1,t=this._index-e;for(t>6&&(t=6);t>=2;){var n=this._buffer.substr(e,t);if(Object.prototype.hasOwnProperty.call(o.default,n))return this._emitPartial(o.default[n]),void(this._sectionStart+=t+1);t--}},e.prototype._stateInNamedEntity=function(e){";"===e?(this._parseNamedEntityStrict(),this._sectionStart+1<this._index&&!this._xmlMode&&this._parseLegacyEntity(),this._state=this._baseState):(e<"a"||e>"z")&&(e<"A"||e>"Z")&&(e<"0"||e>"9")&&(this._xmlMode||this._sectionStart+1===this._index||(1!==this._baseState?"="!==e&&this._parseNamedEntityStrict():this._parseLegacyEntity()),this._state=this._baseState,this._index--)},e.prototype._decodeNumericEntity=function(e,t){var n=this._sectionStart+e;if(n!==this._index){var r=this._buffer.substring(n,this._index),a=parseInt(r,t);this._emitPartial(i.default(a)),this._sectionStart=this._index}else this._sectionStart--;this._state=this._baseState},e.prototype._stateInNumericEntity=function(e){";"===e?(this._decodeNumericEntity(2,10),this._sectionStart++):(e<"0"||e>"9")&&(this._xmlMode?this._state=this._baseState:this._decodeNumericEntity(2,10),this._index--)},e.prototype._stateInHexEntity=function(e){";"===e?(this._decodeNumericEntity(3,16),this._sectionStart++):(e<"a"||e>"f")&&(e<"A"||e>"F")&&(e<"0"||e>"9")&&(this._xmlMode?this._state=this._baseState:this._decodeNumericEntity(3,16),this._index--)},e.prototype._cleanup=function(){this._sectionStart<0?(this._buffer="",this._bufferOffset+=this._index,this._index=0):this._running&&(1===this._state?(this._sectionStart!==this._index&&this._cbs.ontext(this._buffer.substr(this._sectionStart)),this._buffer="",this._bufferOffset+=this._index,this._index=0):this._sectionStart===this._index?(this._buffer="",this._bufferOffset+=this._index,this._index=0):(this._buffer=this._buffer.substr(this._sectionStart),this._index-=this._sectionStart,this._bufferOffset+=this._sectionStart),this._sectionStart=0)},e.prototype.write=function(e){this._ended&&this._cbs.onerror(Error(".write() after done!")),this._buffer+=e,this._parse()},e.prototype._parse=function(){for(;this._index<this._buffer.length&&this._running;){var e=this._buffer.charAt(this._index);1===this._state?this._stateText(e):12===this._state?this._stateInAttributeValueDoubleQuotes(e):9===this._state?this._stateInAttributeName(e):19===this._state?this._stateInComment(e):8===this._state?this._stateBeforeAttributeName(e):3===this._state?this._stateInTagName(e):6===this._state?this._stateInClosingTagName(e):2===this._state?this._stateBeforeTagName(e):10===this._state?this._stateAfterAttributeName(e):13===this._state?this._stateInAttributeValueSingleQuotes(e):11===this._state?this._stateBeforeAttributeValue(e):5===this._state?this._stateBeforeClosingTagName(e):7===this._state?this._stateAfterClosingTagName(e):31===this._state?this._stateBeforeSpecial(e):20===this._state?this._stateAfterComment1(e):14===this._state?this._stateInAttributeValueNoQuotes(e):4===this._state?this._stateInSelfClosingTag(e):16===this._state?this._stateInDeclaration(e):15===this._state?this._stateBeforeDeclaration(e):21===this._state?this._stateAfterComment2(e):18===this._state?this._stateBeforeComment(e):32===this._state?this._stateBeforeSpecialEnd(e):38===this._state?w(this,e):39===this._state?x(this,e):40===this._state?S(this,e):33===this._state?v(this,e):34===this._state?g(this,e):35===this._state?y(this,e):36===this._state?b(this,e):37===this._state?this._stateBeforeScript5(e):41===this._state?k(this,e):42===this._state?this._stateAfterScript5(e):43===this._state?_(this,e):28===this._state?this._stateInCdata(e):44===this._state?z(this,e):45===this._state?C(this,e):46===this._state?this._stateBeforeStyle4(e):47===this._state?M(this,e):48===this._state?O(this,e):49===this._state?T(this,e):50===this._state?this._stateAfterStyle4(e):17===this._state?this._stateInProcessingInstruction(e):53===this._state?this._stateInNamedEntity(e):22===this._state?f(this,e):51===this._state?E(this,e):23===this._state?h(this,e):24===this._state?d(this,e):29===this._state?this._stateAfterCdata1(e):30===this._state?this._stateAfterCdata2(e):25===this._state?p(this,e):26===this._state?m(this,e):27===this._state?this._stateBeforeCdata6(e):55===this._state?this._stateInHexEntity(e):54===this._state?this._stateInNumericEntity(e):52===this._state?L(this,e):this._cbs.onerror(Error("unknown _state"),this._state),this._index++}this._cleanup()},e.prototype.pause=function(){this._running=!1},e.prototype.resume=function(){this._running=!0,this._index<this._buffer.length&&this._parse(),this._ended&&this._finish()},e.prototype.end=function(e){this._ended&&this._cbs.onerror(Error(".end() after done!")),e&&this.write(e),this._ended=!0,this._running&&this._finish()},e.prototype._finish=function(){this._sectionStart<this._index&&this._handleTrailingData(),this._cbs.onend()},e.prototype._handleTrailingData=function(){var e=this._buffer.substr(this._sectionStart);28===this._state||29===this._state||30===this._state?this._cbs.oncdata(e):19===this._state||20===this._state||21===this._state?this._cbs.oncomment(e):53!==this._state||this._xmlMode?54!==this._state||this._xmlMode?55!==this._state||this._xmlMode?3!==this._state&&8!==this._state&&11!==this._state&&10!==this._state&&9!==this._state&&13!==this._state&&12!==this._state&&14!==this._state&&6!==this._state&&this._cbs.ontext(e):(this._decodeNumericEntity(3,16),this._sectionStart<this._index&&(this._state=this._baseState,this._handleTrailingData())):(this._decodeNumericEntity(2,10),this._sectionStart<this._index&&(this._state=this._baseState,this._handleTrailingData())):(this._parseLegacyEntity(),this._sectionStart<this._index&&(this._state=this._baseState,this._handleTrailingData()))},e.prototype.getAbsoluteIndex=function(){return this._bufferOffset+this._index},e.prototype._getSection=function(){return this._buffer.substring(this._sectionStart,this._index)},e.prototype._emitToken=function(e){this._cbs[e](this._getSection()),this._sectionStart=-1},e.prototype._emitPartial=function(e){1!==this._baseState?this._cbs.onattribdata(e):this._cbs.ontext(e)},e}();n.default=A},{"entities/lib/decode_codepoint":18,"entities/lib/maps/entities.json":22,"entities/lib/maps/legacy.json":23,"entities/lib/maps/xml.json":24}],31:[function(e,t,n){function r(e){for(var t in e)n.hasOwnProperty(t)||(n[t]=e[t])}var i=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t};Object.defineProperty(n,"__esModule",{value:!0});var a=e("./Parser");n.Parser=a.Parser;var o=e("domhandler");n.DomHandler=o.DomHandler,n.DefaultHandler=o.DomHandler,n.parseDOM=function(e,t){var n=new o.DomHandler(void 0,t);return new a.Parser(n,t).end(e),n.dom},n.createDomStream=function(e,t,n){var r=new o.DomHandler(e,t,n);return new a.Parser(r,t)};var c=e("./Tokenizer");n.Tokenizer=c.default;var s=i(e("domelementtype"));n.ElementType=s,n.EVENTS={attribute:2,cdatastart:0,cdataend:0,text:1,processinginstruction:2,comment:1,commentend:0,closetag:1,opentag:2,opentagname:1,error:1,end:0},r(e("./FeedHandler")),r(e("./WritableStream")),r(e("./CollectingHandler"));var u=i(e("domutils"));n.DomUtils=u;var l=e("./FeedHandler");n.RssHandler=l.FeedHandler},{"./CollectingHandler":26,"./FeedHandler":27,"./Parser":29,"./Tokenizer":30,"./WritableStream":2,domelementtype:6,domhandler:7,domutils:10}],32:[function(e,t,n){n.read=function(e,t,n,r,i){var a,o,c=8*i-r-1,s=(1<<c)-1,u=s>>1,l=-7,f=n?i-1:0,h=n?-1:1,d=e[t+f];for(f+=h,a=d&(1<<-l)-1,d>>=-l,l+=c;l>0;a=256*a+e[t+f],f+=h,l-=8);for(o=a&(1<<-l)-1,a>>=-l,l+=r;l>0;o=256*o+e[t+f],f+=h,l-=8);if(0===a)a=1-u;else{if(a===s)return o?NaN:1/0*(d?-1:1);o+=Math.pow(2,r),a-=u}return(d?-1:1)*o*Math.pow(2,a-r)},n.write=function(e,t,n,r,i,a){var o,c,s,u=8*a-i-1,l=(1<<u)-1,f=l>>1,h=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,d=r?0:a-1,p=r?1:-1,m=t<0||0===t&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(c=isNaN(t)?1:0,o=l):(o=Math.floor(Math.log(t)/Math.LN2),t*(s=Math.pow(2,-o))<1&&(o--,s*=2),(t+=o+f>=1?h/s:h*Math.pow(2,1-f))*s>=2&&(o++,s/=2),o+f>=l?(c=0,o=l):o+f>=1?(c=(t*s-1)*Math.pow(2,i),o+=f):(c=t*Math.pow(2,f-1)*Math.pow(2,i),o=0));i>=8;e[n+d]=255&c,d+=p,c/=256,i-=8);for(o=o<<i|c,u+=i;u>0;e[n+d]=255&o,d+=p,o/=256,u-=8);e[n+d-p]|=128*m}},{}],33:[function(e,t,n){var r=e("./_getNative")(e("./_root"),"DataView");t.exports=r},{"./_getNative":93,"./_root":130}],34:[function(e,t,n){var r=e("./_hashClear"),i=e("./_hashDelete"),a=e("./_hashGet"),o=e("./_hashHas"),c=e("./_hashSet");function s(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}s.prototype.clear=r,s.prototype.delete=i,s.prototype.get=a,s.prototype.has=o,s.prototype.set=c,t.exports=s},{"./_hashClear":100,"./_hashDelete":101,"./_hashGet":102,"./_hashHas":103,"./_hashSet":104}],35:[function(e,t,n){var r=e("./_listCacheClear"),i=e("./_listCacheDelete"),a=e("./_listCacheGet"),o=e("./_listCacheHas"),c=e("./_listCacheSet");function s(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}s.prototype.clear=r,s.prototype.delete=i,s.prototype.get=a,s.prototype.has=o,s.prototype.set=c,t.exports=s},{"./_listCacheClear":113,"./_listCacheDelete":114,"./_listCacheGet":115,"./_listCacheHas":116,"./_listCacheSet":117}],36:[function(e,t,n){var r=e("./_getNative")(e("./_root"),"Map");t.exports=r},{"./_getNative":93,"./_root":130}],37:[function(e,t,n){var r=e("./_mapCacheClear"),i=e("./_mapCacheDelete"),a=e("./_mapCacheGet"),o=e("./_mapCacheHas"),c=e("./_mapCacheSet");function s(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}s.prototype.clear=r,s.prototype.delete=i,s.prototype.get=a,s.prototype.has=o,s.prototype.set=c,t.exports=s},{"./_mapCacheClear":118,"./_mapCacheDelete":119,"./_mapCacheGet":120,"./_mapCacheHas":121,"./_mapCacheSet":122}],38:[function(e,t,n){var r=e("./_getNative")(e("./_root"),"Promise");t.exports=r},{"./_getNative":93,"./_root":130}],39:[function(e,t,n){var r=e("./_getNative")(e("./_root"),"Set");t.exports=r},{"./_getNative":93,"./_root":130}],40:[function(e,t,n){var r=e("./_ListCache"),i=e("./_stackClear"),a=e("./_stackDelete"),o=e("./_stackGet"),c=e("./_stackHas"),s=e("./_stackSet");function u(e){var t=this.__data__=new r(e);this.size=t.size}u.prototype.clear=i,u.prototype.delete=a,u.prototype.get=o,u.prototype.has=c,u.prototype.set=s,t.exports=u},{"./_ListCache":35,"./_stackClear":134,"./_stackDelete":135,"./_stackGet":136,"./_stackHas":137,"./_stackSet":138}],41:[function(e,t,n){var r=e("./_root").Symbol;t.exports=r},{"./_root":130}],42:[function(e,t,n){var r=e("./_root").Uint8Array;t.exports=r},{"./_root":130}],43:[function(e,t,n){var r=e("./_getNative")(e("./_root"),"WeakMap");t.exports=r},{"./_getNative":93,"./_root":130}],44:[function(e,t,n){t.exports=function(e,t,n){switch(n.length){case 0:return e.call(t);case 1:return e.call(t,n[0]);case 2:return e.call(t,n[0],n[1]);case 3:return e.call(t,n[0],n[1],n[2])}return e.apply(t,n)}},{}],45:[function(e,t,n){t.exports=function(e,t){for(var n=-1,r=null==e?0:e.length;++n<r&&!1!==t(e[n],n,e););return e}},{}],46:[function(e,t,n){t.exports=function(e,t){for(var n=-1,r=null==e?0:e.length,i=0,a=[];++n<r;){var o=e[n];t(o,n,e)&&(a[i++]=o)}return a}},{}],47:[function(e,t,n){var r=e("./_baseTimes"),i=e("./isArguments"),a=e("./isArray"),o=e("./isBuffer"),c=e("./_isIndex"),s=e("./isTypedArray"),u=Object.prototype.hasOwnProperty;t.exports=function(e,t){var n=a(e),l=!n&&i(e),f=!n&&!l&&o(e),h=!n&&!l&&!f&&s(e),d=n||l||f||h,p=d?r(e.length,String):[],m=p.length;for(var v in e)!t&&!u.call(e,v)||d&&("length"==v||f&&("offset"==v||"parent"==v)||h&&("buffer"==v||"byteLength"==v||"byteOffset"==v)||c(v,m))||p.push(v);return p}},{"./_baseTimes":72,"./_isIndex":108,"./isArguments":145,"./isArray":146,"./isBuffer":149,"./isTypedArray":159}],48:[function(e,t,n){t.exports=function(e,t){for(var n=-1,r=null==e?0:e.length,i=Array(r);++n<r;)i[n]=t(e[n],n,e);return i}},{}],49:[function(e,t,n){t.exports=function(e,t){for(var n=-1,r=t.length,i=e.length;++n<r;)e[i+n]=t[n];return e}},{}],50:[function(e,t,n){var r=e("./_baseAssignValue"),i=e("./eq");t.exports=function(e,t,n){(void 0!==n&&!i(e[t],n)||void 0===n&&!(t in e))&&r(e,t,n)}},{"./_baseAssignValue":55,"./eq":142}],51:[function(e,t,n){var r=e("./_baseAssignValue"),i=e("./eq"),a=Object.prototype.hasOwnProperty;t.exports=function(e,t,n){var o=e[t];a.call(e,t)&&i(o,n)&&(void 0!==n||t in e)||r(e,t,n)}},{"./_baseAssignValue":55,"./eq":142}],52:[function(e,t,n){var r=e("./eq");t.exports=function(e,t){for(var n=e.length;n--;)if(r(e[n][0],t))return n;return-1}},{"./eq":142}],53:[function(e,t,n){var r=e("./_copyObject"),i=e("./keys");t.exports=function(e,t){return e&&r(t,i(t),e)}},{"./_copyObject":82,"./keys":160}],54:[function(e,t,n){var r=e("./_copyObject"),i=e("./keysIn");t.exports=function(e,t){return e&&r(t,i(t),e)}},{"./_copyObject":82,"./keysIn":161}],55:[function(e,t,n){var r=e("./_defineProperty");t.exports=function(e,t,n){"__proto__"==t&&r?r(e,t,{configurable:!0,enumerable:!0,value:n,writable:!0}):e[t]=n}},{"./_defineProperty":88}],56:[function(e,t,n){var r=e("./_Stack"),i=e("./_arrayEach"),a=e("./_assignValue"),o=e("./_baseAssign"),c=e("./_baseAssignIn"),s=e("./_cloneBuffer"),u=e("./_copyArray"),l=e("./_copySymbols"),f=e("./_copySymbolsIn"),h=e("./_getAllKeys"),d=e("./_getAllKeysIn"),p=e("./_getTag"),m=e("./_initCloneArray"),v=e("./_initCloneByTag"),g=e("./_initCloneObject"),y=e("./isArray"),b=e("./isBuffer"),w=e("./isMap"),x=e("./isObject"),S=e("./isSet"),k=e("./keys"),_={};_["[object Arguments]"]=_["[object Array]"]=_["[object ArrayBuffer]"]=_["[object DataView]"]=_["[object Boolean]"]=_["[object Date]"]=_["[object Float32Array]"]=_["[object Float64Array]"]=_["[object Int8Array]"]=_["[object Int16Array]"]=_["[object Int32Array]"]=_["[object Map]"]=_["[object Number]"]=_["[object Object]"]=_["[object RegExp]"]=_["[object Set]"]=_["[object String]"]=_["[object Symbol]"]=_["[object Uint8Array]"]=_["[object Uint8ClampedArray]"]=_["[object Uint16Array]"]=_["[object Uint32Array]"]=!0,_["[object Error]"]=_["[object Function]"]=_["[object WeakMap]"]=!1,t.exports=function e(t,n,z,C,M,O){var T,E=1&n,L=2&n,A=4&n;if(z&&(T=M?z(t,C,M,O):z(t)),void 0!==T)return T;if(!x(t))return t;var R=y(t);if(R){if(T=m(t),!E)return u(t,T)}else{var N=p(t),H="[object Function]"==N||"[object GeneratorFunction]"==N;if(b(t))return s(t,E);if("[object Object]"==N||"[object Arguments]"==N||H&&!M){if(T=L||H?{}:g(t),!E)return L?f(t,c(T,t)):l(t,o(T,t))}else{if(!_[N])return M?t:{};T=v(t,N,E)}}O||(O=new r);var P=O.get(t);if(P)return P;O.set(t,T),S(t)?t.forEach((function(r){T.add(e(r,n,z,r,t,O))})):w(t)&&t.forEach((function(r,i){T.set(i,e(r,n,z,i,t,O))}));var j=A?L?d:h:L?keysIn:k,V=R?void 0:j(t);return i(V||t,(function(r,i){V&&(r=t[i=r]),a(T,i,e(r,n,z,i,t,O))})),T}},{"./_Stack":40,"./_arrayEach":45,"./_assignValue":51,"./_baseAssign":53,"./_baseAssignIn":54,"./_cloneBuffer":76,"./_copyArray":81,"./_copySymbols":83,"./_copySymbolsIn":84,"./_getAllKeys":90,"./_getAllKeysIn":91,"./_getTag":98,"./_initCloneArray":105,"./_initCloneByTag":106,"./_initCloneObject":107,"./isArray":146,"./isBuffer":149,"./isMap":152,"./isObject":153,"./isSet":156,"./keys":160}],57:[function(e,t,n){var r=e("./isObject"),i=Object.create,a=function(){function e(){}return function(t){if(!r(t))return{};if(i)return i(t);e.prototype=t;var n=new e;return e.prototype=void 0,n}}();t.exports=a},{"./isObject":153}],58:[function(e,t,n){var r=e("./_createBaseFor")();t.exports=r},{"./_createBaseFor":87}],59:[function(e,t,n){var r=e("./_arrayPush"),i=e("./isArray");t.exports=function(e,t,n){var a=t(e);return i(e)?a:r(a,n(e))}},{"./_arrayPush":49,"./isArray":146}],60:[function(e,t,n){var r=e("./_Symbol"),i=e("./_getRawTag"),a=e("./_objectToString"),o=r?r.toStringTag:void 0;t.exports=function(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":o&&o in Object(e)?i(e):a(e)}},{"./_Symbol":41,"./_getRawTag":95,"./_objectToString":127}],61:[function(e,t,n){var r=e("./_baseGetTag"),i=e("./isObjectLike");t.exports=function(e){return i(e)&&"[object Arguments]"==r(e)}},{"./_baseGetTag":60,"./isObjectLike":154}],62:[function(e,t,n){var r=e("./_getTag"),i=e("./isObjectLike");t.exports=function(e){return i(e)&&"[object Map]"==r(e)}},{"./_getTag":98,"./isObjectLike":154}],63:[function(e,t,n){var r=e("./isFunction"),i=e("./_isMasked"),a=e("./isObject"),o=e("./_toSource"),c=/^\[object .+?Constructor\]$/,s=Function.prototype,u=Object.prototype,l=s.toString,f=u.hasOwnProperty,h=RegExp("^"+l.call(f).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");t.exports=function(e){return!(!a(e)||i(e))&&(r(e)?h:c).test(o(e))}},{"./_isMasked":111,"./_toSource":139,"./isFunction":150,"./isObject":153}],64:[function(e,t,n){var r=e("./_getTag"),i=e("./isObjectLike");t.exports=function(e){return i(e)&&"[object Set]"==r(e)}},{"./_getTag":98,"./isObjectLike":154}],65:[function(e,t,n){var r=e("./_baseGetTag"),i=e("./isLength"),a=e("./isObjectLike"),o={};o["[object Float32Array]"]=o["[object Float64Array]"]=o["[object Int8Array]"]=o["[object Int16Array]"]=o["[object Int32Array]"]=o["[object Uint8Array]"]=o["[object Uint8ClampedArray]"]=o["[object Uint16Array]"]=o["[object Uint32Array]"]=!0,o["[object Arguments]"]=o["[object Array]"]=o["[object ArrayBuffer]"]=o["[object Boolean]"]=o["[object DataView]"]=o["[object Date]"]=o["[object Error]"]=o["[object Function]"]=o["[object Map]"]=o["[object Number]"]=o["[object Object]"]=o["[object RegExp]"]=o["[object Set]"]=o["[object String]"]=o["[object WeakMap]"]=!1,t.exports=function(e){return a(e)&&i(e.length)&&!!o[r(e)]}},{"./_baseGetTag":60,"./isLength":151,"./isObjectLike":154}],66:[function(e,t,n){var r=e("./_isPrototype"),i=e("./_nativeKeys"),a=Object.prototype.hasOwnProperty;t.exports=function(e){if(!r(e))return i(e);var t=[];for(var n in Object(e))a.call(e,n)&&"constructor"!=n&&t.push(n);return t}},{"./_isPrototype":112,"./_nativeKeys":124}],67:[function(e,t,n){var r=e("./isObject"),i=e("./_isPrototype"),a=e("./_nativeKeysIn"),o=Object.prototype.hasOwnProperty;t.exports=function(e){if(!r(e))return a(e);var t=i(e),n=[];for(var c in e)("constructor"!=c||!t&&o.call(e,c))&&n.push(c);return n}},{"./_isPrototype":112,"./_nativeKeysIn":125,"./isObject":153}],68:[function(e,t,n){var r=e("./_Stack"),i=e("./_assignMergeValue"),a=e("./_baseFor"),o=e("./_baseMergeDeep"),c=e("./isObject"),s=e("./keysIn"),u=e("./_safeGet");t.exports=function e(t,n,l,f,h){t!==n&&a(n,(function(a,s){if(h||(h=new r),c(a))o(t,n,s,l,e,f,h);else{var d=f?f(u(t,s),a,s+"",t,n,h):void 0;void 0===d&&(d=a),i(t,s,d)}}),s)}},{"./_Stack":40,"./_assignMergeValue":50,"./_baseFor":58,"./_baseMergeDeep":69,"./_safeGet":131,"./isObject":153,"./keysIn":161}],69:[function(e,t,n){var r=e("./_assignMergeValue"),i=e("./_cloneBuffer"),a=e("./_cloneTypedArray"),o=e("./_copyArray"),c=e("./_initCloneObject"),s=e("./isArguments"),u=e("./isArray"),l=e("./isArrayLikeObject"),f=e("./isBuffer"),h=e("./isFunction"),d=e("./isObject"),p=e("./isPlainObject"),m=e("./isTypedArray"),v=e("./_safeGet"),g=e("./toPlainObject");t.exports=function(e,t,n,y,b,w,x){var S=v(e,n),k=v(t,n),_=x.get(k);if(_)r(e,n,_);else{var z=w?w(S,k,n+"",e,t,x):void 0,C=void 0===z;if(C){var M=u(k),O=!M&&f(k),T=!M&&!O&&m(k);z=k,M||O||T?u(S)?z=S:l(S)?z=o(S):O?(C=!1,z=i(k,!0)):T?(C=!1,z=a(k,!0)):z=[]:p(k)||s(k)?(z=S,s(S)?z=g(S):d(S)&&!h(S)||(z=c(k))):C=!1}C&&(x.set(k,z),b(z,k,y,w,x),x.delete(k)),r(e,n,z)}}},{"./_assignMergeValue":50,"./_cloneBuffer":76,"./_cloneTypedArray":80,"./_copyArray":81,"./_initCloneObject":107,"./_safeGet":131,"./isArguments":145,"./isArray":146,"./isArrayLikeObject":148,"./isBuffer":149,"./isFunction":150,"./isObject":153,"./isPlainObject":155,"./isTypedArray":159,"./toPlainObject":165}],70:[function(e,t,n){var r=e("./identity"),i=e("./_overRest"),a=e("./_setToString");t.exports=function(e,t){return a(i(e,t,r),e+"")}},{"./_overRest":129,"./_setToString":132,"./identity":144}],71:[function(e,t,n){var r=e("./constant"),i=e("./_defineProperty"),a=e("./identity"),o=i?function(e,t){return i(e,"toString",{configurable:!0,enumerable:!1,value:r(t),writable:!0})}:a;t.exports=o},{"./_defineProperty":88,"./constant":141,"./identity":144}],72:[function(e,t,n){t.exports=function(e,t){for(var n=-1,r=Array(e);++n<e;)r[n]=t(n);return r}},{}],73:[function(e,t,n){var r=e("./_Symbol"),i=e("./_arrayMap"),a=e("./isArray"),o=e("./isSymbol"),c=r?r.prototype:void 0,s=c?c.toString:void 0;t.exports=function e(t){if("string"==typeof t)return t;if(a(t))return i(t,e)+"";if(o(t))return s?s.call(t):"";var n=t+"";return"0"==n&&1/t==-1/0?"-0":n}},{"./_Symbol":41,"./_arrayMap":48,"./isArray":146,"./isSymbol":158}],74:[function(e,t,n){t.exports=function(e){return function(t){return e(t)}}},{}],75:[function(e,t,n){var r=e("./_Uint8Array");t.exports=function(e){var t=new e.constructor(e.byteLength);return new r(t).set(new r(e)),t}},{"./_Uint8Array":42}],76:[function(e,t,n){var r=e("./_root"),i="object"==u(n)&&n&&!n.nodeType&&n,a=i&&"object"==u(t)&&t&&!t.nodeType&&t,o=a&&a.exports===i?r.Buffer:void 0,c=o?o.allocUnsafe:void 0;t.exports=function(e,t){if(t)return e.slice();var n=e.length,r=c?c(n):new e.constructor(n);return e.copy(r),r}},{"./_root":130}],77:[function(e,t,n){var r=e("./_cloneArrayBuffer");t.exports=function(e,t){var n=t?r(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.byteLength)}},{"./_cloneArrayBuffer":75}],78:[function(e,t,n){var r=/\w*$/;t.exports=function(e){var t=new e.constructor(e.source,r.exec(e));return t.lastIndex=e.lastIndex,t}},{}],79:[function(e,t,n){var r=e("./_Symbol"),i=r?r.prototype:void 0,a=i?i.valueOf:void 0;t.exports=function(e){return a?Object(a.call(e)):{}}},{"./_Symbol":41}],80:[function(e,t,n){var r=e("./_cloneArrayBuffer");t.exports=function(e,t){var n=t?r(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.length)}},{"./_cloneArrayBuffer":75}],81:[function(e,t,n){t.exports=function(e,t){var n=-1,r=e.length;for(t||(t=Array(r));++n<r;)t[n]=e[n];return t}},{}],82:[function(e,t,n){var r=e("./_assignValue"),i=e("./_baseAssignValue");t.exports=function(e,t,n,a){var o=!n;n||(n={});for(var c=-1,s=t.length;++c<s;){var u=t[c],l=a?a(n[u],e[u],u,n,e):void 0;void 0===l&&(l=e[u]),o?i(n,u,l):r(n,u,l)}return n}},{"./_assignValue":51,"./_baseAssignValue":55}],83:[function(e,t,n){var r=e("./_copyObject"),i=e("./_getSymbols");t.exports=function(e,t){return r(e,i(e),t)}},{"./_copyObject":82,"./_getSymbols":96}],84:[function(e,t,n){var r=e("./_copyObject"),i=e("./_getSymbolsIn");t.exports=function(e,t){return r(e,i(e),t)}},{"./_copyObject":82,"./_getSymbolsIn":97}],85:[function(e,t,n){var r=e("./_root")["__core-js_shared__"];t.exports=r},{"./_root":130}],86:[function(e,t,n){var r=e("./_baseRest"),i=e("./_isIterateeCall");t.exports=function(e){return r((function(t,n){var r=-1,a=n.length,o=a>1?n[a-1]:void 0,c=a>2?n[2]:void 0;for(o=e.length>3&&"function"==typeof o?(a--,o):void 0,c&&i(n[0],n[1],c)&&(o=a<3?void 0:o,a=1),t=Object(t);++r<a;){var s=n[r];s&&e(t,s,r,o)}return t}))}},{"./_baseRest":70,"./_isIterateeCall":109}],87:[function(e,t,n){t.exports=function(e){return function(t,n,r){for(var i=-1,a=Object(t),o=r(t),c=o.length;c--;){var s=o[e?c:++i];if(!1===n(a[s],s,a))break}return t}}},{}],88:[function(e,t,n){var r=e("./_getNative"),i=function(){try{var e=r(Object,"defineProperty");return e({},"",{}),e}catch(e){}}();t.exports=i},{"./_getNative":93}],89:[function(e,t,r){(function(e){var n="object"==u(e)&&e&&e.Object===Object&&e;t.exports=n}).call(this,void 0!==n?n:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],90:[function(e,t,n){var r=e("./_baseGetAllKeys"),i=e("./_getSymbols"),a=e("./keys");t.exports=function(e){return r(e,a,i)}},{"./_baseGetAllKeys":59,"./_getSymbols":96,"./keys":160}],91:[function(e,t,n){var r=e("./_baseGetAllKeys"),i=e("./_getSymbolsIn"),a=e("./keysIn");t.exports=function(e){return r(e,a,i)}},{"./_baseGetAllKeys":59,"./_getSymbolsIn":97,"./keysIn":161}],92:[function(e,t,n){var r=e("./_isKeyable");t.exports=function(e,t){var n=e.__data__;return r(t)?n["string"==typeof t?"string":"hash"]:n.map}},{"./_isKeyable":110}],93:[function(e,t,n){var r=e("./_baseIsNative"),i=e("./_getValue");t.exports=function(e,t){var n=i(e,t);return r(n)?n:void 0}},{"./_baseIsNative":63,"./_getValue":99}],94:[function(e,t,n){var r=e("./_overArg")(Object.getPrototypeOf,Object);t.exports=r},{"./_overArg":128}],95:[function(e,t,n){var r=e("./_Symbol"),i=Object.prototype,a=i.hasOwnProperty,o=i.toString,c=r?r.toStringTag:void 0;t.exports=function(e){var t=a.call(e,c),n=e[c];try{e[c]=void 0;var r=!0}catch(e){}var i=o.call(e);return r&&(t?e[c]=n:delete e[c]),i}},{"./_Symbol":41}],96:[function(e,t,n){var r=e("./_arrayFilter"),i=e("./stubArray"),a=Object.prototype.propertyIsEnumerable,o=Object.getOwnPropertySymbols,c=o?function(e){return null==e?[]:(e=Object(e),r(o(e),(function(t){return a.call(e,t)})))}:i;t.exports=c},{"./_arrayFilter":46,"./stubArray":163}],97:[function(e,t,n){var r=e("./_arrayPush"),i=e("./_getPrototype"),a=e("./_getSymbols"),o=e("./stubArray"),c=Object.getOwnPropertySymbols?function(e){for(var t=[];e;)r(t,a(e)),e=i(e);return t}:o;t.exports=c},{"./_arrayPush":49,"./_getPrototype":94,"./_getSymbols":96,"./stubArray":163}],98:[function(e,t,n){var r=e("./_DataView"),i=e("./_Map"),a=e("./_Promise"),o=e("./_Set"),c=e("./_WeakMap"),s=e("./_baseGetTag"),u=e("./_toSource"),l=u(r),f=u(i),h=u(a),d=u(o),p=u(c),m=s;(r&&"[object DataView]"!=m(new r(new ArrayBuffer(1)))||i&&"[object Map]"!=m(new i)||a&&"[object Promise]"!=m(a.resolve())||o&&"[object Set]"!=m(new o)||c&&"[object WeakMap]"!=m(new c))&&(m=function(e){var t=s(e),n="[object Object]"==t?e.constructor:void 0,r=n?u(n):"";if(r)switch(r){case l:return"[object DataView]";case f:return"[object Map]";case h:return"[object Promise]";case d:return"[object Set]";case p:return"[object WeakMap]"}return t}),t.exports=m},{"./_DataView":33,"./_Map":36,"./_Promise":38,"./_Set":39,"./_WeakMap":43,"./_baseGetTag":60,"./_toSource":139}],99:[function(e,t,n){t.exports=function(e,t){return null==e?void 0:e[t]}},{}],100:[function(e,t,n){var r=e("./_nativeCreate");t.exports=function(){this.__data__=r?r(null):{},this.size=0}},{"./_nativeCreate":123}],101:[function(e,t,n){t.exports=function(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t}},{}],102:[function(e,t,n){var r=e("./_nativeCreate"),i=Object.prototype.hasOwnProperty;t.exports=function(e){var t=this.__data__;if(r){var n=t[e];return"__lodash_hash_undefined__"===n?void 0:n}return i.call(t,e)?t[e]:void 0}},{"./_nativeCreate":123}],103:[function(e,t,n){var r=e("./_nativeCreate"),i=Object.prototype.hasOwnProperty;t.exports=function(e){var t=this.__data__;return r?void 0!==t[e]:i.call(t,e)}},{"./_nativeCreate":123}],104:[function(e,t,n){var r=e("./_nativeCreate");t.exports=function(e,t){var n=this.__data__;return this.size+=this.has(e)?0:1,n[e]=r&&void 0===t?"__lodash_hash_undefined__":t,this}},{"./_nativeCreate":123}],105:[function(e,t,n){var r=Object.prototype.hasOwnProperty;t.exports=function(e){var t=e.length,n=new e.constructor(t);return t&&"string"==typeof e[0]&&r.call(e,"index")&&(n.index=e.index,n.input=e.input),n}},{}],106:[function(e,t,n){var r=e("./_cloneArrayBuffer"),i=e("./_cloneDataView"),a=e("./_cloneRegExp"),o=e("./_cloneSymbol"),c=e("./_cloneTypedArray");t.exports=function(e,t,n){var s=e.constructor;switch(t){case"[object ArrayBuffer]":return r(e);case"[object Boolean]":case"[object Date]":return new s(+e);case"[object DataView]":return i(e,n);case"[object Float32Array]":case"[object Float64Array]":case"[object Int8Array]":case"[object Int16Array]":case"[object Int32Array]":case"[object Uint8Array]":case"[object Uint8ClampedArray]":case"[object Uint16Array]":case"[object Uint32Array]":return c(e,n);case"[object Map]":return new s;case"[object Number]":case"[object String]":return new s(e);case"[object RegExp]":return a(e);case"[object Set]":return new s;case"[object Symbol]":return o(e)}}},{"./_cloneArrayBuffer":75,"./_cloneDataView":77,"./_cloneRegExp":78,"./_cloneSymbol":79,"./_cloneTypedArray":80}],107:[function(e,t,n){var r=e("./_baseCreate"),i=e("./_getPrototype"),a=e("./_isPrototype");t.exports=function(e){return"function"!=typeof e.constructor||a(e)?{}:r(i(e))}},{"./_baseCreate":57,"./_getPrototype":94,"./_isPrototype":112}],108:[function(e,t,n){var r=/^(?:0|[1-9]\d*)$/;t.exports=function(e,t){var n=u(e);return!!(t=null==t?9007199254740991:t)&&("number"==n||"symbol"!=n&&r.test(e))&&e>-1&&e%1==0&&e<t}},{}],109:[function(e,t,n){var r=e("./eq"),i=e("./isArrayLike"),a=e("./_isIndex"),o=e("./isObject");t.exports=function(e,t,n){if(!o(n))return!1;var c=u(t);return!!("number"==c?i(n)&&a(t,n.length):"string"==c&&t in n)&&r(n[t],e)}},{"./_isIndex":108,"./eq":142,"./isArrayLike":147,"./isObject":153}],110:[function(e,t,n){t.exports=function(e){var t=u(e);return"string"==t||"number"==t||"symbol"==t||"boolean"==t?"__proto__"!==e:null===e}},{}],111:[function(e,t,n){var r,i=e("./_coreJsData"),a=(r=/[^.]+$/.exec(i&&i.keys&&i.keys.IE_PROTO||""))?"Symbol(src)_1."+r:"";t.exports=function(e){return!!a&&a in e}},{"./_coreJsData":85}],112:[function(e,t,n){var r=Object.prototype;t.exports=function(e){var t=e&&e.constructor;return e===("function"==typeof t&&t.prototype||r)}},{}],113:[function(e,t,n){t.exports=function(){this.__data__=[],this.size=0}},{}],114:[function(e,t,n){var r=e("./_assocIndexOf"),i=Array.prototype.splice;t.exports=function(e){var t=this.__data__,n=r(t,e);return!(n<0||(n==t.length-1?t.pop():i.call(t,n,1),--this.size,0))}},{"./_assocIndexOf":52}],115:[function(e,t,n){var r=e("./_assocIndexOf");t.exports=function(e){var t=this.__data__,n=r(t,e);return n<0?void 0:t[n][1]}},{"./_assocIndexOf":52}],116:[function(e,t,n){var r=e("./_assocIndexOf");t.exports=function(e){return r(this.__data__,e)>-1}},{"./_assocIndexOf":52}],117:[function(e,t,n){var r=e("./_assocIndexOf");t.exports=function(e,t){var n=this.__data__,i=r(n,e);return i<0?(++this.size,n.push([e,t])):n[i][1]=t,this}},{"./_assocIndexOf":52}],118:[function(e,t,n){var r=e("./_Hash"),i=e("./_ListCache"),a=e("./_Map");t.exports=function(){this.size=0,this.__data__={hash:new r,map:new(a||i),string:new r}}},{"./_Hash":34,"./_ListCache":35,"./_Map":36}],119:[function(e,t,n){var r=e("./_getMapData");t.exports=function(e){var t=r(this,e).delete(e);return this.size-=t?1:0,t}},{"./_getMapData":92}],120:[function(e,t,n){var r=e("./_getMapData");t.exports=function(e){return r(this,e).get(e)}},{"./_getMapData":92}],121:[function(e,t,n){var r=e("./_getMapData");t.exports=function(e){return r(this,e).has(e)}},{"./_getMapData":92}],122:[function(e,t,n){var r=e("./_getMapData");t.exports=function(e,t){var n=r(this,e),i=n.size;return n.set(e,t),this.size+=n.size==i?0:1,this}},{"./_getMapData":92}],123:[function(e,t,n){var r=e("./_getNative")(Object,"create");t.exports=r},{"./_getNative":93}],124:[function(e,t,n){var r=e("./_overArg")(Object.keys,Object);t.exports=r},{"./_overArg":128}],125:[function(e,t,n){t.exports=function(e){var t=[];if(null!=e)for(var n in Object(e))t.push(n);return t}},{}],126:[function(e,t,n){var r=e("./_freeGlobal"),i="object"==u(n)&&n&&!n.nodeType&&n,a=i&&"object"==u(t)&&t&&!t.nodeType&&t,o=a&&a.exports===i&&r.process,c=function(){try{var e=a&&a.require&&a.require("util").types;return e||o&&o.binding&&o.binding("util")}catch(e){}}();t.exports=c},{"./_freeGlobal":89}],127:[function(e,t,n){var r=Object.prototype.toString;t.exports=function(e){return r.call(e)}},{}],128:[function(e,t,n){t.exports=function(e,t){return function(n){return e(t(n))}}},{}],129:[function(e,t,n){var r=e("./_apply"),i=Math.max;t.exports=function(e,t,n){return t=i(void 0===t?e.length-1:t,0),function(){for(var a=arguments,o=-1,c=i(a.length-t,0),s=Array(c);++o<c;)s[o]=a[t+o];o=-1;for(var u=Array(t+1);++o<t;)u[o]=a[o];return u[t]=n(s),r(e,this,u)}}},{"./_apply":44}],130:[function(e,t,n){var r=e("./_freeGlobal"),i="object"==("undefined"==typeof self?"undefined":u(self))&&self&&self.Object===Object&&self,a=r||i||Function("return this")();t.exports=a},{"./_freeGlobal":89}],131:[function(e,t,n){t.exports=function(e,t){if(("constructor"!==t||"function"!=typeof e[t])&&"__proto__"!=t)return e[t]}},{}],132:[function(e,t,n){var r=e("./_baseSetToString"),i=e("./_shortOut")(r);t.exports=i},{"./_baseSetToString":71,"./_shortOut":133}],133:[function(e,t,n){var r=Date.now;t.exports=function(e){var t=0,n=0;return function(){var i=r(),a=16-(i-n);if(n=i,a>0){if(++t>=800)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}},{}],134:[function(e,t,n){var r=e("./_ListCache");t.exports=function(){this.__data__=new r,this.size=0}},{"./_ListCache":35}],135:[function(e,t,n){t.exports=function(e){var t=this.__data__,n=t.delete(e);return this.size=t.size,n}},{}],136:[function(e,t,n){t.exports=function(e){return this.__data__.get(e)}},{}],137:[function(e,t,n){t.exports=function(e){return this.__data__.has(e)}},{}],138:[function(e,t,n){var r=e("./_ListCache"),i=e("./_Map"),a=e("./_MapCache");t.exports=function(e,t){var n=this.__data__;if(n instanceof r){var o=n.__data__;if(!i||o.length<199)return o.push([e,t]),this.size=++n.size,this;n=this.__data__=new a(o)}return n.set(e,t),this.size=n.size,this}},{"./_ListCache":35,"./_Map":36,"./_MapCache":37}],139:[function(e,t,n){var r=Function.prototype.toString;t.exports=function(e){if(null!=e){try{return r.call(e)}catch(e){}try{return e+""}catch(e){}}return""}},{}],140:[function(e,t,n){var r=e("./_baseClone");t.exports=function(e){return r(e,5)}},{"./_baseClone":56}],141:[function(e,t,n){t.exports=function(e){return function(){return e}}},{}],142:[function(e,t,n){t.exports=function(e,t){return e===t||e!=e&&t!=t}},{}],143:[function(e,t,n){var r=e("./toString"),i=/[\\^$.*+?()[\]{}|]/g,a=RegExp(i.source);t.exports=function(e){return(e=r(e))&&a.test(e)?e.replace(i,"\\$&"):e}},{"./toString":166}],144:[function(e,t,n){t.exports=function(e){return e}},{}],145:[function(e,t,n){var r=e("./_baseIsArguments"),i=e("./isObjectLike"),a=Object.prototype,o=a.hasOwnProperty,c=a.propertyIsEnumerable,s=r(function(){return arguments}())?r:function(e){return i(e)&&o.call(e,"callee")&&!c.call(e,"callee")};t.exports=s},{"./_baseIsArguments":61,"./isObjectLike":154}],146:[function(e,t,n){var r=Array.isArray;t.exports=r},{}],147:[function(e,t,n){var r=e("./isFunction"),i=e("./isLength");t.exports=function(e){return null!=e&&i(e.length)&&!r(e)}},{"./isFunction":150,"./isLength":151}],148:[function(e,t,n){var r=e("./isArrayLike"),i=e("./isObjectLike");t.exports=function(e){return i(e)&&r(e)}},{"./isArrayLike":147,"./isObjectLike":154}],149:[function(e,t,n){var r=e("./_root"),i=e("./stubFalse"),a="object"==u(n)&&n&&!n.nodeType&&n,o=a&&"object"==u(t)&&t&&!t.nodeType&&t,c=o&&o.exports===a?r.Buffer:void 0,s=(c?c.isBuffer:void 0)||i;t.exports=s},{"./_root":130,"./stubFalse":164}],150:[function(e,t,n){var r=e("./_baseGetTag"),i=e("./isObject");t.exports=function(e){if(!i(e))return!1;var t=r(e);return"[object Function]"==t||"[object GeneratorFunction]"==t||"[object AsyncFunction]"==t||"[object Proxy]"==t}},{"./_baseGetTag":60,"./isObject":153}],151:[function(e,t,n){t.exports=function(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=9007199254740991}},{}],152:[function(e,t,n){var r=e("./_baseIsMap"),i=e("./_baseUnary"),a=e("./_nodeUtil"),o=a&&a.isMap,c=o?i(o):r;t.exports=c},{"./_baseIsMap":62,"./_baseUnary":74,"./_nodeUtil":126}],153:[function(e,t,n){t.exports=function(e){var t=u(e);return null!=e&&("object"==t||"function"==t)}},{}],154:[function(e,t,n){t.exports=function(e){return null!=e&&"object"==u(e)}},{}],155:[function(e,t,n){var r=e("./_baseGetTag"),i=e("./_getPrototype"),a=e("./isObjectLike"),o=Function.prototype,c=Object.prototype,s=o.toString,u=c.hasOwnProperty,l=s.call(Object);t.exports=function(e){if(!a(e)||"[object Object]"!=r(e))return!1;var t=i(e);if(null===t)return!0;var n=u.call(t,"constructor")&&t.constructor;return"function"==typeof n&&n instanceof n&&s.call(n)==l}},{"./_baseGetTag":60,"./_getPrototype":94,"./isObjectLike":154}],156:[function(e,t,n){var r=e("./_baseIsSet"),i=e("./_baseUnary"),a=e("./_nodeUtil"),o=a&&a.isSet,c=o?i(o):r;t.exports=c},{"./_baseIsSet":64,"./_baseUnary":74,"./_nodeUtil":126}],157:[function(e,t,n){var r=e("./_baseGetTag"),i=e("./isArray"),a=e("./isObjectLike");t.exports=function(e){return"string"==typeof e||!i(e)&&a(e)&&"[object String]"==r(e)}},{"./_baseGetTag":60,"./isArray":146,"./isObjectLike":154}],158:[function(e,t,n){var r=e("./_baseGetTag"),i=e("./isObjectLike");t.exports=function(e){return"symbol"==u(e)||i(e)&&"[object Symbol]"==r(e)}},{"./_baseGetTag":60,"./isObjectLike":154}],159:[function(e,t,n){var r=e("./_baseIsTypedArray"),i=e("./_baseUnary"),a=e("./_nodeUtil"),o=a&&a.isTypedArray,c=o?i(o):r;t.exports=c},{"./_baseIsTypedArray":65,"./_baseUnary":74,"./_nodeUtil":126}],160:[function(e,t,n){var r=e("./_arrayLikeKeys"),i=e("./_baseKeys"),a=e("./isArrayLike");t.exports=function(e){return a(e)?r(e):i(e)}},{"./_arrayLikeKeys":47,"./_baseKeys":66,"./isArrayLike":147}],161:[function(e,t,n){var r=e("./_arrayLikeKeys"),i=e("./_baseKeysIn"),a=e("./isArrayLike");t.exports=function(e){return a(e)?r(e,!0):i(e)}},{"./_arrayLikeKeys":47,"./_baseKeysIn":67,"./isArrayLike":147}],162:[function(e,t,n){var r=e("./_baseMerge"),i=e("./_createAssigner")((function(e,t,n,i){r(e,t,n,i)}));t.exports=i},{"./_baseMerge":68,"./_createAssigner":86}],163:[function(e,t,n){t.exports=function(){return[]}},{}],164:[function(e,t,n){t.exports=function(){return!1}},{}],165:[function(e,t,n){var r=e("./_copyObject"),i=e("./keysIn");t.exports=function(e){return r(e,i(e))}},{"./_copyObject":82,"./keysIn":161}],166:[function(e,t,n){var r=e("./_baseToString");t.exports=function(e){return null==e?"":r(e)}},{"./_baseToString":73}],167:[function(e,t,n){var r,i;r=this,i=function(){return function(e){function t(e){return" "===e||"\t"===e||"\n"===e||"\f"===e||"\r"===e}function n(t){var n,r=t.exec(e.substring(m));if(r)return n=r[0],m+=n.length,n}for(var r,i,a,o,c,s=e.length,u=/^[ \t\n\r\u000c]+/,l=/^[, \t\n\r\u000c]+/,f=/^[^ \t\n\r\u000c]+/,h=/[,]+$/,d=/^\d+$/,p=/^-?(?:[0-9]+|[0-9]*\.[0-9]+)(?:[eE][+-]?[0-9]+)?$/,m=0,v=[];;){if(n(l),m>=s)return v;r=n(f),i=[],","===r.slice(-1)?(r=r.replace(h,""),y()):g()}function g(){for(n(u),a="",o="in descriptor";;){if(c=e.charAt(m),"in descriptor"===o)if(t(c))a&&(i.push(a),a="",o="after descriptor");else{if(","===c)return m+=1,a&&i.push(a),void y();if("("===c)a+=c,o="in parens";else{if(""===c)return a&&i.push(a),void y();a+=c}}else if("in parens"===o)if(")"===c)a+=c,o="in descriptor";else{if(""===c)return i.push(a),void y();a+=c}else if("after descriptor"===o)if(t(c));else{if(""===c)return void y();o="in descriptor",m-=1}m+=1}}function y(){var t,n,a,o,c,s,u,l,f,h=!1,m={};for(o=0;o<i.length;o++)s=(c=i[o])[c.length-1],u=c.substring(0,c.length-1),l=parseInt(u,10),f=parseFloat(u),d.test(u)&&"w"===s?((t||n)&&(h=!0),0===l?h=!0:t=l):p.test(u)&&"x"===s?((t||n||a)&&(h=!0),f<0?h=!0:n=f):d.test(u)&&"h"===s?((a||n)&&(h=!0),0===l?h=!0:a=l):h=!0;h?console&&console.log&&console.log("Invalid srcset descriptor found in '"+e+"' at '"+c+"'."):(m.url=r,t&&(m.w=t),n&&(m.d=n),a&&(m.h=a),v.push(m))}}},"object"===u(t)&&t.exports?t.exports=i():r.parseSrcset=i()},{}],168:[function(e,t,n){(function(e){function t(e,t){for(var n=0,r=e.length-1;r>=0;r--){var i=e[r];"."===i?e.splice(r,1):".."===i?(e.splice(r,1),n++):n&&(e.splice(r,1),n--)}if(t)for(;n--;n)e.unshift("..");return e}function r(e,t){if(e.filter)return e.filter(t);for(var n=[],r=0;r<e.length;r++)t(e[r],r,e)&&n.push(e[r]);return n}n.resolve=function(){for(var n="",i=!1,a=arguments.length-1;a>=-1&&!i;a--){var o=a>=0?arguments[a]:e.cwd();if("string"!=typeof o)throw new TypeError("Arguments to path.resolve must be strings");o&&(n=o+"/"+n,i="/"===o.charAt(0))}return(i?"/":"")+(n=t(r(n.split("/"),(function(e){return!!e})),!i).join("/"))||"."},n.normalize=function(e){var a=n.isAbsolute(e),o="/"===i(e,-1);return(e=t(r(e.split("/"),(function(e){return!!e})),!a).join("/"))||a||(e="."),e&&o&&(e+="/"),(a?"/":"")+e},n.isAbsolute=function(e){return"/"===e.charAt(0)},n.join=function(){var e=Array.prototype.slice.call(arguments,0);return n.normalize(r(e,(function(e,t){if("string"!=typeof e)throw new TypeError("Arguments to path.join must be strings");return e})).join("/"))},n.relative=function(e,t){function r(e){for(var t=0;t<e.length&&""===e[t];t++);for(var n=e.length-1;n>=0&&""===e[n];n--);return t>n?[]:e.slice(t,n-t+1)}e=n.resolve(e).substr(1),t=n.resolve(t).substr(1);for(var i=r(e.split("/")),a=r(t.split("/")),o=Math.min(i.length,a.length),c=o,s=0;s<o;s++)if(i[s]!==a[s]){c=s;break}var u=[];for(s=c;s<i.length;s++)u.push("..");return(u=u.concat(a.slice(c))).join("/")},n.sep="/",n.delimiter=":",n.dirname=function(e){if("string"!=typeof e&&(e+=""),0===e.length)return".";for(var t=e.charCodeAt(0),n=47===t,r=-1,i=!0,a=e.length-1;a>=1;--a)if(47===(t=e.charCodeAt(a))){if(!i){r=a;break}}else i=!1;return-1===r?n?"/":".":n&&1===r?"/":e.slice(0,r)},n.basename=function(e,t){var n=function(e){"string"!=typeof e&&(e+="");var t,n=0,r=-1,i=!0;for(t=e.length-1;t>=0;--t)if(47===e.charCodeAt(t)){if(!i){n=t+1;break}}else-1===r&&(i=!1,r=t+1);return-1===r?"":e.slice(n,r)}(e);return t&&n.substr(-1*t.length)===t&&(n=n.substr(0,n.length-t.length)),n},n.extname=function(e){"string"!=typeof e&&(e+="");for(var t=-1,n=0,r=-1,i=!0,a=0,o=e.length-1;o>=0;--o){var c=e.charCodeAt(o);if(47!==c)-1===r&&(i=!1,r=o+1),46===c?-1===t?t=o:1!==a&&(a=1):-1!==t&&(a=-1);else if(!i){n=o+1;break}}return-1===t||-1===r||0===a||1===a&&t===r-1&&t===n+1?"":e.slice(t,r)};var i="b"==="ab".substr(-1)?function(e,t,n){return e.substr(t,n)}:function(e,t,n){return t<0&&(t=e.length+t),e.substr(t,n)}}).call(this,e("_process"))},{_process:193}],169:[function(e,t,n){var r;n.__esModule=!0,n.default=void 0;var i=function(e){var t,n;function r(t){var n;return(n=e.call(this,t)||this).type="atrule",n}n=e,(t=r).prototype=Object.create(n.prototype),t.prototype.constructor=t,t.__proto__=n;var i=r.prototype;return i.append=function(){var t;this.nodes||(this.nodes=[]);for(var n=arguments.length,r=new Array(n),i=0;i<n;i++)r[i]=arguments[i];return(t=e.prototype.append).call.apply(t,[this].concat(r))},i.prepend=function(){var t;this.nodes||(this.nodes=[]);for(var n=arguments.length,r=new Array(n),i=0;i<n;i++)r[i]=arguments[i];return(t=e.prototype.prepend).call.apply(t,[this].concat(r))},r}(((r=e("./container"))&&r.__esModule?r:{default:r}).default);n.default=i,t.exports=n.default},{"./container":171}],170:[function(e,t,n){var r;n.__esModule=!0,n.default=void 0;var i=function(e){var t,n;function r(t){var n;return(n=e.call(this,t)||this).type="comment",n}return n=e,(t=r).prototype=Object.create(n.prototype),t.prototype.constructor=t,t.__proto__=n,r}(((r=e("./node"))&&r.__esModule?r:{default:r}).default);n.default=i,t.exports=n.default},{"./node":178}],171:[function(e,t,n){n.__esModule=!0,n.default=void 0;var r=a(e("./declaration")),i=a(e("./comment"));function a(e){return e&&e.__esModule?e:{default:e}}function o(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}var c=function(t){var n,a;function c(){return t.apply(this,arguments)||this}a=t,(n=c).prototype=Object.create(a.prototype),n.prototype.constructor=n,n.__proto__=a;var s,u,l,f=c.prototype;return f.push=function(e){return e.parent=this,this.nodes.push(e),this},f.each=function(e){this.lastEach||(this.lastEach=0),this.indexes||(this.indexes={}),this.lastEach+=1;var t=this.lastEach;if(this.indexes[t]=0,this.nodes){for(var n,r;this.indexes[t]<this.nodes.length&&(n=this.indexes[t],!1!==(r=e(this.nodes[n],n)));)this.indexes[t]+=1;return delete this.indexes[t],r}},f.walk=function(e){return this.each((function(t,n){var r;try{r=e(t,n)}catch(e){if(e.postcssNode=t,e.stack&&t.source&&/\n\s{4}at /.test(e.stack)){var i=t.source;e.stack=e.stack.replace(/\n\s{4}at /,"$&"+i.input.from+":"+i.start.line+":"+i.start.column+"$&")}throw e}return!1!==r&&t.walk&&(r=t.walk(e)),r}))},f.walkDecls=function(e,t){return t?e instanceof RegExp?this.walk((function(n,r){if("decl"===n.type&&e.test(n.prop))return t(n,r)})):this.walk((function(n,r){if("decl"===n.type&&n.prop===e)return t(n,r)})):(t=e,this.walk((function(e,n){if("decl"===e.type)return t(e,n)})))},f.walkRules=function(e,t){return t?e instanceof RegExp?this.walk((function(n,r){if("rule"===n.type&&e.test(n.selector))return t(n,r)})):this.walk((function(n,r){if("rule"===n.type&&n.selector===e)return t(n,r)})):(t=e,this.walk((function(e,n){if("rule"===e.type)return t(e,n)})))},f.walkAtRules=function(e,t){return t?e instanceof RegExp?this.walk((function(n,r){if("atrule"===n.type&&e.test(n.name))return t(n,r)})):this.walk((function(n,r){if("atrule"===n.type&&n.name===e)return t(n,r)})):(t=e,this.walk((function(e,n){if("atrule"===e.type)return t(e,n)})))},f.walkComments=function(e){return this.walk((function(t,n){if("comment"===t.type)return e(t,n)}))},f.append=function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];for(var r=0,i=t;r<i.length;r++){var a=i[r],o=this.normalize(a,this.last),c=o,s=Array.isArray(c),u=0;for(c=s?c:c[Symbol.iterator]();;){var l;if(s){if(u>=c.length)break;l=c[u++]}else{if((u=c.next()).done)break;l=u.value}var f=l;this.nodes.push(f)}}return this},f.prepend=function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];var r=t=t.reverse(),i=Array.isArray(r),a=0;for(r=i?r:r[Symbol.iterator]();;){var o;if(i){if(a>=r.length)break;o=r[a++]}else{if((a=r.next()).done)break;o=a.value}var c=o,s=this.normalize(c,this.first,"prepend").reverse(),u=s,l=Array.isArray(u),f=0;for(u=l?u:u[Symbol.iterator]();;){var h;if(l){if(f>=u.length)break;h=u[f++]}else{if((f=u.next()).done)break;h=f.value}var d=h;this.nodes.unshift(d)}for(var p in this.indexes)this.indexes[p]=this.indexes[p]+s.length}return this},f.cleanRaws=function(e){if(t.prototype.cleanRaws.call(this,e),this.nodes){var n=this.nodes,r=Array.isArray(n),i=0;for(n=r?n:n[Symbol.iterator]();;){var a;if(r){if(i>=n.length)break;a=n[i++]}else{if((i=n.next()).done)break;a=i.value}a.cleanRaws(e)}}},f.insertBefore=function(e,t){var n,r=0===(e=this.index(e))&&"prepend",i=this.normalize(t,this.nodes[e],r).reverse(),a=i,o=Array.isArray(a),c=0;for(a=o?a:a[Symbol.iterator]();;){var s;if(o){if(c>=a.length)break;s=a[c++]}else{if((c=a.next()).done)break;s=c.value}var u=s;this.nodes.splice(e,0,u)}for(var l in this.indexes)e<=(n=this.indexes[l])&&(this.indexes[l]=n+i.length);return this},f.insertAfter=function(e,t){e=this.index(e);var n,r=this.normalize(t,this.nodes[e]).reverse(),i=r,a=Array.isArray(i),o=0;for(i=a?i:i[Symbol.iterator]();;){var c;if(a){if(o>=i.length)break;c=i[o++]}else{if((o=i.next()).done)break;c=o.value}var s=c;this.nodes.splice(e+1,0,s)}for(var u in this.indexes)e<(n=this.indexes[u])&&(this.indexes[u]=n+r.length);return this},f.removeChild=function(e){var t;for(var n in e=this.index(e),this.nodes[e].parent=void 0,this.nodes.splice(e,1),this.indexes)(t=this.indexes[n])>=e&&(this.indexes[n]=t-1);return this},f.removeAll=function(){var e=this.nodes,t=Array.isArray(e),n=0;for(e=t?e:e[Symbol.iterator]();;){var r;if(t){if(n>=e.length)break;r=e[n++]}else{if((n=e.next()).done)break;r=n.value}r.parent=void 0}return this.nodes=[],this},f.replaceValues=function(e,t,n){return n||(n=t,t={}),this.walkDecls((function(r){t.props&&-1===t.props.indexOf(r.prop)||t.fast&&-1===r.value.indexOf(t.fast)||(r.value=r.value.replace(e,n))})),this},f.every=function(e){return this.nodes.every(e)},f.some=function(e){return this.nodes.some(e)},f.index=function(e){return"number"==typeof e?e:this.nodes.indexOf(e)},f.normalize=function(t,n){var a=this;if("string"==typeof t)t=function e(t){return t.map((function(t){return t.nodes&&(t.nodes=e(t.nodes)),delete t.source,t}))}(e("./parse")(t).nodes);else if(Array.isArray(t)){var o=t=t.slice(0),c=Array.isArray(o),s=0;for(o=c?o:o[Symbol.iterator]();;){var u;if(c){if(s>=o.length)break;u=o[s++]}else{if((s=o.next()).done)break;u=s.value}var l=u;l.parent&&l.parent.removeChild(l,"ignore")}}else if("root"===t.type){var f=t=t.nodes.slice(0),h=Array.isArray(f),d=0;for(f=h?f:f[Symbol.iterator]();;){var p;if(h){if(d>=f.length)break;p=f[d++]}else{if((d=f.next()).done)break;p=d.value}var m=p;m.parent&&m.parent.removeChild(m,"ignore")}}else if(t.type)t=[t];else if(t.prop){if(void 0===t.value)throw new Error("Value field is missed in node creation");"string"!=typeof t.value&&(t.value=String(t.value)),t=[new r.default(t)]}else if(t.selector)t=[new(e("./rule"))(t)];else if(t.name)t=[new(e("./at-rule"))(t)];else{if(!t.text)throw new Error("Unknown node type in node creation");t=[new i.default(t)]}return t.map((function(e){return e.parent&&e.parent.removeChild(e),void 0===e.raws.before&&n&&void 0!==n.raws.before&&(e.raws.before=n.raws.before.replace(/[^\s]/g,"")),e.parent=a,e}))},s=c,(u=[{key:"first",get:function(){if(this.nodes)return this.nodes[0]}},{key:"last",get:function(){if(this.nodes)return this.nodes[this.nodes.length-1]}}])&&o(s.prototype,u),l&&o(s,l),c}(a(e("./node")).default);n.default=c,t.exports=n.default},{"./at-rule":169,"./comment":170,"./declaration":173,"./node":178,"./parse":179,"./rule":186}],172:[function(e,t,n){n.__esModule=!0,n.default=void 0;var r=o(e("supports-color")),i=o(e("chalk")),a=o(e("./terminal-highlight"));function o(e){return e&&e.__esModule?e:{default:e}}function c(e){var t="function"==typeof Map?new Map:void 0;return(c=function(e){if(null===e||(n=e,-1===Function.toString.call(n).indexOf("[native code]")))return e;var n;if("function"!=typeof e)throw new TypeError("Super expression must either be null or a function");if(void 0!==t){if(t.has(e))return t.get(e);t.set(e,r)}function r(){return u(e,arguments,f(this).constructor)}return r.prototype=Object.create(e.prototype,{constructor:{value:r,enumerable:!1,writable:!0,configurable:!0}}),l(r,e)})(e)}function s(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function u(e,t,n){return(u=s()?Reflect.construct:function(e,t,n){var r=[null];r.push.apply(r,t);var i=new(Function.bind.apply(e,r));return n&&l(i,n.prototype),i}).apply(null,arguments)}function l(e,t){return(l=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function f(e){return(f=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var h=function(e){var t,n;function o(t,n,r,i,a,c){var s;return(s=e.call(this,t)||this).name="CssSyntaxError",s.reason=t,a&&(s.file=a),i&&(s.source=i),c&&(s.plugin=c),void 0!==n&&void 0!==r&&(s.line=n,s.column=r),s.setMessage(),Error.captureStackTrace&&Error.captureStackTrace(function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(s),o),s}n=e,(t=o).prototype=Object.create(n.prototype),t.prototype.constructor=t,t.__proto__=n;var c=o.prototype;return c.setMessage=function(){this.message=this.plugin?this.plugin+": ":"",this.message+=this.file?this.file:"<css input>",void 0!==this.line&&(this.message+=":"+this.line+":"+this.column),this.message+=": "+this.reason},c.showSourceCode=function(e){var t=this;if(!this.source)return"";var n=this.source;a.default&&(void 0===e&&(e=r.default.stdout),e&&(n=(0,a.default)(n)));var o=n.split(/\r?\n/),c=Math.max(this.line-3,0),s=Math.min(this.line+2,o.length),u=String(s).length;function l(t){return e&&i.default.red?i.default.red.bold(t):t}function f(t){return e&&i.default.gray?i.default.gray(t):t}return o.slice(c,s).map((function(e,n){var r=c+1+n,i=" "+(" "+r).slice(-u)+" | ";if(r===t.line){var a=f(i.replace(/\d/g," "))+e.slice(0,t.column-1).replace(/[^\t]/g," ");return l(">")+f(i)+e+"\n "+a+l("^")}return" "+f(i)+e})).join("\n")},c.toString=function(){var e=this.showSourceCode();return e&&(e="\n\n"+e+"\n"),this.name+": "+this.message+e},o}(c(Error));n.default=h,t.exports=n.default},{"./terminal-highlight":2,chalk:2,"supports-color":2}],173:[function(e,t,n){var r;n.__esModule=!0,n.default=void 0;var i=function(e){var t,n;function r(t){var n;return(n=e.call(this,t)||this).type="decl",n}return n=e,(t=r).prototype=Object.create(n.prototype),t.prototype.constructor=t,t.__proto__=n,r}(((r=e("./node"))&&r.__esModule?r:{default:r}).default);n.default=i,t.exports=n.default},{"./node":178}],174:[function(e,t,n){n.__esModule=!0,n.default=void 0;var r=o(e("path")),i=o(e("./css-syntax-error")),a=o(e("./previous-map"));function o(e){return e&&e.__esModule?e:{default:e}}function c(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}var s=0,l=function(){function e(e,t){if(void 0===t&&(t={}),null===e||"object"===u(e)&&!e.toString)throw new Error("PostCSS received "+e+" instead of CSS string");this.css=e.toString(),"\ufeff"===this.css[0]||"￾"===this.css[0]?(this.hasBOM=!0,this.css=this.css.slice(1)):this.hasBOM=!1,t.from&&(/^\w+:\/\//.test(t.from)||r.default.isAbsolute(t.from)?this.file=t.from:this.file=r.default.resolve(t.from));var n=new a.default(this.css,t);if(n.text){this.map=n;var i=n.consumer().file;!this.file&&i&&(this.file=this.mapResolve(i))}this.file||(s+=1,this.id="<input css "+s+">"),this.map&&(this.map.file=this.from)}var t,n,o,l=e.prototype;return l.error=function(e,t,n,r){var a;void 0===r&&(r={});var o=this.origin(t,n);return(a=o?new i.default(e,o.line,o.column,o.source,o.file,r.plugin):new i.default(e,t,n,this.css,this.file,r.plugin)).input={line:t,column:n,source:this.css},this.file&&(a.input.file=this.file),a},l.origin=function(e,t){if(!this.map)return!1;var n=this.map.consumer(),r=n.originalPositionFor({line:e,column:t});if(!r.source)return!1;var i={file:this.mapResolve(r.source),line:r.line,column:r.column},a=n.sourceContentFor(r.source);return a&&(i.source=a),i},l.mapResolve=function(e){return/^\w+:\/\//.test(e)?e:r.default.resolve(this.map.consumer().sourceRoot||".",e)},t=e,(n=[{key:"from",get:function(){return this.file||this.id}}])&&c(t.prototype,n),o&&c(t,o),e}();n.default=l,t.exports=n.default},{"./css-syntax-error":172,"./previous-map":182,path:168}],175:[function(e,t,n){(function(r){n.__esModule=!0,n.default=void 0;var i=l(e("./map-generator")),a=l(e("./stringify")),o=l(e("./warn-once")),c=l(e("./result")),s=l(e("./parse"));function l(e){return e&&e.__esModule?e:{default:e}}function f(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function h(e){return"object"===u(e)&&"function"==typeof e.then}var d=function(){function e(t,n,r){var i;if(this.stringified=!1,this.processed=!1,"object"===u(n)&&null!==n&&"root"===n.type)i=n;else if(n instanceof e||n instanceof c.default)i=n.root,n.map&&(void 0===r.map&&(r.map={}),r.map.inline||(r.map.inline=!1),r.map.prev=n.map);else{var a=s.default;r.syntax&&(a=r.syntax.parse),r.parser&&(a=r.parser),a.parse&&(a=a.parse);try{i=a(n,r)}catch(e){this.error=e}}this.result=new c.default(t,i,r)}var t,n,l,d=e.prototype;return d.warnings=function(){return this.sync().warnings()},d.toString=function(){return this.css},d.then=function(e,t){return"production"!==r.env.NODE_ENV&&("from"in this.opts||(0,o.default)("Without `from` option PostCSS could generate wrong source map and will not find Browserslist config. Set it to CSS file path or to `undefined` to prevent this warning.")),this.async().then(e,t)},d.catch=function(e){return this.async().catch(e)},d.finally=function(e){return this.async().then(e,e)},d.handleError=function(e,t){try{if(this.error=e,"CssSyntaxError"!==e.name||e.plugin){if(t.postcssVersion&&"production"!==r.env.NODE_ENV){var n=t.postcssPlugin,i=t.postcssVersion,a=this.result.processor.version,o=i.split("."),c=a.split(".");(o[0]!==c[0]||parseInt(o[1])>parseInt(c[1]))&&console.error("Unknown error from PostCSS plugin. Your current PostCSS version is "+a+", but "+n+" uses "+i+". Perhaps this is the source of the error below.")}}else e.plugin=t.postcssPlugin,e.setMessage()}catch(e){console&&console.error&&console.error(e)}},d.asyncTick=function(e,t){var n=this;if(this.plugin>=this.processor.plugins.length)return this.processed=!0,e();try{var r=this.processor.plugins[this.plugin],i=this.run(r);this.plugin+=1,h(i)?i.then((function(){n.asyncTick(e,t)})).catch((function(e){n.handleError(e,r),n.processed=!0,t(e)})):this.asyncTick(e,t)}catch(e){this.processed=!0,t(e)}},d.async=function(){var e=this;return this.processed?new Promise((function(t,n){e.error?n(e.error):t(e.stringify())})):(this.processing||(this.processing=new Promise((function(t,n){if(e.error)return n(e.error);e.plugin=0,e.asyncTick(t,n)})).then((function(){return e.processed=!0,e.stringify()}))),this.processing)},d.sync=function(){if(this.processed)return this.result;if(this.processed=!0,this.processing)throw new Error("Use process(css).then(cb) to work with async plugins");if(this.error)throw this.error;var e=this.result.processor.plugins,t=Array.isArray(e),n=0;for(e=t?e:e[Symbol.iterator]();;){var r;if(t){if(n>=e.length)break;r=e[n++]}else{if((n=e.next()).done)break;r=n.value}var i=r;if(h(this.run(i)))throw new Error("Use process(css).then(cb) to work with async plugins")}return this.result},d.run=function(e){this.result.lastPlugin=e;try{return e(this.result.root,this.result)}catch(t){throw this.handleError(t,e),t}},d.stringify=function(){if(this.stringified)return this.result;this.stringified=!0,this.sync();var e=this.result.opts,t=a.default;e.syntax&&(t=e.syntax.stringify),e.stringifier&&(t=e.stringifier),t.stringify&&(t=t.stringify);var n=new i.default(t,this.result.root,this.result.opts).generate();return this.result.css=n[0],this.result.map=n[1],this.result},t=e,(n=[{key:"processor",get:function(){return this.result.processor}},{key:"opts",get:function(){return this.result.opts}},{key:"css",get:function(){return this.stringify().css}},{key:"content",get:function(){return this.stringify().content}},{key:"map",get:function(){return this.stringify().map}},{key:"root",get:function(){return this.sync().root}},{key:"messages",get:function(){return this.sync().messages}}])&&f(t.prototype,n),l&&f(t,l),e}();n.default=d,t.exports=n.default}).call(this,e("_process"))},{"./map-generator":177,"./parse":179,"./result":184,"./stringify":188,"./warn-once":191,_process:193}],176:[function(e,t,n){n.__esModule=!0,n.default=void 0;var r={split:function(e,t,n){for(var r=[],i="",a=!1,o=0,c=!1,s=!1,u=0;u<e.length;u++){var l=e[u];c?s?s=!1:"\\"===l?s=!0:l===c&&(c=!1):'"'===l||"'"===l?c=l:"("===l?o+=1:")"===l?o>0&&(o-=1):0===o&&-1!==t.indexOf(l)&&(a=!0),a?(""!==i&&r.push(i.trim()),i="",a=!1):i+=l}return(n||""!==i)&&r.push(i.trim()),r},space:function(e){return r.split(e,[" ","\n","\t"])},comma:function(e){return r.split(e,[","],!0)}},i=r;n.default=i,t.exports=n.default},{}],177:[function(e,t,n){(function(r){n.__esModule=!0,n.default=void 0;var i=o(e("source-map")),a=o(e("path"));function o(e){return e&&e.__esModule?e:{default:e}}var c=function(){function e(e,t,n){this.stringify=e,this.mapOpts=n.map||{},this.root=t,this.opts=n}var t=e.prototype;return t.isMap=function(){return void 0!==this.opts.map?!!this.opts.map:this.previous().length>0},t.previous=function(){var e=this;return this.previousMaps||(this.previousMaps=[],this.root.walk((function(t){if(t.source&&t.source.input.map){var n=t.source.input.map;-1===e.previousMaps.indexOf(n)&&e.previousMaps.push(n)}}))),this.previousMaps},t.isInline=function(){if(void 0!==this.mapOpts.inline)return this.mapOpts.inline;var e=this.mapOpts.annotation;return(void 0===e||!0===e)&&(!this.previous().length||this.previous().some((function(e){return e.inline})))},t.isSourcesContent=function(){return void 0!==this.mapOpts.sourcesContent?this.mapOpts.sourcesContent:!this.previous().length||this.previous().some((function(e){return e.withContent()}))},t.clearAnnotation=function(){if(!1!==this.mapOpts.annotation)for(var e,t=this.root.nodes.length-1;t>=0;t--)"comment"===(e=this.root.nodes[t]).type&&0===e.text.indexOf("# sourceMappingURL=")&&this.root.removeChild(t)},t.setSourcesContent=function(){var e=this,t={};this.root.walk((function(n){if(n.source){var r=n.source.input.from;if(r&&!t[r]){t[r]=!0;var i=e.relative(r);e.map.setSourceContent(i,n.source.input.css)}}}))},t.applyPrevMaps=function(){var e=this.previous(),t=Array.isArray(e),n=0;for(e=t?e:e[Symbol.iterator]();;){var r;if(t){if(n>=e.length)break;r=e[n++]}else{if((n=e.next()).done)break;r=n.value}var o=r,c=this.relative(o.file),s=o.root||a.default.dirname(o.file),u=void 0;!1===this.mapOpts.sourcesContent?(u=new i.default.SourceMapConsumer(o.text)).sourcesContent&&(u.sourcesContent=u.sourcesContent.map((function(){return null}))):u=o.consumer(),this.map.applySourceMap(u,c,this.relative(s))}},t.isAnnotation=function(){return!!this.isInline()||(void 0!==this.mapOpts.annotation?this.mapOpts.annotation:!this.previous().length||this.previous().some((function(e){return e.annotation})))},t.toBase64=function(e){return r?r.from(e).toString("base64"):window.btoa(unescape(encodeURIComponent(e)))},t.addAnnotation=function(){var e;e=this.isInline()?"data:application/json;base64,"+this.toBase64(this.map.toString()):"string"==typeof this.mapOpts.annotation?this.mapOpts.annotation:this.outputFile()+".map";var t="\n";-1!==this.css.indexOf("\r\n")&&(t="\r\n"),this.css+=t+"/*# sourceMappingURL="+e+" */"},t.outputFile=function(){return this.opts.to?this.relative(this.opts.to):this.opts.from?this.relative(this.opts.from):"to.css"},t.generateMap=function(){return this.generateString(),this.isSourcesContent()&&this.setSourcesContent(),this.previous().length>0&&this.applyPrevMaps(),this.isAnnotation()&&this.addAnnotation(),this.isInline()?[this.css]:[this.css,this.map]},t.relative=function(e){if(0===e.indexOf("<"))return e;if(/^\w+:\/\//.test(e))return e;var t=this.opts.to?a.default.dirname(this.opts.to):".";return"string"==typeof this.mapOpts.annotation&&(t=a.default.dirname(a.default.resolve(t,this.mapOpts.annotation))),e=a.default.relative(t,e),"\\"===a.default.sep?e.replace(/\\/g,"/"):e},t.sourcePath=function(e){return this.mapOpts.from?this.mapOpts.from:this.relative(e.source.input.from)},t.generateString=function(){var e=this;this.css="",this.map=new i.default.SourceMapGenerator({file:this.outputFile()});var t,n,r=1,a=1;this.stringify(this.root,(function(i,o,c){if(e.css+=i,o&&"end"!==c&&(o.source&&o.source.start?e.map.addMapping({source:e.sourcePath(o),generated:{line:r,column:a-1},original:{line:o.source.start.line,column:o.source.start.column-1}}):e.map.addMapping({source:"<no source>",original:{line:1,column:0},generated:{line:r,column:a-1}})),(t=i.match(/\n/g))?(r+=t.length,n=i.lastIndexOf("\n"),a=i.length-n):a+=i.length,o&&"start"!==c){var s=o.parent||{raws:{}};("decl"!==o.type||o!==s.last||s.raws.semicolon)&&(o.source&&o.source.end?e.map.addMapping({source:e.sourcePath(o),generated:{line:r,column:a-2},original:{line:o.source.end.line,column:o.source.end.column-1}}):e.map.addMapping({source:"<no source>",original:{line:1,column:0},generated:{line:r,column:a-1}}))}}))},t.generate=function(){if(this.clearAnnotation(),this.isMap())return this.generateMap();var e="";return this.stringify(this.root,(function(t){e+=t})),[e]},e}();n.default=c,t.exports=n.default}).call(this,e("buffer").Buffer)},{buffer:3,path:168,"source-map":208}],178:[function(e,t,n){(function(r){n.__esModule=!0,n.default=void 0;var i=c(e("./css-syntax-error")),a=c(e("./stringifier")),o=c(e("./stringify"));function c(e){return e&&e.__esModule?e:{default:e}}var s=function(){function e(e){if(void 0===e&&(e={}),this.raws={},"production"!==r.env.NODE_ENV&&"object"!==u(e)&&void 0!==e)throw new Error("PostCSS nodes constructor accepts object, not "+JSON.stringify(e));for(var t in e)this[t]=e[t]}var t=e.prototype;return t.error=function(e,t){if(void 0===t&&(t={}),this.source){var n=this.positionBy(t);return this.source.input.error(e,n.line,n.column,t)}return new i.default(e)},t.warn=function(e,t,n){var r={node:this};for(var i in n)r[i]=n[i];return e.warn(t,r)},t.remove=function(){return this.parent&&this.parent.removeChild(this),this.parent=void 0,this},t.toString=function(e){void 0===e&&(e=o.default),e.stringify&&(e=e.stringify);var t="";return e(this,(function(e){t+=e})),t},t.clone=function(e){void 0===e&&(e={});var t=function e(t,n){var r=new t.constructor;for(var i in t)if(t.hasOwnProperty(i)){var a=t[i],o=u(a);"parent"===i&&"object"===o?n&&(r[i]=n):"source"===i?r[i]=a:a instanceof Array?r[i]=a.map((function(t){return e(t,r)})):("object"===o&&null!==a&&(a=e(a)),r[i]=a)}return r}(this);for(var n in e)t[n]=e[n];return t},t.cloneBefore=function(e){void 0===e&&(e={});var t=this.clone(e);return this.parent.insertBefore(this,t),t},t.cloneAfter=function(e){void 0===e&&(e={});var t=this.clone(e);return this.parent.insertAfter(this,t),t},t.replaceWith=function(){if(this.parent){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];for(var r=0,i=t;r<i.length;r++){var a=i[r];this.parent.insertBefore(this,a)}this.remove()}return this},t.next=function(){if(this.parent){var e=this.parent.index(this);return this.parent.nodes[e+1]}},t.prev=function(){if(this.parent){var e=this.parent.index(this);return this.parent.nodes[e-1]}},t.before=function(e){return this.parent.insertBefore(this,e),this},t.after=function(e){return this.parent.insertAfter(this,e),this},t.toJSON=function(){var e={};for(var t in this)if(this.hasOwnProperty(t)&&"parent"!==t){var n=this[t];n instanceof Array?e[t]=n.map((function(e){return"object"===u(e)&&e.toJSON?e.toJSON():e})):"object"===u(n)&&n.toJSON?e[t]=n.toJSON():e[t]=n}return e},t.raw=function(e,t){return(new a.default).raw(this,e,t)},t.root=function(){for(var e=this;e.parent;)e=e.parent;return e},t.cleanRaws=function(e){delete this.raws.before,delete this.raws.after,e||delete this.raws.between},t.positionInside=function(e){for(var t=this.toString(),n=this.source.start.column,r=this.source.start.line,i=0;i<e;i++)"\n"===t[i]?(n=1,r+=1):n+=1;return{line:r,column:n}},t.positionBy=function(e){var t=this.source.start;if(e.index)t=this.positionInside(e.index);else if(e.word){var n=this.toString().indexOf(e.word);-1!==n&&(t=this.positionInside(n))}return t},e}();n.default=s,t.exports=n.default}).call(this,e("_process"))},{"./css-syntax-error":172,"./stringifier":187,"./stringify":188,_process:193}],179:[function(e,t,n){(function(r){n.__esModule=!0,n.default=void 0;var i=o(e("./parser")),a=o(e("./input"));function o(e){return e&&e.__esModule?e:{default:e}}var c=function(e,t){var n=new a.default(e,t),o=new i.default(n);try{o.parse()}catch(e){throw"production"!==r.env.NODE_ENV&&"CssSyntaxError"===e.name&&t&&t.from&&(/\.scss$/i.test(t.from)?e.message+="\nYou tried to parse SCSS with the standard CSS parser; try again with the postcss-scss parser":/\.sass/i.test(t.from)?e.message+="\nYou tried to parse Sass with the standard CSS parser; try again with the postcss-sass parser":/\.less$/i.test(t.from)&&(e.message+="\nYou tried to parse Less with the standard CSS parser; try again with the postcss-less parser")),e}return o.root};n.default=c,t.exports=n.default}).call(this,e("_process"))},{"./input":174,"./parser":180,_process:193}],180:[function(e,t,n){n.__esModule=!0,n.default=void 0;var r=u(e("./declaration")),i=u(e("./tokenize")),a=u(e("./comment")),o=u(e("./at-rule")),c=u(e("./root")),s=u(e("./rule"));function u(e){return e&&e.__esModule?e:{default:e}}var l=function(){function e(e){this.input=e,this.root=new c.default,this.current=this.root,this.spaces="",this.semicolon=!1,this.createTokenizer(),this.root.source={input:e,start:{line:1,column:1}}}var t=e.prototype;return t.createTokenizer=function(){this.tokenizer=(0,i.default)(this.input)},t.parse=function(){for(var e;!this.tokenizer.endOfFile();)switch((e=this.tokenizer.nextToken())[0]){case"space":this.spaces+=e[1];break;case";":this.freeSemicolon(e);break;case"}":this.end(e);break;case"comment":this.comment(e);break;case"at-word":this.atrule(e);break;case"{":this.emptyRule(e);break;default:this.other(e)}this.endFile()},t.comment=function(e){var t=new a.default;this.init(t,e[2],e[3]),t.source.end={line:e[4],column:e[5]};var n=e[1].slice(2,-2);if(/^\s*$/.test(n))t.text="",t.raws.left=n,t.raws.right="";else{var r=n.match(/^(\s*)([^]*[^\s])(\s*)$/);t.text=r[2],t.raws.left=r[1],t.raws.right=r[3]}},t.emptyRule=function(e){var t=new s.default;this.init(t,e[2],e[3]),t.selector="",t.raws.between="",this.current=t},t.other=function(e){for(var t=!1,n=null,r=!1,i=null,a=[],o=[],c=e;c;){if(n=c[0],o.push(c),"("===n||"["===n)i||(i=c),a.push("("===n?")":"]");else if(0===a.length){if(";"===n){if(r)return void this.decl(o);break}if("{"===n)return void this.rule(o);if("}"===n){this.tokenizer.back(o.pop()),t=!0;break}":"===n&&(r=!0)}else n===a[a.length-1]&&(a.pop(),0===a.length&&(i=null));c=this.tokenizer.nextToken()}if(this.tokenizer.endOfFile()&&(t=!0),a.length>0&&this.unclosedBracket(i),t&&r){for(;o.length&&("space"===(c=o[o.length-1][0])||"comment"===c);)this.tokenizer.back(o.pop());this.decl(o)}else this.unknownWord(o)},t.rule=function(e){e.pop();var t=new s.default;this.init(t,e[0][2],e[0][3]),t.raws.between=this.spacesAndCommentsFromEnd(e),this.raw(t,"selector",e),this.current=t},t.decl=function(e){var t=new r.default;this.init(t);var n,i=e[e.length-1];for(";"===i[0]&&(this.semicolon=!0,e.pop()),i[4]?t.source.end={line:i[4],column:i[5]}:t.source.end={line:i[2],column:i[3]};"word"!==e[0][0];)1===e.length&&this.unknownWord(e),t.raws.before+=e.shift()[1];for(t.source.start={line:e[0][2],column:e[0][3]},t.prop="";e.length;){var a=e[0][0];if(":"===a||"space"===a||"comment"===a)break;t.prop+=e.shift()[1]}for(t.raws.between="";e.length;){if(":"===(n=e.shift())[0]){t.raws.between+=n[1];break}"word"===n[0]&&/\w/.test(n[1])&&this.unknownWord([n]),t.raws.between+=n[1]}"_"!==t.prop[0]&&"*"!==t.prop[0]||(t.raws.before+=t.prop[0],t.prop=t.prop.slice(1)),t.raws.between+=this.spacesAndCommentsFromStart(e),this.precheckMissedSemicolon(e);for(var o=e.length-1;o>0;o--){if("!important"===(n=e[o])[1].toLowerCase()){t.important=!0;var c=this.stringFrom(e,o);" !important"!==(c=this.spacesFromEnd(e)+c)&&(t.raws.important=c);break}if("important"===n[1].toLowerCase()){for(var s=e.slice(0),u="",l=o;l>0;l--){var f=s[l][0];if(0===u.trim().indexOf("!")&&"space"!==f)break;u=s.pop()[1]+u}0===u.trim().indexOf("!")&&(t.important=!0,t.raws.important=u,e=s)}if("space"!==n[0]&&"comment"!==n[0])break}this.raw(t,"value",e),-1!==t.value.indexOf(":")&&this.checkMissedSemicolon(e)},t.atrule=function(e){var t,n,r=new o.default;r.name=e[1].slice(1),""===r.name&&this.unnamedAtrule(r,e),this.init(r,e[2],e[3]);for(var i=!1,a=!1,c=[];!this.tokenizer.endOfFile();){if(";"===(e=this.tokenizer.nextToken())[0]){r.source.end={line:e[2],column:e[3]},this.semicolon=!0;break}if("{"===e[0]){a=!0;break}if("}"===e[0]){if(c.length>0){for(t=c[n=c.length-1];t&&"space"===t[0];)t=c[--n];t&&(r.source.end={line:t[4],column:t[5]})}this.end(e);break}if(c.push(e),this.tokenizer.endOfFile()){i=!0;break}}r.raws.between=this.spacesAndCommentsFromEnd(c),c.length?(r.raws.afterName=this.spacesAndCommentsFromStart(c),this.raw(r,"params",c),i&&(e=c[c.length-1],r.source.end={line:e[4],column:e[5]},this.spaces=r.raws.between,r.raws.between="")):(r.raws.afterName="",r.params=""),a&&(r.nodes=[],this.current=r)},t.end=function(e){this.current.nodes&&this.current.nodes.length&&(this.current.raws.semicolon=this.semicolon),this.semicolon=!1,this.current.raws.after=(this.current.raws.after||"")+this.spaces,this.spaces="",this.current.parent?(this.current.source.end={line:e[2],column:e[3]},this.current=this.current.parent):this.unexpectedClose(e)},t.endFile=function(){this.current.parent&&this.unclosedBlock(),this.current.nodes&&this.current.nodes.length&&(this.current.raws.semicolon=this.semicolon),this.current.raws.after=(this.current.raws.after||"")+this.spaces},t.freeSemicolon=function(e){if(this.spaces+=e[1],this.current.nodes){var t=this.current.nodes[this.current.nodes.length-1];t&&"rule"===t.type&&!t.raws.ownSemicolon&&(t.raws.ownSemicolon=this.spaces,this.spaces="")}},t.init=function(e,t,n){this.current.push(e),e.source={start:{line:t,column:n},input:this.input},e.raws.before=this.spaces,this.spaces="","comment"!==e.type&&(this.semicolon=!1)},t.raw=function(e,t,n){for(var r,i,a,o,c=n.length,s="",u=!0,l=/^([.|#])?([\w])+/i,f=0;f<c;f+=1)"comment"!==(i=(r=n[f])[0])||"rule"!==e.type?"comment"===i||"space"===i&&f===c-1?u=!1:s+=r[1]:(o=n[f-1],a=n[f+1],"space"!==o[0]&&"space"!==a[0]&&l.test(o[1])&&l.test(a[1])?s+=r[1]:u=!1);if(!u){var h=n.reduce((function(e,t){return e+t[1]}),"");e.raws[t]={value:s,raw:h}}e[t]=s},t.spacesAndCommentsFromEnd=function(e){for(var t,n="";e.length&&("space"===(t=e[e.length-1][0])||"comment"===t);)n=e.pop()[1]+n;return n},t.spacesAndCommentsFromStart=function(e){for(var t,n="";e.length&&("space"===(t=e[0][0])||"comment"===t);)n+=e.shift()[1];return n},t.spacesFromEnd=function(e){for(var t="";e.length&&"space"===e[e.length-1][0];)t=e.pop()[1]+t;return t},t.stringFrom=function(e,t){for(var n="",r=t;r<e.length;r++)n+=e[r][1];return e.splice(t,e.length-t),n},t.colon=function(e){for(var t,n,r,i=0,a=0;a<e.length;a++){if("("===(n=(t=e[a])[0])&&(i+=1),")"===n&&(i-=1),0===i&&":"===n){if(r){if("word"===r[0]&&"progid"===r[1])continue;return a}this.doubleColon(t)}r=t}return!1},t.unclosedBracket=function(e){throw this.input.error("Unclosed bracket",e[2],e[3])},t.unknownWord=function(e){throw this.input.error("Unknown word",e[0][2],e[0][3])},t.unexpectedClose=function(e){throw this.input.error("Unexpected }",e[2],e[3])},t.unclosedBlock=function(){var e=this.current.source.start;throw this.input.error("Unclosed block",e.line,e.column)},t.doubleColon=function(e){throw this.input.error("Double colon",e[2],e[3])},t.unnamedAtrule=function(e,t){throw this.input.error("At-rule without name",t[2],t[3])},t.precheckMissedSemicolon=function(){},t.checkMissedSemicolon=function(e){var t=this.colon(e);if(!1!==t){for(var n,r=0,i=t-1;i>=0&&("space"===(n=e[i])[0]||2!==(r+=1));i--);throw this.input.error("Missed semicolon",n[2],n[3])}},e}();n.default=l,t.exports=n.default},{"./at-rule":169,"./comment":170,"./declaration":173,"./root":185,"./rule":186,"./tokenize":189}],181:[function(e,t,n){n.__esModule=!0,n.default=void 0;var r=d(e("./declaration")),i=d(e("./processor")),a=d(e("./stringify")),o=d(e("./comment")),c=d(e("./at-rule")),s=d(e("./vendor")),u=d(e("./parse")),l=d(e("./list")),f=d(e("./rule")),h=d(e("./root"));function d(e){return e&&e.__esModule?e:{default:e}}function p(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return 1===t.length&&Array.isArray(t[0])&&(t=t[0]),new i.default(t)}p.plugin=function(e,t){function n(){var n=t.apply(void 0,arguments);return n.postcssPlugin=e,n.postcssVersion=(new i.default).version,n}var r;return Object.defineProperty(n,"postcss",{get:function(){return r||(r=n()),r}}),n.process=function(e,t,r){return p([n(r)]).process(e,t)},n},p.stringify=a.default,p.parse=u.default,p.vendor=s.default,p.list=l.default,p.comment=function(e){return new o.default(e)},p.atRule=function(e){return new c.default(e)},p.decl=function(e){return new r.default(e)},p.rule=function(e){return new f.default(e)},p.root=function(e){return new h.default(e)};var m=p;n.default=m,t.exports=n.default},{"./at-rule":169,"./comment":170,"./declaration":173,"./list":176,"./parse":179,"./processor":183,"./root":185,"./rule":186,"./stringify":188,"./vendor":190}],182:[function(e,t,n){(function(r){n.__esModule=!0,n.default=void 0;var i=c(e("source-map")),a=c(e("path")),o=c(e("fs"));function c(e){return e&&e.__esModule?e:{default:e}}var s=function(){function e(e,t){this.loadAnnotation(e),this.inline=this.startWith(this.annotation,"data:");var n=t.map?t.map.prev:void 0,r=this.loadMap(t.from,n);r&&(this.text=r)}var t=e.prototype;return t.consumer=function(){return this.consumerCache||(this.consumerCache=new i.default.SourceMapConsumer(this.text)),this.consumerCache},t.withContent=function(){return!!(this.consumer().sourcesContent&&this.consumer().sourcesContent.length>0)},t.startWith=function(e,t){return!!e&&e.substr(0,t.length)===t},t.getAnnotationURL=function(e){return e.match(/\/\*\s*# sourceMappingURL=(.*)\s*\*\//)[1].trim()},t.loadAnnotation=function(e){var t=e.match(/\/\*\s*# sourceMappingURL=(.*)\s*\*\//gm);if(t&&t.length>0){var n=t[t.length-1];n&&(this.annotation=this.getAnnotationURL(n))}},t.decodeInline=function(e){var t,n="data:application/json,";if(this.startWith(e,n))return decodeURIComponent(e.substr(n.length));if(/^data:application\/json;charset=utf-?8;base64,/.test(e)||/^data:application\/json;base64,/.test(e))return t=e.substr(RegExp.lastMatch.length),r?r.from(t,"base64").toString():window.atob(t);var i=e.match(/data:application\/json;([^,]+),/)[1];throw new Error("Unsupported source map encoding "+i)},t.loadMap=function(e,t){if(!1===t)return!1;if(t){if("string"==typeof t)return t;if("function"==typeof t){var n=t(e);if(n&&o.default.existsSync&&o.default.existsSync(n))return o.default.readFileSync(n,"utf-8").toString().trim();throw new Error("Unable to load previous source map: "+n.toString())}if(t instanceof i.default.SourceMapConsumer)return i.default.SourceMapGenerator.fromSourceMap(t).toString();if(t instanceof i.default.SourceMapGenerator)return t.toString();if(this.isMap(t))return JSON.stringify(t);throw new Error("Unsupported previous source map format: "+t.toString())}if(this.inline)return this.decodeInline(this.annotation);if(this.annotation){var r=this.annotation;return e&&(r=a.default.join(a.default.dirname(e),r)),this.root=a.default.dirname(r),!(!o.default.existsSync||!o.default.existsSync(r))&&o.default.readFileSync(r,"utf-8").toString().trim()}},t.isMap=function(e){return"object"===u(e)&&("string"==typeof e.mappings||"string"==typeof e._mappings)},e}();n.default=s,t.exports=n.default}).call(this,e("buffer").Buffer)},{buffer:3,fs:2,path:168,"source-map":208}],183:[function(e,t,n){(function(r){n.__esModule=!0,n.default=void 0;var i,a=(i=e("./lazy-result"))&&i.__esModule?i:{default:i},o=function(){function e(e){void 0===e&&(e=[]),this.version="7.0.31",this.plugins=this.normalize(e)}var t=e.prototype;return t.use=function(e){return this.plugins=this.plugins.concat(this.normalize([e])),this},t.process=function(e){function t(t){return e.apply(this,arguments)}return t.toString=function(){return e.toString()},t}((function(e,t){return void 0===t&&(t={}),0===this.plugins.length&&t.parser===t.stringifier&&"production"!==r.env.NODE_ENV&&"undefined"!=typeof console&&console.warn&&console.warn("You did not set any plugins, parser, or stringifier. Right now, PostCSS does nothing. Pick plugins for your case on https://www.postcss.parts/ and use them in postcss.config.js."),new a.default(this,e,t)})),t.normalize=function(e){var t=[],n=e,i=Array.isArray(n),a=0;for(n=i?n:n[Symbol.iterator]();;){var o;if(i){if(a>=n.length)break;o=n[a++]}else{if((a=n.next()).done)break;o=a.value}var c=o;if(c.postcss&&(c=c.postcss),"object"===u(c)&&Array.isArray(c.plugins))t=t.concat(c.plugins);else if("function"==typeof c)t.push(c);else{if("object"!==u(c)||!c.parse&&!c.stringify)throw new Error(c+" is not a PostCSS plugin");if("production"!==r.env.NODE_ENV)throw new Error("PostCSS syntaxes cannot be used as plugins. Instead, please use one of the syntax/parser/stringifier options as outlined in your PostCSS runner documentation.")}}return t},e}();n.default=o,t.exports=n.default}).call(this,e("_process"))},{"./lazy-result":175,_process:193}],184:[function(e,t,n){n.__esModule=!0,n.default=void 0;var r,i=(r=e("./warning"))&&r.__esModule?r:{default:r};function a(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}var o=function(){function e(e,t,n){this.processor=e,this.messages=[],this.root=t,this.opts=n,this.css=void 0,this.map=void 0}var t,n,r,o=e.prototype;return o.toString=function(){return this.css},o.warn=function(e,t){void 0===t&&(t={}),t.plugin||this.lastPlugin&&this.lastPlugin.postcssPlugin&&(t.plugin=this.lastPlugin.postcssPlugin);var n=new i.default(e,t);return this.messages.push(n),n},o.warnings=function(){return this.messages.filter((function(e){return"warning"===e.type}))},t=e,(n=[{key:"content",get:function(){return this.css}}])&&a(t.prototype,n),r&&a(t,r),e}();n.default=o,t.exports=n.default},{"./warning":192}],185:[function(e,t,n){var r;n.__esModule=!0,n.default=void 0;var i=function(t){var n,r;function i(e){var n;return(n=t.call(this,e)||this).type="root",n.nodes||(n.nodes=[]),n}r=t,(n=i).prototype=Object.create(r.prototype),n.prototype.constructor=n,n.__proto__=r;var a=i.prototype;return a.removeChild=function(e,n){var r=this.index(e);return!n&&0===r&&this.nodes.length>1&&(this.nodes[1].raws.before=this.nodes[r].raws.before),t.prototype.removeChild.call(this,e)},a.normalize=function(e,n,r){var i=t.prototype.normalize.call(this,e);if(n)if("prepend"===r)this.nodes.length>1?n.raws.before=this.nodes[1].raws.before:delete n.raws.before;else if(this.first!==n){var a=i,o=Array.isArray(a),c=0;for(a=o?a:a[Symbol.iterator]();;){var s;if(o){if(c>=a.length)break;s=a[c++]}else{if((c=a.next()).done)break;s=c.value}s.raws.before=n.raws.before}}return i},a.toResult=function(t){return void 0===t&&(t={}),new(e("./lazy-result"))(new(e("./processor")),this,t).stringify()},i}(((r=e("./container"))&&r.__esModule?r:{default:r}).default);n.default=i,t.exports=n.default},{"./container":171,"./lazy-result":175,"./processor":183}],186:[function(e,t,n){n.__esModule=!0,n.default=void 0;var r=a(e("./container")),i=a(e("./list"));function a(e){return e&&e.__esModule?e:{default:e}}function o(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}var c=function(e){var t,n,r,a,c;function s(t){var n;return(n=e.call(this,t)||this).type="rule",n.nodes||(n.nodes=[]),n}return n=e,(t=s).prototype=Object.create(n.prototype),t.prototype.constructor=t,t.__proto__=n,r=s,(a=[{key:"selectors",get:function(){return i.default.comma(this.selector)},set:function(e){var t=this.selector?this.selector.match(/,\s*/):null,n=t?t[0]:","+this.raw("between","beforeOpen");this.selector=e.join(n)}}])&&o(r.prototype,a),c&&o(r,c),s}(r.default);n.default=c,t.exports=n.default},{"./container":171,"./list":176}],187:[function(e,t,n){n.__esModule=!0,n.default=void 0;var r={colon:": ",indent:"    ",beforeDecl:"\n",beforeRule:"\n",beforeOpen:" ",beforeClose:"\n",beforeComment:"\n",after:"\n",emptyBody:"",commentLeft:" ",commentRight:" ",semicolon:!1},i=function(){function e(e){this.builder=e}var t=e.prototype;return t.stringify=function(e,t){this[e.type](e,t)},t.root=function(e){this.body(e),e.raws.after&&this.builder(e.raws.after)},t.comment=function(e){var t=this.raw(e,"left","commentLeft"),n=this.raw(e,"right","commentRight");this.builder("/*"+t+e.text+n+"*/",e)},t.decl=function(e,t){var n=this.raw(e,"between","colon"),r=e.prop+n+this.rawValue(e,"value");e.important&&(r+=e.raws.important||" !important"),t&&(r+=";"),this.builder(r,e)},t.rule=function(e){this.block(e,this.rawValue(e,"selector")),e.raws.ownSemicolon&&this.builder(e.raws.ownSemicolon,e,"end")},t.atrule=function(e,t){var n="@"+e.name,r=e.params?this.rawValue(e,"params"):"";if(void 0!==e.raws.afterName?n+=e.raws.afterName:r&&(n+=" "),e.nodes)this.block(e,n+r);else{var i=(e.raws.between||"")+(t?";":"");this.builder(n+r+i,e)}},t.body=function(e){for(var t=e.nodes.length-1;t>0&&"comment"===e.nodes[t].type;)t-=1;for(var n=this.raw(e,"semicolon"),r=0;r<e.nodes.length;r++){var i=e.nodes[r],a=this.raw(i,"before");a&&this.builder(a),this.stringify(i,t!==r||n)}},t.block=function(e,t){var n,r=this.raw(e,"between","beforeOpen");this.builder(t+r+"{",e,"start"),e.nodes&&e.nodes.length?(this.body(e),n=this.raw(e,"after")):n=this.raw(e,"after","emptyBody"),n&&this.builder(n),this.builder("}",e,"end")},t.raw=function(e,t,n){var i;if(n||(n=t),t&&void 0!==(i=e.raws[t]))return i;var a=e.parent;if("before"===n&&(!a||"root"===a.type&&a.first===e))return"";if(!a)return r[n];var o=e.root();if(o.rawCache||(o.rawCache={}),void 0!==o.rawCache[n])return o.rawCache[n];if("before"===n||"after"===n)return this.beforeAfter(e,n);var c,s="raw"+((c=n)[0].toUpperCase()+c.slice(1));return this[s]?i=this[s](o,e):o.walk((function(e){if(void 0!==(i=e.raws[t]))return!1})),void 0===i&&(i=r[n]),o.rawCache[n]=i,i},t.rawSemicolon=function(e){var t;return e.walk((function(e){if(e.nodes&&e.nodes.length&&"decl"===e.last.type&&void 0!==(t=e.raws.semicolon))return!1})),t},t.rawEmptyBody=function(e){var t;return e.walk((function(e){if(e.nodes&&0===e.nodes.length&&void 0!==(t=e.raws.after))return!1})),t},t.rawIndent=function(e){return e.raws.indent?e.raws.indent:(e.walk((function(n){var r=n.parent;if(r&&r!==e&&r.parent&&r.parent===e&&void 0!==n.raws.before){var i=n.raws.before.split("\n");return t=(t=i[i.length-1]).replace(/[^\s]/g,""),!1}})),t);var t},t.rawBeforeComment=function(e,t){var n;return e.walkComments((function(e){if(void 0!==e.raws.before)return-1!==(n=e.raws.before).indexOf("\n")&&(n=n.replace(/[^\n]+$/,"")),!1})),void 0===n?n=this.raw(t,null,"beforeDecl"):n&&(n=n.replace(/[^\s]/g,"")),n},t.rawBeforeDecl=function(e,t){var n;return e.walkDecls((function(e){if(void 0!==e.raws.before)return-1!==(n=e.raws.before).indexOf("\n")&&(n=n.replace(/[^\n]+$/,"")),!1})),void 0===n?n=this.raw(t,null,"beforeRule"):n&&(n=n.replace(/[^\s]/g,"")),n},t.rawBeforeRule=function(e){var t;return e.walk((function(n){if(n.nodes&&(n.parent!==e||e.first!==n)&&void 0!==n.raws.before)return-1!==(t=n.raws.before).indexOf("\n")&&(t=t.replace(/[^\n]+$/,"")),!1})),t&&(t=t.replace(/[^\s]/g,"")),t},t.rawBeforeClose=function(e){var t;return e.walk((function(e){if(e.nodes&&e.nodes.length>0&&void 0!==e.raws.after)return-1!==(t=e.raws.after).indexOf("\n")&&(t=t.replace(/[^\n]+$/,"")),!1})),t&&(t=t.replace(/[^\s]/g,"")),t},t.rawBeforeOpen=function(e){var t;return e.walk((function(e){if("decl"!==e.type&&void 0!==(t=e.raws.between))return!1})),t},t.rawColon=function(e){var t;return e.walkDecls((function(e){if(void 0!==e.raws.between)return t=e.raws.between.replace(/[^\s:]/g,""),!1})),t},t.beforeAfter=function(e,t){var n;n="decl"===e.type?this.raw(e,null,"beforeDecl"):"comment"===e.type?this.raw(e,null,"beforeComment"):"before"===t?this.raw(e,null,"beforeRule"):this.raw(e,null,"beforeClose");for(var r=e.parent,i=0;r&&"root"!==r.type;)i+=1,r=r.parent;if(-1!==n.indexOf("\n")){var a=this.raw(e,null,"indent");if(a.length)for(var o=0;o<i;o++)n+=a}return n},t.rawValue=function(e,t){var n=e[t],r=e.raws[t];return r&&r.value===n?r.raw:n},e}();n.default=i,t.exports=n.default},{}],188:[function(e,t,n){n.__esModule=!0,n.default=void 0;var r,i=(r=e("./stringifier"))&&r.__esModule?r:{default:r},a=function(e,t){new i.default(t).stringify(e)};n.default=a,t.exports=n.default},{"./stringifier":187}],189:[function(e,t,n){n.__esModule=!0,n.default=function(e,t){void 0===t&&(t={});var n,C,M,O,T,E,L,A,R,N,H,P,j,V,D=e.css.valueOf(),I=t.ignoreErrors,F=D.length,B=-1,U=1,q=0,G=[],W=[];function Z(t){throw e.error("Unclosed "+t,U,q-B)}return{back:function(e){W.push(e)},nextToken:function(e){if(W.length)return W.pop();if(!(q>=F)){var t=!!e&&e.ignoreUnclosed;switch(((n=D.charCodeAt(q))===c||n===u||n===f&&D.charCodeAt(q+1)!==c)&&(B=q,U+=1),n){case c:case s:case l:case f:case u:C=q;do{C+=1,(n=D.charCodeAt(C))===c&&(B=C,U+=1)}while(n===s||n===c||n===l||n===f||n===u);V=["space",D.slice(q,C)],q=C-1;break;case h:case d:case v:case g:case w:case y:case m:var $=String.fromCharCode(n);V=[$,$,U,q-B];break;case p:if(P=G.length?G.pop()[1]:"",j=D.charCodeAt(q+1),"url"===P&&j!==r&&j!==i&&j!==s&&j!==c&&j!==l&&j!==u&&j!==f){C=q;do{if(N=!1,-1===(C=D.indexOf(")",C+1))){if(I||t){C=q;break}Z("bracket")}for(H=C;D.charCodeAt(H-1)===a;)H-=1,N=!N}while(N);V=["brackets",D.slice(q,C+1),U,q-B,U,C-B],q=C}else C=D.indexOf(")",q+1),E=D.slice(q,C+1),-1===C||_.test(E)?V=["(","(",U,q-B]:(V=["brackets",E,U,q-B,U,C-B],q=C);break;case r:case i:M=n===r?"'":'"',C=q;do{if(N=!1,-1===(C=D.indexOf(M,C+1))){if(I||t){C=q+1;break}Z("string")}for(H=C;D.charCodeAt(H-1)===a;)H-=1,N=!N}while(N);E=D.slice(q,C+1),O=E.split("\n"),(T=O.length-1)>0?(A=U+T,R=C-O[T].length):(A=U,R=B),V=["string",D.slice(q,C+1),U,q-B,A,C-R],B=R,U=A,q=C;break;case x:S.lastIndex=q+1,S.test(D),C=0===S.lastIndex?D.length-1:S.lastIndex-2,V=["at-word",D.slice(q,C+1),U,q-B,U,C-B],q=C;break;case a:for(C=q,L=!0;D.charCodeAt(C+1)===a;)C+=1,L=!L;if(n=D.charCodeAt(C+1),L&&n!==o&&n!==s&&n!==c&&n!==l&&n!==f&&n!==u&&(C+=1,z.test(D.charAt(C)))){for(;z.test(D.charAt(C+1));)C+=1;D.charCodeAt(C+1)===s&&(C+=1)}V=["word",D.slice(q,C+1),U,q-B,U,C-B],q=C;break;default:n===o&&D.charCodeAt(q+1)===b?(0===(C=D.indexOf("*/",q+2)+1)&&(I||t?C=D.length:Z("comment")),E=D.slice(q,C+1),O=E.split("\n"),(T=O.length-1)>0?(A=U+T,R=C-O[T].length):(A=U,R=B),V=["comment",E,U,q-B,A,C-R],B=R,U=A,q=C):(k.lastIndex=q+1,k.test(D),C=0===k.lastIndex?D.length-1:k.lastIndex-2,V=["word",D.slice(q,C+1),U,q-B,U,C-B],G.push(V),q=C)}return q++,V}},endOfFile:function(){return 0===W.length&&q>=F},position:function(){return q}}};var r="'".charCodeAt(0),i='"'.charCodeAt(0),a="\\".charCodeAt(0),o="/".charCodeAt(0),c="\n".charCodeAt(0),s=" ".charCodeAt(0),u="\f".charCodeAt(0),l="\t".charCodeAt(0),f="\r".charCodeAt(0),h="[".charCodeAt(0),d="]".charCodeAt(0),p="(".charCodeAt(0),m=")".charCodeAt(0),v="{".charCodeAt(0),g="}".charCodeAt(0),y=";".charCodeAt(0),b="*".charCodeAt(0),w=":".charCodeAt(0),x="@".charCodeAt(0),S=/[ \n\t\r\f{}()'"\\;/[\]#]/g,k=/[ \n\t\r\f(){}:;@!'"\\\][#]|\/(?=\*)/g,_=/.[\\/("'\n]/,z=/[a-f0-9]/i;t.exports=n.default},{}],190:[function(e,t,n){n.__esModule=!0,n.default=void 0;var r={prefix:function(e){var t=e.match(/^(-\w+-)/);return t?t[0]:""},unprefixed:function(e){return e.replace(/^-\w+-/,"")}};n.default=r,t.exports=n.default},{}],191:[function(e,t,n){n.__esModule=!0,n.default=function(e){r[e]||(r[e]=!0,"undefined"!=typeof console&&console.warn&&console.warn(e))};var r={};t.exports=n.default},{}],192:[function(e,t,n){n.__esModule=!0,n.default=void 0;var r=function(){function e(e,t){if(void 0===t&&(t={}),this.type="warning",this.text=e,t.node&&t.node.source){var n=t.node.positionBy(t);this.line=n.line,this.column=n.column}for(var r in t)this[r]=t[r]}return e.prototype.toString=function(){return this.node?this.node.error(this.text,{plugin:this.plugin,index:this.index,word:this.word}).message:this.plugin?this.plugin+": "+this.text:this.text},e}();n.default=r,t.exports=n.default},{}],193:[function(e,t,n){var r,i,a=t.exports={};function o(){throw new Error("setTimeout has not been defined")}function c(){throw new Error("clearTimeout has not been defined")}function s(e){if(r===setTimeout)return setTimeout(e,0);if((r===o||!r)&&setTimeout)return r=setTimeout,setTimeout(e,0);try{return r(e,0)}catch(t){try{return r.call(null,e,0)}catch(t){return r.call(this,e,0)}}}!function(){try{r="function"==typeof setTimeout?setTimeout:o}catch(e){r=o}try{i="function"==typeof clearTimeout?clearTimeout:c}catch(e){i=c}}();var u,l=[],f=!1,h=-1;function d(){f&&u&&(f=!1,u.length?l=u.concat(l):h=-1,l.length&&p())}function p(){if(!f){var e=s(d);f=!0;for(var t=l.length;t;){for(u=l,l=[];++h<t;)u&&u[h].run();h=-1,t=l.length}u=null,f=!1,function(e){if(i===clearTimeout)return clearTimeout(e);if((i===c||!i)&&clearTimeout)return i=clearTimeout,clearTimeout(e);try{i(e)}catch(t){try{return i.call(null,e)}catch(t){return i.call(this,e)}}}(e)}}function m(e,t){this.fun=e,this.array=t}function v(){}a.nextTick=function(e){var t=new Array(arguments.length-1);if(arguments.length>1)for(var n=1;n<arguments.length;n++)t[n-1]=arguments[n];l.push(new m(e,t)),1!==l.length||f||s(p)},m.prototype.run=function(){this.fun.apply(null,this.array)},a.title="browser",a.browser=!0,a.env={},a.argv=[],a.version="",a.versions={},a.on=v,a.addListener=v,a.once=v,a.off=v,a.removeListener=v,a.removeAllListeners=v,a.emit=v,a.prependListener=v,a.prependOnceListener=v,a.listeners=function(e){return[]},a.binding=function(e){throw new Error("process.binding is not supported")},a.cwd=function(){return"/"},a.chdir=function(e){throw new Error("process.chdir is not supported")},a.umask=function(){return 0}},{}],194:[function(e,t,r){(function(e){!function(n){var i="object"==u(r)&&r&&!r.nodeType&&r,a="object"==u(t)&&t&&!t.nodeType&&t,o="object"==u(e)&&e;o.global!==o&&o.window!==o&&o.self!==o||(n=o);var c,s,l=2147483647,f=/^xn--/,h=/[^\x20-\x7E]/,d=/[\x2E\u3002\uFF0E\uFF61]/g,p={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},m=Math.floor,v=String.fromCharCode;function g(e){throw new RangeError(p[e])}function y(e,t){for(var n=e.length,r=[];n--;)r[n]=t(e[n]);return r}function b(e,t){var n=e.split("@"),r="";return n.length>1&&(r=n[0]+"@",e=n[1]),r+y((e=e.replace(d,".")).split("."),t).join(".")}function w(e){for(var t,n,r=[],i=0,a=e.length;i<a;)(t=e.charCodeAt(i++))>=55296&&t<=56319&&i<a?56320==(64512&(n=e.charCodeAt(i++)))?r.push(((1023&t)<<10)+(1023&n)+65536):(r.push(t),i--):r.push(t);return r}function x(e){return y(e,(function(e){var t="";return e>65535&&(t+=v((e-=65536)>>>10&1023|55296),e=56320|1023&e),t+=v(e)})).join("")}function S(e,t){return e+22+75*(e<26)-((0!=t)<<5)}function k(e,t,n){var r=0;for(e=n?m(e/700):e>>1,e+=m(e/t);e>455;r+=36)e=m(e/35);return m(r+36*e/(e+38))}function _(e){var t,n,r,i,a,o,c,s,u,f,h,d=[],p=e.length,v=0,y=128,b=72;for((n=e.lastIndexOf("-"))<0&&(n=0),r=0;r<n;++r)e.charCodeAt(r)>=128&&g("not-basic"),d.push(e.charCodeAt(r));for(i=n>0?n+1:0;i<p;){for(a=v,o=1,c=36;i>=p&&g("invalid-input"),((s=(h=e.charCodeAt(i++))-48<10?h-22:h-65<26?h-65:h-97<26?h-97:36)>=36||s>m((l-v)/o))&&g("overflow"),v+=s*o,!(s<(u=c<=b?1:c>=b+26?26:c-b));c+=36)o>m(l/(f=36-u))&&g("overflow"),o*=f;b=k(v-a,t=d.length+1,0==a),m(v/t)>l-y&&g("overflow"),y+=m(v/t),v%=t,d.splice(v++,0,y)}return x(d)}function z(e){var t,n,r,i,a,o,c,s,u,f,h,d,p,y,b,x=[];for(d=(e=w(e)).length,t=128,n=0,a=72,o=0;o<d;++o)(h=e[o])<128&&x.push(v(h));for(r=i=x.length,i&&x.push("-");r<d;){for(c=l,o=0;o<d;++o)(h=e[o])>=t&&h<c&&(c=h);for(c-t>m((l-n)/(p=r+1))&&g("overflow"),n+=(c-t)*p,t=c,o=0;o<d;++o)if((h=e[o])<t&&++n>l&&g("overflow"),h==t){for(s=n,u=36;!(s<(f=u<=a?1:u>=a+26?26:u-a));u+=36)b=s-f,y=36-f,x.push(v(S(f+b%y,0))),s=m(b/y);x.push(v(S(s,0))),a=k(n,p,r==i),n=0,++r}++n,++t}return x.join("")}if(c={version:"1.4.1",ucs2:{decode:w,encode:x},decode:_,encode:z,toASCII:function(e){return b(e,(function(e){return h.test(e)?"xn--"+z(e):e}))},toUnicode:function(e){return b(e,(function(e){return f.test(e)?_(e.slice(4).toLowerCase()):e}))}},i&&a)if(t.exports==i)a.exports=c;else for(s in c)c.hasOwnProperty(s)&&(i[s]=c[s]);else n.punycode=c}(this)}).call(this,void 0!==n?n:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],195:[function(e,t,n){function r(e,t){return Object.prototype.hasOwnProperty.call(e,t)}t.exports=function(e,t,n,a){t=t||"&",n=n||"=";var o={};if("string"!=typeof e||0===e.length)return o;var c=/\+/g;e=e.split(t);var s=1e3;a&&"number"==typeof a.maxKeys&&(s=a.maxKeys);var u=e.length;s>0&&u>s&&(u=s);for(var l=0;l<u;++l){var f,h,d,p,m=e[l].replace(c,"%20"),v=m.indexOf(n);v>=0?(f=m.substr(0,v),h=m.substr(v+1)):(f=m,h=""),d=decodeURIComponent(f),p=decodeURIComponent(h),r(o,d)?i(o[d])?o[d].push(p):o[d]=[o[d],p]:o[d]=p}return o};var i=Array.isArray||function(e){return"[object Array]"===Object.prototype.toString.call(e)}},{}],196:[function(e,t,n){var r=function(e){switch(u(e)){case"string":return e;case"boolean":return e?"true":"false";case"number":return isFinite(e)?e:"";default:return""}};t.exports=function(e,t,n,c){return t=t||"&",n=n||"=",null===e&&(e=void 0),"object"===u(e)?a(o(e),(function(o){var c=encodeURIComponent(r(o))+n;return i(e[o])?a(e[o],(function(e){return c+encodeURIComponent(r(e))})).join(t):c+encodeURIComponent(r(e[o]))})).join(t):c?encodeURIComponent(r(c))+n+encodeURIComponent(r(e)):""};var i=Array.isArray||function(e){return"[object Array]"===Object.prototype.toString.call(e)};function a(e,t){if(e.map)return e.map(t);for(var n=[],r=0;r<e.length;r++)n.push(t(e[r],r));return n}var o=Object.keys||function(e){var t=[];for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.push(n);return t}},{}],197:[function(e,t,n){n.decode=n.parse=e("./decode"),n.encode=n.stringify=e("./encode")},{"./decode":195,"./encode":196}],198:[function(e,t,n){var r=e("./util"),i=Object.prototype.hasOwnProperty,a="undefined"!=typeof Map;function o(){this._array=[],this._set=a?new Map:Object.create(null)}o.fromArray=function(e,t){for(var n=new o,r=0,i=e.length;r<i;r++)n.add(e[r],t);return n},o.prototype.size=function(){return a?this._set.size:Object.getOwnPropertyNames(this._set).length},o.prototype.add=function(e,t){var n=a?e:r.toSetString(e),o=a?this.has(e):i.call(this._set,n),c=this._array.length;o&&!t||this._array.push(e),o||(a?this._set.set(e,c):this._set[n]=c)},o.prototype.has=function(e){if(a)return this._set.has(e);var t=r.toSetString(e);return i.call(this._set,t)},o.prototype.indexOf=function(e){if(a){var t=this._set.get(e);if(t>=0)return t}else{var n=r.toSetString(e);if(i.call(this._set,n))return this._set[n]}throw new Error('"'+e+'" is not in the set.')},o.prototype.at=function(e){if(e>=0&&e<this._array.length)return this._array[e];throw new Error("No element indexed by "+e)},o.prototype.toArray=function(){return this._array.slice()},n.ArraySet=o},{"./util":207}],199:[function(e,t,n){var r=e("./base64");n.encode=function(e){var t,n="",i=function(e){return e<0?1+(-e<<1):0+(e<<1)}(e);do{t=31&i,(i>>>=5)>0&&(t|=32),n+=r.encode(t)}while(i>0);return n},n.decode=function(e,t,n){var i,a,o,c,s=e.length,u=0,l=0;do{if(t>=s)throw new Error("Expected more digits in base 64 VLQ value.");if(-1===(a=r.decode(e.charCodeAt(t++))))throw new Error("Invalid base64 digit: "+e.charAt(t-1));i=!!(32&a),u+=(a&=31)<<l,l+=5}while(i);n.value=(c=(o=u)>>1,1==(1&o)?-c:c),n.rest=t}},{"./base64":200}],200:[function(e,t,n){var r="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split("");n.encode=function(e){if(0<=e&&e<r.length)return r[e];throw new TypeError("Must be between 0 and 63: "+e)},n.decode=function(e){return 65<=e&&e<=90?e-65:97<=e&&e<=122?e-97+26:48<=e&&e<=57?e-48+52:43==e?62:47==e?63:-1}},{}],201:[function(e,t,n){n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,t,r,i){if(0===t.length)return-1;var a=function e(t,r,i,a,o,c){var s=Math.floor((r-t)/2)+t,u=o(i,a[s],!0);return 0===u?s:u>0?r-s>1?e(s,r,i,a,o,c):c==n.LEAST_UPPER_BOUND?r<a.length?r:-1:s:s-t>1?e(t,s,i,a,o,c):c==n.LEAST_UPPER_BOUND?s:t<0?-1:t}(-1,t.length,e,t,r,i||n.GREATEST_LOWER_BOUND);if(a<0)return-1;for(;a-1>=0&&0===r(t[a],t[a-1],!0);)--a;return a}},{}],202:[function(e,t,n){var r=e("./util");function i(){this._array=[],this._sorted=!0,this._last={generatedLine:-1,generatedColumn:0}}i.prototype.unsortedForEach=function(e,t){this._array.forEach(e,t)},i.prototype.add=function(e){var t,n,i,a,o,c;t=this._last,n=e,i=t.generatedLine,a=n.generatedLine,o=t.generatedColumn,c=n.generatedColumn,a>i||a==i&&c>=o||r.compareByGeneratedPositionsInflated(t,n)<=0?(this._last=e,this._array.push(e)):(this._sorted=!1,this._array.push(e))},i.prototype.toArray=function(){return this._sorted||(this._array.sort(r.compareByGeneratedPositionsInflated),this._sorted=!0),this._array},n.MappingList=i},{"./util":207}],203:[function(e,t,n){function r(e,t,n){var r=e[t];e[t]=e[n],e[n]=r}function i(e,t,n,a){if(n<a){var o=n-1;r(e,(l=n,f=a,Math.round(l+Math.random()*(f-l))),a);for(var c=e[a],s=n;s<a;s++)t(e[s],c)<=0&&r(e,o+=1,s);r(e,o+1,s);var u=o+1;i(e,t,n,u-1),i(e,t,u+1,a)}var l,f}n.quickSort=function(e,t){i(e,t,0,e.length-1)}},{}],204:[function(e,t,n){var r=e("./util"),i=e("./binary-search"),a=e("./array-set").ArraySet,o=e("./base64-vlq"),c=e("./quick-sort").quickSort;function s(e,t){var n=e;return"string"==typeof e&&(n=r.parseSourceMapInput(e)),null!=n.sections?new f(n,t):new u(n,t)}function u(e,t){var n=e;"string"==typeof e&&(n=r.parseSourceMapInput(e));var i=r.getArg(n,"version"),o=r.getArg(n,"sources"),c=r.getArg(n,"names",[]),s=r.getArg(n,"sourceRoot",null),u=r.getArg(n,"sourcesContent",null),l=r.getArg(n,"mappings"),f=r.getArg(n,"file",null);if(i!=this._version)throw new Error("Unsupported version: "+i);s&&(s=r.normalize(s)),o=o.map(String).map(r.normalize).map((function(e){return s&&r.isAbsolute(s)&&r.isAbsolute(e)?r.relative(s,e):e})),this._names=a.fromArray(c.map(String),!0),this._sources=a.fromArray(o,!0),this._absoluteSources=this._sources.toArray().map((function(e){return r.computeSourceURL(s,e,t)})),this.sourceRoot=s,this.sourcesContent=u,this._mappings=l,this._sourceMapURL=t,this.file=f}function l(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function f(e,t){var n=e;"string"==typeof e&&(n=r.parseSourceMapInput(e));var i=r.getArg(n,"version"),o=r.getArg(n,"sections");if(i!=this._version)throw new Error("Unsupported version: "+i);this._sources=new a,this._names=new a;var c={line:-1,column:0};this._sections=o.map((function(e){if(e.url)throw new Error("Support for url field in sections not implemented.");var n=r.getArg(e,"offset"),i=r.getArg(n,"line"),a=r.getArg(n,"column");if(i<c.line||i===c.line&&a<c.column)throw new Error("Section offsets must be ordered and non-overlapping.");return c=n,{generatedOffset:{generatedLine:i+1,generatedColumn:a+1},consumer:new s(r.getArg(e,"map"),t)}}))}s.fromSourceMap=function(e,t){return u.fromSourceMap(e,t)},s.prototype._version=3,s.prototype.__generatedMappings=null,Object.defineProperty(s.prototype,"_generatedMappings",{configurable:!0,enumerable:!0,get:function(){return this.__generatedMappings||this._parseMappings(this._mappings,this.sourceRoot),this.__generatedMappings}}),s.prototype.__originalMappings=null,Object.defineProperty(s.prototype,"_originalMappings",{configurable:!0,enumerable:!0,get:function(){return this.__originalMappings||this._parseMappings(this._mappings,this.sourceRoot),this.__originalMappings}}),s.prototype._charIsMappingSeparator=function(e,t){var n=e.charAt(t);return";"===n||","===n},s.prototype._parseMappings=function(e,t){throw new Error("Subclasses must implement _parseMappings")},s.GENERATED_ORDER=1,s.ORIGINAL_ORDER=2,s.GREATEST_LOWER_BOUND=1,s.LEAST_UPPER_BOUND=2,s.prototype.eachMapping=function(e,t,n){var i,a=t||null;switch(n||s.GENERATED_ORDER){case s.GENERATED_ORDER:i=this._generatedMappings;break;case s.ORIGINAL_ORDER:i=this._originalMappings;break;default:throw new Error("Unknown order of iteration.")}var o=this.sourceRoot;i.map((function(e){var t=null===e.source?null:this._sources.at(e.source);return{source:t=r.computeSourceURL(o,t,this._sourceMapURL),generatedLine:e.generatedLine,generatedColumn:e.generatedColumn,originalLine:e.originalLine,originalColumn:e.originalColumn,name:null===e.name?null:this._names.at(e.name)}}),this).forEach(e,a)},s.prototype.allGeneratedPositionsFor=function(e){var t=r.getArg(e,"line"),n={source:r.getArg(e,"source"),originalLine:t,originalColumn:r.getArg(e,"column",0)};if(n.source=this._findSourceIndex(n.source),n.source<0)return[];var a=[],o=this._findMapping(n,this._originalMappings,"originalLine","originalColumn",r.compareByOriginalPositions,i.LEAST_UPPER_BOUND);if(o>=0){var c=this._originalMappings[o];if(void 0===e.column)for(var s=c.originalLine;c&&c.originalLine===s;)a.push({line:r.getArg(c,"generatedLine",null),column:r.getArg(c,"generatedColumn",null),lastColumn:r.getArg(c,"lastGeneratedColumn",null)}),c=this._originalMappings[++o];else for(var u=c.originalColumn;c&&c.originalLine===t&&c.originalColumn==u;)a.push({line:r.getArg(c,"generatedLine",null),column:r.getArg(c,"generatedColumn",null),lastColumn:r.getArg(c,"lastGeneratedColumn",null)}),c=this._originalMappings[++o]}return a},n.SourceMapConsumer=s,u.prototype=Object.create(s.prototype),u.prototype.consumer=s,u.prototype._findSourceIndex=function(e){var t,n=e;if(null!=this.sourceRoot&&(n=r.relative(this.sourceRoot,n)),this._sources.has(n))return this._sources.indexOf(n);for(t=0;t<this._absoluteSources.length;++t)if(this._absoluteSources[t]==e)return t;return-1},u.fromSourceMap=function(e,t){var n=Object.create(u.prototype),i=n._names=a.fromArray(e._names.toArray(),!0),o=n._sources=a.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file,n._sourceMapURL=t,n._absoluteSources=n._sources.toArray().map((function(e){return r.computeSourceURL(n.sourceRoot,e,t)}));for(var s=e._mappings.toArray().slice(),f=n.__generatedMappings=[],h=n.__originalMappings=[],d=0,p=s.length;d<p;d++){var m=s[d],v=new l;v.generatedLine=m.generatedLine,v.generatedColumn=m.generatedColumn,m.source&&(v.source=o.indexOf(m.source),v.originalLine=m.originalLine,v.originalColumn=m.originalColumn,m.name&&(v.name=i.indexOf(m.name)),h.push(v)),f.push(v)}return c(n.__originalMappings,r.compareByOriginalPositions),n},u.prototype._version=3,Object.defineProperty(u.prototype,"sources",{get:function(){return this._absoluteSources.slice()}}),u.prototype._parseMappings=function(e,t){for(var n,i,a,s,u,f=1,h=0,d=0,p=0,m=0,v=0,g=e.length,y=0,b={},w={},x=[],S=[];y<g;)if(";"===e.charAt(y))f++,y++,h=0;else if(","===e.charAt(y))y++;else{for((n=new l).generatedLine=f,s=y;s<g&&!this._charIsMappingSeparator(e,s);s++);if(a=b[i=e.slice(y,s)])y+=i.length;else{for(a=[];y<s;)o.decode(e,y,w),u=w.value,y=w.rest,a.push(u);if(2===a.length)throw new Error("Found a source, but no line and column");if(3===a.length)throw new Error("Found a source and line, but no column");b[i]=a}n.generatedColumn=h+a[0],h=n.generatedColumn,a.length>1&&(n.source=m+a[1],m+=a[1],n.originalLine=d+a[2],d=n.originalLine,n.originalLine+=1,n.originalColumn=p+a[3],p=n.originalColumn,a.length>4&&(n.name=v+a[4],v+=a[4])),S.push(n),"number"==typeof n.originalLine&&x.push(n)}c(S,r.compareByGeneratedPositionsDeflated),this.__generatedMappings=S,c(x,r.compareByOriginalPositions),this.__originalMappings=x},u.prototype._findMapping=function(e,t,n,r,a,o){if(e[n]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[n]);if(e[r]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[r]);return i.search(e,t,a,o)},u.prototype.computeColumnSpans=function(){for(var e=0;e<this._generatedMappings.length;++e){var t=this._generatedMappings[e];if(e+1<this._generatedMappings.length){var n=this._generatedMappings[e+1];if(t.generatedLine===n.generatedLine){t.lastGeneratedColumn=n.generatedColumn-1;continue}}t.lastGeneratedColumn=1/0}},u.prototype.originalPositionFor=function(e){var t={generatedLine:r.getArg(e,"line"),generatedColumn:r.getArg(e,"column")},n=this._findMapping(t,this._generatedMappings,"generatedLine","generatedColumn",r.compareByGeneratedPositionsDeflated,r.getArg(e,"bias",s.GREATEST_LOWER_BOUND));if(n>=0){var i=this._generatedMappings[n];if(i.generatedLine===t.generatedLine){var a=r.getArg(i,"source",null);null!==a&&(a=this._sources.at(a),a=r.computeSourceURL(this.sourceRoot,a,this._sourceMapURL));var o=r.getArg(i,"name",null);return null!==o&&(o=this._names.at(o)),{source:a,line:r.getArg(i,"originalLine",null),column:r.getArg(i,"originalColumn",null),name:o}}}return{source:null,line:null,column:null,name:null}},u.prototype.hasContentsOfAllSources=function(){return!!this.sourcesContent&&this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some((function(e){return null==e}))},u.prototype.sourceContentFor=function(e,t){if(!this.sourcesContent)return null;var n=this._findSourceIndex(e);if(n>=0)return this.sourcesContent[n];var i,a=e;if(null!=this.sourceRoot&&(a=r.relative(this.sourceRoot,a)),null!=this.sourceRoot&&(i=r.urlParse(this.sourceRoot))){var o=a.replace(/^file:\/\//,"");if("file"==i.scheme&&this._sources.has(o))return this.sourcesContent[this._sources.indexOf(o)];if((!i.path||"/"==i.path)&&this._sources.has("/"+a))return this.sourcesContent[this._sources.indexOf("/"+a)]}if(t)return null;throw new Error('"'+a+'" is not in the SourceMap.')},u.prototype.generatedPositionFor=function(e){var t=r.getArg(e,"source");if((t=this._findSourceIndex(t))<0)return{line:null,column:null,lastColumn:null};var n={source:t,originalLine:r.getArg(e,"line"),originalColumn:r.getArg(e,"column")},i=this._findMapping(n,this._originalMappings,"originalLine","originalColumn",r.compareByOriginalPositions,r.getArg(e,"bias",s.GREATEST_LOWER_BOUND));if(i>=0){var a=this._originalMappings[i];if(a.source===n.source)return{line:r.getArg(a,"generatedLine",null),column:r.getArg(a,"generatedColumn",null),lastColumn:r.getArg(a,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=u,f.prototype=Object.create(s.prototype),f.prototype.constructor=s,f.prototype._version=3,Object.defineProperty(f.prototype,"sources",{get:function(){for(var e=[],t=0;t<this._sections.length;t++)for(var n=0;n<this._sections[t].consumer.sources.length;n++)e.push(this._sections[t].consumer.sources[n]);return e}}),f.prototype.originalPositionFor=function(e){var t={generatedLine:r.getArg(e,"line"),generatedColumn:r.getArg(e,"column")},n=i.search(t,this._sections,(function(e,t){var n=e.generatedLine-t.generatedOffset.generatedLine;return n||e.generatedColumn-t.generatedOffset.generatedColumn})),a=this._sections[n];return a?a.consumer.originalPositionFor({line:t.generatedLine-(a.generatedOffset.generatedLine-1),column:t.generatedColumn-(a.generatedOffset.generatedLine===t.generatedLine?a.generatedOffset.generatedColumn-1:0),bias:e.bias}):{source:null,line:null,column:null,name:null}},f.prototype.hasContentsOfAllSources=function(){return this._sections.every((function(e){return e.consumer.hasContentsOfAllSources()}))},f.prototype.sourceContentFor=function(e,t){for(var n=0;n<this._sections.length;n++){var r=this._sections[n].consumer.sourceContentFor(e,!0);if(r)return r}if(t)return null;throw new Error('"'+e+'" is not in the SourceMap.')},f.prototype.generatedPositionFor=function(e){for(var t=0;t<this._sections.length;t++){var n=this._sections[t];if(-1!==n.consumer._findSourceIndex(r.getArg(e,"source"))){var i=n.consumer.generatedPositionFor(e);if(i)return{line:i.line+(n.generatedOffset.generatedLine-1),column:i.column+(n.generatedOffset.generatedLine===i.line?n.generatedOffset.generatedColumn-1:0)}}}return{line:null,column:null}},f.prototype._parseMappings=function(e,t){this.__generatedMappings=[],this.__originalMappings=[];for(var n=0;n<this._sections.length;n++)for(var i=this._sections[n],a=i.consumer._generatedMappings,o=0;o<a.length;o++){var s=a[o],u=i.consumer._sources.at(s.source);u=r.computeSourceURL(i.consumer.sourceRoot,u,this._sourceMapURL),this._sources.add(u),u=this._sources.indexOf(u);var l=null;s.name&&(l=i.consumer._names.at(s.name),this._names.add(l),l=this._names.indexOf(l));var f={source:u,generatedLine:s.generatedLine+(i.generatedOffset.generatedLine-1),generatedColumn:s.generatedColumn+(i.generatedOffset.generatedLine===s.generatedLine?i.generatedOffset.generatedColumn-1:0),originalLine:s.originalLine,originalColumn:s.originalColumn,name:l};this.__generatedMappings.push(f),"number"==typeof f.originalLine&&this.__originalMappings.push(f)}c(this.__generatedMappings,r.compareByGeneratedPositionsDeflated),c(this.__originalMappings,r.compareByOriginalPositions)},n.IndexedSourceMapConsumer=f},{"./array-set":198,"./base64-vlq":199,"./binary-search":201,"./quick-sort":203,"./util":207}],205:[function(e,t,n){var r=e("./base64-vlq"),i=e("./util"),a=e("./array-set").ArraySet,o=e("./mapping-list").MappingList;function c(e){e||(e={}),this._file=i.getArg(e,"file",null),this._sourceRoot=i.getArg(e,"sourceRoot",null),this._skipValidation=i.getArg(e,"skipValidation",!1),this._sources=new a,this._names=new a,this._mappings=new o,this._sourcesContents=null}c.prototype._version=3,c.fromSourceMap=function(e){var t=e.sourceRoot,n=new c({file:e.file,sourceRoot:t});return e.eachMapping((function(e){var r={generated:{line:e.generatedLine,column:e.generatedColumn}};null!=e.source&&(r.source=e.source,null!=t&&(r.source=i.relative(t,r.source)),r.original={line:e.originalLine,column:e.originalColumn},null!=e.name&&(r.name=e.name)),n.addMapping(r)})),e.sources.forEach((function(r){var a=r;null!==t&&(a=i.relative(t,r)),n._sources.has(a)||n._sources.add(a);var o=e.sourceContentFor(r);null!=o&&n.setSourceContent(r,o)})),n},c.prototype.addMapping=function(e){var t=i.getArg(e,"generated"),n=i.getArg(e,"original",null),r=i.getArg(e,"source",null),a=i.getArg(e,"name",null);this._skipValidation||this._validateMapping(t,n,r,a),null!=r&&(r=String(r),this._sources.has(r)||this._sources.add(r)),null!=a&&(a=String(a),this._names.has(a)||this._names.add(a)),this._mappings.add({generatedLine:t.line,generatedColumn:t.column,originalLine:null!=n&&n.line,originalColumn:null!=n&&n.column,source:r,name:a})},c.prototype.setSourceContent=function(e,t){var n=e;null!=this._sourceRoot&&(n=i.relative(this._sourceRoot,n)),null!=t?(this._sourcesContents||(this._sourcesContents=Object.create(null)),this._sourcesContents[i.toSetString(n)]=t):this._sourcesContents&&(delete this._sourcesContents[i.toSetString(n)],0===Object.keys(this._sourcesContents).length&&(this._sourcesContents=null))},c.prototype.applySourceMap=function(e,t,n){var r=t;if(null==t){if(null==e.file)throw new Error('SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, or the source map\'s "file" property. Both were omitted.');r=e.file}var o=this._sourceRoot;null!=o&&(r=i.relative(o,r));var c=new a,s=new a;this._mappings.unsortedForEach((function(t){if(t.source===r&&null!=t.originalLine){var a=e.originalPositionFor({line:t.originalLine,column:t.originalColumn});null!=a.source&&(t.source=a.source,null!=n&&(t.source=i.join(n,t.source)),null!=o&&(t.source=i.relative(o,t.source)),t.originalLine=a.line,t.originalColumn=a.column,null!=a.name&&(t.name=a.name))}var u=t.source;null==u||c.has(u)||c.add(u);var l=t.name;null==l||s.has(l)||s.add(l)}),this),this._sources=c,this._names=s,e.sources.forEach((function(t){var r=e.sourceContentFor(t);null!=r&&(null!=n&&(t=i.join(n,t)),null!=o&&(t=i.relative(o,t)),this.setSourceContent(t,r))}),this)},c.prototype._validateMapping=function(e,t,n,r){if(t&&"number"!=typeof t.line&&"number"!=typeof t.column)throw new Error("original.line and original.column are not numbers -- you probably meant to omit the original mapping entirely and only map the generated position. If so, pass null for the original mapping instead of an object with empty or null values.");if((!(e&&"line"in e&&"column"in e&&e.line>0&&e.column>=0)||t||n||r)&&!(e&&"line"in e&&"column"in e&&t&&"line"in t&&"column"in t&&e.line>0&&e.column>=0&&t.line>0&&t.column>=0&&n))throw new Error("Invalid mapping: "+JSON.stringify({generated:e,source:n,original:t,name:r}))},c.prototype._serializeMappings=function(){for(var e,t,n,a,o=0,c=1,s=0,u=0,l=0,f=0,h="",d=this._mappings.toArray(),p=0,m=d.length;p<m;p++){if(e="",(t=d[p]).generatedLine!==c)for(o=0;t.generatedLine!==c;)e+=";",c++;else if(p>0){if(!i.compareByGeneratedPositionsInflated(t,d[p-1]))continue;e+=","}e+=r.encode(t.generatedColumn-o),o=t.generatedColumn,null!=t.source&&(a=this._sources.indexOf(t.source),e+=r.encode(a-f),f=a,e+=r.encode(t.originalLine-1-u),u=t.originalLine-1,e+=r.encode(t.originalColumn-s),s=t.originalColumn,null!=t.name&&(n=this._names.indexOf(t.name),e+=r.encode(n-l),l=n)),h+=e}return h},c.prototype._generateSourcesContent=function(e,t){return e.map((function(e){if(!this._sourcesContents)return null;null!=t&&(e=i.relative(t,e));var n=i.toSetString(e);return Object.prototype.hasOwnProperty.call(this._sourcesContents,n)?this._sourcesContents[n]:null}),this)},c.prototype.toJSON=function(){var e={version:this._version,sources:this._sources.toArray(),names:this._names.toArray(),mappings:this._serializeMappings()};return null!=this._file&&(e.file=this._file),null!=this._sourceRoot&&(e.sourceRoot=this._sourceRoot),this._sourcesContents&&(e.sourcesContent=this._generateSourcesContent(e.sources,e.sourceRoot)),e},c.prototype.toString=function(){return JSON.stringify(this.toJSON())},n.SourceMapGenerator=c},{"./array-set":198,"./base64-vlq":199,"./mapping-list":202,"./util":207}],206:[function(e,t,n){var r=e("./source-map-generator").SourceMapGenerator,i=e("./util"),a=/(\r?\n)/,o="$$$isSourceNode$$$";function c(e,t,n,r,i){this.children=[],this.sourceContents={},this.line=null==e?null:e,this.column=null==t?null:t,this.source=null==n?null:n,this.name=null==i?null:i,this[o]=!0,null!=r&&this.add(r)}c.fromStringWithSourceMap=function(e,t,n){var r=new c,o=e.split(a),s=0,u=function(){return e()+(e()||"");function e(){return s<o.length?o[s++]:void 0}},l=1,f=0,h=null;return t.eachMapping((function(e){if(null!==h){if(!(l<e.generatedLine)){var t=(n=o[s]||"").substr(0,e.generatedColumn-f);return o[s]=n.substr(e.generatedColumn-f),f=e.generatedColumn,d(h,t),void(h=e)}d(h,u()),l++,f=0}for(;l<e.generatedLine;)r.add(u()),l++;if(f<e.generatedColumn){var n=o[s]||"";r.add(n.substr(0,e.generatedColumn)),o[s]=n.substr(e.generatedColumn),f=e.generatedColumn}h=e}),this),s<o.length&&(h&&d(h,u()),r.add(o.splice(s).join(""))),t.sources.forEach((function(e){var a=t.sourceContentFor(e);null!=a&&(null!=n&&(e=i.join(n,e)),r.setSourceContent(e,a))})),r;function d(e,t){if(null===e||void 0===e.source)r.add(t);else{var a=n?i.join(n,e.source):e.source;r.add(new c(e.originalLine,e.originalColumn,a,t,e.name))}}},c.prototype.add=function(e){if(Array.isArray(e))e.forEach((function(e){this.add(e)}),this);else{if(!e[o]&&"string"!=typeof e)throw new TypeError("Expected a SourceNode, string, or an array of SourceNodes and strings. Got "+e);e&&this.children.push(e)}return this},c.prototype.prepend=function(e){if(Array.isArray(e))for(var t=e.length-1;t>=0;t--)this.prepend(e[t]);else{if(!e[o]&&"string"!=typeof e)throw new TypeError("Expected a SourceNode, string, or an array of SourceNodes and strings. Got "+e);this.children.unshift(e)}return this},c.prototype.walk=function(e){for(var t,n=0,r=this.children.length;n<r;n++)(t=this.children[n])[o]?t.walk(e):""!==t&&e(t,{source:this.source,line:this.line,column:this.column,name:this.name})},c.prototype.join=function(e){var t,n,r=this.children.length;if(r>0){for(t=[],n=0;n<r-1;n++)t.push(this.children[n]),t.push(e);t.push(this.children[n]),this.children=t}return this},c.prototype.replaceRight=function(e,t){var n=this.children[this.children.length-1];return n[o]?n.replaceRight(e,t):"string"==typeof n?this.children[this.children.length-1]=n.replace(e,t):this.children.push("".replace(e,t)),this},c.prototype.setSourceContent=function(e,t){this.sourceContents[i.toSetString(e)]=t},c.prototype.walkSourceContents=function(e){for(var t=0,n=this.children.length;t<n;t++)this.children[t][o]&&this.children[t].walkSourceContents(e);var r=Object.keys(this.sourceContents);for(t=0,n=r.length;t<n;t++)e(i.fromSetString(r[t]),this.sourceContents[r[t]])},c.prototype.toString=function(){var e="";return this.walk((function(t){e+=t})),e},c.prototype.toStringWithSourceMap=function(e){var t={code:"",line:1,column:0},n=new r(e),i=!1,a=null,o=null,c=null,s=null;return this.walk((function(e,r){t.code+=e,null!==r.source&&null!==r.line&&null!==r.column?(a===r.source&&o===r.line&&c===r.column&&s===r.name||n.addMapping({source:r.source,original:{line:r.line,column:r.column},generated:{line:t.line,column:t.column},name:r.name}),a=r.source,o=r.line,c=r.column,s=r.name,i=!0):i&&(n.addMapping({generated:{line:t.line,column:t.column}}),a=null,i=!1);for(var u=0,l=e.length;u<l;u++)10===e.charCodeAt(u)?(t.line++,t.column=0,u+1===l?(a=null,i=!1):i&&n.addMapping({source:r.source,original:{line:r.line,column:r.column},generated:{line:t.line,column:t.column},name:r.name})):t.column++})),this.walkSourceContents((function(e,t){n.setSourceContent(e,t)})),{code:t.code,map:n}},n.SourceNode=c},{"./source-map-generator":205,"./util":207}],207:[function(e,t,n){n.getArg=function(e,t,n){if(t in e)return e[t];if(3===arguments.length)return n;throw new Error('"'+t+'" is a required argument.')};var r=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.-]*)(?::(\d+))?(.*)$/,i=/^data:.+\,.+$/;function a(e){var t=e.match(r);return t?{scheme:t[1],auth:t[2],host:t[3],port:t[4],path:t[5]}:null}function o(e){var t="";return e.scheme&&(t+=e.scheme+":"),t+="//",e.auth&&(t+=e.auth+"@"),e.host&&(t+=e.host),e.port&&(t+=":"+e.port),e.path&&(t+=e.path),t}function c(e){var t=e,r=a(e);if(r){if(!r.path)return e;t=r.path}for(var i,c=n.isAbsolute(t),s=t.split(/\/+/),u=0,l=s.length-1;l>=0;l--)"."===(i=s[l])?s.splice(l,1):".."===i?u++:u>0&&(""===i?(s.splice(l+1,u),u=0):(s.splice(l,2),u--));return""===(t=s.join("/"))&&(t=c?"/":"."),r?(r.path=t,o(r)):t}function s(e,t){""===e&&(e="."),""===t&&(t=".");var n=a(t),r=a(e);if(r&&(e=r.path||"/"),n&&!n.scheme)return r&&(n.scheme=r.scheme),o(n);if(n||t.match(i))return t;if(r&&!r.host&&!r.path)return r.host=t,o(r);var s="/"===t.charAt(0)?t:c(e.replace(/\/+$/,"")+"/"+t);return r?(r.path=s,o(r)):s}n.urlParse=a,n.urlGenerate=o,n.normalize=c,n.join=s,n.isAbsolute=function(e){return"/"===e.charAt(0)||r.test(e)},n.relative=function(e,t){""===e&&(e="."),e=e.replace(/\/$/,"");for(var n=0;0!==t.indexOf(e+"/");){var r=e.lastIndexOf("/");if(r<0)return t;if((e=e.slice(0,r)).match(/^([^\/]+:\/)?\/*$/))return t;++n}return Array(n+1).join("../")+t.substr(e.length+1)};var u=!("__proto__"in Object.create(null));function l(e){return e}function f(e){if(!e)return!1;var t=e.length;if(t<9)return!1;if(95!==e.charCodeAt(t-1)||95!==e.charCodeAt(t-2)||111!==e.charCodeAt(t-3)||116!==e.charCodeAt(t-4)||111!==e.charCodeAt(t-5)||114!==e.charCodeAt(t-6)||112!==e.charCodeAt(t-7)||95!==e.charCodeAt(t-8)||95!==e.charCodeAt(t-9))return!1;for(var n=t-10;n>=0;n--)if(36!==e.charCodeAt(n))return!1;return!0}function h(e,t){return e===t?0:null===e?1:null===t?-1:e>t?1:-1}n.toSetString=u?l:function(e){return f(e)?"$"+e:e},n.fromSetString=u?l:function(e){return f(e)?e.slice(1):e},n.compareByOriginalPositions=function(e,t,n){var r=h(e.source,t.source);return 0!==r||0!=(r=e.originalLine-t.originalLine)||0!=(r=e.originalColumn-t.originalColumn)||n||0!=(r=e.generatedColumn-t.generatedColumn)||0!=(r=e.generatedLine-t.generatedLine)?r:h(e.name,t.name)},n.compareByGeneratedPositionsDeflated=function(e,t,n){var r=e.generatedLine-t.generatedLine;return 0!==r||0!=(r=e.generatedColumn-t.generatedColumn)||n||0!==(r=h(e.source,t.source))||0!=(r=e.originalLine-t.originalLine)||0!=(r=e.originalColumn-t.originalColumn)?r:h(e.name,t.name)},n.compareByGeneratedPositionsInflated=function(e,t){var n=e.generatedLine-t.generatedLine;return 0!==n||0!=(n=e.generatedColumn-t.generatedColumn)||0!==(n=h(e.source,t.source))||0!=(n=e.originalLine-t.originalLine)||0!=(n=e.originalColumn-t.originalColumn)?n:h(e.name,t.name)},n.parseSourceMapInput=function(e){return JSON.parse(e.replace(/^\)]}'[^\n]*\n/,""))},n.computeSourceURL=function(e,t,n){if(t=t||"",e&&("/"!==e[e.length-1]&&"/"!==t[0]&&(e+="/"),t=e+t),n){var r=a(n);if(!r)throw new Error("sourceMapURL could not be parsed");if(r.path){var i=r.path.lastIndexOf("/");i>=0&&(r.path=r.path.substring(0,i+1))}t=s(o(r),t)}return c(t)}},{}],208:[function(e,t,n){n.SourceMapGenerator=e("./lib/source-map-generator").SourceMapGenerator,n.SourceMapConsumer=e("./lib/source-map-consumer").SourceMapConsumer,n.SourceNode=e("./lib/source-node").SourceNode},{"./lib/source-map-consumer":204,"./lib/source-map-generator":205,"./lib/source-node":206}],209:[function(e,t,n){var r=e("punycode"),i=e("./util");function a(){this.protocol=null,this.slashes=null,this.auth=null,this.host=null,this.port=null,this.hostname=null,this.hash=null,this.search=null,this.query=null,this.pathname=null,this.path=null,this.href=null}n.parse=w,n.resolve=function(e,t){return w(e,!1,!0).resolve(t)},n.resolveObject=function(e,t){return e?w(e,!1,!0).resolveObject(t):t},n.format=function(e){return i.isString(e)&&(e=w(e)),e instanceof a?e.format():a.prototype.format.call(e)},n.Url=a;var o=/^([a-z0-9.+-]+:)/i,c=/:[0-9]*$/,s=/^(\/\/?(?!\/)[^\?\s]*)(\?[^\s]*)?$/,l=["{","}","|","\\","^","`"].concat(["<",">",'"',"`"," ","\r","\n","\t"]),f=["'"].concat(l),h=["%","/","?",";","#"].concat(f),d=["/","?","#"],p=/^[+a-z0-9A-Z_-]{0,63}$/,m=/^([+a-z0-9A-Z_-]{0,63})(.*)$/,v={javascript:!0,"javascript:":!0},g={javascript:!0,"javascript:":!0},y={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0},b=e("querystring");function w(e,t,n){if(e&&i.isObject(e)&&e instanceof a)return e;var r=new a;return r.parse(e,t,n),r}a.prototype.parse=function(e,t,n){if(!i.isString(e))throw new TypeError("Parameter 'url' must be a string, not "+u(e));var a=e.indexOf("?"),c=-1!==a&&a<e.indexOf("#")?"?":"#",l=e.split(c);l[0]=l[0].replace(/\\/g,"/");var w=e=l.join(c);if(w=w.trim(),!n&&1===e.split("#").length){var x=s.exec(w);if(x)return this.path=w,this.href=w,this.pathname=x[1],x[2]?(this.search=x[2],this.query=t?b.parse(this.search.substr(1)):this.search.substr(1)):t&&(this.search="",this.query={}),this}var S=o.exec(w);if(S){var k=(S=S[0]).toLowerCase();this.protocol=k,w=w.substr(S.length)}if(n||S||w.match(/^\/\/[^@\/]+@[^@\/]+/)){var _="//"===w.substr(0,2);!_||S&&g[S]||(w=w.substr(2),this.slashes=!0)}if(!g[S]&&(_||S&&!y[S])){for(var z,C,M=-1,O=0;O<d.length;O++)-1!==(T=w.indexOf(d[O]))&&(-1===M||T<M)&&(M=T);for(-1!==(C=-1===M?w.lastIndexOf("@"):w.lastIndexOf("@",M))&&(z=w.slice(0,C),w=w.slice(C+1),this.auth=decodeURIComponent(z)),M=-1,O=0;O<h.length;O++){var T;-1!==(T=w.indexOf(h[O]))&&(-1===M||T<M)&&(M=T)}-1===M&&(M=w.length),this.host=w.slice(0,M),w=w.slice(M),this.parseHost(),this.hostname=this.hostname||"";var E="["===this.hostname[0]&&"]"===this.hostname[this.hostname.length-1];if(!E)for(var L=this.hostname.split(/\./),A=(O=0,L.length);O<A;O++){var R=L[O];if(R&&!R.match(p)){for(var N="",H=0,P=R.length;H<P;H++)R.charCodeAt(H)>127?N+="x":N+=R[H];if(!N.match(p)){var j=L.slice(0,O),V=L.slice(O+1),D=R.match(m);D&&(j.push(D[1]),V.unshift(D[2])),V.length&&(w="/"+V.join(".")+w),this.hostname=j.join(".");break}}}this.hostname.length>255?this.hostname="":this.hostname=this.hostname.toLowerCase(),E||(this.hostname=r.toASCII(this.hostname));var I=this.port?":"+this.port:"",F=this.hostname||"";this.host=F+I,this.href+=this.host,E&&(this.hostname=this.hostname.substr(1,this.hostname.length-2),"/"!==w[0]&&(w="/"+w))}if(!v[k])for(O=0,A=f.length;O<A;O++){var B=f[O];if(-1!==w.indexOf(B)){var U=encodeURIComponent(B);U===B&&(U=escape(B)),w=w.split(B).join(U)}}var q=w.indexOf("#");-1!==q&&(this.hash=w.substr(q),w=w.slice(0,q));var G=w.indexOf("?");if(-1!==G?(this.search=w.substr(G),this.query=w.substr(G+1),t&&(this.query=b.parse(this.query)),w=w.slice(0,G)):t&&(this.search="",this.query={}),w&&(this.pathname=w),y[k]&&this.hostname&&!this.pathname&&(this.pathname="/"),this.pathname||this.search){I=this.pathname||"";var W=this.search||"";this.path=I+W}return this.href=this.format(),this},a.prototype.format=function(){var e=this.auth||"";e&&(e=(e=encodeURIComponent(e)).replace(/%3A/i,":"),e+="@");var t=this.protocol||"",n=this.pathname||"",r=this.hash||"",a=!1,o="";this.host?a=e+this.host:this.hostname&&(a=e+(-1===this.hostname.indexOf(":")?this.hostname:"["+this.hostname+"]"),this.port&&(a+=":"+this.port)),this.query&&i.isObject(this.query)&&Object.keys(this.query).length&&(o=b.stringify(this.query));var c=this.search||o&&"?"+o||"";return t&&":"!==t.substr(-1)&&(t+=":"),this.slashes||(!t||y[t])&&!1!==a?(a="//"+(a||""),n&&"/"!==n.charAt(0)&&(n="/"+n)):a||(a=""),r&&"#"!==r.charAt(0)&&(r="#"+r),c&&"?"!==c.charAt(0)&&(c="?"+c),t+a+(n=n.replace(/[?#]/g,(function(e){return encodeURIComponent(e)})))+(c=c.replace("#","%23"))+r},a.prototype.resolve=function(e){return this.resolveObject(w(e,!1,!0)).format()},a.prototype.resolveObject=function(e){if(i.isString(e)){var t=new a;t.parse(e,!1,!0),e=t}for(var n=new a,r=Object.keys(this),o=0;o<r.length;o++){var c=r[o];n[c]=this[c]}if(n.hash=e.hash,""===e.href)return n.href=n.format(),n;if(e.slashes&&!e.protocol){for(var s=Object.keys(e),u=0;u<s.length;u++){var l=s[u];"protocol"!==l&&(n[l]=e[l])}return y[n.protocol]&&n.hostname&&!n.pathname&&(n.path=n.pathname="/"),n.href=n.format(),n}if(e.protocol&&e.protocol!==n.protocol){if(!y[e.protocol]){for(var f=Object.keys(e),h=0;h<f.length;h++){var d=f[h];n[d]=e[d]}return n.href=n.format(),n}if(n.protocol=e.protocol,e.host||g[e.protocol])n.pathname=e.pathname;else{for(var p=(e.pathname||"").split("/");p.length&&!(e.host=p.shift()););e.host||(e.host=""),e.hostname||(e.hostname=""),""!==p[0]&&p.unshift(""),p.length<2&&p.unshift(""),n.pathname=p.join("/")}if(n.search=e.search,n.query=e.query,n.host=e.host||"",n.auth=e.auth,n.hostname=e.hostname||e.host,n.port=e.port,n.pathname||n.search){var m=n.pathname||"",v=n.search||"";n.path=m+v}return n.slashes=n.slashes||e.slashes,n.href=n.format(),n}var b=n.pathname&&"/"===n.pathname.charAt(0),w=e.host||e.pathname&&"/"===e.pathname.charAt(0),x=w||b||n.host&&e.pathname,S=x,k=n.pathname&&n.pathname.split("/")||[],_=(p=e.pathname&&e.pathname.split("/")||[],n.protocol&&!y[n.protocol]);if(_&&(n.hostname="",n.port=null,n.host&&(""===k[0]?k[0]=n.host:k.unshift(n.host)),n.host="",e.protocol&&(e.hostname=null,e.port=null,e.host&&(""===p[0]?p[0]=e.host:p.unshift(e.host)),e.host=null),x=x&&(""===p[0]||""===k[0])),w)n.host=e.host||""===e.host?e.host:n.host,n.hostname=e.hostname||""===e.hostname?e.hostname:n.hostname,n.search=e.search,n.query=e.query,k=p;else if(p.length)k||(k=[]),k.pop(),k=k.concat(p),n.search=e.search,n.query=e.query;else if(!i.isNullOrUndefined(e.search))return _&&(n.hostname=n.host=k.shift(),(T=!!(n.host&&n.host.indexOf("@")>0)&&n.host.split("@"))&&(n.auth=T.shift(),n.host=n.hostname=T.shift())),n.search=e.search,n.query=e.query,i.isNull(n.pathname)&&i.isNull(n.search)||(n.path=(n.pathname?n.pathname:"")+(n.search?n.search:"")),n.href=n.format(),n;if(!k.length)return n.pathname=null,n.search?n.path="/"+n.search:n.path=null,n.href=n.format(),n;for(var z=k.slice(-1)[0],C=(n.host||e.host||k.length>1)&&("."===z||".."===z)||""===z,M=0,O=k.length;O>=0;O--)"."===(z=k[O])?k.splice(O,1):".."===z?(k.splice(O,1),M++):M&&(k.splice(O,1),M--);if(!x&&!S)for(;M--;M)k.unshift("..");!x||""===k[0]||k[0]&&"/"===k[0].charAt(0)||k.unshift(""),C&&"/"!==k.join("/").substr(-1)&&k.push("");var T,E=""===k[0]||k[0]&&"/"===k[0].charAt(0);return _&&(n.hostname=n.host=E?"":k.length?k.shift():"",(T=!!(n.host&&n.host.indexOf("@")>0)&&n.host.split("@"))&&(n.auth=T.shift(),n.host=n.hostname=T.shift())),(x=x||n.host&&k.length)&&!E&&k.unshift(""),k.length?n.pathname=k.join("/"):(n.pathname=null,n.path=null),i.isNull(n.pathname)&&i.isNull(n.search)||(n.path=(n.pathname?n.pathname:"")+(n.search?n.search:"")),n.auth=e.auth||n.auth,n.slashes=n.slashes||e.slashes,n.href=n.format(),n},a.prototype.parseHost=function(){var e=this.host,t=c.exec(e);t&&(":"!==(t=t[0])&&(this.port=t.substr(1)),e=e.substr(0,e.length-t.length)),e&&(this.hostname=e)}},{"./util":210,punycode:194,querystring:197}],210:[function(e,t,n){t.exports={isString:function(e){return"string"==typeof e},isObject:function(e){return"object"===u(e)&&null!==e},isNull:function(e){return null===e},isNullOrUndefined:function(e){return null==e}}},{}],211:[function(e,t,n){var r=e("htmlparser2"),i=e("lodash/escapeRegExp"),a=e("lodash/cloneDeep"),o=e("lodash/mergeWith"),s=e("lodash/isString"),u=e("lodash/isPlainObject"),l=e("parse-srcset"),f=e("postcss"),h=e("url"),d=["img","audio","video","picture","svg","object","map","iframe","embed"],p=["script","style"];function m(e,t){e&&Object.keys(e).forEach((function(n){t(e[n],n)}))}function v(e,t){return{}.hasOwnProperty.call(e,t)}function g(e,t){var n=[];return m(e,(function(e){t(e)&&n.push(e)})),n}t.exports=b;var y=/^[^\0\t\n\f\r /<=>]+$/;function b(e,t,n){var x="",S="";function k(e,t){var n=this;this.tag=e,this.attribs=t||{},this.tagPosition=x.length,this.text="",this.mediaChildren=[],this.updateParentNodeText=function(){E.length&&(E[E.length-1].text+=n.text)},this.updateParentNodeMediaChildren=function(){E.length&&d.includes(this.tag)&&E[E.length-1].mediaChildren.push(this.tag)}}t?(t=Object.assign({},b.defaults,t)).parser?t.parser=Object.assign({},w,t.parser):t.parser=w:(t=b.defaults).parser=w,p.forEach((function(e){t.allowedTags&&t.allowedTags.includes(e)&&!t.allowVulnerableTags&&console.warn("\n\n⚠️ Your `allowedTags` option includes, `".concat(e,"`, which is inherently\nvulnerable to XSS attacks. Please remove it from `allowedTags`.\nOr, to disable this warning, add the `allowVulnerableTags` option\nand ensure you are accounting for this risk.\n\n"))}));var _,z,C=t.nonTextTags||["script","style","textarea","option"];t.allowedAttributes&&(_={},z={},m(t.allowedAttributes,(function(e,t){_[t]=[];var n=[];e.forEach((function(e){s(e)&&e.indexOf("*")>=0?n.push(i(e).replace(/\\\*/g,".*")):_[t].push(e)})),z[t]=new RegExp("^("+n.join("|")+")$")})));var M={};m(t.allowedClasses,(function(e,t){_&&(v(_,t)||(_[t]=[]),_[t].push("class")),M[t]=e}));var O,T,E,L,A,R,N,H={};m(t.transformTags,(function(e,t){var n;"function"==typeof e?n=e:"string"==typeof e&&(n=b.simpleTransform(e)),"*"===t?O=n:H[t]=n})),j();var P=new r.Parser({onopentag:function(e,n){if(t.enforceHtmlBoundary&&"html"===e&&j(),R)N++;else{var r=new k(e,n);E.push(r);var i,s=!1,d=!!r.text;if(v(H,e)&&(i=H[e](e,n),r.attribs=n=i.attribs,void 0!==i.text&&(r.innerText=i.text),e!==i.tagName&&(r.name=e=i.tagName,A[T]=i.tagName)),O&&(i=O(e,n),r.attribs=n=i.attribs,e!==i.tagName&&(r.name=e=i.tagName,A[T]=i.tagName)),(t.allowedTags&&-1===t.allowedTags.indexOf(e)||"recursiveEscape"===t.disallowedTagsMode&&!function(e){for(var t in e)if(v(e,t))return!1;return!0}(L))&&(s=!0,L[T]=!0,"discard"===t.disallowedTagsMode&&-1!==C.indexOf(e)&&(R=!0,N=1),L[T]=!0),T++,s){if("discard"===t.disallowedTagsMode)return;S=x,x=""}x+="<"+e,(!_||v(_,e)||_["*"])&&m(n,(function(n,i){if(y.test(i)){var s,d=!1;if(!_||v(_,e)&&-1!==_[e].indexOf(i)||_["*"]&&-1!==_["*"].indexOf(i)||v(z,e)&&z[e].test(i)||z["*"]&&z["*"].test(i))d=!0;else if(_&&_[e]){var p,b=c(_[e]);try{for(b.s();!(p=b.n()).done;){var w=p.value;if(u(w)&&w.name&&w.name===i){d=!0;var S="";if(!0===w.multiple){var k,C=c(n.split(" "));try{for(C.s();!(k=C.n()).done;){var O=k.value;-1!==w.values.indexOf(O)&&(""===S?S=O:S+=" "+O)}}catch(e){C.e(e)}finally{C.f()}}else w.values.indexOf(n)>=0&&(S=n);n=S}}}catch(e){b.e(e)}finally{b.f()}}if(d){if(-1!==t.allowedSchemesAppliedToAttributes.indexOf(i)&&D(e,n))return void delete r.attribs[i];if("iframe"===e&&"src"===i){var T=!0;try{if((s=h.parse(n,!1,!0))&&null===s.host&&null===s.protocol)T=v(t,"allowIframeRelativeUrls")?t.allowIframeRelativeUrls:!t.allowedIframeHostnames&&!t.allowedIframeDomains;else if(t.allowedIframeHostnames||t.allowedIframeDomains){var E=(t.allowedIframeHostnames||[]).find((function(e){return e===s.hostname})),L=(t.allowedIframeDomains||[]).find((function(e){return s.hostname===e||s.hostname.endsWith(".".concat(e))}));T=E||L}}catch(e){T=!1}if(!T)return void delete r.attribs[i]}if("srcset"===i)try{if(m(s=l(n),(function(e){D("srcset",e.url)&&(e.evil=!0)})),!(s=g(s,(function(e){return!e.evil}))).length)return void delete r.attribs[i];n=g(s,(function(e){return!e.evil})).map((function(e){if(!e.url)throw new Error("URL missing");return e.url+(e.w?" ".concat(e.w,"w"):"")+(e.h?" ".concat(e.h,"h"):"")+(e.d?" ".concat(e.d,"x"):"")})).join(", "),r.attribs[i]=n}catch(e){return void delete r.attribs[i]}if("class"===i&&!(n=function(e,t){return t?(e=e.split(/\s+/)).filter((function(e){return-1!==t.indexOf(e)})).join(" "):e}(n,M[e])).length)return void delete r.attribs[i];if("style"===i)try{if(0===(n=function(e){return e.nodes[0].nodes.reduce((function(e,t){return e.push(t.prop+":"+t.value),e}),[]).join(";")}(function(e,t){if(!t)return e;var n,r=a(e),i=e.nodes[0];return(n=t[i.selector]&&t["*"]?o(a(t[i.selector]),t["*"],(function(e,t){if(Array.isArray(e))return e.concat(t)})):t[i.selector]||t["*"])&&(r.nodes[0].nodes=i.nodes.reduce(function(e){return function(t,n){return e.hasOwnProperty(n.prop)&&e[n.prop].some((function(e){return e.test(n.value)}))&&t.push(n),t}}(n),[])),r}(f.parse(e+" {"+n+"}"),t.allowedStyles))).length)return void delete r.attribs[i]}catch(e){return void delete r.attribs[i]}x+=" "+i,n&&n.length&&(x+='="'+V(n,!0)+'"')}else delete r.attribs[i]}else delete r.attribs[i]})),-1!==t.selfClosing.indexOf(e)?x+=" />":(x+=">",!r.innerText||d||t.textFilter||(x+=r.innerText)),s&&(x=S+V(x),S="")}},ontext:function(e){if(!R){var n,r=E[E.length-1];if(r&&(n=r.tag,e=void 0!==r.innerText?r.innerText:e),"discard"!==t.disallowedTagsMode||"script"!==n&&"style"!==n){var i=V(e,!1);t.textFilter?x+=t.textFilter(i,n):x+=i}else x+=e;E.length&&(E[E.length-1].text+=e)}},onclosetag:function(e){if(R){if(--N)return;R=!1}var n=E.pop();if(n){R=!!t.enforceHtmlBoundary&&"html"===e,T--;var r=L[T];if(r){if(delete L[T],"discard"===t.disallowedTagsMode)return void n.updateParentNodeText();S=x,x=""}A[T]&&(e=A[T],delete A[T]),t.exclusiveFilter&&t.exclusiveFilter(n)?x=x.substr(0,n.tagPosition):(n.updateParentNodeMediaChildren(),n.updateParentNodeText(),-1===t.selfClosing.indexOf(e)?(x+="</"+e+">",r&&(x=S+V(x),S="")):r&&(x=S,S=""))}}},t.parser);return P.write(e),P.end(),x;function j(){x="",T=0,E=[],L={},A={},R=!1,N=0}function V(e,n){return"string"!=typeof e&&(e+=""),t.parser.decodeEntities&&(e=e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/\>/g,"&gt;"),n&&(e=e.replace(/\"/g,"&quot;"))),e=e.replace(/&(?![a-zA-Z0-9#]{1,20};)/g,"&amp;").replace(/</g,"&lt;").replace(/\>/g,"&gt;"),n&&(e=e.replace(/\"/g,"&quot;")),e}function D(e,n){var r=(n=(n=n.replace(/[\x00-\x20]+/g,"")).replace(/<\!\-\-.*?\-\-\>/g,"")).match(/^([a-zA-Z]+)\:/);if(!r)return!!n.match(/^[\/\\]{2}/)&&!t.allowProtocolRelative;var i=r[1].toLowerCase();return v(t.allowedSchemesByTag,e)?-1===t.allowedSchemesByTag[e].indexOf(i):!t.allowedSchemes||-1===t.allowedSchemes.indexOf(i)}}var w={decodeEntities:!0};b.defaults={allowedTags:["h3","h4","h5","h6","blockquote","p","a","ul","ol","nl","li","b","i","strong","em","strike","abbr","code","hr","br","div","table","thead","caption","tbody","tr","th","td","pre","iframe"],disallowedTagsMode:"discard",allowedAttributes:{a:["href","name","target"],img:["src"]},selfClosing:["img","br","hr","area","base","basefont","input","link","meta"],allowedSchemes:["http","https","ftp","mailto"],allowedSchemesByTag:{},allowedSchemesAppliedToAttributes:["href","src","cite"],allowProtocolRelative:!0,enforceHtmlBoundary:!1},b.simpleTransform=function(e,t,n){return n=void 0===n||n,t=t||{},function(r,i){var a;if(n)for(a in t)i[a]=t[a];else i=t;return{tagName:e,attribs:i}}}},{htmlparser2:31,"lodash/cloneDeep":140,"lodash/escapeRegExp":143,"lodash/isPlainObject":155,"lodash/isString":157,"lodash/mergeWith":162,"parse-srcset":167,postcss:181,url:209}]},{},[211])(211)},"object"===u(t)&&void 0!==e?e.exports=o():(i=[],void 0===(a="function"==typeof(r=o)?r.apply(t,i):r)||(e.exports=a))}).call(this,n(4))},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var i=r(n(0)),a=r(n(18)),o=r(n(139)),c=r(n(48)),s=r(n(23));t.default=function(e){var t=e.examples;return i.default.createElement("section",{className:"cucumber-examples"},i.default.createElement(c.default,{tags:t.tags}),i.default.createElement("h2",{className:"cucumber-title"},i.default.createElement(a.default,{className:"cucumber-title__keyword"},t.keyword,":")," ",i.default.createElement("span",{className:"cucumber-title__text"},t.name)),i.default.createElement(s.default,{description:t.description}),t.tableHeader&&i.default.createElement(o.default,{tableHeader:t.tableHeader,tableBody:t.tableBody}))}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var i=r(n(0)),a=r(n(140));t.default=function(e){var t=e.tableHeader,n=e.tableBody;return i.default.createElement("table",{className:"cucumber-table cucumber-examples-table"},i.default.createElement("thead",null,i.default.createElement("tr",null,i.default.createElement("th",{className:"cucumber-table__header-cell"}," "),t.cells.map((function(e,t){return i.default.createElement("th",{className:"cucumber-table__header-cell",key:t},e.value)})))),i.default.createElement(a.default,{rows:n||[]}))}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var i=r(n(0)),a=r(n(9)),o=r(n(77)),c=r(n(12)),s=r(n(32)),u=r(n(33)),l=r(n(34)),f=r(n(52)),h=function(e){var t=e.row,n=i.default.useContext(c.default),r=i.default.useContext(a.default),s=i.default.useContext(f.default),h=r.getWorstTestStepResult(r.getPickleTestStepResults(n.getPickleIds(s,t.id)));return i.default.createElement(i.default.Fragment,null,i.default.createElement("tr",{className:"cucumber-status--"+u.default(h.status)},i.default.createElement("td",{className:"cucumber-table__cell"},i.default.createElement(l.default,{status:h.status})),t.cells.map((function(e,t){return i.default.createElement("td",{className:"cucumber-table__cell",key:t,style:{textAlign:o.default(e.value)?"right":"left"}},e.value)}))),i.default.createElement(d,{key:"row-error",testStepResult:h,colSpan:t.cells.length}))},d=function(e){var t=e.testStepResult,n=e.colSpan;return t.message?i.default.createElement("tr",{className:"cucumber-status--"+u.default(t.status)+" cucumber-table__cell"},i.default.createElement("td",null," "),i.default.createElement("td",{colSpan:n},i.default.createElement(s.default,{message:t.message}))):null};t.default=function(e){var t=e.rows;return i.default.createElement("tbody",null,t.map((function(e,t){return i.default.createElement(h,{row:e,key:t})})))}},function(e,t,n){"use strict";var r=this&&this.__values||function(e){var t="function"==typeof Symbol&&Symbol.iterator,n=t&&e[t],r=0;if(n)return n.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&r>=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(t,"__esModule",{value:!0});var i=n(2),a=n(49),o=function(){function e(){this.testStepResultByPickleId=new a.ArrayMultimap,this.testStepResultsByPickleStepId=new a.ArrayMultimap,this.testStepById=new Map,this.testCaseByPickleId=new Map,this.pickleIdByTestStepId=new Map,this.pickleStepIdByTestStepId=new Map,this.testStepResultsbyTestStepId=new a.ArrayMultimap,this.testStepIdsByPickleStepId=new a.ArrayMultimap,this.hooksById=new Map,this.attachmentsByTestStepId=new a.ArrayMultimap,this.stepMatchArgumentsListsByPickleStepId=new Map}return e.prototype.update=function(e){var t,n;if(e.testCase){this.testCaseByPickleId.set(e.testCase.pickleId,e.testCase);try{for(var i=r(e.testCase.testSteps),a=i.next();!a.done;a=i.next()){var o=a.value;this.testStepById.set(o.id,o),this.pickleIdByTestStepId.set(o.id,e.testCase.pickleId),this.pickleStepIdByTestStepId.set(o.id,o.pickleStepId),this.testStepIdsByPickleStepId.put(o.pickleStepId,o.id),this.stepMatchArgumentsListsByPickleStepId.set(o.pickleStepId,o.stepMatchArgumentsLists)}}catch(e){t={error:e}}finally{try{a&&!a.done&&(n=i.return)&&n.call(i)}finally{if(t)throw t.error}}}if(e.testStepFinished){var c=this.pickleIdByTestStepId.get(e.testStepFinished.testStepId);this.testStepResultByPickleId.put(c,e.testStepFinished.testStepResult);o=this.testStepById.get(e.testStepFinished.testStepId);this.testStepResultsByPickleStepId.put(o.pickleStepId,e.testStepFinished.testStepResult),this.testStepResultsbyTestStepId.put(o.id,e.testStepFinished.testStepResult)}e.hook&&this.hooksById.set(e.hook.id,e.hook),e.attachment&&this.attachmentsByTestStepId.put(e.attachment.testStepId,e.attachment)},e.prototype.getPickleStepTestStepResults=function(e){var t=this;return 0===e.length?[new i.messages.TestStepFinished.TestStepResult({status:i.messages.TestStepFinished.TestStepResult.Status.UNKNOWN,duration:i.TimeConversion.millisecondsToDuration(0)})]:e.reduce((function(e,n){return e.concat(t.testStepResultsByPickleStepId.get(n))}),[])},e.prototype.getPickleTestStepResults=function(e){var t=this;return 0===e.length?[new i.messages.TestStepFinished.TestStepResult({status:i.messages.TestStepFinished.TestStepResult.Status.UNKNOWN,duration:i.TimeConversion.millisecondsToDuration(0)})]:e.reduce((function(e,n){return e.concat(t.testStepResultByPickleId.get(n))}),[])},e.prototype.getWorstTestStepResult=function(e){return e.slice().sort((function(e,t){return t.status-e.status}))[0]||new i.messages.TestStepFinished.TestStepResult({status:i.messages.TestStepFinished.TestStepResult.Status.UNKNOWN,duration:i.TimeConversion.millisecondsToDuration(0)})},e.prototype.getPickleStepAttachments=function(e){var t=this;return this.getTestStepsAttachments(e.reduce((function(e,n){return e.concat(t.testStepIdsByPickleStepId.get(n))}),[]))},e.prototype.getTestStepsAttachments=function(e){var t=this;return e.reduce((function(e,n){return e.concat(t.attachmentsByTestStepId.get(n))}),[])},e.prototype.getStepMatchArgumentsLists=function(e){return this.stepMatchArgumentsListsByPickleStepId.get(e)},e.prototype.getHook=function(e){return this.hooksById.get(e)},e.prototype.getBeforeHookSteps=function(e){var t=[];return this.identifyHookSteps(e,(function(e){return t.push(e)}),(function(){return null})),t},e.prototype.getAfterHookSteps=function(e){var t=[];return this.identifyHookSteps(e,(function(){return null}),(function(e){return t.push(e)})),t},e.prototype.identifyHookSteps=function(e,t,n){var i,a,o=this.testCaseByPickleId.get(e);if(o){var c=!1;try{for(var s=r(o.testSteps),u=s.next();!u.done;u=s.next()){var l=u.value;l.hookId?c?n(l):t(l):c=!0}}catch(e){i={error:e}}finally{try{u&&!u.done&&(a=s.return)&&a.call(s)}finally{if(i)throw i.error}}}},e.prototype.getTestStepResults=function(e){return this.testStepResultsbyTestStepId.get(e)},e}();t.default=o},function(e,t,n){"use strict";var r,i=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,"__esModule",{value:!0});var a=function(e){function t(t){return e.call(this,new o,t)||this}return i(t,e),Object.defineProperty(t.prototype,Symbol.toStringTag,{get:function(){return"ArrayMultimap"},enumerable:!0,configurable:!0}),t}(n(76).Multimap);t.ArrayMultimap=a;var o=function(){function e(){}return e.prototype.create=function(){return[]},e.prototype.clone=function(e){return e.slice()},e.prototype.add=function(e,t){return t.push(e),!0},e.prototype.size=function(e){return e.length},e.prototype.delete=function(e,t){var n=t.indexOf(e);return n>-1&&(t.splice(n,1),!0)},e.prototype.has=function(e,t){return t.indexOf(e)>-1},e}()},function(e,t,n){"use strict";var r,i=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,"__esModule",{value:!0});var a=function(e){function t(t){return e.call(this,new o,t)||this}return i(t,e),Object.defineProperty(t.prototype,Symbol.toStringTag,{get:function(){return"SetMultimap"},enumerable:!0,configurable:!0}),t}(n(76).Multimap);t.SetMultimap=a;var o=function(){function e(){}return e.prototype.create=function(){return new Set},e.prototype.clone=function(e){return new Set(e)},e.prototype.add=function(e,t){var n=t.size;return t.add(e),n!==t.size},e.prototype.size=function(e){return e.size},e.prototype.delete=function(e,t){return t.delete(e)},e.prototype.has=function(e,t){return t.has(e)},e}()},function(e,t,n){"use strict";var r,i=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,"__esModule",{value:!0});var a=function(e){function t(t){var n=e.call(this,{objectMode:!0})||this;return n.query=t,n}return i(t,e),t.prototype._write=function(e,t,n){this.query.update(e),n(null)},t}(n(7).Writable);t.default=a},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var i=n(7),a=n(2),o=r(n(146)),c=r(n(151)),s=r(n(152));t.default={fromPaths:function(e,t){var n=e.slice();t=s.default(t);var r=new i.PassThrough({writableObjectMode:!0,readableObjectMode:!0});return function e(){var i=n.shift();if(void 0!==i){var a=new o.default(t);a.on("end",(function(){e()}));var s=0===n.length;t.createReadStream(i).on("error",(function(e){return r.emit("error",e)})).pipe(new c.default(i)).on("error",(function(e){return r.emit("error",e)})).pipe(a).on("error",(function(e){return r.emit("error",e)})).pipe(r,{end:s})}}(),r},fromStream:function(e,t){return i.pipeline(e,new a.BinaryToMessageStream(a.messages.Envelope.decodeDelimited),new o.default(t))},fromSources:function(e,t){var n=e.slice();t=s.default(t);var r=new i.PassThrough({writableObjectMode:!0,readableObjectMode:!0});return function e(){var i=n.shift();if(void 0!==i&&i.source){var a=new o.default(t);a.pipe(r,{end:0===n.length}),a.on("end",e),a.end(i)}}(),r}}},function(e,t,n){"use strict";var r,i=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}),a=this&&this.__values||function(e){var t="function"==typeof Symbol&&Symbol.iterator,n=t&&e[t],r=0;if(n)return n.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&r>=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")},o=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var c=o(n(79)),s=function(e){function t(t){var n=e.call(this,{writableObjectMode:!0,readableObjectMode:!0})||this;return n.options=t,n}return i(t,e),t.prototype._transform=function(e,t,n){var r,i;if(e.source){var o=c.default(e.source.data,e.source.uri,this.options);try{for(var s=a(o),u=s.next();!u.done;u=s.next()){var l=u.value;this.push(l)}}catch(e){r={error:e}}finally{try{u&&!u.done&&(i=s.return)&&i.call(s)}finally{if(r)throw r.error}}}n()},t}(n(7).Transform);t.default=s,e.exports=s},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(){function e(e,t){this.line=e,this.location=t,this.isEof=null==e}return e.prototype.getTokenValue=function(){return this.isEof?"EOF":this.line.getLineText(-1)},e.prototype.detach=function(){},e}();t.default=r},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var i=r(n(149)),a=n(31),o=function(){function e(e,t){this.lineText=e,this.lineNumber=t,this.trimmedLineText=e.replace(/^\s+/g,""),this.isEmpty=0===this.trimmedLineText.length,this.indent=i.default(e)-i.default(this.trimmedLineText)}return e.prototype.startsWith=function(e){return 0===this.trimmedLineText.indexOf(e)},e.prototype.startsWithTitleKeyword=function(e){return this.startsWith(e+":")},e.prototype.getLineText=function(e){return e<0||e>this.indent?this.trimmedLineText:this.lineText.substring(e)},e.prototype.getRestTrimmed=function(e){return this.trimmedLineText.substring(e).trim()},e.prototype.getTableCells=function(){for(var e=[],t=0,n=t+1,r="",i=!0;t<this.trimmedLineText.length;){var a=this.trimmedLineText[t];if(t++,"|"===a){if(i)i=!1;else{var o=r.replace(/^[ \t\v\f\r\u0085\u00A0]*/g,""),c=o.replace(/[ \t\v\f\r\u0085\u00A0]*$/g,""),s=r.length-o.length,u={column:this.indent+n+s,text:c};e.push(u)}r="",n=t+1}else"\\"===a?(a=this.trimmedLineText[t],t+=1,"n"===a?r+="\n":("|"!==a&&"\\"!==a&&(r+="\\"),r+=a)):r+=a}return e},e.prototype.getTags=function(){for(var e=this.trimmedLineText.split(/\s#/g,2)[0],t=this.indent+1,n=e.split("@"),r=[],o=0;o<n.length;o++){var c=n[o].trimRight();if(0!=c.length){if(!c.match(/^\S+$/))throw a.ParserException.create("A tag may not contain whitespace",this.lineNumber,t);var s={column:t,text:"@"+c};r.push(s),t+=i.default(n[o])+1}}return r},e}();t.default=o,e.exports=o},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g;t.default=function(e){return e.replace(r,"_").length}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(){function e(e){this.ruleType=e,this.subItems=new Map}return e.prototype.add=function(e,t){var n=this.subItems.get(e);void 0===n&&(n=[],this.subItems.set(e,n)),n.push(t)},e.prototype.getSingle=function(e){return(this.subItems.get(e)||[])[0]},e.prototype.getItems=function(e){return this.subItems.get(e)||[]},e.prototype.getToken=function(e){return(this.subItems.get(e)||[])[0]},e.prototype.getTokens=function(e){return this.subItems.get(e)||[]},e}();t.default=r},function(e,t,n){"use strict";(function(e){var r,i=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}),a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=n(7),c=a(n(51)),s=function(t){function n(n){var r=t.call(this,{readableObjectMode:!0,writableObjectMode:!1})||this;return r.uri=n,r.buffer=e.alloc(0),r}return i(n,t),n.prototype._transform=function(t,n,r){this.buffer=e.concat([this.buffer,t]),r()},n.prototype._flush=function(e){var t=this.buffer.toString("utf8"),n=c.default(t,this.uri);this.push(n),e()},n}(o.Transform);t.default=s}).call(this,n(19).Buffer)},function(e,t,n){"use strict";var r=this&&this.__assign||function(){return(r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var i in t=arguments[n])Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e}).apply(this,arguments)};Object.defineProperty(t,"__esModule",{value:!0});var i={defaultDialect:"en",includeSource:!0,includeGherkinDocument:!0,includePickles:!0,newId:n(2).IdGenerator.uuid()};t.default=function(e){return r(r({},i),e)}},function(e,t,n){"use strict";var r=this&&this.__values||function(e){var t="function"==typeof Symbol&&Symbol.iterator,n=t&&e[t],r=0;if(n)return n.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&r>=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(t,"__esModule",{value:!0});var i=n(49),a=function(){function e(){this.gherkinDocuments=[],this.pickles=[],this.locationByAstNodeId=new Map,this.gherkinStepById=new Map,this.pickleIdsMapByUri=new Map,this.pickleIdsByAstNodeId=new Map,this.pickleStepIdsByAstNodeId=new Map}return e.prototype.getLocation=function(e){return this.locationByAstNodeId.get(e)},e.prototype.getGherkinDocuments=function(){return this.gherkinDocuments},e.prototype.getPickles=function(){return this.pickles},e.prototype.getPickleIds=function(e,t){var n=this.pickleIdsMapByUri.get(e);return void 0===t?Array.from(new Set(n.values())):n.get(t)},e.prototype.getPickleStepIds=function(e){return this.pickleStepIdsByAstNodeId.get(e)||[]},e.prototype.update=function(e){var t,n,a,o;if(e.gherkinDocument&&(this.gherkinDocuments.push(e.gherkinDocument),e.gherkinDocument.feature)){this.pickleIdsMapByUri.set(e.gherkinDocument.uri,new i.ArrayMultimap);try{for(var c=r(e.gherkinDocument.feature.children),s=c.next();!s.done;s=c.next()){var u=s.value;if(u.background&&this.updateGherkinBackground(u.background),u.scenario&&this.updateGherkinScenario(u.scenario),u.rule){var l=u.rule.children;try{for(var f=(a=void 0,r(l)),h=f.next();!h.done;h=f.next()){var d=h.value;d.background&&this.updateGherkinBackground(d.background),d.scenario&&this.updateGherkinScenario(d.scenario)}}catch(e){a={error:e}}finally{try{h&&!h.done&&(o=f.return)&&o.call(f)}finally{if(a)throw a.error}}}}}catch(e){t={error:e}}finally{try{s&&!s.done&&(n=c.return)&&n.call(c)}finally{if(t)throw t.error}}}if(e.pickle){var p=e.pickle;this.updatePickle(p)}return this},e.prototype.updateGherkinBackground=function(e){var t,n;try{for(var i=r(e.steps),a=i.next();!a.done;a=i.next()){var o=a.value;this.updateGherkinStep(o)}}catch(e){t={error:e}}finally{try{a&&!a.done&&(n=i.return)&&n.call(i)}finally{if(t)throw t.error}}},e.prototype.updateGherkinScenario=function(e){var t,n,i,a,o,c;this.locationByAstNodeId.set(e.id,e.location);try{for(var s=r(e.steps),u=s.next();!u.done;u=s.next()){var l=u.value;this.updateGherkinStep(l)}}catch(e){t={error:e}}finally{try{u&&!u.done&&(n=s.return)&&n.call(s)}finally{if(t)throw t.error}}try{for(var f=r(e.examples),h=f.next();!h.done;h=f.next()){var d=h.value;try{for(var p=(o=void 0,r(d.tableBody)),m=p.next();!m.done;m=p.next()){var v=m.value;this.locationByAstNodeId.set(v.id,v.location)}}catch(e){o={error:e}}finally{try{m&&!m.done&&(c=p.return)&&c.call(p)}finally{if(o)throw o.error}}}}catch(e){i={error:e}}finally{try{h&&!h.done&&(a=f.return)&&a.call(f)}finally{if(i)throw i.error}}},e.prototype.updateGherkinStep=function(e){this.locationByAstNodeId.set(e.id,e.location),this.gherkinStepById.set(e.id,e)},e.prototype.updatePickle=function(e){var t,n,i,a,o=this.pickleIdsMapByUri.get(e.uri);try{for(var c=r(e.astNodeIds),s=c.next();!s.done;s=c.next()){var u=s.value;o.put(u,e.id)}}catch(e){t={error:e}}finally{try{s&&!s.done&&(n=c.return)&&n.call(c)}finally{if(t)throw t.error}}this.updatePickleSteps(e),this.pickles.push(e);try{for(var l=r(e.astNodeIds),f=l.next();!f.done;f=l.next()){u=f.value;this.pickleIdsByAstNodeId.has(u)||this.pickleIdsByAstNodeId.set(u,[]),this.pickleIdsByAstNodeId.get(u).push(e.id)}}catch(e){i={error:e}}finally{try{f&&!f.done&&(a=l.return)&&a.call(l)}finally{if(i)throw i.error}}},e.prototype.updatePickleSteps=function(e){var t,n,i,a,o=e.steps;try{for(var c=r(o),s=c.next();!s.done;s=c.next()){var u=s.value;try{for(var l=(i=void 0,r(u.astNodeIds)),f=l.next();!f.done;f=l.next()){var h=f.value;this.pickleStepIdsByAstNodeId.has(h)||this.pickleStepIdsByAstNodeId.set(h,[]),this.pickleStepIdsByAstNodeId.get(h).push(u.id)}}catch(e){i={error:e}}finally{try{f&&!f.done&&(a=l.return)&&a.call(l)}finally{if(i)throw i.error}}}}catch(e){t={error:e}}finally{try{s&&!s.done&&(n=c.return)&&n.call(c)}finally{if(t)throw t.error}}},e}();t.default=a},function(e,t,n){"use strict";var r=n(155);function i(){}function a(){}a.resetWarningCache=i,e.exports=function(){function e(e,t,n,i,a,o){if(o!==r){var c=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw c.name="Invariant Violation",c}}function t(){return e}e.isRequired=e;var n={array:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:a,resetWarningCache:i};return n.PropTypes=n,n}},function(e,t,n){"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var i=r(n(0)),a=r(n(157)),o=r(n(18)),c=r(n(159)),s=r(n(9)),u=r(n(12)),l=r(n(32)),f=r(n(86)),h=r(n(87)),d=r(n(8));t.default=function(e){var t=e.step,n=e.renderStepMatchArguments,r=e.renderMessage,p=i.default.useContext(u.default),m=i.default.useContext(s.default),v=p.getPickleStepIds(t.id),g=m.getPickleStepTestStepResults(v),y=m.getWorstTestStepResult(g),b=m.getPickleStepAttachments(v),w=[];if(n){var x=0===v.length?[]:m.getStepMatchArgumentsLists(v[0])||[];if(1===x.length){var S,k=x[0].stepMatchArguments,_=0;k.forEach((function(e,n){(S=t.text.slice(_,e.group.start)).length>0&&w.push(i.default.createElement("span",{className:"cucumber-step__text",key:"plain-"+n},i.default.createElement(d.default,{text:S})));var r=e.group.value;r.length>0&&w.push(i.default.createElement("a",{className:"cucumber-step__param",key:"bold-"+n,title:e.parameterTypeName},i.default.createElement(d.default,{text:r}))),_+=S.length+r.length})),(S=t.text.slice(_)).length>0&&w.push(i.default.createElement("span",{className:"cucumber-step__text",key:"plain-rest"},i.default.createElement(d.default,{text:S})))}else x.length>=2?w.push(i.default.createElement("span",{className:"cucumber-step__text",key:"plain-ambiguous"},i.default.createElement(d.default,{text:t.text}))):w.push(i.default.createElement("span",{className:"cucumber-step__text",key:"plain-undefined"},i.default.createElement(d.default,{text:t.text})))}else w.push(i.default.createElement("span",{className:"cucumber-step__text",key:"plain-placeholders"},i.default.createElement(d.default,{text:t.text})));return i.default.createElement(f.default,{status:y.status},i.default.createElement("h3",{className:"cucumber-step__title"},i.default.createElement(o.default,{className:"cucumber-step__keyword"},t.keyword),w),t.dataTable&&i.default.createElement(a.default,{dataTable:t.dataTable}),t.docString&&i.default.createElement(c.default,{docString:t.docString}),r&&y.message&&i.default.createElement(l.default,{message:y.message}),i.default.createElement("div",{className:"cucumber-attachments"},b.map((function(e,t){return i.default.createElement(h.default,{key:t,attachment:e})}))))}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var i=r(n(0)),a=r(n(158));t.default=function(e){var t=e.dataTable;return i.default.createElement("table",{className:"cucumber-table cucumber-datatable"},i.default.createElement(a.default,{rows:t.rows||[]}))}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var i=r(n(0)),a=r(n(77)),o=r(n(8));t.default=function(e){var t=e.rows;return i.default.createElement("tbody",null,t.map((function(e,t){return i.default.createElement("tr",{key:t},(e.cells||[]).map((function(e,t){return i.default.createElement("td",{className:"cucumber-table__cell",key:t,style:{textAlign:a.default(e.value)?"right":"left"}},i.default.createElement(o.default,{text:e.value}))})))})))}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var i=r(n(0)),a=r(n(8));t.default=function(e){var t=e.docString;return i.default.createElement("pre",{className:"cucumber-code cucumber-docstring"},i.default.createElement(a.default,{text:t.content}))}},function(e,t,n){"use strict";function r(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}var i,a=n(161),o={fg:"#FFF",bg:"#000",newline:!1,escapeXML:!1,stream:!1,colors:(i={0:"#000",1:"#A00",2:"#0A0",3:"#A50",4:"#00A",5:"#A0A",6:"#0AA",7:"#AAA",8:"#555",9:"#F55",10:"#5F5",11:"#FF5",12:"#55F",13:"#F5F",14:"#5FF",15:"#FFF"},l(0,5).forEach((function(e){l(0,5).forEach((function(t){l(0,5).forEach((function(n){return function(e,t,n,r){var i=e>0?40*e+55:0,a=t>0?40*t+55:0,o=n>0?40*n+55:0;r[16+36*e+6*t+n]=function(e){var t=[],n=!0,r=!1,i=void 0;try{for(var a,o=e[Symbol.iterator]();!(n=(a=o.next()).done);n=!0){var s=a.value;t.push(c(s))}}catch(e){r=!0,i=e}finally{try{n||null==o.return||o.return()}finally{if(r)throw i}}return"#"+t.join("")}([i,a,o])}(e,t,n,i)}))}))})),l(0,23).forEach((function(e){var t=e+232,n=c(10*e+8);i[t]="#"+n+n+n})),i)};function c(e){for(var t=e.toString(16);t.length<2;)t="0"+t;return t}function s(e,t,n,r){var i;return"text"===t?i=function(e,t){if(t.escapeXML)return a.encodeXML(e);return e}(n,r):"display"===t?i=function(e,t,n){t=parseInt(t,10);var r,i={"-1":function(){return"<br/>"},0:function(){return e.length&&u(e)},1:function(){return h(e,"b")},3:function(){return h(e,"i")},4:function(){return h(e,"u")},8:function(){return d(e,"display:none")},9:function(){return h(e,"strike")},22:function(){return d(e,"font-weight:normal;text-decoration:none;font-style:normal")},23:function(){return v(e,"i")},24:function(){return v(e,"u")},39:function(){return p(e,n.fg)},49:function(){return m(e,n.bg)},53:function(){return d(e,"text-decoration:overline")}};i[t]?r=i[t]():4<t&&t<7?r=h(e,"blink"):29<t&&t<38?r=p(e,n.colors[t-30]):39<t&&t<48?r=m(e,n.colors[t-40]):89<t&&t<98?r=p(e,n.colors[t-90+8]):99<t&&t<108&&(r=m(e,n.colors[t-100+8]));return r}(e,n,r):"xterm256"===t?i=p(e,r.colors[n]):"rgb"===t&&(i=function(e,t){var n=+(t=t.substring(2).slice(0,-1)).substr(0,2),r=t.substring(5).split(";").map((function(e){return("0"+Number(e).toString(16)).substr(-2)})).join("");return d(e,(38===n?"color:#":"background-color:#")+r)}(e,n)),i}function u(e){var t=e.slice(0);return e.length=0,t.reverse().map((function(e){return"</"+e+">"})).join("")}function l(e,t){for(var n=[],r=e;r<=t;r++)n.push(r);return n}function f(e){var t=null;return 0===(e=parseInt(e,10))?t="all":1===e?t="bold":2<e&&e<5?t="underline":4<e&&e<7?t="blink":8===e?t="hide":9===e?t="strike":29<e&&e<38||39===e||89<e&&e<98?t="foreground-color":(39<e&&e<48||49===e||99<e&&e<108)&&(t="background-color"),t}function h(e,t,n){return n||(n=""),e.push(t),["<"+t,n?' style="'+n+'"':void 0,">"].join("")}function d(e,t){return h(e,"span",t)}function p(e,t){return h(e,"span","color:"+t)}function m(e,t){return h(e,"span","background-color:"+t)}function v(e,t){var n;if(e.slice(-1)[0]===t&&(n=e.pop()),n)return"</"+t+">"}var g=function(){function e(t){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),(t=t||{}).colors&&(t.colors=Object.assign({},o.colors,t.colors)),this.options=Object.assign({},o,t),this.stack=[],this.stickyStack=[]}var t,n,i;return t=e,(n=[{key:"toHtml",value:function(e){var t=this;e="string"==typeof e?[e]:e;var n=this.stack,r=this.options,i=[];return this.stickyStack.forEach((function(e){var t=s(n,e.token,e.data,r);t&&i.push(t)})),function(e,t,n){var r=!1;function i(){return""}function a(e){return t.newline?n("display",-1):n("text",e),""}var o=[{pattern:/^\x08+/,sub:i},{pattern:/^\x1b\[[012]?K/,sub:i},{pattern:/^\x1b\[\(B/,sub:i},{pattern:/^\x1b\[[34]8;2;\d+;\d+;\d+m/,sub:function(e){return n("rgb",e),""}},{pattern:/^\x1b\[38;5;(\d+)m/,sub:function(e,t){return n("xterm256",t),""}},{pattern:/^\n/,sub:a},{pattern:/^\r+\n/,sub:a},{pattern:/^\x1b\[((?:\d{1,3};?)+|)m/,sub:function(e,t){r=!0,0===t.trim().length&&(t="0"),t=t.trimRight(";").split(";");var i=!0,a=!1,o=void 0;try{for(var c,s=t[Symbol.iterator]();!(i=(c=s.next()).done);i=!0){var u=c.value;n("display",u)}}catch(e){a=!0,o=e}finally{try{i||null==s.return||s.return()}finally{if(a)throw o}}return""}},{pattern:/^\x1b\[\d?J/,sub:i},{pattern:/^\x1b\[\d{0,3};\d{0,3}f/,sub:i},{pattern:/^\x1b\[?[\d;]{0,3}/,sub:i},{pattern:/^(([^\x1b\x08\r\n])+)/,sub:function(e){return n("text",e),""}}];function c(t,n){n>3&&r||(r=!1,e=e.replace(t.pattern,t.sub))}var s=[],u=e.length;e:for(;u>0;){for(var l=0,f=0,h=o.length;f<h;l=++f)if(c(o[l],l),e.length!==u){u=e.length;continue e}if(e.length===u)break;s.push(0),u=e.length}}(e.join(""),r,(function(e,a){var o=s(n,e,a,r);o&&i.push(o),r.stream&&(t.stickyStack=function(e,t,n){var r;return"text"!==t&&(e=e.filter((r=f(n),function(e){return(null===r||e.category!==r)&&"all"!==r}))).push({token:t,data:n,category:f(n)}),e}(t.stickyStack,e,a))})),n.length&&i.push(u(n)),i.join("")}}])&&r(t.prototype,n),i&&r(t,i),e}();e.exports=g},function(e,t,n){var r=n(162),i=n(163);t.decode=function(e,t){return(!t||t<=0?i.XML:i.HTML)(e)},t.decodeStrict=function(e,t){return(!t||t<=0?i.XML:i.HTMLStrict)(e)},t.encode=function(e,t){return(!t||t<=0?r.XML:r.HTML)(e)},t.encodeXML=r.XML,t.encodeHTML4=t.encodeHTML5=t.encodeHTML=r.HTML,t.decodeXML=t.decodeXMLStrict=i.XML,t.decodeHTML4=t.decodeHTML5=t.decodeHTML=i.HTML,t.decodeHTML4Strict=t.decodeHTML5Strict=t.decodeHTMLStrict=i.HTMLStrict,t.escape=r.escape},function(e,t,n){var r=c(n(88)),i=s(r);t.XML=d(r,i);var a=c(n(89)),o=s(a);function c(e){return Object.keys(e).sort().reduce((function(t,n){return t[e[n]]="&"+n+";",t}),{})}function s(e){var t=[],n=[];return Object.keys(e).forEach((function(e){1===e.length?t.push("\\"+e):n.push(e)})),n.unshift("["+t.join("")+"]"),new RegExp(n.join("|"),"g")}t.HTML=d(a,o);var u=/[^\0-\x7F]/g,l=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g;function f(e){return"&#x"+e.charCodeAt(0).toString(16).toUpperCase()+";"}function h(e){return"&#x"+(1024*(e.charCodeAt(0)-55296)+e.charCodeAt(1)-56320+65536).toString(16).toUpperCase()+";"}function d(e,t){function n(t){return e[t]}return function(e){return e.replace(t,n).replace(l,h).replace(u,f)}}var p=s(r);t.escape=function(e){return e.replace(p,f).replace(l,h).replace(u,f)}},function(e,t,n){var r=n(89),i=n(164),a=n(88),o=n(165),c=u(a),s=u(r);function u(e){var t=Object.keys(e).join("|"),n=h(e),r=new RegExp("&(?:"+(t+="|#[xX][\\da-fA-F]+|#\\d+")+");","g");return function(e){return String(e).replace(r,n)}}var l=function(){for(var e=Object.keys(i).sort(f),t=Object.keys(r).sort(f),n=0,a=0;n<t.length;n++)e[a]===t[n]?(t[n]+=";?",a++):t[n]+=";";var o=new RegExp("&(?:"+t.join("|")+"|#[xX][\\da-fA-F]+;?|#\\d+;?)","g"),c=h(r);function s(e){return";"!==e.substr(-1)&&(e+=";"),c(e)}return function(e){return String(e).replace(o,s)}}();function f(e,t){return e<t?1:-1}function h(e){return function(t){return"#"===t.charAt(1)?"X"===t.charAt(2)||"x"===t.charAt(2)?o(parseInt(t.substr(3),16)):o(parseInt(t.substr(2),10)):e[t.slice(1,-1)]}}e.exports={XML:c,HTML:l,HTMLStrict:s}},function(e){e.exports=JSON.parse('{"Aacute":"Á","aacute":"á","Acirc":"Â","acirc":"â","acute":"´","AElig":"Æ","aelig":"æ","Agrave":"À","agrave":"à","amp":"&","AMP":"&","Aring":"Å","aring":"å","Atilde":"Ã","atilde":"ã","Auml":"Ä","auml":"ä","brvbar":"¦","Ccedil":"Ç","ccedil":"ç","cedil":"¸","cent":"¢","copy":"©","COPY":"©","curren":"¤","deg":"°","divide":"÷","Eacute":"É","eacute":"é","Ecirc":"Ê","ecirc":"ê","Egrave":"È","egrave":"è","ETH":"Ð","eth":"ð","Euml":"Ë","euml":"ë","frac12":"½","frac14":"¼","frac34":"¾","gt":">","GT":">","Iacute":"Í","iacute":"í","Icirc":"Î","icirc":"î","iexcl":"¡","Igrave":"Ì","igrave":"ì","iquest":"¿","Iuml":"Ï","iuml":"ï","laquo":"«","lt":"<","LT":"<","macr":"¯","micro":"µ","middot":"·","nbsp":" ","not":"¬","Ntilde":"Ñ","ntilde":"ñ","Oacute":"Ó","oacute":"ó","Ocirc":"Ô","ocirc":"ô","Ograve":"Ò","ograve":"ò","ordf":"ª","ordm":"º","Oslash":"Ø","oslash":"ø","Otilde":"Õ","otilde":"õ","Ouml":"Ö","ouml":"ö","para":"¶","plusmn":"±","pound":"£","quot":"\\"","QUOT":"\\"","raquo":"»","reg":"®","REG":"®","sect":"§","shy":"­","sup1":"¹","sup2":"²","sup3":"³","szlig":"ß","THORN":"Þ","thorn":"þ","times":"×","Uacute":"Ú","uacute":"ú","Ucirc":"Û","ucirc":"û","Ugrave":"Ù","ugrave":"ù","uml":"¨","Uuml":"Ü","uuml":"ü","Yacute":"Ý","yacute":"ý","yen":"¥","yuml":"ÿ"}')},function(e,t,n){var r=n(166);e.exports=function(e){if(e>=55296&&e<=57343||e>1114111)return"�";e in r&&(e=r[e]);var t="";e>65535&&(e-=65536,t+=String.fromCharCode(e>>>10&1023|55296),e=56320|1023&e);return t+=String.fromCharCode(e)}},function(e){e.exports=JSON.parse('{"0":65533,"128":8364,"130":8218,"131":402,"132":8222,"133":8230,"134":8224,"135":8225,"136":710,"137":8240,"138":352,"139":8249,"140":338,"142":381,"145":8216,"146":8217,"147":8220,"148":8221,"149":8226,"150":8211,"151":8212,"152":732,"153":8482,"154":353,"155":8250,"156":339,"158":382,"159":376}')},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var i=r(n(0)),a=r(n(168));t.default=function(e){var t=e.hookSteps;return i.default.createElement("ol",{className:"cucumber-steps"},t.map((function(e,t){return i.default.createElement(a.default,{key:t,step:e})})))}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var i=r(n(0)),a=n(2),o=r(n(9)),c=r(n(32)),s=r(n(86)),u=r(n(87));t.default=function(e){var t=e.step,n=i.default.useContext(o.default),r=n.getWorstTestStepResult(n.getTestStepResults(t.id)),l=n.getHook(t.hookId),f=n.getTestStepsAttachments([t.id]);return r.status===a.messages.TestStepFinished.TestStepResult.Status.FAILED?i.default.createElement("li",{className:"step"},i.default.createElement(s.default,{status:r.status},i.default.createElement("h3",null,"Hook failed: ",l.sourceReference.uri,":",l.sourceReference.location.line),r.message&&i.default.createElement(c.default,{message:r.message}),f.map((function(e,t){return i.default.createElement(u.default,{key:t,attachment:e})})))):f?i.default.createElement("li",{className:"step"},f.map((function(e,t){return i.default.createElement(u.default,{key:t,attachment:e})}))):void 0}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var i=r(n(0)),a=r(n(18)),o=r(n(8)),c=n(14),s=n(13);t.default=function(e){var t=e.id,n=e.scenario;return i.default.createElement("div",{className:"cucumber-anchor cucumber-title"},i.default.createElement("a",{href:"#"+t,className:"cucumber-anchor__link"},i.default.createElement(c.FontAwesomeIcon,{icon:s.faLink,className:"cucumber-anchor__icon"})),i.default.createElement("h2",{id:t},i.default.createElement(a.default,{className:"cucumber-title__keyword"},n.keyword,":")," ",i.default.createElement(o.default,{className:"cucumber-title__text",text:n.name})))}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var i=r(n(0)),a=r(n(29)),o=r(n(23)),c=r(n(74)),s=r(n(90)),u=r(n(172)),l=new a.default;t.default=function(e){var t=e.rule,n=l.generate(t.name);return i.default.createElement("section",{className:"cucumber-rule"},i.default.createElement(u.default,{id:n,rule:t}),i.default.createElement("div",{className:"cucumber-children"},i.default.createElement(o.default,{description:t.description}),(t.children||[]).map((function(e,t){if(e.background)return i.default.createElement(s.default,{key:t,background:e.background});if(e.scenario)return i.default.createElement(c.default,{key:t,scenario:e.scenario});throw new Error("Expected background or scenario")}))))}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var i=r(n(0)),a=r(n(18)),o=n(14),c=n(13);t.default=function(e){var t=e.id,n=e.background;return i.default.createElement("div",{className:"cucumber-anchor cucumber-title"},i.default.createElement("a",{href:"#"+t,className:"cucumber-anchor__link"},i.default.createElement(o.FontAwesomeIcon,{icon:c.faLink,className:"cucumber-anchor__icon"})),i.default.createElement("h2",{id:t},i.default.createElement(a.default,{className:"cucumber-title__keyword"},n.keyword,":")," ",i.default.createElement("span",{className:"cucumber-title__text"},n.name)))}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var i=r(n(0)),a=r(n(18)),o=r(n(8)),c=n(14),s=n(13);t.default=function(e){var t=e.id,n=e.rule;return i.default.createElement("div",{className:"cucumber-anchor cucumber-title"},i.default.createElement("a",{href:"#"+t,className:"cucumber-anchor__link"},i.default.createElement(c.FontAwesomeIcon,{icon:s.faLink,className:"cucumber-anchor__icon"})),i.default.createElement("h2",{id:t},i.default.createElement(a.default,{className:"cucumber-title__keyword"},n.keyword,":")," ",i.default.createElement(o.default,{className:"cucumber-title__text",text:n.name})))}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var i=r(n(0)),a=r(n(18)),o=r(n(8)),c=n(14),s=n(13);t.default=function(e){var t=e.id,n=e.feature;return i.default.createElement("div",{className:"cucumber-anchor cucumber-title"},i.default.createElement("a",{href:"#"+t,className:"cucumber-anchor__link"},i.default.createElement(c.FontAwesomeIcon,{icon:s.faLink,className:"cucumber-anchor__icon"})),i.default.createElement("h1",{id:t},i.default.createElement(a.default,{className:"cucumber-title__keyword"},n.keyword,":")," ",i.default.createElement(o.default,{className:"cucumber-title__text",text:n.name})))}},function(e,t,n){"use strict";n.r(t),n.d(t,"Accordion",(function(){return _})),n.d(t,"AccordionItem",(function(){return H})),n.d(t,"AccordionItemButton",(function(){return W})),n.d(t,"AccordionItemHeading",(function(){return $})),n.d(t,"AccordionItemPanel",(function(){return J})),n.d(t,"AccordionItemState",(function(){return K})),n.d(t,"resetNextUuid",(function(){return O}));var r=n(0);function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function a(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function o(e,t,n){return t&&a(e.prototype,t),n&&a(e,n),e}function c(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function s(){return(s=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e}).apply(this,arguments)}function u(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function l(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&h(e,t)}function f(e){return(f=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function h(e,t){return(h=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function d(e,t){if(null==e)return{};var n,r,i=function(e,t){if(null==e)return{};var n,r,i={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}function p(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function m(e,t){return!t||"object"!=typeof t&&"function"!=typeof t?p(e):t}function v(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=f(e);if(t){var i=f(this).constructor;n=Reflect.construct(r,arguments,i)}else n=r.apply(this,arguments);return m(this,n)}}function g(e){return function(e){if(Array.isArray(e))return y(e)}(e)||function(e){if("undefined"!=typeof Symbol&&Symbol.iterator in Object(e))return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return y(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return y(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function y(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}var b=function e(t){var n=this,r=t.expanded,a=void 0===r?[]:r,o=t.allowMultipleExpanded,s=void 0!==o&&o,l=t.allowZeroExpanded,f=void 0!==l&&l;i(this,e),c(this,"expanded",void 0),c(this,"allowMultipleExpanded",void 0),c(this,"allowZeroExpanded",void 0),c(this,"toggleExpanded",(function(e){return n.isItemDisabled(e)?n:n.isItemExpanded(e)?n.augment({expanded:n.expanded.filter((function(t){return t!==e}))}):n.augment({expanded:n.allowMultipleExpanded?[].concat(g(n.expanded),[e]):[e]})})),c(this,"isItemDisabled",(function(e){var t=n.isItemExpanded(e),r=1===n.expanded.length;return Boolean(t&&!n.allowZeroExpanded&&r)})),c(this,"isItemExpanded",(function(e){return-1!==n.expanded.indexOf(e)})),c(this,"getPanelAttributes",(function(e,t){var r=null!=t?t:n.isItemExpanded(e);return{role:n.allowMultipleExpanded?void 0:"region","aria-hidden":n.allowMultipleExpanded?!r:void 0,"aria-labelledby":n.getButtonId(e),id:n.getPanelId(e),hidden:!r||void 0}})),c(this,"getHeadingAttributes",(function(){return{role:"heading"}})),c(this,"getButtonAttributes",(function(e,t){var r=null!=t?t:n.isItemExpanded(e),i=n.isItemDisabled(e);return{id:n.getButtonId(e),"aria-disabled":i,"aria-expanded":r,"aria-controls":n.getPanelId(e),role:"button",tabIndex:0}})),c(this,"getPanelId",(function(e){return"accordion__panel-".concat(e)})),c(this,"getButtonId",(function(e){return"accordion__heading-".concat(e)})),c(this,"augment",(function(t){return new e(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?u(Object(n),!0).forEach((function(t){c(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):u(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}({expanded:n.expanded,allowMultipleExpanded:n.allowMultipleExpanded,allowZeroExpanded:n.allowZeroExpanded},t))})),this.expanded=a,this.allowMultipleExpanded=s,this.allowZeroExpanded=f},w=Object(r.createContext)(null),x=function(e){l(n,e);var t=v(n);function n(){var e;i(this,n);for(var r=arguments.length,a=new Array(r),o=0;o<r;o++)a[o]=arguments[o];return c(p(e=t.call.apply(t,[this].concat(a))),"state",new b({expanded:e.props.preExpanded,allowMultipleExpanded:e.props.allowMultipleExpanded,allowZeroExpanded:e.props.allowZeroExpanded})),c(p(e),"toggleExpanded",(function(t){e.setState((function(e){return e.toggleExpanded(t)}),(function(){e.props.onChange&&e.props.onChange(e.state.expanded)}))})),c(p(e),"isItemDisabled",(function(t){return e.state.isItemDisabled(t)})),c(p(e),"isItemExpanded",(function(t){return e.state.isItemExpanded(t)})),c(p(e),"getPanelAttributes",(function(t,n){return e.state.getPanelAttributes(t,n)})),c(p(e),"getHeadingAttributes",(function(){return e.state.getHeadingAttributes()})),c(p(e),"getButtonAttributes",(function(t,n){return e.state.getButtonAttributes(t,n)})),e}return o(n,[{key:"render",value:function(){var e=this.state,t=e.allowZeroExpanded,n=e.allowMultipleExpanded;return Object(r.createElement)(w.Provider,{value:{allowMultipleExpanded:n,allowZeroExpanded:t,toggleExpanded:this.toggleExpanded,isItemDisabled:this.isItemDisabled,isItemExpanded:this.isItemExpanded,getPanelAttributes:this.getPanelAttributes,getHeadingAttributes:this.getHeadingAttributes,getButtonAttributes:this.getButtonAttributes}},this.props.children||null)}}]),n}(r.PureComponent);c(x,"defaultProps",{allowMultipleExpanded:!1,allowZeroExpanded:!1});var S,k=function(e){l(n,e);var t=v(n);function n(){var e;i(this,n);for(var r=arguments.length,a=new Array(r),o=0;o<r;o++)a[o]=arguments[o];return c(p(e=t.call.apply(t,[this].concat(a))),"renderChildren",(function(t){return t?e.props.children(t):null})),e}return o(n,[{key:"render",value:function(){return Object(r.createElement)(w.Consumer,null,this.renderChildren)}}]),n}(r.PureComponent),_=function(e){var t=e.className,n=void 0===t?"accordion":t,i=e.allowMultipleExpanded,a=e.allowZeroExpanded,o=e.onChange,c=e.preExpanded,u=d(e,["className","allowMultipleExpanded","allowZeroExpanded","onChange","preExpanded"]);return Object(r.createElement)(x,{preExpanded:c,allowMultipleExpanded:i,allowZeroExpanded:a,onChange:o},Object(r.createElement)("div",s({"data-accordion-component":"Accordion",className:n},u)))};!function(e){e.Accordion="Accordion",e.AccordionItem="AccordionItem",e.AccordionItemButton="AccordionItemButton",e.AccordionItemHeading="AccordionItemHeading",e.AccordionItemPanel="AccordionItemPanel"}(S||(S={}));var z=S,C=0;function M(){var e=C;return C+=1,"raa-".concat(e)}function O(){C=0}var T=/[\u0009\u000a\u000c\u000d\u0020]/g;function E(e){return""!==e&&!T.test(e)||(console.error('uuid must be a valid HTML5 id but was given "'.concat(e,'", ASCII whitespaces are forbidden')),!1)}var L=Object(r.createContext)(null),A=function(e){l(n,e);var t=v(n);function n(){var e;i(this,n);for(var a=arguments.length,o=new Array(a),s=0;s<a;s++)o[s]=arguments[s];return c(p(e=t.call.apply(t,[this].concat(o))),"toggleExpanded",(function(){e.props.accordionContext.toggleExpanded(e.props.uuid)})),c(p(e),"renderChildren",(function(t){var n=e.props,i=n.uuid,a=n.dangerouslySetExpanded,o=null!=a?a:t.isItemExpanded(i),c=t.isItemDisabled(i),s=t.getPanelAttributes(i,a),u=t.getHeadingAttributes(i),l=t.getButtonAttributes(i,a);return Object(r.createElement)(L.Provider,{value:{uuid:i,expanded:o,disabled:c,toggleExpanded:e.toggleExpanded,panelAttributes:s,headingAttributes:u,buttonAttributes:l}},e.props.children)})),e}return o(n,[{key:"render",value:function(){return Object(r.createElement)(k,null,this.renderChildren)}}]),n}(r.Component),R=function(e){return Object(r.createElement)(k,null,(function(t){return Object(r.createElement)(A,s({},e,{accordionContext:t}))}))},N=function(e){l(n,e);var t=v(n);function n(){var e;i(this,n);for(var r=arguments.length,a=new Array(r),o=0;o<r;o++)a[o]=arguments[o];return c(p(e=t.call.apply(t,[this].concat(a))),"renderChildren",(function(t){return t?e.props.children(t):null})),e}return o(n,[{key:"render",value:function(){return Object(r.createElement)(L.Consumer,null,this.renderChildren)}}]),n}(r.PureComponent),H=function(e){l(n,e);var t=v(n);function n(){var e;i(this,n);for(var a=arguments.length,o=new Array(a),u=0;u<a;u++)o[u]=arguments[u];return c(p(e=t.call.apply(t,[this].concat(o))),"instanceUuid",M()),c(p(e),"renderChildren",(function(t){var n=e.props,i=(n.uuid,n.className),a=n.activeClassName,o=(n.dangerouslySetExpanded,d(n,["uuid","className","activeClassName","dangerouslySetExpanded"])),c=t.expanded&&a?a:i;return Object(r.createElement)("div",s({"data-accordion-component":"AccordionItem",className:c},o))})),e}return o(n,[{key:"render",value:function(){var e=this.props,t=e.uuid,n=void 0===t?this.instanceUuid:t,i=e.dangerouslySetExpanded,a=d(e,["uuid","dangerouslySetExpanded"]);return E(n),a.id&&E(a.id),Object(r.createElement)(R,{uuid:n,dangerouslySetExpanded:i},Object(r.createElement)(N,null,this.renderChildren))}}]),n}(r.Component);function P(e){var t=function e(t){return t&&(t.matches('[data-accordion-component="Accordion"]')?t:e(t.parentElement))}(e);return t&&Array.from(t.querySelectorAll('[data-accordion-component="AccordionItemButton"]'))}c(H,"defaultProps",{className:"accordion__item"}),c(H,"displayName",z.AccordionItem);var j="40",V="35",D="13",I="36",F="37",B="39",U="32",q="38",G=function(e){var t=e.toggleExpanded,n=e.className,i=void 0===n?"accordion__button":n,a=d(e,["toggleExpanded","className"]);return a.id&&E(a.id),Object(r.createElement)("div",s({className:i},a,{role:"button",tabIndex:0,onClick:t,onKeyDown:function(e){var n,r,i=e.which.toString();if(i!==D&&i!==U||(e.preventDefault(),t()),e.target instanceof HTMLElement)switch(i){case I:e.preventDefault(),n=e.target,(r=(P(n)||[])[0])&&r.focus();break;case V:e.preventDefault(),function(e){var t=P(e)||[],n=t[t.length-1];n&&n.focus()}(e.target);break;case F:case q:e.preventDefault(),function(e){var t=P(e)||[],n=t.indexOf(e);if(-1!==n){var r=t[n-1];r&&r.focus()}}(e.target);break;case B:case j:e.preventDefault(),function(e){var t=P(e)||[],n=t.indexOf(e);if(-1!==n){var r=t[n+1];r&&r.focus()}}(e.target)}},"data-accordion-component":"AccordionItemButton"}))},W=function(e){return Object(r.createElement)(N,null,(function(t){var n=t.toggleExpanded,i=t.buttonAttributes;return Object(r.createElement)(G,s({toggleExpanded:n},e,i))}))},Z=function(e){l(n,e);var t=v(n);function n(){var e;i(this,n);for(var r=arguments.length,a=new Array(r),o=0;o<r;o++)a[o]=arguments[o];return c(p(e=t.call.apply(t,[this].concat(a))),"ref",void 0),c(p(e),"setRef",(function(t){e.ref=t})),e}return o(n,[{key:"componentDidUpdate",value:function(){n.VALIDATE(this.ref)}},{key:"componentDidMount",value:function(){n.VALIDATE(this.ref)}},{key:"render",value:function(){return Object(r.createElement)("div",s({"data-accordion-component":"AccordionItemHeading"},this.props,{ref:this.setRef}))}}],[{key:"VALIDATE",value:function(e){if(void 0===e)throw new Error("ref is undefined");if(1!==e.childElementCount||!e.firstElementChild||"AccordionItemButton"!==e.firstElementChild.getAttribute("data-accordion-component"))throw new Error("AccordionItemButton may contain only one child element, which must be an instance of AccordionItemButton.\n\nFrom the WAI-ARIA spec (https://www.w3.org/TR/wai-aria-practices-1.1/#accordion):\n\n“The button element is the only element inside the heading element. That is, if there are other visually persistent elements, they are not included inside the heading element.”\n\n")}}]),n}(r.PureComponent);c(Z,"defaultProps",{className:"accordion__heading","aria-level":3});var $=function(e){return Object(r.createElement)(N,null,(function(t){var n=t.headingAttributes;return e.id&&E(e.id),Object(r.createElement)(Z,s({},e,n))}))};$.displayName=z.AccordionItemHeading;var J=function(e){var t=e.className,n=void 0===t?"accordion__panel":t,i=e.id,a=d(e,["className","id"]),o=function(e){var t=e.panelAttributes;return i&&E(i),Object(r.createElement)("div",s({"data-accordion-component":"AccordionItemPanel",className:n},a,t))};return Object(r.createElement)(N,null,o)},K=function(e){var t=e.children,n=function(e){var n=e.expanded,i=e.disabled;return Object(r.createElement)(r.Fragment,null,t({expanded:n,disabled:i}))};return Object(r.createElement)(N,null,n)}},function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n),Object.defineProperty(e,r,{enumerable:!0,get:function(){return t[n]}})}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.hasOwnProperty.call(e,n)&&r(t,e,n);return i(t,e),t},o=this&&this.__read||function(e,t){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var r,i,a=n.call(e),o=[];try{for(;(void 0===t||t-- >0)&&!(r=a.next()).done;)o.push(r.value)}catch(e){i={error:e}}finally{try{r&&!r.done&&(n=a.return)&&n.call(a)}finally{if(i)throw i.error}}return o},c=this&&this.__values||function(e){var t="function"==typeof Symbol&&Symbol.iterator,n=t&&e[t],r=0;if(n)return n.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&r>=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")},s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var u=a(n(0)),l=s(n(12)),f=s(n(9)),h=s(n(176)),d=n(72),p=s(n(177)),m=s(n(178)),v=n(2),g=s(n(91)),y=s(n(189)),b=s(n(190)),w=s(n(191)),x=s(n(36)),S=[v.messages.TestStepFinished.TestStepResult.Status.AMBIGUOUS,v.messages.TestStepFinished.TestStepResult.Status.FAILED,v.messages.TestStepFinished.TestStepResult.Status.PASSED,v.messages.TestStepFinished.TestStepResult.Status.PENDING,v.messages.TestStepFinished.TestStepResult.Status.SKIPPED,v.messages.TestStepFinished.TestStepResult.Status.UNDEFINED];t.default=function(){var e,t,n=u.default.useContext(l.default),r=u.default.useContext(f.default),i=n.getGherkinDocuments(),a=o(u.useState(""),2),s=a[0],v=a[1],k=b.default(i,n,r),_=o(u.useState(S.filter((function(e){return k.get(e)}))),2),z=_[0],C=_[1],M=new m.default(n);try{for(var O=c(i),T=O.next();!T.done;T=O.next()){var E=T.value;M.add(E)}}catch(t){e={error:t}}finally{try{T&&!T.done&&(t=O.return)&&t.call(O)}finally{if(e)throw e.error}}var L=(""===s?i:M.search(s)).map((function(e){return g.default(e,n,r,z)})).filter((function(e){return null!==e})),A=u.default.useContext(x.default).find((function(e){return null!==e.meta})).meta;return u.default.createElement("div",{className:"cucumber-filtered-results"},u.default.createElement("div",{className:"cucumber-report-header"},u.default.createElement(y.default,{scenarioCountByStatus:k}),u.default.createElement(w.default,{meta:A}),u.default.createElement(h.default,{queryUpdated:function(e){return v(e)},statusesUpdated:function(e){return C(e)},enabledStatuses:z,scenarioCountByStatus:k})),u.default.createElement(d.GherkinDocumentList,{gherkinDocuments:L}),u.default.createElement(p.default,{query:s,matches:L}))}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var i=r(n(0)),a=n(13),o=n(14),c=r(n(28)),s=n(2),u=r(n(33));t.default=function(e){var t=e.queryUpdated,n=e.statusesUpdated,r=e.enabledStatuses,l=e.scenarioCountByStatus,f=i.default.useContext(c.default),h=[s.messages.TestStepFinished.TestStepResult.Status.AMBIGUOUS,s.messages.TestStepFinished.TestStepResult.Status.FAILED,s.messages.TestStepFinished.TestStepResult.Status.PASSED,s.messages.TestStepFinished.TestStepResult.Status.PENDING,s.messages.TestStepFinished.TestStepResult.Status.SKIPPED,s.messages.TestStepFinished.TestStepResult.Status.UNDEFINED,s.messages.TestStepFinished.TestStepResult.Status.UNKNOWN],d=l.size>1||l.has(s.messages.TestStepFinished.TestStepResult.Status.UNKNOWN);return i.default.createElement("div",{className:"cucumber-search-bar"},i.default.createElement("form",{className:"cucumber-search-bar-search"},i.default.createElement("input",{type:"text",placeholder:"Some text or @tags",onKeyPress:function(e){"Enter"===e.key&&(t(f.query),e.preventDefault())},onChange:function(e){return f.query=e.target.value}}),i.default.createElement("button",{type:"submit",onClick:function(){return t(f.query)},value:"search"},i.default.createElement(o.FontAwesomeIcon,{icon:a.faSearch}))),i.default.createElement("p",{className:"help"},i.default.createElement(o.FontAwesomeIcon,{icon:a.faQuestionCircle}),"  You can use either plain text for the search or  ",i.default.createElement("a",{href:"https://cucumber.io/docs/cucumber/api/#tag-expressions"},"cucumber tag expressions"),"  to filter the output."),d&&i.default.createElement("form",{className:"cucumber-search-bar-filter"},i.default.createElement("span",null,i.default.createElement(o.FontAwesomeIcon,{icon:a.faFilter})," Filter by scenario status:"),i.default.createElement("ul",null,h.map((function(e,t){var a=u.default(e),o=r.includes(e),c="filter-status-"+a;if(void 0!==l.get(e))return i.default.createElement("li",{key:t},i.default.createElement("input",{id:c,type:"checkbox",defaultChecked:o,onChange:function(){r.includes(e)?n(r.filter((function(t){return t!==e}))):n([e].concat(r))}}),i.default.createElement("label",{htmlFor:c},a))})))))}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var i=r(n(0));t.default=function(e){var t=e.query,n=e.matches,r=""!==t&&0===n.length;return i.default.createElement("p",{className:"cucumber-no-documents"},r&&'No match found for: "'+t+'"')}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var i=r(n(179)),a=r(n(183)),o=r(n(188)),c=function(){function e(e){this.gherkinQuery=e,this.textSearch=new a.default,this.tagSearch=new i.default(e)}return e.prototype.search=function(e){if(o.default(e))try{return this.tagSearch.search(e)}catch(e){}return this.textSearch.search(e)},e.prototype.add=function(e){this.tagSearch.add(e),this.textSearch.add(e)},e}();t.default=c},function(e,t,n){"use strict";var r=this&&this.__assign||function(){return(r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var i in t=arguments[n])Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e}).apply(this,arguments)},i=this&&this.__values||function(e){var t="function"==typeof Symbol&&Symbol.iterator,n=t&&e[t],r=0;if(n)return n.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&r>=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")},a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=n(49),c=a(n(180)),s=n(35),u=function(){function e(e){this.gherkinQuery=e,this.pickleById=new Map,this.picklesByScenarioId=new o.ArrayMultimap,this.gherkinDocuments=[]}return e.prototype.search=function(e){var t=this,n=c.default(e),a={acceptScenario:function(e){var r,a,o=t.picklesByScenarioId.get(e.id);try{for(var c=i(o),s=c.next();!s.done;s=c.next()){var u=s.value.tags.map((function(e){return e.name}));if(n.evaluate(u))return!0}}catch(e){r={error:e}}finally{try{s&&!s.done&&(a=c.return)&&a.call(c)}finally{if(r)throw r.error}}return!1}},o=r(r({},s.rejectAllFilters),a),u=new s.GherkinDocumentWalker(o);return this.gherkinDocuments.map((function(e){return u.walkGherkinDocument(e)})).filter((function(e){return null!==e}))},e.prototype.add=function(e){var t=this;this.gherkinDocuments.push(e),this.gherkinQuery.getPickles().forEach((function(e){return t.pickleById.set(e.id,e)})),new s.GherkinDocumentWalker({},{handleScenario:function(n){t.gherkinQuery.getPickleIds(e.uri,n.id).map((function(e){return t.picklesByScenarioId.put(n.id,t.pickleById.get(e))}))}}).walkGherkinDocument(e)},e}();t.default=u},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r={"(":-2,")":-1,or:0,and:1,not:2},i={or:"left",and:"left",not:"right"};function a(e){return void 0!==i[e]}function o(e,t){if(e!==t)throw new Error("Syntax error. Expected "+e)}function c(e){return e[e.length-1]}function s(e){if(0===e.length)throw new Error("empty stack");return e.pop()}function u(e,t){if("and"===e){var n=s(t);t.push(new h(s(t),n))}else if("or"===e){var r=s(t);t.push(new f(s(t),r))}else"not"===e?t.push(new d(s(t))):t.push(new l(e))}t.default=function(e){var t=function(e){for(var t,n=[],r=!1,i=0;i<e.length;i++){var a=e.charAt(i);if("\\"===a)r=!0;else{if(/\s/.test(a))t&&(n.push(t.join("")),t=void 0);else{if(("("===a||")"===a)&&!r){t&&(n.push(t.join("")),t=void 0),n.push(a);continue}(t=t||[]).push(a)}r=!1}}t&&n.push(t.join(""));return n}(e);if(0===t.length)return new p;var n=[],l=[],f="operand";for(t.forEach((function(e){if(function(e){return"not"===e}(e))o(f,"operand"),l.push(e),f="operand";else if(function(e){return"or"===e||"and"===e}(e)){for(o(f,"operator");l.length>0&&a(c(l))&&("left"===i[e]&&r[e]<=r[c(l)]||"right"===i[e]&&r[e]<r[c(l)]);)u(s(l),n);l.push(e),f="operand"}else if("("===e)o(f,"operand"),l.push(e),f="operand";else if(")"===e){for(o(f,"operator");l.length>0&&"("!==c(l);)u(s(l),n);if(0===l.length)throw Error("Syntax error. Unmatched )");"("===c(l)&&s(l),f="operator"}else o(f,"operand"),u(e,n),f="operator"}));l.length>0;){if("("===c(l))throw Error("Syntax error. Unmatched (");u(s(l),n)}return s(n)};var l=function(){function e(e){this.value=e}return e.prototype.evaluate=function(e){return-1!==e.indexOf(this.value)},e.prototype.toString=function(){return this.value.replace(/\(/g,"\\(").replace(/\)/g,"\\)")},e}(),f=function(){function e(e,t){this.leftExpr=e,this.rightExpr=t}return e.prototype.evaluate=function(e){return this.leftExpr.evaluate(e)||this.rightExpr.evaluate(e)},e.prototype.toString=function(){return"( "+this.leftExpr.toString()+" or "+this.rightExpr.toString()+" )"},e}(),h=function(){function e(e,t){this.leftExpr=e,this.rightExpr=t}return e.prototype.evaluate=function(e){return this.leftExpr.evaluate(e)&&this.rightExpr.evaluate(e)},e.prototype.toString=function(){return"( "+this.leftExpr.toString()+" and "+this.rightExpr.toString()+" )"},e}(),d=function(){function e(e){this.expr=e}return e.prototype.evaluate=function(e){return!this.expr.evaluate(e)},e.prototype.toString=function(){return"not ( "+this.expr.toString()+" )"},e}(),p=function(){function e(){}return e.prototype.evaluate=function(e){return!0},e.prototype.toString=function(){return"true"},e}()},function(e,t,n){"use strict";var r=this&&this.__values||function(e){var t="function"==typeof Symbol&&Symbol.iterator,n=t&&e[t],r=0;if(n)return n.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&r>=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")};function i(e,t){var n,i,o,s,u="\n"+c(e.tags,t)+t+e.keyword+": "+e.name+"\n";e.description&&(u+=e.description+"\n\n");try{for(var l=r(e.steps),f=l.next();!f.done;f=l.next()){var h=f.value;u+=t+"  "+h.keyword+h.text+"\n"}}catch(e){n={error:e}}finally{try{f&&!f.done&&(i=l.return)&&i.call(l)}finally{if(n)throw n.error}}if(e.examples)try{for(var d=r(e.examples),p=d.next();!p.done;p=d.next()){u+=a(p.value,t+"  ")}}catch(e){o={error:e}}finally{try{p&&!p.done&&(s=d.return)&&s.call(d)}finally{if(o)throw o.error}}return u}function a(e,t){var n,i,a="\n"+t+"Examples: "+e.name+"\n";a+=o(e.tableHeader,t+"  ");try{for(var c=r(e.tableBody),s=c.next();!s.done;s=c.next()){a+=o(s.value,t+"  ")}}catch(e){n={error:e}}finally{try{s&&!s.done&&(i=c.return)&&i.call(c)}finally{if(n)throw n.error}}return a}function o(e,t){return t+"| "+e.cells.map((function(e){return e.value})).join(" | ")+" |\n"}function c(e,t){return void 0===t&&(t=""),void 0===e||0==e.length?"":t+e.map((function(e){return e.name})).join(" ")+"\n"}Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){var t,n,a,o,s=e.feature,u=c(s.tags);u+=s.keyword+": "+s.name+"\n",s.description&&(u+=s.description+"\n");try{for(var l=r(s.children),f=l.next();!f.done;f=l.next()){var h=f.value;if(h.background)u+=i(h.background,"  ");else if(h.scenario)u+=i(h.scenario,"  ");else if(h.rule){u+="\n  "+h.rule.keyword+": "+h.rule.name+"\n",h.rule.description&&(u+=h.rule.description+"\n");try{for(var d=(a=void 0,r(h.rule.children)),p=d.next();!p.done;p=d.next()){var m=p.value;m.background&&(u+=i(m.background,"    ")),m.scenario&&(u+=i(m.scenario,"    "))}}catch(e){a={error:e}}finally{try{p&&!p.done&&(o=d.return)&&o.call(d)}finally{if(a)throw a.error}}}}}catch(e){t={error:e}}finally{try{f&&!f.done&&(n=l.return)&&n.call(l)}finally{if(t)throw t.error}}return u}},function(e,t,n){"use strict";var r=this&&this.__assign||function(){return(r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var i in t=arguments[n])Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e}).apply(this,arguments)},i=this&&this.__values||function(e){var t="function"==typeof Symbol&&Symbol.iterator,n=t&&e[t],r=0;if(n)return n.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&r>=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(t,"__esModule",{value:!0}),t.rejectAllFilters=void 0;var a=n(2),o={acceptScenario:function(){return!0},acceptStep:function(){return!0},acceptBackground:function(){return!0},acceptRule:function(){return!0},acceptFeature:function(){return!0}};t.rejectAllFilters={acceptScenario:function(){return!1},acceptStep:function(){return!1},acceptBackground:function(){return!1},acceptRule:function(){return!1},acceptFeature:function(){return!1}};var c={handleStep:function(){return null},handleScenario:function(){return null},handleBackground:function(){return null},handleRule:function(){return null},handleFeature:function(){return null}},s=function(){function e(e,t){this.filters=r(r({},o),e),this.handlers=r(r({},c),t)}return e.prototype.walkGherkinDocument=function(e){var t=this.walkFeature(e.feature);return t?a.messages.GherkinDocument.create({feature:t,comments:e.comments,uri:e.uri}):null},e.prototype.walkFeature=function(e){var t=this,n=this.walkFeatureChildren(e.children);this.handlers.handleFeature(e);var r=n.find((function(e){return e.background}));return this.filters.acceptFeature(e)||r?this.copyFeature(e,e.children.map((function(e){return e.background?a.messages.GherkinDocument.Feature.FeatureChild.create({background:t.copyBackground(e.background)}):e.scenario?a.messages.GherkinDocument.Feature.FeatureChild.create({scenario:t.copyScenario(e.scenario)}):e.rule?a.messages.GherkinDocument.Feature.FeatureChild.create({rule:t.copyRule(e.rule,e.rule.children)}):void 0}))):n.find((function(e){return null!==e}))?this.copyFeature(e,n):void 0},e.prototype.copyFeature=function(e,t){return a.messages.GherkinDocument.Feature.create({children:this.filterFeatureChildren(e,t),location:e.location,language:e.language,keyword:e.keyword,name:e.name,description:e.description?e.description:void 0,tags:this.copyTags(e.tags)})},e.prototype.copyTags=function(e){return e.map((function(e){return a.messages.GherkinDocument.Feature.Tag.create({name:e.name,id:e.id,location:e.location})}))},e.prototype.filterFeatureChildren=function(e,t){var n,r,o=[],c=new Map(t.filter((function(e){return e.scenario})).map((function(e){return[e.scenario.id,e]}))),s=new Map(t.filter((function(e){return e.rule})).map((function(e){return[e.rule.id,e]})));try{for(var u=i(e.children),l=u.next();!l.done;l=u.next()){var f=l.value;if(f.background&&o.push(a.messages.GherkinDocument.Feature.FeatureChild.create({background:this.copyBackground(f.background)})),f.scenario){var h=c.get(f.scenario.id);h&&o.push(h)}if(f.rule){var d=s.get(f.rule.id);d&&o.push(d)}}}catch(e){n={error:e}}finally{try{l&&!l.done&&(r=u.return)&&r.call(u)}finally{if(n)throw n.error}}return o},e.prototype.walkFeatureChildren=function(e){var t,n,r=[];try{for(var o=i(e),c=o.next();!c.done;c=o.next()){var s=c.value,u=null,l=null,f=null;s.background&&(u=this.walkBackground(s.background)),s.scenario&&(l=this.walkScenario(s.scenario)),s.rule&&(f=this.walkRule(s.rule)),(u||l||f)&&r.push(a.messages.GherkinDocument.Feature.FeatureChild.create({background:u,scenario:l,rule:f}))}}catch(e){t={error:e}}finally{try{c&&!c.done&&(n=o.return)&&n.call(o)}finally{if(t)throw t.error}}return r},e.prototype.walkRule=function(e){var t=this.walkRuleChildren(e.children);this.handlers.handleRule(e);var n=t.find((function(e){return null!==e&&null!==e.background})),r=t.filter((function(e){return null!==e&&null!==e.scenario}));return this.filters.acceptRule(e)||n?this.copyRule(e,e.children):r.length>0?this.copyRule(e,r):void 0},e.prototype.copyRule=function(e,t){return a.messages.GherkinDocument.Feature.FeatureChild.Rule.create({id:e.id,name:e.name,description:e.description?e.description:void 0,location:e.location,keyword:e.keyword,children:this.filterRuleChildren(e.children,t)})},e.prototype.filterRuleChildren=function(e,t){var n,r,o=[],c=t.filter((function(e){return e.scenario})).map((function(e){return e.scenario.id}));try{for(var s=i(e),u=s.next();!u.done;u=s.next()){var l=u.value;l.background&&o.push(a.messages.GherkinDocument.Feature.FeatureChild.RuleChild.create({background:this.copyBackground(l.background)})),l.scenario&&c.includes(l.scenario.id)&&o.push(a.messages.GherkinDocument.Feature.FeatureChild.RuleChild.create({scenario:this.copyScenario(l.scenario)}))}}catch(e){n={error:e}}finally{try{u&&!u.done&&(r=s.return)&&r.call(s)}finally{if(n)throw n.error}}return o},e.prototype.walkRuleChildren=function(e){var t,n,r=[];try{for(var o=i(e),c=o.next();!c.done;c=o.next()){var s=c.value;s.background&&r.push(a.messages.GherkinDocument.Feature.FeatureChild.RuleChild.create({background:this.walkBackground(s.background)})),s.scenario&&r.push(a.messages.GherkinDocument.Feature.FeatureChild.RuleChild.create({scenario:this.walkScenario(s.scenario)}))}}catch(e){t={error:e}}finally{try{c&&!c.done&&(n=o.return)&&n.call(o)}finally{if(t)throw t.error}}return r},e.prototype.walkBackground=function(e){var t=this.walkAllSteps(e.steps);if(this.handlers.handleBackground(e),this.filters.acceptBackground(e)||t.find((function(e){return null!==e})))return this.copyBackground(e)},e.prototype.copyBackground=function(e){var t=this;return a.messages.GherkinDocument.Feature.Background.create({id:e.id,name:e.name,location:e.location,keyword:e.keyword,steps:e.steps.map((function(e){return t.copyStep(e)})),description:e.description?e.description:void 0})},e.prototype.walkScenario=function(e){var t=this.walkAllSteps(e.steps);if(this.handlers.handleScenario(e),this.filters.acceptScenario(e)||t.find((function(e){return null!==e})))return this.copyScenario(e)},e.prototype.copyScenario=function(e){var t=this;return a.messages.GherkinDocument.Feature.Scenario.create({id:e.id,name:e.name,description:e.description?e.description:void 0,location:e.location,keyword:e.keyword,examples:e.examples,steps:e.steps.map((function(e){return t.copyStep(e)})),tags:this.copyTags(e.tags)})},e.prototype.walkAllSteps=function(e){var t=this;return e.map((function(e){return t.walkStep(e)}))},e.prototype.walkStep=function(e){return this.handlers.handleStep(e),this.filters.acceptStep(e)?this.copyStep(e):null},e.prototype.copyStep=function(e){return a.messages.GherkinDocument.Feature.Step.create({id:e.id,keyword:e.keyword,location:e.location,text:e.text,dataTable:e.dataTable,docString:e.docString})},e}();t.default=s},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var i=r(n(184)),a=r(n(185)),o=r(n(186)),c=r(n(187)),s=n(35),u=function(){function e(){this.featureSearch=new i.default,this.backgroundSearch=new a.default,this.scenarioSearch=new a.default,this.stepSearch=new o.default,this.ruleSearch=new c.default,this.gherkinDocuments=[]}return e.prototype.search=function(e){var t=this.stepSearch.search(e),n=this.backgroundSearch.search(e),r=this.scenarioSearch.search(e),i=this.ruleSearch.search(e),a=this.featureSearch.search(e),o=new s.GherkinDocumentWalker({acceptStep:function(e){return t.includes(e)},acceptScenario:function(e){return r.includes(e)},acceptBackground:function(e){return n.includes(e)},acceptRule:function(e){return i.includes(e)},acceptFeature:function(e){return a.includes(e)}});return this.gherkinDocuments.map((function(e){return o.walkGherkinDocument(e)})).filter((function(e){return null!==e}))},e.prototype.add=function(e){var t=this;this.gherkinDocuments.push(e);var n=new s.GherkinDocumentWalker({},{handleStep:function(e){return t.stepSearch.add(e)},handleScenario:function(e){return t.scenarioSearch.add(e)},handleBackground:function(e){return t.backgroundSearch.add(e)},handleRule:function(e){return t.ruleSearch.add(e)}});this.featureSearch.add(e),n.walkGherkinDocument(e)},e}();t.default=u},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var i=r(n(22)),a=function(){function e(){this.featuresByUri=new Map,this.index=i.default((function(e){e.setRef("uri"),e.addField("name"),e.addField("description"),e.saveDocument(!0)}))}return e.prototype.add=function(e){this.featuresByUri.set(e.uri,e.feature),this.index.addDoc({uri:e.uri,name:e.feature.name,description:e.feature.description})},e.prototype.search=function(e){var t=this;return this.index.search(e,{fields:{name:{bool:"OR",expand:!0,boost:1},description:{bool:"OR",expand:!0,boost:1}}}).map((function(e){return t.featuresByUri.get(e.ref)}))},e}();t.default=a},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var i=r(n(22)),a=function(){function e(){this.index=i.default((function(e){e.setRef("id"),e.addField("name"),e.addField("description"),e.saveDocument(!0)})),this.scenarioById=new Map}return e.prototype.add=function(e){this.index.addDoc({id:e.id,name:e.name,description:e.description}),this.scenarioById.set(e.id,e)},e.prototype.search=function(e){var t=this;return this.index.search(e,{fields:{name:{bool:"OR",expand:!0,boost:1},description:{bool:"OR",expand:!0,boost:1}}}).map((function(e){return t.scenarioById.get(e.ref)}))},e}();t.default=a},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var i=r(n(22)),a=function(){function e(){this.index=i.default((function(e){e.addField("keyword"),e.addField("text"),e.addField("docString"),e.addField("dataTable"),e.setRef("id"),e.saveDocument(!0)})),this.stepById=new Map}return e.prototype.add=function(e){var t={id:e.id,keyword:e.keyword,text:e.text,docString:this.docStringToString(e),dataTable:this.dataTableToString(e)};this.index.addDoc(t),this.stepById.set(e.id,e)},e.prototype.search=function(e){var t=this;return this.index.search(e,{fields:{keyword:{bool:"OR",expand:!0,boost:1},text:{bool:"OR",expand:!0,boost:2},docString:{bool:"OR",expand:!0,boost:1},dataTable:{bool:"OR",expand:!0,boost:1}}}).map((function(e){return t.stepById.get(e.ref)}))},e.prototype.docStringToString=function(e){return e.docString?e.docString.content:""},e.prototype.dataTableToString=function(e){return e.dataTable?e.dataTable.rows.map((function(e){return e.cells.map((function(e){return e.value})).join(" ")})).join(" "):void 0},e}();t.default=a},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var i=r(n(22)),a=function(){function e(){this.index=i.default((function(e){e.setRef("id"),e.addField("name"),e.addField("description"),e.saveDocument(!0)})),this.ruleById=new Map}return e.prototype.add=function(e){this.index.addDoc({id:e.id,name:e.name,description:e.description}),this.ruleById.set(e.id,e)},e.prototype.search=function(e){var t=this;return this.index.search(e,{fields:{name:{bool:"OR",expand:!0,boost:1},description:{bool:"OR",expand:!0,boost:1}}}).map((function(e){return t.ruleById.get(e.ref)}))},e}();t.default=a},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){return!!/^\s*((@[^\s]+\s*)|(and\s+)|(or\s+)|(not\s+)|\(|\))+\s*$/.exec(e)}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var i=r(n(0)),a=n(2),o=r(n(33)),c=r(n(34));t.default=function(e){var t=e.scenarioCountByStatus,n=[a.messages.TestStepFinished.TestStepResult.Status.AMBIGUOUS,a.messages.TestStepFinished.TestStepResult.Status.FAILED,a.messages.TestStepFinished.TestStepResult.Status.PASSED,a.messages.TestStepFinished.TestStepResult.Status.PENDING,a.messages.TestStepFinished.TestStepResult.Status.SKIPPED,a.messages.TestStepFinished.TestStepResult.Status.UNDEFINED,a.messages.TestStepFinished.TestStepResult.Status.UNKNOWN];return i.default.createElement("div",{className:"cucumber-status-filter"},i.default.createElement("table",null,i.default.createElement("thead",null,i.default.createElement("tr",null,i.default.createElement("th",{colSpan:2},"Execution summary"))),i.default.createElement("tbody",null,n.map((function(e,n){var r=o.default(e),a=t.get(e);if(void 0!==a)return i.default.createElement("tr",{key:n},i.default.createElement("td",null,i.default.createElement(c.default,{status:e})," ",r),i.default.createElement("td",null,a," scenarios"))})))))}},function(e,t,n){"use strict";var r=this&&this.__values||function(e){var t="function"==typeof Symbol&&Symbol.iterator,n=t&&e[t],r=0;if(n)return n.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&r>=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(t,"__esModule",{value:!0});var i=n(35);t.default=function(e,t,n){var a,o,c=new Map,s=function(e){new i.GherkinDocumentWalker({},{handleScenario:function(r){t.getPickleIds(e.uri,r.id).forEach((function(e){var t=n.getWorstTestStepResult(n.getPickleTestStepResults([e])).status;c.has(t)?c.set(t,c.get(t)+1):c.set(t,1)}))}}).walkGherkinDocument(e)};try{for(var u=r(e),l=u.next();!l.done;l=u.next()){s(l.value)}}catch(e){a={error:e}}finally{try{l&&!l.done&&(o=u.return)&&o.call(u)}finally{if(a)throw a.error}}return c}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var i=r(n(0)),a=r(n(36)),o=r(n(192)),c=r(n(194)),s=r(n(195)),u=function(e){var t=e.name,n=e.product,r=[n.name,n.version].filter((function(e){return""!==e&&null!=e})).join(" - ");return i.default.createElement("tr",null,i.default.createElement("th",null,t),i.default.createElement("td",null,r))};t.default=function(e){var t=e.meta,n=i.default.useContext(a.default),r=function(e){var t=e.find((function(e){return null!==e.testRunStarted}));return t?t.testRunStarted:void 0}(n),l=function(e){var t=e.find((function(e){return null!==e.testRunFinished}));return t?t.testRunFinished:void 0}(n),f=c.default(r,l);return i.default.createElement("div",{className:"cucumber-execution-data"},i.default.createElement("table",null,i.default.createElement("tbody",null,f&&i.default.createElement("tr",null,i.default.createElement("th",null,"Duration"),i.default.createElement("td",null,i.default.createElement(s.default,{durationMillis:f}))),t.ci&&i.default.createElement("tr",null,i.default.createElement("th",null,"Build"),i.default.createElement("td",null,i.default.createElement("a",{href:t.ci.url},t.ci.name))),t.ci&&i.default.createElement("tr",null,i.default.createElement("th",null,"Commit"),i.default.createElement("td",null,i.default.createElement(o.default,{ci:t.ci}))),t.implementation&&i.default.createElement(u,{name:"Implementation",product:t.implementation}),t.runtime&&i.default.createElement(u,{name:"Runtime",product:t.runtime}),t.os&&i.default.createElement(u,{name:"OS",product:t.os}),t.cpu&&i.default.createElement(u,{name:"CPU",product:t.cpu}))))}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var i=r(n(0)),a=r(n(193));t.default=function(e){var t=e.ci,n=a.default(t);return n?i.default.createElement("a",{href:n},"#",t.git.revision):i.default.createElement("span",null,"#",t.git.revision)}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){var t="GitHub Actions"==e.name,n=e.git&&e.git.remote&&e.git.remote.match(/^https?:\/\/github.com\/.*/);if(t||n)return e.git.remote.replace(/\.git$/,"")+"/commit/"+e.git.revision}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(2);t.default=function(e,t){if(void 0!==e&&void 0!==t)return r.TimeConversion.timestampToMillisecondsSinceEpoch(t.timestamp)-r.TimeConversion.timestampToMillisecondsSinceEpoch(e.timestamp)}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var i=r(n(0)),a=r(n(196));t.default=function(e){var t=e.durationMillis,n=a.default(t);return i.default.createElement("span",null,n.days>0&&i.default.createElement("span",null,n.days,"d")," ",n.hours>0&&i.default.createElement("span",null,n.hours,"h")," ",n.minutes>0&&i.default.createElement("span",null,n.minutes,"m")," ",n.seconds>0&&i.default.createElement("span",null,n.seconds,"s")," ",n.millis>0&&i.default.createElement("span",null,n.millis,"ms"))}},function(e,t,n){"use strict";function r(e,t){return t>0?parseFloat(e.toFixed(t)):parseInt(e.toFixed(t))}function i(e,t,n,i,a){void 0===a&&(a=0);var o=e[t];return o>=i&&(e[n]=Math.trunc(o/i),e[t]=r(o%i,a)),e}Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){return e<1e3?{millis:r(e,2)}:function(e){return i(e,"hours","days",24)}(function(e){return i(e,"minutes","hours",60)}(i({seconds:r(e/1e3,3)},"seconds","minutes",60,3)))}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var i=r(n(0)),a=r(n(12)),o=r(n(9)),c=r(n(28)),s=r(n(36));t.default=function(e){var t=e.gherkinQuery,n=e.cucumberQuery,r=e.envelopesQuery,u=e.query,l=e.children,f={query:u};return i.default.createElement("div",{className:"cucumber-react"},i.default.createElement(o.default.Provider,{value:n},i.default.createElement(a.default.Provider,{value:t},i.default.createElement(c.default.Provider,{value:f},i.default.createElement(s.default.Provider,{value:r},l)))))}},function(e,t,n){"use strict";!function e(){if("undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&"function"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE){0;try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(e){console.error(e)}}}(),e.exports=n(199)},function(e,t,n){"use strict";
              + +

              /** @license React v16.13.1

              + +
              * react-dom.production.min.js
              +*
              +* Copyright (c) Facebook, Inc. and its affiliates.
              +*
              +* This source code is licensed under the MIT license found in the
              +* LICENSE file in the root directory of this source tree.
              +*/var r=n(0),i=n(73),a=n(200);function o(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n<arguments.length;n++)t+="&args[]="+encodeURIComponent(arguments[n]);return"Minified React error #"+e+"; visit "+t+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}if(!r)throw Error(o(227));function c(e,t,n,r,i,a,o,c,s){var u=Array.prototype.slice.call(arguments,3);try{t.apply(n,u)}catch(e){this.onError(e)}}var s=!1,u=null,l=!1,f=null,h={onError:function(e){s=!0,u=e}};function d(e,t,n,r,i,a,o,l,f){s=!1,u=null,c.apply(h,arguments)}var p=null,m=null,v=null;function g(e,t,n){var r=e.type||"unknown-event";e.currentTarget=v(n),function(e,t,n,r,i,a,c,h,p){if(d.apply(this,arguments),s){if(!s)throw Error(o(198));var m=u;s=!1,u=null,l||(l=!0,f=m)}}(r,t,void 0,e),e.currentTarget=null}var y=null,b={};function w(){if(y)for(var e in b){var t=b[e],n=y.indexOf(e);if(!(-1<n))throw Error(o(96,e));if(!S[n]){if(!t.extractEvents)throw Error(o(97,e));for(var r in S[n]=t,n=t.eventTypes){var i=void 0,a=n[r],c=t,s=r;if(k.hasOwnProperty(s))throw Error(o(99,s));k[s]=a;var u=a.phasedRegistrationNames;if(u){for(i in u)u.hasOwnProperty(i)&&x(u[i],c,s);i=!0}else a.registrationName?(x(a.registrationName,c,s),i=!0):i=!1;if(!i)throw Error(o(98,r,e))}}}}function x(e,t,n){if(_[e])throw Error(o(100,e));_[e]=t,z[e]=t.eventTypes[n].dependencies}var S=[],k={},_={},z={};function C(e){var t,n=!1;for(t in e)if(e.hasOwnProperty(t)){var r=e[t];if(!b.hasOwnProperty(t)||b[t]!==r){if(b[t])throw Error(o(102,t));b[t]=r,n=!0}}n&&w()}var M=!("undefined"==typeof window||void 0===window.document||void 0===window.document.createElement),O=null,T=null,E=null;function L(e){if(e=m(e)){if("function"!=typeof O)throw Error(o(280));var t=e.stateNode;t&&(t=p(t),O(e.stateNode,e.type,t))}}function A(e){T?E?E.push(e):E=[e]:T=e}function R(){if(T){var e=T,t=E;if(E=T=null,L(e),t)for(e=0;e<t.length;e++)L(t[e])}}function N(e,t){return e(t)}function H(e,t,n,r,i){return e(t,n,r,i)}function P(){}var j=N,V=!1,D=!1;function I(){null===T&&null===E||(P(),R())}function F(e,t,n){if(D)return e(t,n);D=!0;try{return j(e,t,n)}finally{D=!1,I()}}var B=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,U=Object.prototype.hasOwnProperty,q={},G={};function W(e,t,n,r,i,a){this.acceptsBooleans=2===t||3===t||4===t,this.attributeName=r,this.attributeNamespace=i,this.mustUseProperty=n,this.propertyName=e,this.type=t,this.sanitizeURL=a}var Z={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach((function(e){Z[e]=new W(e,0,!1,e,null,!1)})),[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach((function(e){var t=e[0];Z[t]=new W(t,1,!1,e[1],null,!1)})),["contentEditable","draggable","spellCheck","value"].forEach((function(e){Z[e]=new W(e,2,!1,e.toLowerCase(),null,!1)})),["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach((function(e){Z[e]=new W(e,2,!1,e,null,!1)})),"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach((function(e){Z[e]=new W(e,3,!1,e.toLowerCase(),null,!1)})),["checked","multiple","muted","selected"].forEach((function(e){Z[e]=new W(e,3,!0,e,null,!1)})),["capture","download"].forEach((function(e){Z[e]=new W(e,4,!1,e,null,!1)})),["cols","rows","size","span"].forEach((function(e){Z[e]=new W(e,6,!1,e,null,!1)})),["rowSpan","start"].forEach((function(e){Z[e]=new W(e,5,!1,e.toLowerCase(),null,!1)}));var $=/[\-:]([a-z])/g;function J(e){return e[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach((function(e){var t=e.replace($,J);Z[t]=new W(t,1,!1,e,null,!1)})),"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach((function(e){var t=e.replace($,J);Z[t]=new W(t,1,!1,e,"http://www.w3.org/1999/xlink",!1)})),["xml:base","xml:lang","xml:space"].forEach((function(e){var t=e.replace($,J);Z[t]=new W(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1)})),["tabIndex","crossOrigin"].forEach((function(e){Z[e]=new W(e,1,!1,e.toLowerCase(),null,!1)})),Z.xlinkHref=new W("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0),["src","href","action","formAction"].forEach((function(e){Z[e]=new W(e,1,!1,e.toLowerCase(),null,!0)}));var K=r.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;function Q(e,t,n,r){var i=Z.hasOwnProperty(t)?Z[t]:null;(null!==i?0===i.type:!r&&(2<t.length&&("o"===t[0]||"O"===t[0])&&("n"===t[1]||"N"===t[1])))||(function(e,t,n,r){if(null==t||function(e,t,n,r){if(null!==n&&0===n.type)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return!r&&(null!==n?!n.acceptsBooleans:"data-"!==(e=e.toLowerCase().slice(0,5))&&"aria-"!==e);default:return!1}}(e,t,n,r))return!0;if(r)return!1;if(null!==n)switch(n.type){case 3:return!t;case 4:return!1===t;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}(t,n,i,r)&&(n=null),r||null===i?function(e){return!!U.call(G,e)||!U.call(q,e)&&(B.test(e)?G[e]=!0:(q[e]=!0,!1))}(t)&&(null===n?e.removeAttribute(t):e.setAttribute(t,""+n)):i.mustUseProperty?e[i.propertyName]=null===n?3!==i.type&&"":n:(t=i.attributeName,r=i.attributeNamespace,null===n?e.removeAttribute(t):(n=3===(i=i.type)||4===i&&!0===n?"":""+n,r?e.setAttributeNS(r,t,n):e.setAttribute(t,n))))}K.hasOwnProperty("ReactCurrentDispatcher")||(K.ReactCurrentDispatcher={current:null}),K.hasOwnProperty("ReactCurrentBatchConfig")||(K.ReactCurrentBatchConfig={suspense:null});var Y=/^(.*)[\\\/]/,X="function"==typeof Symbol&&Symbol.for,ee=X?Symbol.for("react.element"):60103,te=X?Symbol.for("react.portal"):60106,ne=X?Symbol.for("react.fragment"):60107,re=X?Symbol.for("react.strict_mode"):60108,ie=X?Symbol.for("react.profiler"):60114,ae=X?Symbol.for("react.provider"):60109,oe=X?Symbol.for("react.context"):60110,ce=X?Symbol.for("react.concurrent_mode"):60111,se=X?Symbol.for("react.forward_ref"):60112,ue=X?Symbol.for("react.suspense"):60113,le=X?Symbol.for("react.suspense_list"):60120,fe=X?Symbol.for("react.memo"):60115,he=X?Symbol.for("react.lazy"):60116,de=X?Symbol.for("react.block"):60121,pe="function"==typeof Symbol&&Symbol.iterator;function me(e){return null===e||"object"!=typeof e?null:"function"==typeof(e=pe&&e[pe]||e["@@iterator"])?e:null}function ve(e){if(null==e)return null;if("function"==typeof e)return e.displayName||e.name||null;if("string"==typeof e)return e;switch(e){case ne:return"Fragment";case te:return"Portal";case ie:return"Profiler";case re:return"StrictMode";case ue:return"Suspense";case le:return"SuspenseList"}if("object"==typeof e)switch(e.$$typeof){case oe:return"Context.Consumer";case ae:return"Context.Provider";case se:var t=e.render;return t=t.displayName||t.name||"",e.displayName||(""!==t?"ForwardRef("+t+")":"ForwardRef");case fe:return ve(e.type);case de:return ve(e.render);case he:if(e=1===e._status?e._result:null)return ve(e)}return null}function ge(e){var t="";do{e:switch(e.tag){case 3:case 4:case 6:case 7:case 10:case 9:var n="";break e;default:var r=e._debugOwner,i=e._debugSource,a=ve(e.type);n=null,r&&(n=ve(r.type)),r=a,a="",i?a=" (at "+i.fileName.replace(Y,"")+":"+i.lineNumber+")":n&&(a=" (created by "+n+")"),n="\n    in "+(r||"Unknown")+a}t+=n,e=e.return}while(e);return t}function ye(e){switch(typeof e){case"boolean":case"number":case"object":case"string":case"undefined":return e;default:return""}}function be(e){var t=e.type;return(e=e.nodeName)&&"input"===e.toLowerCase()&&("checkbox"===t||"radio"===t)}function we(e){e._valueTracker||(e._valueTracker=function(e){var t=be(e)?"checked":"value",n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),r=""+e[t];if(!e.hasOwnProperty(t)&&void 0!==n&&"function"==typeof n.get&&"function"==typeof n.set){var i=n.get,a=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return i.call(this)},set:function(e){r=""+e,a.call(this,e)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return r},setValue:function(e){r=""+e},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}(e))}function xe(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),r="";return e&&(r=be(e)?e.checked?"true":"false":e.value),(e=r)!==n&&(t.setValue(e),!0)}function Se(e,t){var n=t.checked;return i({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:null!=n?n:e._wrapperState.initialChecked})}function ke(e,t){var n=null==t.defaultValue?"":t.defaultValue,r=null!=t.checked?t.checked:t.defaultChecked;n=ye(null!=t.value?t.value:n),e._wrapperState={initialChecked:r,initialValue:n,controlled:"checkbox"===t.type||"radio"===t.type?null!=t.checked:null!=t.value}}function _e(e,t){null!=(t=t.checked)&&Q(e,"checked",t,!1)}function ze(e,t){_e(e,t);var n=ye(t.value),r=t.type;if(null!=n)"number"===r?(0===n&&""===e.value||e.value!=n)&&(e.value=""+n):e.value!==""+n&&(e.value=""+n);else if("submit"===r||"reset"===r)return void e.removeAttribute("value");t.hasOwnProperty("value")?Me(e,t.type,n):t.hasOwnProperty("defaultValue")&&Me(e,t.type,ye(t.defaultValue)),null==t.checked&&null!=t.defaultChecked&&(e.defaultChecked=!!t.defaultChecked)}function Ce(e,t,n){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var r=t.type;if(!("submit"!==r&&"reset"!==r||void 0!==t.value&&null!==t.value))return;t=""+e._wrapperState.initialValue,n||t===e.value||(e.value=t),e.defaultValue=t}""!==(n=e.name)&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,""!==n&&(e.name=n)}function Me(e,t,n){"number"===t&&e.ownerDocument.activeElement===e||(null==n?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+n&&(e.defaultValue=""+n))}function Oe(e,t){return e=i({children:void 0},t),(t=function(e){var t="";return r.Children.forEach(e,(function(e){null!=e&&(t+=e)})),t}(t.children))&&(e.children=t),e}function Te(e,t,n,r){if(e=e.options,t){t={};for(var i=0;i<n.length;i++)t["$"+n[i]]=!0;for(n=0;n<e.length;n++)i=t.hasOwnProperty("$"+e[n].value),e[n].selected!==i&&(e[n].selected=i),i&&r&&(e[n].defaultSelected=!0)}else{for(n=""+ye(n),t=null,i=0;i<e.length;i++){if(e[i].value===n)return e[i].selected=!0,void(r&&(e[i].defaultSelected=!0));null!==t||e[i].disabled||(t=e[i])}null!==t&&(t.selected=!0)}}function Ee(e,t){if(null!=t.dangerouslySetInnerHTML)throw Error(o(91));return i({},t,{value:void 0,defaultValue:void 0,children:""+e._wrapperState.initialValue})}function Le(e,t){var n=t.value;if(null==n){if(n=t.children,t=t.defaultValue,null!=n){if(null!=t)throw Error(o(92));if(Array.isArray(n)){if(!(1>=n.length))throw Error(o(93));n=n[0]}t=n}null==t&&(t=""),n=t}e._wrapperState={initialValue:ye(n)}}function Ae(e,t){var n=ye(t.value),r=ye(t.defaultValue);null!=n&&((n=""+n)!==e.value&&(e.value=n),null==t.defaultValue&&e.defaultValue!==n&&(e.defaultValue=n)),null!=r&&(e.defaultValue=""+r)}function Re(e){var t=e.textContent;t===e._wrapperState.initialValue&&""!==t&&null!==t&&(e.value=t)}var Ne="http://www.w3.org/1999/xhtml",He="http://www.w3.org/2000/svg";function Pe(e){switch(e){case"svg":return"http://www.w3.org/2000/svg";case"math":return"http://www.w3.org/1998/Math/MathML";default:return"http://www.w3.org/1999/xhtml"}}function je(e,t){return null==e||"http://www.w3.org/1999/xhtml"===e?Pe(t):"http://www.w3.org/2000/svg"===e&&"foreignObject"===t?"http://www.w3.org/1999/xhtml":e}var Ve,De=function(e){return"undefined"!=typeof MSApp&&MSApp.execUnsafeLocalFunction?function(t,n,r,i){MSApp.execUnsafeLocalFunction((function(){return e(t,n)}))}:e}((function(e,t){if(e.namespaceURI!==He||"innerHTML"in e)e.innerHTML=t;else{for((Ve=Ve||document.createElement("div")).innerHTML="<svg>"+t.valueOf().toString()+"</svg>",t=Ve.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}}));function Ie(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&3===n.nodeType)return void(n.nodeValue=t)}e.textContent=t}function Fe(e,t){var n={};return n[e.toLowerCase()]=t.toLowerCase(),n["Webkit"+e]="webkit"+t,n["Moz"+e]="moz"+t,n}var Be={animationend:Fe("Animation","AnimationEnd"),animationiteration:Fe("Animation","AnimationIteration"),animationstart:Fe("Animation","AnimationStart"),transitionend:Fe("Transition","TransitionEnd")},Ue={},qe={};function Ge(e){if(Ue[e])return Ue[e];if(!Be[e])return e;var t,n=Be[e];for(t in n)if(n.hasOwnProperty(t)&&t in qe)return Ue[e]=n[t];return e}M&&(qe=document.createElement("div").style,"AnimationEvent"in window||(delete Be.animationend.animation,delete Be.animationiteration.animation,delete Be.animationstart.animation),"TransitionEvent"in window||delete Be.transitionend.transition);var We=Ge("animationend"),Ze=Ge("animationiteration"),$e=Ge("animationstart"),Je=Ge("transitionend"),Ke="abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange seeked seeking stalled suspend timeupdate volumechange waiting".split(" "),Qe=new("function"==typeof WeakMap?WeakMap:Map);function Ye(e){var t=Qe.get(e);return void 0===t&&(t=new Map,Qe.set(e,t)),t}function Xe(e){var t=e,n=e;if(e.alternate)for(;t.return;)t=t.return;else{e=t;do{0!=(1026&(t=e).effectTag)&&(n=t.return),e=t.return}while(e)}return 3===t.tag?n:null}function et(e){if(13===e.tag){var t=e.memoizedState;if(null===t&&(null!==(e=e.alternate)&&(t=e.memoizedState)),null!==t)return t.dehydrated}return null}function tt(e){if(Xe(e)!==e)throw Error(o(188))}function nt(e){if(!(e=function(e){var t=e.alternate;if(!t){if(null===(t=Xe(e)))throw Error(o(188));return t!==e?null:e}for(var n=e,r=t;;){var i=n.return;if(null===i)break;var a=i.alternate;if(null===a){if(null!==(r=i.return)){n=r;continue}break}if(i.child===a.child){for(a=i.child;a;){if(a===n)return tt(i),e;if(a===r)return tt(i),t;a=a.sibling}throw Error(o(188))}if(n.return!==r.return)n=i,r=a;else{for(var c=!1,s=i.child;s;){if(s===n){c=!0,n=i,r=a;break}if(s===r){c=!0,r=i,n=a;break}s=s.sibling}if(!c){for(s=a.child;s;){if(s===n){c=!0,n=a,r=i;break}if(s===r){c=!0,r=a,n=i;break}s=s.sibling}if(!c)throw Error(o(189))}}if(n.alternate!==r)throw Error(o(190))}if(3!==n.tag)throw Error(o(188));return n.stateNode.current===n?e:t}(e)))return null;for(var t=e;;){if(5===t.tag||6===t.tag)return t;if(t.child)t.child.return=t,t=t.child;else{if(t===e)break;for(;!t.sibling;){if(!t.return||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}}return null}function rt(e,t){if(null==t)throw Error(o(30));return null==e?t:Array.isArray(e)?Array.isArray(t)?(e.push.apply(e,t),e):(e.push(t),e):Array.isArray(t)?[e].concat(t):[e,t]}function it(e,t,n){Array.isArray(e)?e.forEach(t,n):e&&t.call(n,e)}var at=null;function ot(e){if(e){var t=e._dispatchListeners,n=e._dispatchInstances;if(Array.isArray(t))for(var r=0;r<t.length&&!e.isPropagationStopped();r++)g(e,t[r],n[r]);else t&&g(e,t,n);e._dispatchListeners=null,e._dispatchInstances=null,e.isPersistent()||e.constructor.release(e)}}function ct(e){if(null!==e&&(at=rt(at,e)),e=at,at=null,e){if(it(e,ot),at)throw Error(o(95));if(l)throw e=f,l=!1,f=null,e}}function st(e){return(e=e.target||e.srcElement||window).correspondingUseElement&&(e=e.correspondingUseElement),3===e.nodeType?e.parentNode:e}function ut(e){if(!M)return!1;var t=(e="on"+e)in document;return t||((t=document.createElement("div")).setAttribute(e,"return;"),t="function"==typeof t[e]),t}var lt=[];function ft(e){e.topLevelType=null,e.nativeEvent=null,e.targetInst=null,e.ancestors.length=0,10>lt.length&&lt.push(e)}function ht(e,t,n,r){if(lt.length){var i=lt.pop();return i.topLevelType=e,i.eventSystemFlags=r,i.nativeEvent=t,i.targetInst=n,i}return{topLevelType:e,eventSystemFlags:r,nativeEvent:t,targetInst:n,ancestors:[]}}function dt(e){var t=e.targetInst,n=t;do{if(!n){e.ancestors.push(n);break}var r=n;if(3===r.tag)r=r.stateNode.containerInfo;else{for(;r.return;)r=r.return;r=3!==r.tag?null:r.stateNode.containerInfo}if(!r)break;5!==(t=n.tag)&&6!==t||e.ancestors.push(n),n=Mn(r)}while(n);for(n=0;n<e.ancestors.length;n++){t=e.ancestors[n];var i=st(e.nativeEvent);r=e.topLevelType;var a=e.nativeEvent,o=e.eventSystemFlags;0===n&&(o|=64);for(var c=null,s=0;s<S.length;s++){var u=S[s];u&&(u=u.extractEvents(r,t,a,i,o))&&(c=rt(c,u))}ct(c)}}function pt(e,t,n){if(!n.has(e)){switch(e){case"scroll":$t(t,"scroll",!0);break;case"focus":case"blur":$t(t,"focus",!0),$t(t,"blur",!0),n.set("blur",null),n.set("focus",null);break;case"cancel":case"close":ut(e)&&$t(t,e,!0);break;case"invalid":case"submit":case"reset":break;default:-1===Ke.indexOf(e)&&Zt(e,t)}n.set(e,null)}}var mt,vt,gt,yt=!1,bt=[],wt=null,xt=null,St=null,kt=new Map,_t=new Map,zt=[],Ct="mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput close cancel copy cut paste click change contextmenu reset submit".split(" "),Mt="focus blur dragenter dragleave mouseover mouseout pointerover pointerout gotpointercapture lostpointercapture".split(" ");function Ot(e,t,n,r,i){return{blockedOn:e,topLevelType:t,eventSystemFlags:32|n,nativeEvent:i,container:r}}function Tt(e,t){switch(e){case"focus":case"blur":wt=null;break;case"dragenter":case"dragleave":xt=null;break;case"mouseover":case"mouseout":St=null;break;case"pointerover":case"pointerout":kt.delete(t.pointerId);break;case"gotpointercapture":case"lostpointercapture":_t.delete(t.pointerId)}}function Et(e,t,n,r,i,a){return null===e||e.nativeEvent!==a?(e=Ot(t,n,r,i,a),null!==t&&(null!==(t=On(t))&&vt(t)),e):(e.eventSystemFlags|=r,e)}function Lt(e){var t=Mn(e.target);if(null!==t){var n=Xe(t);if(null!==n)if(13===(t=n.tag)){if(null!==(t=et(n)))return e.blockedOn=t,void a.unstable_runWithPriority(e.priority,(function(){gt(n)}))}else if(3===t&&n.stateNode.hydrate)return void(e.blockedOn=3===n.tag?n.stateNode.containerInfo:null)}e.blockedOn=null}function At(e){if(null!==e.blockedOn)return!1;var t=Yt(e.topLevelType,e.eventSystemFlags,e.container,e.nativeEvent);if(null!==t){var n=On(t);return null!==n&&vt(n),e.blockedOn=t,!1}return!0}function Rt(e,t,n){At(e)&&n.delete(t)}function Nt(){for(yt=!1;0<bt.length;){var e=bt[0];if(null!==e.blockedOn){null!==(e=On(e.blockedOn))&&mt(e);break}var t=Yt(e.topLevelType,e.eventSystemFlags,e.container,e.nativeEvent);null!==t?e.blockedOn=t:bt.shift()}null!==wt&&At(wt)&&(wt=null),null!==xt&&At(xt)&&(xt=null),null!==St&&At(St)&&(St=null),kt.forEach(Rt),_t.forEach(Rt)}function Ht(e,t){e.blockedOn===t&&(e.blockedOn=null,yt||(yt=!0,a.unstable_scheduleCallback(a.unstable_NormalPriority,Nt)))}function Pt(e){function t(t){return Ht(t,e)}if(0<bt.length){Ht(bt[0],e);for(var n=1;n<bt.length;n++){var r=bt[n];r.blockedOn===e&&(r.blockedOn=null)}}for(null!==wt&&Ht(wt,e),null!==xt&&Ht(xt,e),null!==St&&Ht(St,e),kt.forEach(t),_t.forEach(t),n=0;n<zt.length;n++)(r=zt[n]).blockedOn===e&&(r.blockedOn=null);for(;0<zt.length&&null===(n=zt[0]).blockedOn;)Lt(n),null===n.blockedOn&&zt.shift()}var jt={},Vt=new Map,Dt=new Map,It=["abort","abort",We,"animationEnd",Ze,"animationIteration",$e,"animationStart","canplay","canPlay","canplaythrough","canPlayThrough","durationchange","durationChange","emptied","emptied","encrypted","encrypted","ended","ended","error","error","gotpointercapture","gotPointerCapture","load","load","loadeddata","loadedData","loadedmetadata","loadedMetadata","loadstart","loadStart","lostpointercapture","lostPointerCapture","playing","playing","progress","progress","seeking","seeking","stalled","stalled","suspend","suspend","timeupdate","timeUpdate",Je,"transitionEnd","waiting","waiting"];function Ft(e,t){for(var n=0;n<e.length;n+=2){var r=e[n],i=e[n+1],a="on"+(i[0].toUpperCase()+i.slice(1));a={phasedRegistrationNames:{bubbled:a,captured:a+"Capture"},dependencies:[r],eventPriority:t},Dt.set(r,t),Vt.set(r,a),jt[i]=a}}Ft("blur blur cancel cancel click click close close contextmenu contextMenu copy copy cut cut auxclick auxClick dblclick doubleClick dragend dragEnd dragstart dragStart drop drop focus focus input input invalid invalid keydown keyDown keypress keyPress keyup keyUp mousedown mouseDown mouseup mouseUp paste paste pause pause play play pointercancel pointerCancel pointerdown pointerDown pointerup pointerUp ratechange rateChange reset reset seeked seeked submit submit touchcancel touchCancel touchend touchEnd touchstart touchStart volumechange volumeChange".split(" "),0),Ft("drag drag dragenter dragEnter dragexit dragExit dragleave dragLeave dragover dragOver mousemove mouseMove mouseout mouseOut mouseover mouseOver pointermove pointerMove pointerout pointerOut pointerover pointerOver scroll scroll toggle toggle touchmove touchMove wheel wheel".split(" "),1),Ft(It,2);for(var Bt="change selectionchange textInput compositionstart compositionend compositionupdate".split(" "),Ut=0;Ut<Bt.length;Ut++)Dt.set(Bt[Ut],0);var qt=a.unstable_UserBlockingPriority,Gt=a.unstable_runWithPriority,Wt=!0;function Zt(e,t){$t(t,e,!1)}function $t(e,t,n){var r=Dt.get(t);switch(void 0===r?2:r){case 0:r=Jt.bind(null,t,1,e);break;case 1:r=Kt.bind(null,t,1,e);break;default:r=Qt.bind(null,t,1,e)}n?e.addEventListener(t,r,!0):e.addEventListener(t,r,!1)}function Jt(e,t,n,r){V||P();var i=Qt,a=V;V=!0;try{H(i,e,t,n,r)}finally{(V=a)||I()}}function Kt(e,t,n,r){Gt(qt,Qt.bind(null,e,t,n,r))}function Qt(e,t,n,r){if(Wt)if(0<bt.length&&-1<Ct.indexOf(e))e=Ot(null,e,t,n,r),bt.push(e);else{var i=Yt(e,t,n,r);if(null===i)Tt(e,r);else if(-1<Ct.indexOf(e))e=Ot(i,e,t,n,r),bt.push(e);else if(!function(e,t,n,r,i){switch(t){case"focus":return wt=Et(wt,e,t,n,r,i),!0;case"dragenter":return xt=Et(xt,e,t,n,r,i),!0;case"mouseover":return St=Et(St,e,t,n,r,i),!0;case"pointerover":var a=i.pointerId;return kt.set(a,Et(kt.get(a)||null,e,t,n,r,i)),!0;case"gotpointercapture":return a=i.pointerId,_t.set(a,Et(_t.get(a)||null,e,t,n,r,i)),!0}return!1}(i,e,t,n,r)){Tt(e,r),e=ht(e,r,null,t);try{F(dt,e)}finally{ft(e)}}}}function Yt(e,t,n,r){if(null!==(n=Mn(n=st(r)))){var i=Xe(n);if(null===i)n=null;else{var a=i.tag;if(13===a){if(null!==(n=et(i)))return n;n=null}else if(3===a){if(i.stateNode.hydrate)return 3===i.tag?i.stateNode.containerInfo:null;n=null}else i!==n&&(n=null)}}e=ht(e,r,n,t);try{F(dt,e)}finally{ft(e)}return null}var Xt={animationIterationCount:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},en=["Webkit","ms","Moz","O"];function tn(e,t,n){return null==t||"boolean"==typeof t||""===t?"":n||"number"!=typeof t||0===t||Xt.hasOwnProperty(e)&&Xt[e]?(""+t).trim():t+"px"}function nn(e,t){for(var n in e=e.style,t)if(t.hasOwnProperty(n)){var r=0===n.indexOf("--"),i=tn(n,t[n],r);"float"===n&&(n="cssFloat"),r?e.setProperty(n,i):e[n]=i}}Object.keys(Xt).forEach((function(e){en.forEach((function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),Xt[t]=Xt[e]}))}));var rn=i({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function an(e,t){if(t){if(rn[e]&&(null!=t.children||null!=t.dangerouslySetInnerHTML))throw Error(o(137,e,""));if(null!=t.dangerouslySetInnerHTML){if(null!=t.children)throw Error(o(60));if("object"!=typeof t.dangerouslySetInnerHTML||!("__html"in t.dangerouslySetInnerHTML))throw Error(o(61))}if(null!=t.style&&"object"!=typeof t.style)throw Error(o(62,""))}}function on(e,t){if(-1===e.indexOf("-"))return"string"==typeof t.is;switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var cn=Ne;function sn(e,t){var n=Ye(e=9===e.nodeType||11===e.nodeType?e:e.ownerDocument);t=z[t];for(var r=0;r<t.length;r++)pt(t[r],e,n)}function un(){}function ln(e){if(void 0===(e=e||("undefined"!=typeof document?document:void 0)))return null;try{return e.activeElement||e.body}catch(t){return e.body}}function fn(e){for(;e&&e.firstChild;)e=e.firstChild;return e}function hn(e,t){var n,r=fn(e);for(e=0;r;){if(3===r.nodeType){if(n=e+r.textContent.length,e<=t&&n>=t)return{node:r,offset:t-e};e=n}e:{for(;r;){if(r.nextSibling){r=r.nextSibling;break e}r=r.parentNode}r=void 0}r=fn(r)}}function dn(){for(var e=window,t=ln();t instanceof e.HTMLIFrameElement;){try{var n="string"==typeof t.contentWindow.location.href}catch(e){n=!1}if(!n)break;t=ln((e=t.contentWindow).document)}return t}function pn(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&("input"===t&&("text"===e.type||"search"===e.type||"tel"===e.type||"url"===e.type||"password"===e.type)||"textarea"===t||"true"===e.contentEditable)}var mn=null,vn=null;function gn(e,t){switch(e){case"button":case"input":case"select":case"textarea":return!!t.autoFocus}return!1}function yn(e,t){return"textarea"===e||"option"===e||"noscript"===e||"string"==typeof t.children||"number"==typeof t.children||"object"==typeof t.dangerouslySetInnerHTML&&null!==t.dangerouslySetInnerHTML&&null!=t.dangerouslySetInnerHTML.__html}var bn="function"==typeof setTimeout?setTimeout:void 0,wn="function"==typeof clearTimeout?clearTimeout:void 0;function xn(e){for(;null!=e;e=e.nextSibling){var t=e.nodeType;if(1===t||3===t)break}return e}function Sn(e){e=e.previousSibling;for(var t=0;e;){if(8===e.nodeType){var n=e.data;if("$"===n||"$!"===n||"$?"===n){if(0===t)return e;t--}else"/$"===n&&t++}e=e.previousSibling}return null}var kn=Math.random().toString(36).slice(2),_n="__reactInternalInstance$"+kn,zn="__reactEventHandlers$"+kn,Cn="__reactContainere$"+kn;function Mn(e){var t=e[_n];if(t)return t;for(var n=e.parentNode;n;){if(t=n[Cn]||n[_n]){if(n=t.alternate,null!==t.child||null!==n&&null!==n.child)for(e=Sn(e);null!==e;){if(n=e[_n])return n;e=Sn(e)}return t}n=(e=n).parentNode}return null}function On(e){return!(e=e[_n]||e[Cn])||5!==e.tag&&6!==e.tag&&13!==e.tag&&3!==e.tag?null:e}function Tn(e){if(5===e.tag||6===e.tag)return e.stateNode;throw Error(o(33))}function En(e){return e[zn]||null}function Ln(e){do{e=e.return}while(e&&5!==e.tag);return e||null}function An(e,t){var n=e.stateNode;if(!n)return null;var r=p(n);if(!r)return null;n=r[t];e:switch(t){case"onClick":case"onClickCapture":case"onDoubleClick":case"onDoubleClickCapture":case"onMouseDown":case"onMouseDownCapture":case"onMouseMove":case"onMouseMoveCapture":case"onMouseUp":case"onMouseUpCapture":case"onMouseEnter":(r=!r.disabled)||(r=!("button"===(e=e.type)||"input"===e||"select"===e||"textarea"===e)),e=!r;break e;default:e=!1}if(e)return null;if(n&&"function"!=typeof n)throw Error(o(231,t,typeof n));return n}function Rn(e,t,n){(t=An(e,n.dispatchConfig.phasedRegistrationNames[t]))&&(n._dispatchListeners=rt(n._dispatchListeners,t),n._dispatchInstances=rt(n._dispatchInstances,e))}function Nn(e){if(e&&e.dispatchConfig.phasedRegistrationNames){for(var t=e._targetInst,n=[];t;)n.push(t),t=Ln(t);for(t=n.length;0<t--;)Rn(n[t],"captured",e);for(t=0;t<n.length;t++)Rn(n[t],"bubbled",e)}}function Hn(e,t,n){e&&n&&n.dispatchConfig.registrationName&&(t=An(e,n.dispatchConfig.registrationName))&&(n._dispatchListeners=rt(n._dispatchListeners,t),n._dispatchInstances=rt(n._dispatchInstances,e))}function Pn(e){e&&e.dispatchConfig.registrationName&&Hn(e._targetInst,null,e)}function jn(e){it(e,Nn)}var Vn=null,Dn=null,In=null;function Fn(){if(In)return In;var e,t,n=Dn,r=n.length,i="value"in Vn?Vn.value:Vn.textContent,a=i.length;for(e=0;e<r&&n[e]===i[e];e++);var o=r-e;for(t=1;t<=o&&n[r-t]===i[a-t];t++);return In=i.slice(e,1<t?1-t:void 0)}function Bn(){return!0}function Un(){return!1}function qn(e,t,n,r){for(var i in this.dispatchConfig=e,this._targetInst=t,this.nativeEvent=n,e=this.constructor.Interface)e.hasOwnProperty(i)&&((t=e[i])?this[i]=t(n):"target"===i?this.target=r:this[i]=n[i]);return this.isDefaultPrevented=(null!=n.defaultPrevented?n.defaultPrevented:!1===n.returnValue)?Bn:Un,this.isPropagationStopped=Un,this}function Gn(e,t,n,r){if(this.eventPool.length){var i=this.eventPool.pop();return this.call(i,e,t,n,r),i}return new this(e,t,n,r)}function Wn(e){if(!(e instanceof this))throw Error(o(279));e.destructor(),10>this.eventPool.length&&this.eventPool.push(e)}function Zn(e){e.eventPool=[],e.getPooled=Gn,e.release=Wn}i(qn.prototype,{preventDefault:function(){this.defaultPrevented=!0;var e=this.nativeEvent;e&&(e.preventDefault?e.preventDefault():"unknown"!=typeof e.returnValue&&(e.returnValue=!1),this.isDefaultPrevented=Bn)},stopPropagation:function(){var e=this.nativeEvent;e&&(e.stopPropagation?e.stopPropagation():"unknown"!=typeof e.cancelBubble&&(e.cancelBubble=!0),this.isPropagationStopped=Bn)},persist:function(){this.isPersistent=Bn},isPersistent:Un,destructor:function(){var e,t=this.constructor.Interface;for(e in t)this[e]=null;this.nativeEvent=this._targetInst=this.dispatchConfig=null,this.isPropagationStopped=this.isDefaultPrevented=Un,this._dispatchInstances=this._dispatchListeners=null}}),qn.Interface={type:null,target:null,currentTarget:function(){return null},eventPhase:null,bubbles:null,cancelable:null,timeStamp:function(e){return e.timeStamp||Date.now()},defaultPrevented:null,isTrusted:null},qn.extend=function(e){function t(){}function n(){return r.apply(this,arguments)}var r=this;t.prototype=r.prototype;var a=new t;return i(a,n.prototype),n.prototype=a,n.prototype.constructor=n,n.Interface=i({},r.Interface,e),n.extend=r.extend,Zn(n),n},Zn(qn);var $n=qn.extend({data:null}),Jn=qn.extend({data:null}),Kn=[9,13,27,32],Qn=M&&"CompositionEvent"in window,Yn=null;M&&"documentMode"in document&&(Yn=document.documentMode);var Xn=M&&"TextEvent"in window&&!Yn,er=M&&(!Qn||Yn&&8<Yn&&11>=Yn),tr=String.fromCharCode(32),nr={beforeInput:{phasedRegistrationNames:{bubbled:"onBeforeInput",captured:"onBeforeInputCapture"},dependencies:["compositionend","keypress","textInput","paste"]},compositionEnd:{phasedRegistrationNames:{bubbled:"onCompositionEnd",captured:"onCompositionEndCapture"},dependencies:"blur compositionend keydown keypress keyup mousedown".split(" ")},compositionStart:{phasedRegistrationNames:{bubbled:"onCompositionStart",captured:"onCompositionStartCapture"},dependencies:"blur compositionstart keydown keypress keyup mousedown".split(" ")},compositionUpdate:{phasedRegistrationNames:{bubbled:"onCompositionUpdate",captured:"onCompositionUpdateCapture"},dependencies:"blur compositionupdate keydown keypress keyup mousedown".split(" ")}},rr=!1;function ir(e,t){switch(e){case"keyup":return-1!==Kn.indexOf(t.keyCode);case"keydown":return 229!==t.keyCode;case"keypress":case"mousedown":case"blur":return!0;default:return!1}}function ar(e){return"object"==typeof(e=e.detail)&&"data"in e?e.data:null}var or=!1;var cr={eventTypes:nr,extractEvents:function(e,t,n,r){var i;if(Qn)e:{switch(e){case"compositionstart":var a=nr.compositionStart;break e;case"compositionend":a=nr.compositionEnd;break e;case"compositionupdate":a=nr.compositionUpdate;break e}a=void 0}else or?ir(e,n)&&(a=nr.compositionEnd):"keydown"===e&&229===n.keyCode&&(a=nr.compositionStart);return a?(er&&"ko"!==n.locale&&(or||a!==nr.compositionStart?a===nr.compositionEnd&&or&&(i=Fn()):(Dn="value"in(Vn=r)?Vn.value:Vn.textContent,or=!0)),a=$n.getPooled(a,t,n,r),i?a.data=i:null!==(i=ar(n))&&(a.data=i),jn(a),i=a):i=null,(e=Xn?function(e,t){switch(e){case"compositionend":return ar(t);case"keypress":return 32!==t.which?null:(rr=!0,tr);case"textInput":return(e=t.data)===tr&&rr?null:e;default:return null}}(e,n):function(e,t){if(or)return"compositionend"===e||!Qn&&ir(e,t)?(e=Fn(),In=Dn=Vn=null,or=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1<t.char.length)return t.char;if(t.which)return String.fromCharCode(t.which)}return null;case"compositionend":return er&&"ko"!==t.locale?null:t.data;default:return null}}(e,n))?((t=Jn.getPooled(nr.beforeInput,t,n,r)).data=e,jn(t)):t=null,null===i?t:null===t?i:[i,t]}},sr={color:!0,date:!0,datetime:!0,"datetime-local":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};function ur(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return"input"===t?!!sr[e.type]:"textarea"===t}var lr={change:{phasedRegistrationNames:{bubbled:"onChange",captured:"onChangeCapture"},dependencies:"blur change click focus input keydown keyup selectionchange".split(" ")}};function fr(e,t,n){return(e=qn.getPooled(lr.change,e,t,n)).type="change",A(n),jn(e),e}var hr=null,dr=null;function pr(e){ct(e)}function mr(e){if(xe(Tn(e)))return e}function vr(e,t){if("change"===e)return t}var gr=!1;function yr(){hr&&(hr.detachEvent("onpropertychange",br),dr=hr=null)}function br(e){if("value"===e.propertyName&&mr(dr))if(e=fr(dr,e,st(e)),V)ct(e);else{V=!0;try{N(pr,e)}finally{V=!1,I()}}}function wr(e,t,n){"focus"===e?(yr(),dr=n,(hr=t).attachEvent("onpropertychange",br)):"blur"===e&&yr()}function xr(e){if("selectionchange"===e||"keyup"===e||"keydown"===e)return mr(dr)}function Sr(e,t){if("click"===e)return mr(t)}function kr(e,t){if("input"===e||"change"===e)return mr(t)}M&&(gr=ut("input")&&(!document.documentMode||9<document.documentMode));var _r={eventTypes:lr,_isInputEventSupported:gr,extractEvents:function(e,t,n,r){var i=t?Tn(t):window,a=i.nodeName&&i.nodeName.toLowerCase();if("select"===a||"input"===a&&"file"===i.type)var o=vr;else if(ur(i))if(gr)o=kr;else{o=xr;var c=wr}else(a=i.nodeName)&&"input"===a.toLowerCase()&&("checkbox"===i.type||"radio"===i.type)&&(o=Sr);if(o&&(o=o(e,t)))return fr(o,n,r);c&&c(e,i,t),"blur"===e&&(e=i._wrapperState)&&e.controlled&&"number"===i.type&&Me(i,"number",i.value)}},zr=qn.extend({view:null,detail:null}),Cr={Alt:"altKey",Control:"ctrlKey",Meta:"metaKey",Shift:"shiftKey"};function Mr(e){var t=this.nativeEvent;return t.getModifierState?t.getModifierState(e):!!(e=Cr[e])&&!!t[e]}function Or(){return Mr}var Tr=0,Er=0,Lr=!1,Ar=!1,Rr=zr.extend({screenX:null,screenY:null,clientX:null,clientY:null,pageX:null,pageY:null,ctrlKey:null,shiftKey:null,altKey:null,metaKey:null,getModifierState:Or,button:null,buttons:null,relatedTarget:function(e){return e.relatedTarget||(e.fromElement===e.srcElement?e.toElement:e.fromElement)},movementX:function(e){if("movementX"in e)return e.movementX;var t=Tr;return Tr=e.screenX,Lr?"mousemove"===e.type?e.screenX-t:0:(Lr=!0,0)},movementY:function(e){if("movementY"in e)return e.movementY;var t=Er;return Er=e.screenY,Ar?"mousemove"===e.type?e.screenY-t:0:(Ar=!0,0)}}),Nr=Rr.extend({pointerId:null,width:null,height:null,pressure:null,tangentialPressure:null,tiltX:null,tiltY:null,twist:null,pointerType:null,isPrimary:null}),Hr={mouseEnter:{registrationName:"onMouseEnter",dependencies:["mouseout","mouseover"]},mouseLeave:{registrationName:"onMouseLeave",dependencies:["mouseout","mouseover"]},pointerEnter:{registrationName:"onPointerEnter",dependencies:["pointerout","pointerover"]},pointerLeave:{registrationName:"onPointerLeave",dependencies:["pointerout","pointerover"]}},Pr={eventTypes:Hr,extractEvents:function(e,t,n,r,i){var a="mouseover"===e||"pointerover"===e,o="mouseout"===e||"pointerout"===e;if(a&&0==(32&i)&&(n.relatedTarget||n.fromElement)||!o&&!a)return null;(a=r.window===r?r:(a=r.ownerDocument)?a.defaultView||a.parentWindow:window,o)?(o=t,null!==(t=(t=n.relatedTarget||n.toElement)?Mn(t):null)&&(t!==Xe(t)||5!==t.tag&&6!==t.tag)&&(t=null)):o=null;if(o===t)return null;if("mouseout"===e||"mouseover"===e)var c=Rr,s=Hr.mouseLeave,u=Hr.mouseEnter,l="mouse";else"pointerout"!==e&&"pointerover"!==e||(c=Nr,s=Hr.pointerLeave,u=Hr.pointerEnter,l="pointer");if(e=null==o?a:Tn(o),a=null==t?a:Tn(t),(s=c.getPooled(s,o,n,r)).type=l+"leave",s.target=e,s.relatedTarget=a,(n=c.getPooled(u,t,n,r)).type=l+"enter",n.target=a,n.relatedTarget=e,l=t,(r=o)&&l)e:{for(u=l,o=0,e=c=r;e;e=Ln(e))o++;for(e=0,t=u;t;t=Ln(t))e++;for(;0<o-e;)c=Ln(c),o--;for(;0<e-o;)u=Ln(u),e--;for(;o--;){if(c===u||c===u.alternate)break e;c=Ln(c),u=Ln(u)}c=null}else c=null;for(u=c,c=[];r&&r!==u&&(null===(o=r.alternate)||o!==u);)c.push(r),r=Ln(r);for(r=[];l&&l!==u&&(null===(o=l.alternate)||o!==u);)r.push(l),l=Ln(l);for(l=0;l<c.length;l++)Hn(c[l],"bubbled",s);for(l=r.length;0<l--;)Hn(r[l],"captured",n);return 0==(64&i)?[s]:[s,n]}};var jr="function"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t},Vr=Object.prototype.hasOwnProperty;function Dr(e,t){if(jr(e,t))return!0;if("object"!=typeof e||null===e||"object"!=typeof t||null===t)return!1;var n=Object.keys(e),r=Object.keys(t);if(n.length!==r.length)return!1;for(r=0;r<n.length;r++)if(!Vr.call(t,n[r])||!jr(e[n[r]],t[n[r]]))return!1;return!0}var Ir=M&&"documentMode"in document&&11>=document.documentMode,Fr={select:{phasedRegistrationNames:{bubbled:"onSelect",captured:"onSelectCapture"},dependencies:"blur contextmenu dragend focus keydown keyup mousedown mouseup selectionchange".split(" ")}},Br=null,Ur=null,qr=null,Gr=!1;function Wr(e,t){var n=t.window===t?t.document:9===t.nodeType?t:t.ownerDocument;return Gr||null==Br||Br!==ln(n)?null:("selectionStart"in(n=Br)&&pn(n)?n={start:n.selectionStart,end:n.selectionEnd}:n={anchorNode:(n=(n.ownerDocument&&n.ownerDocument.defaultView||window).getSelection()).anchorNode,anchorOffset:n.anchorOffset,focusNode:n.focusNode,focusOffset:n.focusOffset},qr&&Dr(qr,n)?null:(qr=n,(e=qn.getPooled(Fr.select,Ur,e,t)).type="select",e.target=Br,jn(e),e))}var Zr={eventTypes:Fr,extractEvents:function(e,t,n,r,i,a){if(!(a=!(i=a||(r.window===r?r.document:9===r.nodeType?r:r.ownerDocument)))){e:{i=Ye(i),a=z.onSelect;for(var o=0;o<a.length;o++)if(!i.has(a[o])){i=!1;break e}i=!0}a=!i}if(a)return null;switch(i=t?Tn(t):window,e){case"focus":(ur(i)||"true"===i.contentEditable)&&(Br=i,Ur=t,qr=null);break;case"blur":qr=Ur=Br=null;break;case"mousedown":Gr=!0;break;case"contextmenu":case"mouseup":case"dragend":return Gr=!1,Wr(n,r);case"selectionchange":if(Ir)break;case"keydown":case"keyup":return Wr(n,r)}return null}},$r=qn.extend({animationName:null,elapsedTime:null,pseudoElement:null}),Jr=qn.extend({clipboardData:function(e){return"clipboardData"in e?e.clipboardData:window.clipboardData}}),Kr=zr.extend({relatedTarget:null});function Qr(e){var t=e.keyCode;return"charCode"in e?0===(e=e.charCode)&&13===t&&(e=13):e=t,10===e&&(e=13),32<=e||13===e?e:0}var Yr={Esc:"Escape",Spacebar:" ",Left:"ArrowLeft",Up:"ArrowUp",Right:"ArrowRight",Down:"ArrowDown",Del:"Delete",Win:"OS",Menu:"ContextMenu",Apps:"ContextMenu",Scroll:"ScrollLock",MozPrintableKey:"Unidentified"},Xr={8:"Backspace",9:"Tab",12:"Clear",13:"Enter",16:"Shift",17:"Control",18:"Alt",19:"Pause",20:"CapsLock",27:"Escape",32:" ",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"ArrowLeft",38:"ArrowUp",39:"ArrowRight",40:"ArrowDown",45:"Insert",46:"Delete",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",144:"NumLock",145:"ScrollLock",224:"Meta"},ei=zr.extend({key:function(e){if(e.key){var t=Yr[e.key]||e.key;if("Unidentified"!==t)return t}return"keypress"===e.type?13===(e=Qr(e))?"Enter":String.fromCharCode(e):"keydown"===e.type||"keyup"===e.type?Xr[e.keyCode]||"Unidentified":""},location:null,ctrlKey:null,shiftKey:null,altKey:null,metaKey:null,repeat:null,locale:null,getModifierState:Or,charCode:function(e){return"keypress"===e.type?Qr(e):0},keyCode:function(e){return"keydown"===e.type||"keyup"===e.type?e.keyCode:0},which:function(e){return"keypress"===e.type?Qr(e):"keydown"===e.type||"keyup"===e.type?e.keyCode:0}}),ti=Rr.extend({dataTransfer:null}),ni=zr.extend({touches:null,targetTouches:null,changedTouches:null,altKey:null,metaKey:null,ctrlKey:null,shiftKey:null,getModifierState:Or}),ri=qn.extend({propertyName:null,elapsedTime:null,pseudoElement:null}),ii=Rr.extend({deltaX:function(e){return"deltaX"in e?e.deltaX:"wheelDeltaX"in e?-e.wheelDeltaX:0},deltaY:function(e){return"deltaY"in e?e.deltaY:"wheelDeltaY"in e?-e.wheelDeltaY:"wheelDelta"in e?-e.wheelDelta:0},deltaZ:null,deltaMode:null}),ai={eventTypes:jt,extractEvents:function(e,t,n,r){var i=Vt.get(e);if(!i)return null;switch(e){case"keypress":if(0===Qr(n))return null;case"keydown":case"keyup":e=ei;break;case"blur":case"focus":e=Kr;break;case"click":if(2===n.button)return null;case"auxclick":case"dblclick":case"mousedown":case"mousemove":case"mouseup":case"mouseout":case"mouseover":case"contextmenu":e=Rr;break;case"drag":case"dragend":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"dragstart":case"drop":e=ti;break;case"touchcancel":case"touchend":case"touchmove":case"touchstart":e=ni;break;case We:case Ze:case $e:e=$r;break;case Je:e=ri;break;case"scroll":e=zr;break;case"wheel":e=ii;break;case"copy":case"cut":case"paste":e=Jr;break;case"gotpointercapture":case"lostpointercapture":case"pointercancel":case"pointerdown":case"pointermove":case"pointerout":case"pointerover":case"pointerup":e=Nr;break;default:e=qn}return jn(t=e.getPooled(i,t,n,r)),t}};if(y)throw Error(o(101));y=Array.prototype.slice.call("ResponderEventPlugin SimpleEventPlugin EnterLeaveEventPlugin ChangeEventPlugin SelectEventPlugin BeforeInputEventPlugin".split(" ")),w(),p=En,m=On,v=Tn,C({SimpleEventPlugin:ai,EnterLeaveEventPlugin:Pr,ChangeEventPlugin:_r,SelectEventPlugin:Zr,BeforeInputEventPlugin:cr});var oi=[],ci=-1;function si(e){0>ci||(e.current=oi[ci],oi[ci]=null,ci--)}function ui(e,t){ci++,oi[ci]=e.current,e.current=t}var li={},fi={current:li},hi={current:!1},di=li;function pi(e,t){var n=e.type.contextTypes;if(!n)return li;var r=e.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===t)return r.__reactInternalMemoizedMaskedChildContext;var i,a={};for(i in n)a[i]=t[i];return r&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=a),a}function mi(e){return null!=(e=e.childContextTypes)}function vi(){si(hi),si(fi)}function gi(e,t,n){if(fi.current!==li)throw Error(o(168));ui(fi,t),ui(hi,n)}function yi(e,t,n){var r=e.stateNode;if(e=t.childContextTypes,"function"!=typeof r.getChildContext)return n;for(var a in r=r.getChildContext())if(!(a in e))throw Error(o(108,ve(t)||"Unknown",a));return i({},n,{},r)}function bi(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||li,di=fi.current,ui(fi,e),ui(hi,hi.current),!0}function wi(e,t,n){var r=e.stateNode;if(!r)throw Error(o(169));n?(e=yi(e,t,di),r.__reactInternalMemoizedMergedChildContext=e,si(hi),si(fi),ui(fi,e)):si(hi),ui(hi,n)}var xi=a.unstable_runWithPriority,Si=a.unstable_scheduleCallback,ki=a.unstable_cancelCallback,_i=a.unstable_requestPaint,zi=a.unstable_now,Ci=a.unstable_getCurrentPriorityLevel,Mi=a.unstable_ImmediatePriority,Oi=a.unstable_UserBlockingPriority,Ti=a.unstable_NormalPriority,Ei=a.unstable_LowPriority,Li=a.unstable_IdlePriority,Ai={},Ri=a.unstable_shouldYield,Ni=void 0!==_i?_i:function(){},Hi=null,Pi=null,ji=!1,Vi=zi(),Di=1e4>Vi?zi:function(){return zi()-Vi};function Ii(){switch(Ci()){case Mi:return 99;case Oi:return 98;case Ti:return 97;case Ei:return 96;case Li:return 95;default:throw Error(o(332))}}function Fi(e){switch(e){case 99:return Mi;case 98:return Oi;case 97:return Ti;case 96:return Ei;case 95:return Li;default:throw Error(o(332))}}function Bi(e,t){return e=Fi(e),xi(e,t)}function Ui(e,t,n){return e=Fi(e),Si(e,t,n)}function qi(e){return null===Hi?(Hi=[e],Pi=Si(Mi,Wi)):Hi.push(e),Ai}function Gi(){if(null!==Pi){var e=Pi;Pi=null,ki(e)}Wi()}function Wi(){if(!ji&&null!==Hi){ji=!0;var e=0;try{var t=Hi;Bi(99,(function(){for(;e<t.length;e++){var n=t[e];do{n=n(!0)}while(null!==n)}})),Hi=null}catch(t){throw null!==Hi&&(Hi=Hi.slice(e+1)),Si(Mi,Gi),t}finally{ji=!1}}}function Zi(e,t,n){return 1073741821-(1+((1073741821-e+t/10)/(n/=10)|0))*n}function $i(e,t){if(e&&e.defaultProps)for(var n in t=i({},t),e=e.defaultProps)void 0===t[n]&&(t[n]=e[n]);return t}var Ji={current:null},Ki=null,Qi=null,Yi=null;function Xi(){Yi=Qi=Ki=null}function ea(e){var t=Ji.current;si(Ji),e.type._context._currentValue=t}function ta(e,t){for(;null!==e;){var n=e.alternate;if(e.childExpirationTime<t)e.childExpirationTime=t,null!==n&&n.childExpirationTime<t&&(n.childExpirationTime=t);else{if(!(null!==n&&n.childExpirationTime<t))break;n.childExpirationTime=t}e=e.return}}function na(e,t){Ki=e,Yi=Qi=null,null!==(e=e.dependencies)&&null!==e.firstContext&&(e.expirationTime>=t&&(Eo=!0),e.firstContext=null)}function ra(e,t){if(Yi!==e&&!1!==t&&0!==t)if("number"==typeof t&&1073741823!==t||(Yi=e,t=1073741823),t={context:e,observedBits:t,next:null},null===Qi){if(null===Ki)throw Error(o(308));Qi=t,Ki.dependencies={expirationTime:0,firstContext:t,responders:null}}else Qi=Qi.next=t;return e._currentValue}var ia=!1;function aa(e){e.updateQueue={baseState:e.memoizedState,baseQueue:null,shared:{pending:null},effects:null}}function oa(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,baseQueue:e.baseQueue,shared:e.shared,effects:e.effects})}function ca(e,t){return(e={expirationTime:e,suspenseConfig:t,tag:0,payload:null,callback:null,next:null}).next=e}function sa(e,t){if(null!==(e=e.updateQueue)){var n=(e=e.shared).pending;null===n?t.next=t:(t.next=n.next,n.next=t),e.pending=t}}function ua(e,t){var n=e.alternate;null!==n&&oa(n,e),null===(n=(e=e.updateQueue).baseQueue)?(e.baseQueue=t.next=t,t.next=t):(t.next=n.next,n.next=t)}function la(e,t,n,r){var a=e.updateQueue;ia=!1;var o=a.baseQueue,c=a.shared.pending;if(null!==c){if(null!==o){var s=o.next;o.next=c.next,c.next=s}o=c,a.shared.pending=null,null!==(s=e.alternate)&&(null!==(s=s.updateQueue)&&(s.baseQueue=c))}if(null!==o){s=o.next;var u=a.baseState,l=0,f=null,h=null,d=null;if(null!==s)for(var p=s;;){if((c=p.expirationTime)<r){var m={expirationTime:p.expirationTime,suspenseConfig:p.suspenseConfig,tag:p.tag,payload:p.payload,callback:p.callback,next:null};null===d?(h=d=m,f=u):d=d.next=m,c>l&&(l=c)}else{null!==d&&(d=d.next={expirationTime:1073741823,suspenseConfig:p.suspenseConfig,tag:p.tag,payload:p.payload,callback:p.callback,next:null}),as(c,p.suspenseConfig);e:{var v=e,g=p;switch(c=t,m=n,g.tag){case 1:if("function"==typeof(v=g.payload)){u=v.call(m,u,c);break e}u=v;break e;case 3:v.effectTag=-4097&v.effectTag|64;case 0:if(null==(c="function"==typeof(v=g.payload)?v.call(m,u,c):v))break e;u=i({},u,c);break e;case 2:ia=!0}}null!==p.callback&&(e.effectTag|=32,null===(c=a.effects)?a.effects=[p]:c.push(p))}if(null===(p=p.next)||p===s){if(null===(c=a.shared.pending))break;p=o.next=c.next,c.next=s,a.baseQueue=o=c,a.shared.pending=null}}null===d?f=u:d.next=h,a.baseState=f,a.baseQueue=d,os(l),e.expirationTime=l,e.memoizedState=u}}function fa(e,t,n){if(e=t.effects,t.effects=null,null!==e)for(t=0;t<e.length;t++){var r=e[t],i=r.callback;if(null!==i){if(r.callback=null,r=i,i=n,"function"!=typeof r)throw Error(o(191,r));r.call(i)}}}var ha=K.ReactCurrentBatchConfig,da=(new r.Component).refs;function pa(e,t,n,r){n=null==(n=n(r,t=e.memoizedState))?t:i({},t,n),e.memoizedState=n,0===e.expirationTime&&(e.updateQueue.baseState=n)}var ma={isMounted:function(e){return!!(e=e._reactInternalFiber)&&Xe(e)===e},enqueueSetState:function(e,t,n){e=e._reactInternalFiber;var r=Wc(),i=ha.suspense;(i=ca(r=Zc(r,e,i),i)).payload=t,null!=n&&(i.callback=n),sa(e,i),$c(e,r)},enqueueReplaceState:function(e,t,n){e=e._reactInternalFiber;var r=Wc(),i=ha.suspense;(i=ca(r=Zc(r,e,i),i)).tag=1,i.payload=t,null!=n&&(i.callback=n),sa(e,i),$c(e,r)},enqueueForceUpdate:function(e,t){e=e._reactInternalFiber;var n=Wc(),r=ha.suspense;(r=ca(n=Zc(n,e,r),r)).tag=2,null!=t&&(r.callback=t),sa(e,r),$c(e,n)}};function va(e,t,n,r,i,a,o){return"function"==typeof(e=e.stateNode).shouldComponentUpdate?e.shouldComponentUpdate(r,a,o):!t.prototype||!t.prototype.isPureReactComponent||(!Dr(n,r)||!Dr(i,a))}function ga(e,t,n){var r=!1,i=li,a=t.contextType;return"object"==typeof a&&null!==a?a=ra(a):(i=mi(t)?di:fi.current,a=(r=null!=(r=t.contextTypes))?pi(e,i):li),t=new t(n,a),e.memoizedState=null!==t.state&&void 0!==t.state?t.state:null,t.updater=ma,e.stateNode=t,t._reactInternalFiber=e,r&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=i,e.__reactInternalMemoizedMaskedChildContext=a),t}function ya(e,t,n,r){e=t.state,"function"==typeof t.componentWillReceiveProps&&t.componentWillReceiveProps(n,r),"function"==typeof t.UNSAFE_componentWillReceiveProps&&t.UNSAFE_componentWillReceiveProps(n,r),t.state!==e&&ma.enqueueReplaceState(t,t.state,null)}function ba(e,t,n,r){var i=e.stateNode;i.props=n,i.state=e.memoizedState,i.refs=da,aa(e);var a=t.contextType;"object"==typeof a&&null!==a?i.context=ra(a):(a=mi(t)?di:fi.current,i.context=pi(e,a)),la(e,n,i,r),i.state=e.memoizedState,"function"==typeof(a=t.getDerivedStateFromProps)&&(pa(e,t,a,n),i.state=e.memoizedState),"function"==typeof t.getDerivedStateFromProps||"function"==typeof i.getSnapshotBeforeUpdate||"function"!=typeof i.UNSAFE_componentWillMount&&"function"!=typeof i.componentWillMount||(t=i.state,"function"==typeof i.componentWillMount&&i.componentWillMount(),"function"==typeof i.UNSAFE_componentWillMount&&i.UNSAFE_componentWillMount(),t!==i.state&&ma.enqueueReplaceState(i,i.state,null),la(e,n,i,r),i.state=e.memoizedState),"function"==typeof i.componentDidMount&&(e.effectTag|=4)}var wa=Array.isArray;function xa(e,t,n){if(null!==(e=n.ref)&&"function"!=typeof e&&"object"!=typeof e){if(n._owner){if(n=n._owner){if(1!==n.tag)throw Error(o(309));var r=n.stateNode}if(!r)throw Error(o(147,e));var i=""+e;return null!==t&&null!==t.ref&&"function"==typeof t.ref&&t.ref._stringRef===i?t.ref:((t=function(e){var t=r.refs;t===da&&(t=r.refs={}),null===e?delete t[i]:t[i]=e})._stringRef=i,t)}if("string"!=typeof e)throw Error(o(284));if(!n._owner)throw Error(o(290,e))}return e}function Sa(e,t){if("textarea"!==e.type)throw Error(o(31,"[object Object]"===Object.prototype.toString.call(t)?"object with keys {"+Object.keys(t).join(", ")+"}":t,""))}function ka(e){function t(t,n){if(e){var r=t.lastEffect;null!==r?(r.nextEffect=n,t.lastEffect=n):t.firstEffect=t.lastEffect=n,n.nextEffect=null,n.effectTag=8}}function n(n,r){if(!e)return null;for(;null!==r;)t(n,r),r=r.sibling;return null}function r(e,t){for(e=new Map;null!==t;)null!==t.key?e.set(t.key,t):e.set(t.index,t),t=t.sibling;return e}function i(e,t){return(e=Cs(e,t)).index=0,e.sibling=null,e}function a(t,n,r){return t.index=r,e?null!==(r=t.alternate)?(r=r.index)<n?(t.effectTag=2,n):r:(t.effectTag=2,n):n}function c(t){return e&&null===t.alternate&&(t.effectTag=2),t}function s(e,t,n,r){return null===t||6!==t.tag?((t=Ts(n,e.mode,r)).return=e,t):((t=i(t,n)).return=e,t)}function u(e,t,n,r){return null!==t&&t.elementType===n.type?((r=i(t,n.props)).ref=xa(e,t,n),r.return=e,r):((r=Ms(n.type,n.key,n.props,null,e.mode,r)).ref=xa(e,t,n),r.return=e,r)}function l(e,t,n,r){return null===t||4!==t.tag||t.stateNode.containerInfo!==n.containerInfo||t.stateNode.implementation!==n.implementation?((t=Es(n,e.mode,r)).return=e,t):((t=i(t,n.children||[])).return=e,t)}function f(e,t,n,r,a){return null===t||7!==t.tag?((t=Os(n,e.mode,r,a)).return=e,t):((t=i(t,n)).return=e,t)}function h(e,t,n){if("string"==typeof t||"number"==typeof t)return(t=Ts(""+t,e.mode,n)).return=e,t;if("object"==typeof t&&null!==t){switch(t.$$typeof){case ee:return(n=Ms(t.type,t.key,t.props,null,e.mode,n)).ref=xa(e,null,t),n.return=e,n;case te:return(t=Es(t,e.mode,n)).return=e,t}if(wa(t)||me(t))return(t=Os(t,e.mode,n,null)).return=e,t;Sa(e,t)}return null}function d(e,t,n,r){var i=null!==t?t.key:null;if("string"==typeof n||"number"==typeof n)return null!==i?null:s(e,t,""+n,r);if("object"==typeof n&&null!==n){switch(n.$$typeof){case ee:return n.key===i?n.type===ne?f(e,t,n.props.children,r,i):u(e,t,n,r):null;case te:return n.key===i?l(e,t,n,r):null}if(wa(n)||me(n))return null!==i?null:f(e,t,n,r,null);Sa(e,n)}return null}function p(e,t,n,r,i){if("string"==typeof r||"number"==typeof r)return s(t,e=e.get(n)||null,""+r,i);if("object"==typeof r&&null!==r){switch(r.$$typeof){case ee:return e=e.get(null===r.key?n:r.key)||null,r.type===ne?f(t,e,r.props.children,i,r.key):u(t,e,r,i);case te:return l(t,e=e.get(null===r.key?n:r.key)||null,r,i)}if(wa(r)||me(r))return f(t,e=e.get(n)||null,r,i,null);Sa(t,r)}return null}function m(i,o,c,s){for(var u=null,l=null,f=o,m=o=0,v=null;null!==f&&m<c.length;m++){f.index>m?(v=f,f=null):v=f.sibling;var g=d(i,f,c[m],s);if(null===g){null===f&&(f=v);break}e&&f&&null===g.alternate&&t(i,f),o=a(g,o,m),null===l?u=g:l.sibling=g,l=g,f=v}if(m===c.length)return n(i,f),u;if(null===f){for(;m<c.length;m++)null!==(f=h(i,c[m],s))&&(o=a(f,o,m),null===l?u=f:l.sibling=f,l=f);return u}for(f=r(i,f);m<c.length;m++)null!==(v=p(f,i,m,c[m],s))&&(e&&null!==v.alternate&&f.delete(null===v.key?m:v.key),o=a(v,o,m),null===l?u=v:l.sibling=v,l=v);return e&&f.forEach((function(e){return t(i,e)})),u}function v(i,c,s,u){var l=me(s);if("function"!=typeof l)throw Error(o(150));if(null==(s=l.call(s)))throw Error(o(151));for(var f=l=null,m=c,v=c=0,g=null,y=s.next();null!==m&&!y.done;v++,y=s.next()){m.index>v?(g=m,m=null):g=m.sibling;var b=d(i,m,y.value,u);if(null===b){null===m&&(m=g);break}e&&m&&null===b.alternate&&t(i,m),c=a(b,c,v),null===f?l=b:f.sibling=b,f=b,m=g}if(y.done)return n(i,m),l;if(null===m){for(;!y.done;v++,y=s.next())null!==(y=h(i,y.value,u))&&(c=a(y,c,v),null===f?l=y:f.sibling=y,f=y);return l}for(m=r(i,m);!y.done;v++,y=s.next())null!==(y=p(m,i,v,y.value,u))&&(e&&null!==y.alternate&&m.delete(null===y.key?v:y.key),c=a(y,c,v),null===f?l=y:f.sibling=y,f=y);return e&&m.forEach((function(e){return t(i,e)})),l}return function(e,r,a,s){var u="object"==typeof a&&null!==a&&a.type===ne&&null===a.key;u&&(a=a.props.children);var l="object"==typeof a&&null!==a;if(l)switch(a.$$typeof){case ee:e:{for(l=a.key,u=r;null!==u;){if(u.key===l){switch(u.tag){case 7:if(a.type===ne){n(e,u.sibling),(r=i(u,a.props.children)).return=e,e=r;break e}break;default:if(u.elementType===a.type){n(e,u.sibling),(r=i(u,a.props)).ref=xa(e,u,a),r.return=e,e=r;break e}}n(e,u);break}t(e,u),u=u.sibling}a.type===ne?((r=Os(a.props.children,e.mode,s,a.key)).return=e,e=r):((s=Ms(a.type,a.key,a.props,null,e.mode,s)).ref=xa(e,r,a),s.return=e,e=s)}return c(e);case te:e:{for(u=a.key;null!==r;){if(r.key===u){if(4===r.tag&&r.stateNode.containerInfo===a.containerInfo&&r.stateNode.implementation===a.implementation){n(e,r.sibling),(r=i(r,a.children||[])).return=e,e=r;break e}n(e,r);break}t(e,r),r=r.sibling}(r=Es(a,e.mode,s)).return=e,e=r}return c(e)}if("string"==typeof a||"number"==typeof a)return a=""+a,null!==r&&6===r.tag?(n(e,r.sibling),(r=i(r,a)).return=e,e=r):(n(e,r),(r=Ts(a,e.mode,s)).return=e,e=r),c(e);if(wa(a))return m(e,r,a,s);if(me(a))return v(e,r,a,s);if(l&&Sa(e,a),void 0===a&&!u)switch(e.tag){case 1:case 0:throw e=e.type,Error(o(152,e.displayName||e.name||"Component"))}return n(e,r)}}var _a=ka(!0),za=ka(!1),Ca={},Ma={current:Ca},Oa={current:Ca},Ta={current:Ca};function Ea(e){if(e===Ca)throw Error(o(174));return e}function La(e,t){switch(ui(Ta,t),ui(Oa,e),ui(Ma,Ca),e=t.nodeType){case 9:case 11:t=(t=t.documentElement)?t.namespaceURI:je(null,"");break;default:t=je(t=(e=8===e?t.parentNode:t).namespaceURI||null,e=e.tagName)}si(Ma),ui(Ma,t)}function Aa(){si(Ma),si(Oa),si(Ta)}function Ra(e){Ea(Ta.current);var t=Ea(Ma.current),n=je(t,e.type);t!==n&&(ui(Oa,e),ui(Ma,n))}function Na(e){Oa.current===e&&(si(Ma),si(Oa))}var Ha={current:0};function Pa(e){for(var t=e;null!==t;){if(13===t.tag){var n=t.memoizedState;if(null!==n&&(null===(n=n.dehydrated)||"$?"===n.data||"$!"===n.data))return t}else if(19===t.tag&&void 0!==t.memoizedProps.revealOrder){if(0!=(64&t.effectTag))return t}else if(null!==t.child){t.child.return=t,t=t.child;continue}if(t===e)break;for(;null===t.sibling;){if(null===t.return||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}return null}function ja(e,t){return{responder:e,props:t}}var Va=K.ReactCurrentDispatcher,Da=K.ReactCurrentBatchConfig,Ia=0,Fa=null,Ba=null,Ua=null,qa=!1;function Ga(){throw Error(o(321))}function Wa(e,t){if(null===t)return!1;for(var n=0;n<t.length&&n<e.length;n++)if(!jr(e[n],t[n]))return!1;return!0}function Za(e,t,n,r,i,a){if(Ia=a,Fa=t,t.memoizedState=null,t.updateQueue=null,t.expirationTime=0,Va.current=null===e||null===e.memoizedState?go:yo,e=n(r,i),t.expirationTime===Ia){a=0;do{if(t.expirationTime=0,!(25>a))throw Error(o(301));a+=1,Ua=Ba=null,t.updateQueue=null,Va.current=bo,e=n(r,i)}while(t.expirationTime===Ia)}if(Va.current=vo,t=null!==Ba&&null!==Ba.next,Ia=0,Ua=Ba=Fa=null,qa=!1,t)throw Error(o(300));return e}function $a(){var e={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return null===Ua?Fa.memoizedState=Ua=e:Ua=Ua.next=e,Ua}function Ja(){if(null===Ba){var e=Fa.alternate;e=null!==e?e.memoizedState:null}else e=Ba.next;var t=null===Ua?Fa.memoizedState:Ua.next;if(null!==t)Ua=t,Ba=e;else{if(null===e)throw Error(o(310));e={memoizedState:(Ba=e).memoizedState,baseState:Ba.baseState,baseQueue:Ba.baseQueue,queue:Ba.queue,next:null},null===Ua?Fa.memoizedState=Ua=e:Ua=Ua.next=e}return Ua}function Ka(e,t){return"function"==typeof t?t(e):t}function Qa(e){var t=Ja(),n=t.queue;if(null===n)throw Error(o(311));n.lastRenderedReducer=e;var r=Ba,i=r.baseQueue,a=n.pending;if(null!==a){if(null!==i){var c=i.next;i.next=a.next,a.next=c}r.baseQueue=i=a,n.pending=null}if(null!==i){i=i.next,r=r.baseState;var s=c=a=null,u=i;do{var l=u.expirationTime;if(l<Ia){var f={expirationTime:u.expirationTime,suspenseConfig:u.suspenseConfig,action:u.action,eagerReducer:u.eagerReducer,eagerState:u.eagerState,next:null};null===s?(c=s=f,a=r):s=s.next=f,l>Fa.expirationTime&&(Fa.expirationTime=l,os(l))}else null!==s&&(s=s.next={expirationTime:1073741823,suspenseConfig:u.suspenseConfig,action:u.action,eagerReducer:u.eagerReducer,eagerState:u.eagerState,next:null}),as(l,u.suspenseConfig),r=u.eagerReducer===e?u.eagerState:e(r,u.action);u=u.next}while(null!==u&&u!==i);null===s?a=r:s.next=c,jr(r,t.memoizedState)||(Eo=!0),t.memoizedState=r,t.baseState=a,t.baseQueue=s,n.lastRenderedState=r}return[t.memoizedState,n.dispatch]}function Ya(e){var t=Ja(),n=t.queue;if(null===n)throw Error(o(311));n.lastRenderedReducer=e;var r=n.dispatch,i=n.pending,a=t.memoizedState;if(null!==i){n.pending=null;var c=i=i.next;do{a=e(a,c.action),c=c.next}while(c!==i);jr(a,t.memoizedState)||(Eo=!0),t.memoizedState=a,null===t.baseQueue&&(t.baseState=a),n.lastRenderedState=a}return[a,r]}function Xa(e){var t=$a();return"function"==typeof e&&(e=e()),t.memoizedState=t.baseState=e,e=(e=t.queue={pending:null,dispatch:null,lastRenderedReducer:Ka,lastRenderedState:e}).dispatch=mo.bind(null,Fa,e),[t.memoizedState,e]}function eo(e,t,n,r){return e={tag:e,create:t,destroy:n,deps:r,next:null},null===(t=Fa.updateQueue)?(t={lastEffect:null},Fa.updateQueue=t,t.lastEffect=e.next=e):null===(n=t.lastEffect)?t.lastEffect=e.next=e:(r=n.next,n.next=e,e.next=r,t.lastEffect=e),e}function to(){return Ja().memoizedState}function no(e,t,n,r){var i=$a();Fa.effectTag|=e,i.memoizedState=eo(1|t,n,void 0,void 0===r?null:r)}function ro(e,t,n,r){var i=Ja();r=void 0===r?null:r;var a=void 0;if(null!==Ba){var o=Ba.memoizedState;if(a=o.destroy,null!==r&&Wa(r,o.deps))return void eo(t,n,a,r)}Fa.effectTag|=e,i.memoizedState=eo(1|t,n,a,r)}function io(e,t){return no(516,4,e,t)}function ao(e,t){return ro(516,4,e,t)}function oo(e,t){return ro(4,2,e,t)}function co(e,t){return"function"==typeof t?(e=e(),t(e),function(){t(null)}):null!=t?(e=e(),t.current=e,function(){t.current=null}):void 0}function so(e,t,n){return n=null!=n?n.concat([e]):null,ro(4,2,co.bind(null,t,e),n)}function uo(){}function lo(e,t){return $a().memoizedState=[e,void 0===t?null:t],e}function fo(e,t){var n=Ja();t=void 0===t?null:t;var r=n.memoizedState;return null!==r&&null!==t&&Wa(t,r[1])?r[0]:(n.memoizedState=[e,t],e)}function ho(e,t){var n=Ja();t=void 0===t?null:t;var r=n.memoizedState;return null!==r&&null!==t&&Wa(t,r[1])?r[0]:(e=e(),n.memoizedState=[e,t],e)}function po(e,t,n){var r=Ii();Bi(98>r?98:r,(function(){e(!0)})),Bi(97<r?97:r,(function(){var r=Da.suspense;Da.suspense=void 0===t?null:t;try{e(!1),n()}finally{Da.suspense=r}}))}function mo(e,t,n){var r=Wc(),i=ha.suspense;i={expirationTime:r=Zc(r,e,i),suspenseConfig:i,action:n,eagerReducer:null,eagerState:null,next:null};var a=t.pending;if(null===a?i.next=i:(i.next=a.next,a.next=i),t.pending=i,a=e.alternate,e===Fa||null!==a&&a===Fa)qa=!0,i.expirationTime=Ia,Fa.expirationTime=Ia;else{if(0===e.expirationTime&&(null===a||0===a.expirationTime)&&null!==(a=t.lastRenderedReducer))try{var o=t.lastRenderedState,c=a(o,n);if(i.eagerReducer=a,i.eagerState=c,jr(c,o))return}catch(e){}$c(e,r)}}var vo={readContext:ra,useCallback:Ga,useContext:Ga,useEffect:Ga,useImperativeHandle:Ga,useLayoutEffect:Ga,useMemo:Ga,useReducer:Ga,useRef:Ga,useState:Ga,useDebugValue:Ga,useResponder:Ga,useDeferredValue:Ga,useTransition:Ga},go={readContext:ra,useCallback:lo,useContext:ra,useEffect:io,useImperativeHandle:function(e,t,n){return n=null!=n?n.concat([e]):null,no(4,2,co.bind(null,t,e),n)},useLayoutEffect:function(e,t){return no(4,2,e,t)},useMemo:function(e,t){var n=$a();return t=void 0===t?null:t,e=e(),n.memoizedState=[e,t],e},useReducer:function(e,t,n){var r=$a();return t=void 0!==n?n(t):t,r.memoizedState=r.baseState=t,e=(e=r.queue={pending:null,dispatch:null,lastRenderedReducer:e,lastRenderedState:t}).dispatch=mo.bind(null,Fa,e),[r.memoizedState,e]},useRef:function(e){return e={current:e},$a().memoizedState=e},useState:Xa,useDebugValue:uo,useResponder:ja,useDeferredValue:function(e,t){var n=Xa(e),r=n[0],i=n[1];return io((function(){var n=Da.suspense;Da.suspense=void 0===t?null:t;try{i(e)}finally{Da.suspense=n}}),[e,t]),r},useTransition:function(e){var t=Xa(!1),n=t[0];return t=t[1],[lo(po.bind(null,t,e),[t,e]),n]}},yo={readContext:ra,useCallback:fo,useContext:ra,useEffect:ao,useImperativeHandle:so,useLayoutEffect:oo,useMemo:ho,useReducer:Qa,useRef:to,useState:function(){return Qa(Ka)},useDebugValue:uo,useResponder:ja,useDeferredValue:function(e,t){var n=Qa(Ka),r=n[0],i=n[1];return ao((function(){var n=Da.suspense;Da.suspense=void 0===t?null:t;try{i(e)}finally{Da.suspense=n}}),[e,t]),r},useTransition:function(e){var t=Qa(Ka),n=t[0];return t=t[1],[fo(po.bind(null,t,e),[t,e]),n]}},bo={readContext:ra,useCallback:fo,useContext:ra,useEffect:ao,useImperativeHandle:so,useLayoutEffect:oo,useMemo:ho,useReducer:Ya,useRef:to,useState:function(){return Ya(Ka)},useDebugValue:uo,useResponder:ja,useDeferredValue:function(e,t){var n=Ya(Ka),r=n[0],i=n[1];return ao((function(){var n=Da.suspense;Da.suspense=void 0===t?null:t;try{i(e)}finally{Da.suspense=n}}),[e,t]),r},useTransition:function(e){var t=Ya(Ka),n=t[0];return t=t[1],[fo(po.bind(null,t,e),[t,e]),n]}},wo=null,xo=null,So=!1;function ko(e,t){var n=_s(5,null,null,0);n.elementType="DELETED",n.type="DELETED",n.stateNode=t,n.return=e,n.effectTag=8,null!==e.lastEffect?(e.lastEffect.nextEffect=n,e.lastEffect=n):e.firstEffect=e.lastEffect=n}function _o(e,t){switch(e.tag){case 5:var n=e.type;return null!==(t=1!==t.nodeType||n.toLowerCase()!==t.nodeName.toLowerCase()?null:t)&&(e.stateNode=t,!0);case 6:return null!==(t=""===e.pendingProps||3!==t.nodeType?null:t)&&(e.stateNode=t,!0);case 13:default:return!1}}function zo(e){if(So){var t=xo;if(t){var n=t;if(!_o(e,t)){if(!(t=xn(n.nextSibling))||!_o(e,t))return e.effectTag=-1025&e.effectTag|2,So=!1,void(wo=e);ko(wo,n)}wo=e,xo=xn(t.firstChild)}else e.effectTag=-1025&e.effectTag|2,So=!1,wo=e}}function Co(e){for(e=e.return;null!==e&&5!==e.tag&&3!==e.tag&&13!==e.tag;)e=e.return;wo=e}function Mo(e){if(e!==wo)return!1;if(!So)return Co(e),So=!0,!1;var t=e.type;if(5!==e.tag||"head"!==t&&"body"!==t&&!yn(t,e.memoizedProps))for(t=xo;t;)ko(e,t),t=xn(t.nextSibling);if(Co(e),13===e.tag){if(!(e=null!==(e=e.memoizedState)?e.dehydrated:null))throw Error(o(317));e:{for(e=e.nextSibling,t=0;e;){if(8===e.nodeType){var n=e.data;if("/$"===n){if(0===t){xo=xn(e.nextSibling);break e}t--}else"$"!==n&&"$!"!==n&&"$?"!==n||t++}e=e.nextSibling}xo=null}}else xo=wo?xn(e.stateNode.nextSibling):null;return!0}function Oo(){xo=wo=null,So=!1}var To=K.ReactCurrentOwner,Eo=!1;function Lo(e,t,n,r){t.child=null===e?za(t,null,n,r):_a(t,e.child,n,r)}function Ao(e,t,n,r,i){n=n.render;var a=t.ref;return na(t,i),r=Za(e,t,n,r,a,i),null===e||Eo?(t.effectTag|=1,Lo(e,t,r,i),t.child):(t.updateQueue=e.updateQueue,t.effectTag&=-517,e.expirationTime<=i&&(e.expirationTime=0),$o(e,t,i))}function Ro(e,t,n,r,i,a){if(null===e){var o=n.type;return"function"!=typeof o||zs(o)||void 0!==o.defaultProps||null!==n.compare||void 0!==n.defaultProps?((e=Ms(n.type,null,r,null,t.mode,a)).ref=t.ref,e.return=t,t.child=e):(t.tag=15,t.type=o,No(e,t,o,r,i,a))}return o=e.child,i<a&&(i=o.memoizedProps,(n=null!==(n=n.compare)?n:Dr)(i,r)&&e.ref===t.ref)?$o(e,t,a):(t.effectTag|=1,(e=Cs(o,r)).ref=t.ref,e.return=t,t.child=e)}function No(e,t,n,r,i,a){return null!==e&&Dr(e.memoizedProps,r)&&e.ref===t.ref&&(Eo=!1,i<a)?(t.expirationTime=e.expirationTime,$o(e,t,a)):Po(e,t,n,r,a)}function Ho(e,t){var n=t.ref;(null===e&&null!==n||null!==e&&e.ref!==n)&&(t.effectTag|=128)}function Po(e,t,n,r,i){var a=mi(n)?di:fi.current;return a=pi(t,a),na(t,i),n=Za(e,t,n,r,a,i),null===e||Eo?(t.effectTag|=1,Lo(e,t,n,i),t.child):(t.updateQueue=e.updateQueue,t.effectTag&=-517,e.expirationTime<=i&&(e.expirationTime=0),$o(e,t,i))}function jo(e,t,n,r,i){if(mi(n)){var a=!0;bi(t)}else a=!1;if(na(t,i),null===t.stateNode)null!==e&&(e.alternate=null,t.alternate=null,t.effectTag|=2),ga(t,n,r),ba(t,n,r,i),r=!0;else if(null===e){var o=t.stateNode,c=t.memoizedProps;o.props=c;var s=o.context,u=n.contextType;"object"==typeof u&&null!==u?u=ra(u):u=pi(t,u=mi(n)?di:fi.current);var l=n.getDerivedStateFromProps,f="function"==typeof l||"function"==typeof o.getSnapshotBeforeUpdate;f||"function"!=typeof o.UNSAFE_componentWillReceiveProps&&"function"!=typeof o.componentWillReceiveProps||(c!==r||s!==u)&&ya(t,o,r,u),ia=!1;var h=t.memoizedState;o.state=h,la(t,r,o,i),s=t.memoizedState,c!==r||h!==s||hi.current||ia?("function"==typeof l&&(pa(t,n,l,r),s=t.memoizedState),(c=ia||va(t,n,c,r,h,s,u))?(f||"function"!=typeof o.UNSAFE_componentWillMount&&"function"!=typeof o.componentWillMount||("function"==typeof o.componentWillMount&&o.componentWillMount(),"function"==typeof o.UNSAFE_componentWillMount&&o.UNSAFE_componentWillMount()),"function"==typeof o.componentDidMount&&(t.effectTag|=4)):("function"==typeof o.componentDidMount&&(t.effectTag|=4),t.memoizedProps=r,t.memoizedState=s),o.props=r,o.state=s,o.context=u,r=c):("function"==typeof o.componentDidMount&&(t.effectTag|=4),r=!1)}else o=t.stateNode,oa(e,t),c=t.memoizedProps,o.props=t.type===t.elementType?c:$i(t.type,c),s=o.context,"object"==typeof(u=n.contextType)&&null!==u?u=ra(u):u=pi(t,u=mi(n)?di:fi.current),(f="function"==typeof(l=n.getDerivedStateFromProps)||"function"==typeof o.getSnapshotBeforeUpdate)||"function"!=typeof o.UNSAFE_componentWillReceiveProps&&"function"!=typeof o.componentWillReceiveProps||(c!==r||s!==u)&&ya(t,o,r,u),ia=!1,s=t.memoizedState,o.state=s,la(t,r,o,i),h=t.memoizedState,c!==r||s!==h||hi.current||ia?("function"==typeof l&&(pa(t,n,l,r),h=t.memoizedState),(l=ia||va(t,n,c,r,s,h,u))?(f||"function"!=typeof o.UNSAFE_componentWillUpdate&&"function"!=typeof o.componentWillUpdate||("function"==typeof o.componentWillUpdate&&o.componentWillUpdate(r,h,u),"function"==typeof o.UNSAFE_componentWillUpdate&&o.UNSAFE_componentWillUpdate(r,h,u)),"function"==typeof o.componentDidUpdate&&(t.effectTag|=4),"function"==typeof o.getSnapshotBeforeUpdate&&(t.effectTag|=256)):("function"!=typeof o.componentDidUpdate||c===e.memoizedProps&&s===e.memoizedState||(t.effectTag|=4),"function"!=typeof o.getSnapshotBeforeUpdate||c===e.memoizedProps&&s===e.memoizedState||(t.effectTag|=256),t.memoizedProps=r,t.memoizedState=h),o.props=r,o.state=h,o.context=u,r=l):("function"!=typeof o.componentDidUpdate||c===e.memoizedProps&&s===e.memoizedState||(t.effectTag|=4),"function"!=typeof o.getSnapshotBeforeUpdate||c===e.memoizedProps&&s===e.memoizedState||(t.effectTag|=256),r=!1);return Vo(e,t,n,r,a,i)}function Vo(e,t,n,r,i,a){Ho(e,t);var o=0!=(64&t.effectTag);if(!r&&!o)return i&&wi(t,n,!1),$o(e,t,a);r=t.stateNode,To.current=t;var c=o&&"function"!=typeof n.getDerivedStateFromError?null:r.render();return t.effectTag|=1,null!==e&&o?(t.child=_a(t,e.child,null,a),t.child=_a(t,null,c,a)):Lo(e,t,c,a),t.memoizedState=r.state,i&&wi(t,n,!0),t.child}function Do(e){var t=e.stateNode;t.pendingContext?gi(0,t.pendingContext,t.pendingContext!==t.context):t.context&&gi(0,t.context,!1),La(e,t.containerInfo)}var Io,Fo,Bo,Uo={dehydrated:null,retryTime:0};function qo(e,t,n){var r,i=t.mode,a=t.pendingProps,o=Ha.current,c=!1;if((r=0!=(64&t.effectTag))||(r=0!=(2&o)&&(null===e||null!==e.memoizedState)),r?(c=!0,t.effectTag&=-65):null!==e&&null===e.memoizedState||void 0===a.fallback||!0===a.unstable_avoidThisFallback||(o|=1),ui(Ha,1&o),null===e){if(void 0!==a.fallback&&zo(t),c){if(c=a.fallback,(a=Os(null,i,0,null)).return=t,0==(2&t.mode))for(e=null!==t.memoizedState?t.child.child:t.child,a.child=e;null!==e;)e.return=a,e=e.sibling;return(n=Os(c,i,n,null)).return=t,a.sibling=n,t.memoizedState=Uo,t.child=a,n}return i=a.children,t.memoizedState=null,t.child=za(t,null,i,n)}if(null!==e.memoizedState){if(i=(e=e.child).sibling,c){if(a=a.fallback,(n=Cs(e,e.pendingProps)).return=t,0==(2&t.mode)&&(c=null!==t.memoizedState?t.child.child:t.child)!==e.child)for(n.child=c;null!==c;)c.return=n,c=c.sibling;return(i=Cs(i,a)).return=t,n.sibling=i,n.childExpirationTime=0,t.memoizedState=Uo,t.child=n,i}return n=_a(t,e.child,a.children,n),t.memoizedState=null,t.child=n}if(e=e.child,c){if(c=a.fallback,(a=Os(null,i,0,null)).return=t,a.child=e,null!==e&&(e.return=a),0==(2&t.mode))for(e=null!==t.memoizedState?t.child.child:t.child,a.child=e;null!==e;)e.return=a,e=e.sibling;return(n=Os(c,i,n,null)).return=t,a.sibling=n,n.effectTag|=2,a.childExpirationTime=0,t.memoizedState=Uo,t.child=a,n}return t.memoizedState=null,t.child=_a(t,e,a.children,n)}function Go(e,t){e.expirationTime<t&&(e.expirationTime=t);var n=e.alternate;null!==n&&n.expirationTime<t&&(n.expirationTime=t),ta(e.return,t)}function Wo(e,t,n,r,i,a){var o=e.memoizedState;null===o?e.memoizedState={isBackwards:t,rendering:null,renderingStartTime:0,last:r,tail:n,tailExpiration:0,tailMode:i,lastEffect:a}:(o.isBackwards=t,o.rendering=null,o.renderingStartTime=0,o.last=r,o.tail=n,o.tailExpiration=0,o.tailMode=i,o.lastEffect=a)}function Zo(e,t,n){var r=t.pendingProps,i=r.revealOrder,a=r.tail;if(Lo(e,t,r.children,n),0!=(2&(r=Ha.current)))r=1&r|2,t.effectTag|=64;else{if(null!==e&&0!=(64&e.effectTag))e:for(e=t.child;null!==e;){if(13===e.tag)null!==e.memoizedState&&Go(e,n);else if(19===e.tag)Go(e,n);else if(null!==e.child){e.child.return=e,e=e.child;continue}if(e===t)break e;for(;null===e.sibling;){if(null===e.return||e.return===t)break e;e=e.return}e.sibling.return=e.return,e=e.sibling}r&=1}if(ui(Ha,r),0==(2&t.mode))t.memoizedState=null;else switch(i){case"forwards":for(n=t.child,i=null;null!==n;)null!==(e=n.alternate)&&null===Pa(e)&&(i=n),n=n.sibling;null===(n=i)?(i=t.child,t.child=null):(i=n.sibling,n.sibling=null),Wo(t,!1,i,n,a,t.lastEffect);break;case"backwards":for(n=null,i=t.child,t.child=null;null!==i;){if(null!==(e=i.alternate)&&null===Pa(e)){t.child=i;break}e=i.sibling,i.sibling=n,n=i,i=e}Wo(t,!0,n,null,a,t.lastEffect);break;case"together":Wo(t,!1,null,null,void 0,t.lastEffect);break;default:t.memoizedState=null}return t.child}function $o(e,t,n){null!==e&&(t.dependencies=e.dependencies);var r=t.expirationTime;if(0!==r&&os(r),t.childExpirationTime<n)return null;if(null!==e&&t.child!==e.child)throw Error(o(153));if(null!==t.child){for(n=Cs(e=t.child,e.pendingProps),t.child=n,n.return=t;null!==e.sibling;)e=e.sibling,(n=n.sibling=Cs(e,e.pendingProps)).return=t;n.sibling=null}return t.child}function Jo(e,t){switch(e.tailMode){case"hidden":t=e.tail;for(var n=null;null!==t;)null!==t.alternate&&(n=t),t=t.sibling;null===n?e.tail=null:n.sibling=null;break;case"collapsed":n=e.tail;for(var r=null;null!==n;)null!==n.alternate&&(r=n),n=n.sibling;null===r?t||null===e.tail?e.tail=null:e.tail.sibling=null:r.sibling=null}}function Ko(e,t,n){var r=t.pendingProps;switch(t.tag){case 2:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return null;case 1:return mi(t.type)&&vi(),null;case 3:return Aa(),si(hi),si(fi),(n=t.stateNode).pendingContext&&(n.context=n.pendingContext,n.pendingContext=null),null!==e&&null!==e.child||!Mo(t)||(t.effectTag|=4),null;case 5:Na(t),n=Ea(Ta.current);var a=t.type;if(null!==e&&null!=t.stateNode)Fo(e,t,a,r,n),e.ref!==t.ref&&(t.effectTag|=128);else{if(!r){if(null===t.stateNode)throw Error(o(166));return null}if(e=Ea(Ma.current),Mo(t)){r=t.stateNode,a=t.type;var c=t.memoizedProps;switch(r[_n]=t,r[zn]=c,a){case"iframe":case"object":case"embed":Zt("load",r);break;case"video":case"audio":for(e=0;e<Ke.length;e++)Zt(Ke[e],r);break;case"source":Zt("error",r);break;case"img":case"image":case"link":Zt("error",r),Zt("load",r);break;case"form":Zt("reset",r),Zt("submit",r);break;case"details":Zt("toggle",r);break;case"input":ke(r,c),Zt("invalid",r),sn(n,"onChange");break;case"select":r._wrapperState={wasMultiple:!!c.multiple},Zt("invalid",r),sn(n,"onChange");break;case"textarea":Le(r,c),Zt("invalid",r),sn(n,"onChange")}for(var s in an(a,c),e=null,c)if(c.hasOwnProperty(s)){var u=c[s];"children"===s?"string"==typeof u?r.textContent!==u&&(e=["children",u]):"number"==typeof u&&r.textContent!==""+u&&(e=["children",""+u]):_.hasOwnProperty(s)&&null!=u&&sn(n,s)}switch(a){case"input":we(r),Ce(r,c,!0);break;case"textarea":we(r),Re(r);break;case"select":case"option":break;default:"function"==typeof c.onClick&&(r.onclick=un)}n=e,t.updateQueue=n,null!==n&&(t.effectTag|=4)}else{switch(s=9===n.nodeType?n:n.ownerDocument,e===cn&&(e=Pe(a)),e===cn?"script"===a?((e=s.createElement("div")).innerHTML="<script><\/script>",e=e.removeChild(e.firstChild)):"string"==typeof r.is?e=s.createElement(a,{is:r.is}):(e=s.createElement(a),"select"===a&&(s=e,r.multiple?s.multiple=!0:r.size&&(s.size=r.size))):e=s.createElementNS(e,a),e[_n]=t,e[zn]=r,Io(e,t),t.stateNode=e,s=on(a,r),a){case"iframe":case"object":case"embed":Zt("load",e),u=r;break;case"video":case"audio":for(u=0;u<Ke.length;u++)Zt(Ke[u],e);u=r;break;case"source":Zt("error",e),u=r;break;case"img":case"image":case"link":Zt("error",e),Zt("load",e),u=r;break;case"form":Zt("reset",e),Zt("submit",e),u=r;break;case"details":Zt("toggle",e),u=r;break;case"input":ke(e,r),u=Se(e,r),Zt("invalid",e),sn(n,"onChange");break;case"option":u=Oe(e,r);break;case"select":e._wrapperState={wasMultiple:!!r.multiple},u=i({},r,{value:void 0}),Zt("invalid",e),sn(n,"onChange");break;case"textarea":Le(e,r),u=Ee(e,r),Zt("invalid",e),sn(n,"onChange");break;default:u=r}an(a,u);var l=u;for(c in l)if(l.hasOwnProperty(c)){var f=l[c];"style"===c?nn(e,f):"dangerouslySetInnerHTML"===c?null!=(f=f?f.__html:void 0)&&De(e,f):"children"===c?"string"==typeof f?("textarea"!==a||""!==f)&&Ie(e,f):"number"==typeof f&&Ie(e,""+f):"suppressContentEditableWarning"!==c&&"suppressHydrationWarning"!==c&&"autoFocus"!==c&&(_.hasOwnProperty(c)?null!=f&&sn(n,c):null!=f&&Q(e,c,f,s))}switch(a){case"input":we(e),Ce(e,r,!1);break;case"textarea":we(e),Re(e);break;case"option":null!=r.value&&e.setAttribute("value",""+ye(r.value));break;case"select":e.multiple=!!r.multiple,null!=(n=r.value)?Te(e,!!r.multiple,n,!1):null!=r.defaultValue&&Te(e,!!r.multiple,r.defaultValue,!0);break;default:"function"==typeof u.onClick&&(e.onclick=un)}gn(a,r)&&(t.effectTag|=4)}null!==t.ref&&(t.effectTag|=128)}return null;case 6:if(e&&null!=t.stateNode)Bo(0,t,e.memoizedProps,r);else{if("string"!=typeof r&&null===t.stateNode)throw Error(o(166));n=Ea(Ta.current),Ea(Ma.current),Mo(t)?(n=t.stateNode,r=t.memoizedProps,n[_n]=t,n.nodeValue!==r&&(t.effectTag|=4)):((n=(9===n.nodeType?n:n.ownerDocument).createTextNode(r))[_n]=t,t.stateNode=n)}return null;case 13:return si(Ha),r=t.memoizedState,0!=(64&t.effectTag)?(t.expirationTime=n,t):(n=null!==r,r=!1,null===e?void 0!==t.memoizedProps.fallback&&Mo(t):(r=null!==(a=e.memoizedState),n||null===a||null!==(a=e.child.sibling)&&(null!==(c=t.firstEffect)?(t.firstEffect=a,a.nextEffect=c):(t.firstEffect=t.lastEffect=a,a.nextEffect=null),a.effectTag=8)),n&&!r&&0!=(2&t.mode)&&(null===e&&!0!==t.memoizedProps.unstable_avoidThisFallback||0!=(1&Ha.current)?Mc===wc&&(Mc=xc):(Mc!==wc&&Mc!==xc||(Mc=Sc),0!==Ac&&null!==_c&&(Rs(_c,Cc),Ns(_c,Ac)))),(n||r)&&(t.effectTag|=4),null);case 4:return Aa(),null;case 10:return ea(t),null;case 17:return mi(t.type)&&vi(),null;case 19:if(si(Ha),null===(r=t.memoizedState))return null;if(a=0!=(64&t.effectTag),null===(c=r.rendering)){if(a)Jo(r,!1);else if(Mc!==wc||null!==e&&0!=(64&e.effectTag))for(c=t.child;null!==c;){if(null!==(e=Pa(c))){for(t.effectTag|=64,Jo(r,!1),null!==(a=e.updateQueue)&&(t.updateQueue=a,t.effectTag|=4),null===r.lastEffect&&(t.firstEffect=null),t.lastEffect=r.lastEffect,r=t.child;null!==r;)c=n,(a=r).effectTag&=2,a.nextEffect=null,a.firstEffect=null,a.lastEffect=null,null===(e=a.alternate)?(a.childExpirationTime=0,a.expirationTime=c,a.child=null,a.memoizedProps=null,a.memoizedState=null,a.updateQueue=null,a.dependencies=null):(a.childExpirationTime=e.childExpirationTime,a.expirationTime=e.expirationTime,a.child=e.child,a.memoizedProps=e.memoizedProps,a.memoizedState=e.memoizedState,a.updateQueue=e.updateQueue,c=e.dependencies,a.dependencies=null===c?null:{expirationTime:c.expirationTime,firstContext:c.firstContext,responders:c.responders}),r=r.sibling;return ui(Ha,1&Ha.current|2),t.child}c=c.sibling}}else{if(!a)if(null!==(e=Pa(c))){if(t.effectTag|=64,a=!0,null!==(n=e.updateQueue)&&(t.updateQueue=n,t.effectTag|=4),Jo(r,!0),null===r.tail&&"hidden"===r.tailMode&&!c.alternate)return null!==(t=t.lastEffect=r.lastEffect)&&(t.nextEffect=null),null}else 2*Di()-r.renderingStartTime>r.tailExpiration&&1<n&&(t.effectTag|=64,a=!0,Jo(r,!1),t.expirationTime=t.childExpirationTime=n-1);r.isBackwards?(c.sibling=t.child,t.child=c):(null!==(n=r.last)?n.sibling=c:t.child=c,r.last=c)}return null!==r.tail?(0===r.tailExpiration&&(r.tailExpiration=Di()+500),n=r.tail,r.rendering=n,r.tail=n.sibling,r.lastEffect=t.lastEffect,r.renderingStartTime=Di(),n.sibling=null,t=Ha.current,ui(Ha,a?1&t|2:1&t),n):null}throw Error(o(156,t.tag))}function Qo(e){switch(e.tag){case 1:mi(e.type)&&vi();var t=e.effectTag;return 4096&t?(e.effectTag=-4097&t|64,e):null;case 3:if(Aa(),si(hi),si(fi),0!=(64&(t=e.effectTag)))throw Error(o(285));return e.effectTag=-4097&t|64,e;case 5:return Na(e),null;case 13:return si(Ha),4096&(t=e.effectTag)?(e.effectTag=-4097&t|64,e):null;case 19:return si(Ha),null;case 4:return Aa(),null;case 10:return ea(e),null;default:return null}}function Yo(e,t){return{value:e,source:t,stack:ge(t)}}Io=function(e,t){for(var n=t.child;null!==n;){if(5===n.tag||6===n.tag)e.appendChild(n.stateNode);else if(4!==n.tag&&null!==n.child){n.child.return=n,n=n.child;continue}if(n===t)break;for(;null===n.sibling;){if(null===n.return||n.return===t)return;n=n.return}n.sibling.return=n.return,n=n.sibling}},Fo=function(e,t,n,r,a){var o=e.memoizedProps;if(o!==r){var c,s,u=t.stateNode;switch(Ea(Ma.current),e=null,n){case"input":o=Se(u,o),r=Se(u,r),e=[];break;case"option":o=Oe(u,o),r=Oe(u,r),e=[];break;case"select":o=i({},o,{value:void 0}),r=i({},r,{value:void 0}),e=[];break;case"textarea":o=Ee(u,o),r=Ee(u,r),e=[];break;default:"function"!=typeof o.onClick&&"function"==typeof r.onClick&&(u.onclick=un)}for(c in an(n,r),n=null,o)if(!r.hasOwnProperty(c)&&o.hasOwnProperty(c)&&null!=o[c])if("style"===c)for(s in u=o[c])u.hasOwnProperty(s)&&(n||(n={}),n[s]="");else"dangerouslySetInnerHTML"!==c&&"children"!==c&&"suppressContentEditableWarning"!==c&&"suppressHydrationWarning"!==c&&"autoFocus"!==c&&(_.hasOwnProperty(c)?e||(e=[]):(e=e||[]).push(c,null));for(c in r){var l=r[c];if(u=null!=o?o[c]:void 0,r.hasOwnProperty(c)&&l!==u&&(null!=l||null!=u))if("style"===c)if(u){for(s in u)!u.hasOwnProperty(s)||l&&l.hasOwnProperty(s)||(n||(n={}),n[s]="");for(s in l)l.hasOwnProperty(s)&&u[s]!==l[s]&&(n||(n={}),n[s]=l[s])}else n||(e||(e=[]),e.push(c,n)),n=l;else"dangerouslySetInnerHTML"===c?(l=l?l.__html:void 0,u=u?u.__html:void 0,null!=l&&u!==l&&(e=e||[]).push(c,l)):"children"===c?u===l||"string"!=typeof l&&"number"!=typeof l||(e=e||[]).push(c,""+l):"suppressContentEditableWarning"!==c&&"suppressHydrationWarning"!==c&&(_.hasOwnProperty(c)?(null!=l&&sn(a,c),e||u===l||(e=[])):(e=e||[]).push(c,l))}n&&(e=e||[]).push("style",n),a=e,(t.updateQueue=a)&&(t.effectTag|=4)}},Bo=function(e,t,n,r){n!==r&&(t.effectTag|=4)};var Xo="function"==typeof WeakSet?WeakSet:Set;function ec(e,t){var n=t.source,r=t.stack;null===r&&null!==n&&(r=ge(n)),null!==n&&ve(n.type),t=t.value,null!==e&&1===e.tag&&ve(e.type);try{console.error(t)}catch(e){setTimeout((function(){throw e}))}}function tc(e){var t=e.ref;if(null!==t)if("function"==typeof t)try{t(null)}catch(t){ys(e,t)}else t.current=null}function nc(e,t){switch(t.tag){case 0:case 11:case 15:case 22:return;case 1:if(256&t.effectTag&&null!==e){var n=e.memoizedProps,r=e.memoizedState;t=(e=t.stateNode).getSnapshotBeforeUpdate(t.elementType===t.type?n:$i(t.type,n),r),e.__reactInternalSnapshotBeforeUpdate=t}return;case 3:case 5:case 6:case 4:case 17:return}throw Error(o(163))}function rc(e,t){if(null!==(t=null!==(t=t.updateQueue)?t.lastEffect:null)){var n=t=t.next;do{if((n.tag&e)===e){var r=n.destroy;n.destroy=void 0,void 0!==r&&r()}n=n.next}while(n!==t)}}function ic(e,t){if(null!==(t=null!==(t=t.updateQueue)?t.lastEffect:null)){var n=t=t.next;do{if((n.tag&e)===e){var r=n.create;n.destroy=r()}n=n.next}while(n!==t)}}function ac(e,t,n){switch(n.tag){case 0:case 11:case 15:case 22:return void ic(3,n);case 1:if(e=n.stateNode,4&n.effectTag)if(null===t)e.componentDidMount();else{var r=n.elementType===n.type?t.memoizedProps:$i(n.type,t.memoizedProps);e.componentDidUpdate(r,t.memoizedState,e.__reactInternalSnapshotBeforeUpdate)}return void(null!==(t=n.updateQueue)&&fa(n,t,e));case 3:if(null!==(t=n.updateQueue)){if(e=null,null!==n.child)switch(n.child.tag){case 5:e=n.child.stateNode;break;case 1:e=n.child.stateNode}fa(n,t,e)}return;case 5:return e=n.stateNode,void(null===t&&4&n.effectTag&&gn(n.type,n.memoizedProps)&&e.focus());case 6:case 4:case 12:return;case 13:return void(null===n.memoizedState&&(n=n.alternate,null!==n&&(n=n.memoizedState,null!==n&&(n=n.dehydrated,null!==n&&Pt(n)))));case 19:case 17:case 20:case 21:return}throw Error(o(163))}function oc(e,t,n){switch("function"==typeof Ss&&Ss(t),t.tag){case 0:case 11:case 14:case 15:case 22:if(null!==(e=t.updateQueue)&&null!==(e=e.lastEffect)){var r=e.next;Bi(97<n?97:n,(function(){var e=r;do{var n=e.destroy;if(void 0!==n){var i=t;try{n()}catch(e){ys(i,e)}}e=e.next}while(e!==r)}))}break;case 1:tc(t),"function"==typeof(n=t.stateNode).componentWillUnmount&&function(e,t){try{t.props=e.memoizedProps,t.state=e.memoizedState,t.componentWillUnmount()}catch(t){ys(e,t)}}(t,n);break;case 5:tc(t);break;case 4:lc(e,t,n)}}function cc(e){var t=e.alternate;e.return=null,e.child=null,e.memoizedState=null,e.updateQueue=null,e.dependencies=null,e.alternate=null,e.firstEffect=null,e.lastEffect=null,e.pendingProps=null,e.memoizedProps=null,e.stateNode=null,null!==t&&cc(t)}function sc(e){return 5===e.tag||3===e.tag||4===e.tag}function uc(e){e:{for(var t=e.return;null!==t;){if(sc(t)){var n=t;break e}t=t.return}throw Error(o(160))}switch(t=n.stateNode,n.tag){case 5:var r=!1;break;case 3:case 4:t=t.containerInfo,r=!0;break;default:throw Error(o(161))}16&n.effectTag&&(Ie(t,""),n.effectTag&=-17);e:t:for(n=e;;){for(;null===n.sibling;){if(null===n.return||sc(n.return)){n=null;break e}n=n.return}for(n.sibling.return=n.return,n=n.sibling;5!==n.tag&&6!==n.tag&&18!==n.tag;){if(2&n.effectTag)continue t;if(null===n.child||4===n.tag)continue t;n.child.return=n,n=n.child}if(!(2&n.effectTag)){n=n.stateNode;break e}}r?function e(t,n,r){var i=t.tag,a=5===i||6===i;if(a)t=a?t.stateNode:t.stateNode.instance,n?8===r.nodeType?r.parentNode.insertBefore(t,n):r.insertBefore(t,n):(8===r.nodeType?(n=r.parentNode).insertBefore(t,r):(n=r).appendChild(t),null!==(r=r._reactRootContainer)&&void 0!==r||null!==n.onclick||(n.onclick=un));else if(4!==i&&null!==(t=t.child))for(e(t,n,r),t=t.sibling;null!==t;)e(t,n,r),t=t.sibling}(e,n,t):function e(t,n,r){var i=t.tag,a=5===i||6===i;if(a)t=a?t.stateNode:t.stateNode.instance,n?r.insertBefore(t,n):r.appendChild(t);else if(4!==i&&null!==(t=t.child))for(e(t,n,r),t=t.sibling;null!==t;)e(t,n,r),t=t.sibling}(e,n,t)}function lc(e,t,n){for(var r,i,a=t,c=!1;;){if(!c){c=a.return;e:for(;;){if(null===c)throw Error(o(160));switch(r=c.stateNode,c.tag){case 5:i=!1;break e;case 3:case 4:r=r.containerInfo,i=!0;break e}c=c.return}c=!0}if(5===a.tag||6===a.tag){e:for(var s=e,u=a,l=n,f=u;;)if(oc(s,f,l),null!==f.child&&4!==f.tag)f.child.return=f,f=f.child;else{if(f===u)break e;for(;null===f.sibling;){if(null===f.return||f.return===u)break e;f=f.return}f.sibling.return=f.return,f=f.sibling}i?(s=r,u=a.stateNode,8===s.nodeType?s.parentNode.removeChild(u):s.removeChild(u)):r.removeChild(a.stateNode)}else if(4===a.tag){if(null!==a.child){r=a.stateNode.containerInfo,i=!0,a.child.return=a,a=a.child;continue}}else if(oc(e,a,n),null!==a.child){a.child.return=a,a=a.child;continue}if(a===t)break;for(;null===a.sibling;){if(null===a.return||a.return===t)return;4===(a=a.return).tag&&(c=!1)}a.sibling.return=a.return,a=a.sibling}}function fc(e,t){switch(t.tag){case 0:case 11:case 14:case 15:case 22:return void rc(3,t);case 1:return;case 5:var n=t.stateNode;if(null!=n){var r=t.memoizedProps,i=null!==e?e.memoizedProps:r;e=t.type;var a=t.updateQueue;if(t.updateQueue=null,null!==a){for(n[zn]=r,"input"===e&&"radio"===r.type&&null!=r.name&&_e(n,r),on(e,i),t=on(e,r),i=0;i<a.length;i+=2){var c=a[i],s=a[i+1];"style"===c?nn(n,s):"dangerouslySetInnerHTML"===c?De(n,s):"children"===c?Ie(n,s):Q(n,c,s,t)}switch(e){case"input":ze(n,r);break;case"textarea":Ae(n,r);break;case"select":t=n._wrapperState.wasMultiple,n._wrapperState.wasMultiple=!!r.multiple,null!=(e=r.value)?Te(n,!!r.multiple,e,!1):t!==!!r.multiple&&(null!=r.defaultValue?Te(n,!!r.multiple,r.defaultValue,!0):Te(n,!!r.multiple,r.multiple?[]:"",!1))}}}return;case 6:if(null===t.stateNode)throw Error(o(162));return void(t.stateNode.nodeValue=t.memoizedProps);case 3:return void((t=t.stateNode).hydrate&&(t.hydrate=!1,Pt(t.containerInfo)));case 12:return;case 13:if(n=t,null===t.memoizedState?r=!1:(r=!0,n=t.child,Nc=Di()),null!==n)e:for(e=n;;){if(5===e.tag)a=e.stateNode,r?"function"==typeof(a=a.style).setProperty?a.setProperty("display","none","important"):a.display="none":(a=e.stateNode,i=null!=(i=e.memoizedProps.style)&&i.hasOwnProperty("display")?i.display:null,a.style.display=tn("display",i));else if(6===e.tag)e.stateNode.nodeValue=r?"":e.memoizedProps;else{if(13===e.tag&&null!==e.memoizedState&&null===e.memoizedState.dehydrated){(a=e.child.sibling).return=e,e=a;continue}if(null!==e.child){e.child.return=e,e=e.child;continue}}if(e===n)break;for(;null===e.sibling;){if(null===e.return||e.return===n)break e;e=e.return}e.sibling.return=e.return,e=e.sibling}return void hc(t);case 19:return void hc(t);case 17:return}throw Error(o(163))}function hc(e){var t=e.updateQueue;if(null!==t){e.updateQueue=null;var n=e.stateNode;null===n&&(n=e.stateNode=new Xo),t.forEach((function(t){var r=ws.bind(null,e,t);n.has(t)||(n.add(t),t.then(r,r))}))}}var dc="function"==typeof WeakMap?WeakMap:Map;function pc(e,t,n){(n=ca(n,null)).tag=3,n.payload={element:null};var r=t.value;return n.callback=function(){Pc||(Pc=!0,jc=r),ec(e,t)},n}function mc(e,t,n){(n=ca(n,null)).tag=3;var r=e.type.getDerivedStateFromError;if("function"==typeof r){var i=t.value;n.payload=function(){return ec(e,t),r(i)}}var a=e.stateNode;return null!==a&&"function"==typeof a.componentDidCatch&&(n.callback=function(){"function"!=typeof r&&(null===Vc?Vc=new Set([this]):Vc.add(this),ec(e,t));var n=t.stack;this.componentDidCatch(t.value,{componentStack:null!==n?n:""})}),n}var vc,gc=Math.ceil,yc=K.ReactCurrentDispatcher,bc=K.ReactCurrentOwner,wc=0,xc=3,Sc=4,kc=0,_c=null,zc=null,Cc=0,Mc=wc,Oc=null,Tc=1073741823,Ec=1073741823,Lc=null,Ac=0,Rc=!1,Nc=0,Hc=null,Pc=!1,jc=null,Vc=null,Dc=!1,Ic=null,Fc=90,Bc=null,Uc=0,qc=null,Gc=0;function Wc(){return 0!=(48&kc)?1073741821-(Di()/10|0):0!==Gc?Gc:Gc=1073741821-(Di()/10|0)}function Zc(e,t,n){if(0==(2&(t=t.mode)))return 1073741823;var r=Ii();if(0==(4&t))return 99===r?1073741823:1073741822;if(0!=(16&kc))return Cc;if(null!==n)e=Zi(e,0|n.timeoutMs||5e3,250);else switch(r){case 99:e=1073741823;break;case 98:e=Zi(e,150,100);break;case 97:case 96:e=Zi(e,5e3,250);break;case 95:e=2;break;default:throw Error(o(326))}return null!==_c&&e===Cc&&--e,e}function $c(e,t){if(50<Uc)throw Uc=0,qc=null,Error(o(185));if(null!==(e=Jc(e,t))){var n=Ii();1073741823===t?0!=(8&kc)&&0==(48&kc)?Xc(e):(Qc(e),0===kc&&Gi()):Qc(e),0==(4&kc)||98!==n&&99!==n||(null===Bc?Bc=new Map([[e,t]]):(void 0===(n=Bc.get(e))||n>t)&&Bc.set(e,t))}}function Jc(e,t){e.expirationTime<t&&(e.expirationTime=t);var n=e.alternate;null!==n&&n.expirationTime<t&&(n.expirationTime=t);var r=e.return,i=null;if(null===r&&3===e.tag)i=e.stateNode;else for(;null!==r;){if(n=r.alternate,r.childExpirationTime<t&&(r.childExpirationTime=t),null!==n&&n.childExpirationTime<t&&(n.childExpirationTime=t),null===r.return&&3===r.tag){i=r.stateNode;break}r=r.return}return null!==i&&(_c===i&&(os(t),Mc===Sc&&Rs(i,Cc)),Ns(i,t)),i}function Kc(e){var t=e.lastExpiredTime;if(0!==t)return t;if(!As(e,t=e.firstPendingTime))return t;var n=e.lastPingedTime;return 2>=(e=n>(e=e.nextKnownPendingLevel)?n:e)&&t!==e?0:e}function Qc(e){if(0!==e.lastExpiredTime)e.callbackExpirationTime=1073741823,e.callbackPriority=99,e.callbackNode=qi(Xc.bind(null,e));else{var t=Kc(e),n=e.callbackNode;if(0===t)null!==n&&(e.callbackNode=null,e.callbackExpirationTime=0,e.callbackPriority=90);else{var r=Wc();if(1073741823===t?r=99:1===t||2===t?r=95:r=0>=(r=10*(1073741821-t)-10*(1073741821-r))?99:250>=r?98:5250>=r?97:95,null!==n){var i=e.callbackPriority;if(e.callbackExpirationTime===t&&i>=r)return;n!==Ai&&ki(n)}e.callbackExpirationTime=t,e.callbackPriority=r,t=1073741823===t?qi(Xc.bind(null,e)):Ui(r,Yc.bind(null,e),{timeout:10*(1073741821-t)-Di()}),e.callbackNode=t}}}function Yc(e,t){if(Gc=0,t)return Hs(e,t=Wc()),Qc(e),null;var n=Kc(e);if(0!==n){if(t=e.callbackNode,0!=(48&kc))throw Error(o(327));if(ms(),e===_c&&n===Cc||ns(e,n),null!==zc){var r=kc;kc|=16;for(var i=is();;)try{ss();break}catch(t){rs(e,t)}if(Xi(),kc=r,yc.current=i,1===Mc)throw t=Oc,ns(e,n),Rs(e,n),Qc(e),t;if(null===zc)switch(i=e.finishedWork=e.current.alternate,e.finishedExpirationTime=n,r=Mc,_c=null,r){case wc:case 1:throw Error(o(345));case 2:Hs(e,2<n?2:n);break;case xc:if(Rs(e,n),n===(r=e.lastSuspendedTime)&&(e.nextKnownPendingLevel=fs(i)),1073741823===Tc&&10<(i=Nc+500-Di())){if(Rc){var a=e.lastPingedTime;if(0===a||a>=n){e.lastPingedTime=n,ns(e,n);break}}if(0!==(a=Kc(e))&&a!==n)break;if(0!==r&&r!==n){e.lastPingedTime=r;break}e.timeoutHandle=bn(hs.bind(null,e),i);break}hs(e);break;case Sc:if(Rs(e,n),n===(r=e.lastSuspendedTime)&&(e.nextKnownPendingLevel=fs(i)),Rc&&(0===(i=e.lastPingedTime)||i>=n)){e.lastPingedTime=n,ns(e,n);break}if(0!==(i=Kc(e))&&i!==n)break;if(0!==r&&r!==n){e.lastPingedTime=r;break}if(1073741823!==Ec?r=10*(1073741821-Ec)-Di():1073741823===Tc?r=0:(r=10*(1073741821-Tc)-5e3,0>(r=(i=Di())-r)&&(r=0),(n=10*(1073741821-n)-i)<(r=(120>r?120:480>r?480:1080>r?1080:1920>r?1920:3e3>r?3e3:4320>r?4320:1960*gc(r/1960))-r)&&(r=n)),10<r){e.timeoutHandle=bn(hs.bind(null,e),r);break}hs(e);break;case 5:if(1073741823!==Tc&&null!==Lc){a=Tc;var c=Lc;if(0>=(r=0|c.busyMinDurationMs)?r=0:(i=0|c.busyDelayMs,r=(a=Di()-(10*(1073741821-a)-(0|c.timeoutMs||5e3)))<=i?0:i+r-a),10<r){Rs(e,n),e.timeoutHandle=bn(hs.bind(null,e),r);break}}hs(e);break;default:throw Error(o(329))}if(Qc(e),e.callbackNode===t)return Yc.bind(null,e)}}return null}function Xc(e){var t=e.lastExpiredTime;if(t=0!==t?t:1073741823,0!=(48&kc))throw Error(o(327));if(ms(),e===_c&&t===Cc||ns(e,t),null!==zc){var n=kc;kc|=16;for(var r=is();;)try{cs();break}catch(t){rs(e,t)}if(Xi(),kc=n,yc.current=r,1===Mc)throw n=Oc,ns(e,t),Rs(e,t),Qc(e),n;if(null!==zc)throw Error(o(261));e.finishedWork=e.current.alternate,e.finishedExpirationTime=t,_c=null,hs(e),Qc(e)}return null}function es(e,t){var n=kc;kc|=1;try{return e(t)}finally{0===(kc=n)&&Gi()}}function ts(e,t){var n=kc;kc&=-2,kc|=8;try{return e(t)}finally{0===(kc=n)&&Gi()}}function ns(e,t){e.finishedWork=null,e.finishedExpirationTime=0;var n=e.timeoutHandle;if(-1!==n&&(e.timeoutHandle=-1,wn(n)),null!==zc)for(n=zc.return;null!==n;){var r=n;switch(r.tag){case 1:null!=(r=r.type.childContextTypes)&&vi();break;case 3:Aa(),si(hi),si(fi);break;case 5:Na(r);break;case 4:Aa();break;case 13:case 19:si(Ha);break;case 10:ea(r)}n=n.return}_c=e,zc=Cs(e.current,null),Cc=t,Mc=wc,Oc=null,Ec=Tc=1073741823,Lc=null,Ac=0,Rc=!1}function rs(e,t){for(;;){try{if(Xi(),Va.current=vo,qa)for(var n=Fa.memoizedState;null!==n;){var r=n.queue;null!==r&&(r.pending=null),n=n.next}if(Ia=0,Ua=Ba=Fa=null,qa=!1,null===zc||null===zc.return)return Mc=1,Oc=t,zc=null;e:{var i=e,a=zc.return,o=zc,c=t;if(t=Cc,o.effectTag|=2048,o.firstEffect=o.lastEffect=null,null!==c&&"object"==typeof c&&"function"==typeof c.then){var s=c;if(0==(2&o.mode)){var u=o.alternate;u?(o.updateQueue=u.updateQueue,o.memoizedState=u.memoizedState,o.expirationTime=u.expirationTime):(o.updateQueue=null,o.memoizedState=null)}var l=0!=(1&Ha.current),f=a;do{var h;if(h=13===f.tag){var d=f.memoizedState;if(null!==d)h=null!==d.dehydrated;else{var p=f.memoizedProps;h=void 0!==p.fallback&&(!0!==p.unstable_avoidThisFallback||!l)}}if(h){var m=f.updateQueue;if(null===m){var v=new Set;v.add(s),f.updateQueue=v}else m.add(s);if(0==(2&f.mode)){if(f.effectTag|=64,o.effectTag&=-2981,1===o.tag)if(null===o.alternate)o.tag=17;else{var g=ca(1073741823,null);g.tag=2,sa(o,g)}o.expirationTime=1073741823;break e}c=void 0,o=t;var y=i.pingCache;if(null===y?(y=i.pingCache=new dc,c=new Set,y.set(s,c)):void 0===(c=y.get(s))&&(c=new Set,y.set(s,c)),!c.has(o)){c.add(o);var b=bs.bind(null,i,s,o);s.then(b,b)}f.effectTag|=4096,f.expirationTime=t;break e}f=f.return}while(null!==f);c=Error((ve(o.type)||"A React component")+" suspended while rendering, but no fallback UI was specified.\n\nAdd a <Suspense fallback=...> component higher in the tree to provide a loading indicator or placeholder to display."+ge(o))}5!==Mc&&(Mc=2),c=Yo(c,o),f=a;do{switch(f.tag){case 3:s=c,f.effectTag|=4096,f.expirationTime=t,ua(f,pc(f,s,t));break e;case 1:s=c;var w=f.type,x=f.stateNode;if(0==(64&f.effectTag)&&("function"==typeof w.getDerivedStateFromError||null!==x&&"function"==typeof x.componentDidCatch&&(null===Vc||!Vc.has(x)))){f.effectTag|=4096,f.expirationTime=t,ua(f,mc(f,s,t));break e}}f=f.return}while(null!==f)}zc=ls(zc)}catch(e){t=e;continue}break}}function is(){var e=yc.current;return yc.current=vo,null===e?vo:e}function as(e,t){e<Tc&&2<e&&(Tc=e),null!==t&&e<Ec&&2<e&&(Ec=e,Lc=t)}function os(e){e>Ac&&(Ac=e)}function cs(){for(;null!==zc;)zc=us(zc)}function ss(){for(;null!==zc&&!Ri();)zc=us(zc)}function us(e){var t=vc(e.alternate,e,Cc);return e.memoizedProps=e.pendingProps,null===t&&(t=ls(e)),bc.current=null,t}function ls(e){zc=e;do{var t=zc.alternate;if(e=zc.return,0==(2048&zc.effectTag)){if(t=Ko(t,zc,Cc),1===Cc||1!==zc.childExpirationTime){for(var n=0,r=zc.child;null!==r;){var i=r.expirationTime,a=r.childExpirationTime;i>n&&(n=i),a>n&&(n=a),r=r.sibling}zc.childExpirationTime=n}if(null!==t)return t;null!==e&&0==(2048&e.effectTag)&&(null===e.firstEffect&&(e.firstEffect=zc.firstEffect),null!==zc.lastEffect&&(null!==e.lastEffect&&(e.lastEffect.nextEffect=zc.firstEffect),e.lastEffect=zc.lastEffect),1<zc.effectTag&&(null!==e.lastEffect?e.lastEffect.nextEffect=zc:e.firstEffect=zc,e.lastEffect=zc))}else{if(null!==(t=Qo(zc)))return t.effectTag&=2047,t;null!==e&&(e.firstEffect=e.lastEffect=null,e.effectTag|=2048)}if(null!==(t=zc.sibling))return t;zc=e}while(null!==zc);return Mc===wc&&(Mc=5),null}function fs(e){var t=e.expirationTime;return t>(e=e.childExpirationTime)?t:e}function hs(e){var t=Ii();return Bi(99,ds.bind(null,e,t)),null}function ds(e,t){do{ms()}while(null!==Ic);if(0!=(48&kc))throw Error(o(327));var n=e.finishedWork,r=e.finishedExpirationTime;if(null===n)return null;if(e.finishedWork=null,e.finishedExpirationTime=0,n===e.current)throw Error(o(177));e.callbackNode=null,e.callbackExpirationTime=0,e.callbackPriority=90,e.nextKnownPendingLevel=0;var i=fs(n);if(e.firstPendingTime=i,r<=e.lastSuspendedTime?e.firstSuspendedTime=e.lastSuspendedTime=e.nextKnownPendingLevel=0:r<=e.firstSuspendedTime&&(e.firstSuspendedTime=r-1),r<=e.lastPingedTime&&(e.lastPingedTime=0),r<=e.lastExpiredTime&&(e.lastExpiredTime=0),e===_c&&(zc=_c=null,Cc=0),1<n.effectTag?null!==n.lastEffect?(n.lastEffect.nextEffect=n,i=n.firstEffect):i=n:i=n.firstEffect,null!==i){var a=kc;kc|=32,bc.current=null,mn=Wt;var c=dn();if(pn(c)){if("selectionStart"in c)var s={start:c.selectionStart,end:c.selectionEnd};else e:{var u=(s=(s=c.ownerDocument)&&s.defaultView||window).getSelection&&s.getSelection();if(u&&0!==u.rangeCount){s=u.anchorNode;var l=u.anchorOffset,f=u.focusNode;u=u.focusOffset;try{s.nodeType,f.nodeType}catch(e){s=null;break e}var h=0,d=-1,p=-1,m=0,v=0,g=c,y=null;t:for(;;){for(var b;g!==s||0!==l&&3!==g.nodeType||(d=h+l),g!==f||0!==u&&3!==g.nodeType||(p=h+u),3===g.nodeType&&(h+=g.nodeValue.length),null!==(b=g.firstChild);)y=g,g=b;for(;;){if(g===c)break t;if(y===s&&++m===l&&(d=h),y===f&&++v===u&&(p=h),null!==(b=g.nextSibling))break;y=(g=y).parentNode}g=b}s=-1===d||-1===p?null:{start:d,end:p}}else s=null}s=s||{start:0,end:0}}else s=null;vn={activeElementDetached:null,focusedElem:c,selectionRange:s},Wt=!1,Hc=i;do{try{ps()}catch(e){if(null===Hc)throw Error(o(330));ys(Hc,e),Hc=Hc.nextEffect}}while(null!==Hc);Hc=i;do{try{for(c=e,s=t;null!==Hc;){var w=Hc.effectTag;if(16&w&&Ie(Hc.stateNode,""),128&w){var x=Hc.alternate;if(null!==x){var S=x.ref;null!==S&&("function"==typeof S?S(null):S.current=null)}}switch(1038&w){case 2:uc(Hc),Hc.effectTag&=-3;break;case 6:uc(Hc),Hc.effectTag&=-3,fc(Hc.alternate,Hc);break;case 1024:Hc.effectTag&=-1025;break;case 1028:Hc.effectTag&=-1025,fc(Hc.alternate,Hc);break;case 4:fc(Hc.alternate,Hc);break;case 8:lc(c,l=Hc,s),cc(l)}Hc=Hc.nextEffect}}catch(e){if(null===Hc)throw Error(o(330));ys(Hc,e),Hc=Hc.nextEffect}}while(null!==Hc);if(S=vn,x=dn(),w=S.focusedElem,s=S.selectionRange,x!==w&&w&&w.ownerDocument&&function e(t,n){return!(!t||!n)&&(t===n||(!t||3!==t.nodeType)&&(n&&3===n.nodeType?e(t,n.parentNode):"contains"in t?t.contains(n):!!t.compareDocumentPosition&&!!(16&t.compareDocumentPosition(n))))}(w.ownerDocument.documentElement,w)){null!==s&&pn(w)&&(x=s.start,void 0===(S=s.end)&&(S=x),"selectionStart"in w?(w.selectionStart=x,w.selectionEnd=Math.min(S,w.value.length)):(S=(x=w.ownerDocument||document)&&x.defaultView||window).getSelection&&(S=S.getSelection(),l=w.textContent.length,c=Math.min(s.start,l),s=void 0===s.end?c:Math.min(s.end,l),!S.extend&&c>s&&(l=s,s=c,c=l),l=hn(w,c),f=hn(w,s),l&&f&&(1!==S.rangeCount||S.anchorNode!==l.node||S.anchorOffset!==l.offset||S.focusNode!==f.node||S.focusOffset!==f.offset)&&((x=x.createRange()).setStart(l.node,l.offset),S.removeAllRanges(),c>s?(S.addRange(x),S.extend(f.node,f.offset)):(x.setEnd(f.node,f.offset),S.addRange(x))))),x=[];for(S=w;S=S.parentNode;)1===S.nodeType&&x.push({element:S,left:S.scrollLeft,top:S.scrollTop});for("function"==typeof w.focus&&w.focus(),w=0;w<x.length;w++)(S=x[w]).element.scrollLeft=S.left,S.element.scrollTop=S.top}Wt=!!mn,vn=mn=null,e.current=n,Hc=i;do{try{for(w=e;null!==Hc;){var k=Hc.effectTag;if(36&k&&ac(w,Hc.alternate,Hc),128&k){x=void 0;var _=Hc.ref;if(null!==_){var z=Hc.stateNode;switch(Hc.tag){case 5:x=z;break;default:x=z}"function"==typeof _?_(x):_.current=x}}Hc=Hc.nextEffect}}catch(e){if(null===Hc)throw Error(o(330));ys(Hc,e),Hc=Hc.nextEffect}}while(null!==Hc);Hc=null,Ni(),kc=a}else e.current=n;if(Dc)Dc=!1,Ic=e,Fc=t;else for(Hc=i;null!==Hc;)t=Hc.nextEffect,Hc.nextEffect=null,Hc=t;if(0===(t=e.firstPendingTime)&&(Vc=null),1073741823===t?e===qc?Uc++:(Uc=0,qc=e):Uc=0,"function"==typeof xs&&xs(n.stateNode,r),Qc(e),Pc)throw Pc=!1,e=jc,jc=null,e;return 0!=(8&kc)||Gi(),null}function ps(){for(;null!==Hc;){var e=Hc.effectTag;0!=(256&e)&&nc(Hc.alternate,Hc),0==(512&e)||Dc||(Dc=!0,Ui(97,(function(){return ms(),null}))),Hc=Hc.nextEffect}}function ms(){if(90!==Fc){var e=97<Fc?97:Fc;return Fc=90,Bi(e,vs)}}function vs(){if(null===Ic)return!1;var e=Ic;if(Ic=null,0!=(48&kc))throw Error(o(331));var t=kc;for(kc|=32,e=e.current.firstEffect;null!==e;){try{var n=e;if(0!=(512&n.effectTag))switch(n.tag){case 0:case 11:case 15:case 22:rc(5,n),ic(5,n)}}catch(t){if(null===e)throw Error(o(330));ys(e,t)}n=e.nextEffect,e.nextEffect=null,e=n}return kc=t,Gi(),!0}function gs(e,t,n){sa(e,t=pc(e,t=Yo(n,t),1073741823)),null!==(e=Jc(e,1073741823))&&Qc(e)}function ys(e,t){if(3===e.tag)gs(e,e,t);else for(var n=e.return;null!==n;){if(3===n.tag){gs(n,e,t);break}if(1===n.tag){var r=n.stateNode;if("function"==typeof n.type.getDerivedStateFromError||"function"==typeof r.componentDidCatch&&(null===Vc||!Vc.has(r))){sa(n,e=mc(n,e=Yo(t,e),1073741823)),null!==(n=Jc(n,1073741823))&&Qc(n);break}}n=n.return}}function bs(e,t,n){var r=e.pingCache;null!==r&&r.delete(t),_c===e&&Cc===n?Mc===Sc||Mc===xc&&1073741823===Tc&&Di()-Nc<500?ns(e,Cc):Rc=!0:As(e,n)&&(0!==(t=e.lastPingedTime)&&t<n||(e.lastPingedTime=n,Qc(e)))}function ws(e,t){var n=e.stateNode;null!==n&&n.delete(t),0===(t=0)&&(t=Zc(t=Wc(),e,null)),null!==(e=Jc(e,t))&&Qc(e)}vc=function(e,t,n){var r=t.expirationTime;if(null!==e){var i=t.pendingProps;if(e.memoizedProps!==i||hi.current)Eo=!0;else{if(r<n){switch(Eo=!1,t.tag){case 3:Do(t),Oo();break;case 5:if(Ra(t),4&t.mode&&1!==n&&i.hidden)return t.expirationTime=t.childExpirationTime=1,null;break;case 1:mi(t.type)&&bi(t);break;case 4:La(t,t.stateNode.containerInfo);break;case 10:r=t.memoizedProps.value,i=t.type._context,ui(Ji,i._currentValue),i._currentValue=r;break;case 13:if(null!==t.memoizedState)return 0!==(r=t.child.childExpirationTime)&&r>=n?qo(e,t,n):(ui(Ha,1&Ha.current),null!==(t=$o(e,t,n))?t.sibling:null);ui(Ha,1&Ha.current);break;case 19:if(r=t.childExpirationTime>=n,0!=(64&e.effectTag)){if(r)return Zo(e,t,n);t.effectTag|=64}if(null!==(i=t.memoizedState)&&(i.rendering=null,i.tail=null),ui(Ha,Ha.current),!r)return null}return $o(e,t,n)}Eo=!1}}else Eo=!1;switch(t.expirationTime=0,t.tag){case 2:if(r=t.type,null!==e&&(e.alternate=null,t.alternate=null,t.effectTag|=2),e=t.pendingProps,i=pi(t,fi.current),na(t,n),i=Za(null,t,r,e,i,n),t.effectTag|=1,"object"==typeof i&&null!==i&&"function"==typeof i.render&&void 0===i.$$typeof){if(t.tag=1,t.memoizedState=null,t.updateQueue=null,mi(r)){var a=!0;bi(t)}else a=!1;t.memoizedState=null!==i.state&&void 0!==i.state?i.state:null,aa(t);var c=r.getDerivedStateFromProps;"function"==typeof c&&pa(t,r,c,e),i.updater=ma,t.stateNode=i,i._reactInternalFiber=t,ba(t,r,e,n),t=Vo(null,t,r,!0,a,n)}else t.tag=0,Lo(null,t,i,n),t=t.child;return t;case 16:e:{if(i=t.elementType,null!==e&&(e.alternate=null,t.alternate=null,t.effectTag|=2),e=t.pendingProps,function(e){if(-1===e._status){e._status=0;var t=e._ctor;t=t(),e._result=t,t.then((function(t){0===e._status&&(t=t.default,e._status=1,e._result=t)}),(function(t){0===e._status&&(e._status=2,e._result=t)}))}}(i),1!==i._status)throw i._result;switch(i=i._result,t.type=i,a=t.tag=function(e){if("function"==typeof e)return zs(e)?1:0;if(null!=e){if((e=e.$$typeof)===se)return 11;if(e===fe)return 14}return 2}(i),e=$i(i,e),a){case 0:t=Po(null,t,i,e,n);break e;case 1:t=jo(null,t,i,e,n);break e;case 11:t=Ao(null,t,i,e,n);break e;case 14:t=Ro(null,t,i,$i(i.type,e),r,n);break e}throw Error(o(306,i,""))}return t;case 0:return r=t.type,i=t.pendingProps,Po(e,t,r,i=t.elementType===r?i:$i(r,i),n);case 1:return r=t.type,i=t.pendingProps,jo(e,t,r,i=t.elementType===r?i:$i(r,i),n);case 3:if(Do(t),r=t.updateQueue,null===e||null===r)throw Error(o(282));if(r=t.pendingProps,i=null!==(i=t.memoizedState)?i.element:null,oa(e,t),la(t,r,null,n),(r=t.memoizedState.element)===i)Oo(),t=$o(e,t,n);else{if((i=t.stateNode.hydrate)&&(xo=xn(t.stateNode.containerInfo.firstChild),wo=t,i=So=!0),i)for(n=za(t,null,r,n),t.child=n;n;)n.effectTag=-3&n.effectTag|1024,n=n.sibling;else Lo(e,t,r,n),Oo();t=t.child}return t;case 5:return Ra(t),null===e&&zo(t),r=t.type,i=t.pendingProps,a=null!==e?e.memoizedProps:null,c=i.children,yn(r,i)?c=null:null!==a&&yn(r,a)&&(t.effectTag|=16),Ho(e,t),4&t.mode&&1!==n&&i.hidden?(t.expirationTime=t.childExpirationTime=1,t=null):(Lo(e,t,c,n),t=t.child),t;case 6:return null===e&&zo(t),null;case 13:return qo(e,t,n);case 4:return La(t,t.stateNode.containerInfo),r=t.pendingProps,null===e?t.child=_a(t,null,r,n):Lo(e,t,r,n),t.child;case 11:return r=t.type,i=t.pendingProps,Ao(e,t,r,i=t.elementType===r?i:$i(r,i),n);case 7:return Lo(e,t,t.pendingProps,n),t.child;case 8:case 12:return Lo(e,t,t.pendingProps.children,n),t.child;case 10:e:{r=t.type._context,i=t.pendingProps,c=t.memoizedProps,a=i.value;var s=t.type._context;if(ui(Ji,s._currentValue),s._currentValue=a,null!==c)if(s=c.value,0===(a=jr(s,a)?0:0|("function"==typeof r._calculateChangedBits?r._calculateChangedBits(s,a):1073741823))){if(c.children===i.children&&!hi.current){t=$o(e,t,n);break e}}else for(null!==(s=t.child)&&(s.return=t);null!==s;){var u=s.dependencies;if(null!==u){c=s.child;for(var l=u.firstContext;null!==l;){if(l.context===r&&0!=(l.observedBits&a)){1===s.tag&&((l=ca(n,null)).tag=2,sa(s,l)),s.expirationTime<n&&(s.expirationTime=n),null!==(l=s.alternate)&&l.expirationTime<n&&(l.expirationTime=n),ta(s.return,n),u.expirationTime<n&&(u.expirationTime=n);break}l=l.next}}else c=10===s.tag&&s.type===t.type?null:s.child;if(null!==c)c.return=s;else for(c=s;null!==c;){if(c===t){c=null;break}if(null!==(s=c.sibling)){s.return=c.return,c=s;break}c=c.return}s=c}Lo(e,t,i.children,n),t=t.child}return t;case 9:return i=t.type,r=(a=t.pendingProps).children,na(t,n),r=r(i=ra(i,a.unstable_observedBits)),t.effectTag|=1,Lo(e,t,r,n),t.child;case 14:return a=$i(i=t.type,t.pendingProps),Ro(e,t,i,a=$i(i.type,a),r,n);case 15:return No(e,t,t.type,t.pendingProps,r,n);case 17:return r=t.type,i=t.pendingProps,i=t.elementType===r?i:$i(r,i),null!==e&&(e.alternate=null,t.alternate=null,t.effectTag|=2),t.tag=1,mi(r)?(e=!0,bi(t)):e=!1,na(t,n),ga(t,r,i),ba(t,r,i,n),Vo(null,t,r,!0,e,n);case 19:return Zo(e,t,n)}throw Error(o(156,t.tag))};var xs=null,Ss=null;function ks(e,t,n,r){this.tag=e,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=r,this.effectTag=0,this.lastEffect=this.firstEffect=this.nextEffect=null,this.childExpirationTime=this.expirationTime=0,this.alternate=null}function _s(e,t,n,r){return new ks(e,t,n,r)}function zs(e){return!(!(e=e.prototype)||!e.isReactComponent)}function Cs(e,t){var n=e.alternate;return null===n?((n=_s(e.tag,t,e.key,e.mode)).elementType=e.elementType,n.type=e.type,n.stateNode=e.stateNode,n.alternate=e,e.alternate=n):(n.pendingProps=t,n.effectTag=0,n.nextEffect=null,n.firstEffect=null,n.lastEffect=null),n.childExpirationTime=e.childExpirationTime,n.expirationTime=e.expirationTime,n.child=e.child,n.memoizedProps=e.memoizedProps,n.memoizedState=e.memoizedState,n.updateQueue=e.updateQueue,t=e.dependencies,n.dependencies=null===t?null:{expirationTime:t.expirationTime,firstContext:t.firstContext,responders:t.responders},n.sibling=e.sibling,n.index=e.index,n.ref=e.ref,n}function Ms(e,t,n,r,i,a){var c=2;if(r=e,"function"==typeof e)zs(e)&&(c=1);else if("string"==typeof e)c=5;else e:switch(e){case ne:return Os(n.children,i,a,t);case ce:c=8,i|=7;break;case re:c=8,i|=1;break;case ie:return(e=_s(12,n,t,8|i)).elementType=ie,e.type=ie,e.expirationTime=a,e;case ue:return(e=_s(13,n,t,i)).type=ue,e.elementType=ue,e.expirationTime=a,e;case le:return(e=_s(19,n,t,i)).elementType=le,e.expirationTime=a,e;default:if("object"==typeof e&&null!==e)switch(e.$$typeof){case ae:c=10;break e;case oe:c=9;break e;case se:c=11;break e;case fe:c=14;break e;case he:c=16,r=null;break e;case de:c=22;break e}throw Error(o(130,null==e?e:typeof e,""))}return(t=_s(c,n,t,i)).elementType=e,t.type=r,t.expirationTime=a,t}function Os(e,t,n,r){return(e=_s(7,e,r,t)).expirationTime=n,e}function Ts(e,t,n){return(e=_s(6,e,null,t)).expirationTime=n,e}function Es(e,t,n){return(t=_s(4,null!==e.children?e.children:[],e.key,t)).expirationTime=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function Ls(e,t,n){this.tag=t,this.current=null,this.containerInfo=e,this.pingCache=this.pendingChildren=null,this.finishedExpirationTime=0,this.finishedWork=null,this.timeoutHandle=-1,this.pendingContext=this.context=null,this.hydrate=n,this.callbackNode=null,this.callbackPriority=90,this.lastExpiredTime=this.lastPingedTime=this.nextKnownPendingLevel=this.lastSuspendedTime=this.firstSuspendedTime=this.firstPendingTime=0}function As(e,t){var n=e.firstSuspendedTime;return e=e.lastSuspendedTime,0!==n&&n>=t&&e<=t}function Rs(e,t){var n=e.firstSuspendedTime,r=e.lastSuspendedTime;n<t&&(e.firstSuspendedTime=t),(r>t||0===n)&&(e.lastSuspendedTime=t),t<=e.lastPingedTime&&(e.lastPingedTime=0),t<=e.lastExpiredTime&&(e.lastExpiredTime=0)}function Ns(e,t){t>e.firstPendingTime&&(e.firstPendingTime=t);var n=e.firstSuspendedTime;0!==n&&(t>=n?e.firstSuspendedTime=e.lastSuspendedTime=e.nextKnownPendingLevel=0:t>=e.lastSuspendedTime&&(e.lastSuspendedTime=t+1),t>e.nextKnownPendingLevel&&(e.nextKnownPendingLevel=t))}function Hs(e,t){var n=e.lastExpiredTime;(0===n||n>t)&&(e.lastExpiredTime=t)}function Ps(e,t,n,r){var i=t.current,a=Wc(),c=ha.suspense;a=Zc(a,i,c);e:if(n){t:{if(Xe(n=n._reactInternalFiber)!==n||1!==n.tag)throw Error(o(170));var s=n;do{switch(s.tag){case 3:s=s.stateNode.context;break t;case 1:if(mi(s.type)){s=s.stateNode.__reactInternalMemoizedMergedChildContext;break t}}s=s.return}while(null!==s);throw Error(o(171))}if(1===n.tag){var u=n.type;if(mi(u)){n=yi(n,u,s);break e}}n=s}else n=li;return null===t.context?t.context=n:t.pendingContext=n,(t=ca(a,c)).payload={element:e},null!==(r=void 0===r?null:r)&&(t.callback=r),sa(i,t),$c(i,a),a}function js(e){if(!(e=e.current).child)return null;switch(e.child.tag){case 5:default:return e.child.stateNode}}function Vs(e,t){null!==(e=e.memoizedState)&&null!==e.dehydrated&&e.retryTime<t&&(e.retryTime=t)}function Ds(e,t){Vs(e,t),(e=e.alternate)&&Vs(e,t)}function Is(e,t,n){var r=new Ls(e,t,n=null!=n&&!0===n.hydrate),i=_s(3,null,null,2===t?7:1===t?3:0);r.current=i,i.stateNode=r,aa(i),e[Cn]=r.current,n&&0!==t&&function(e,t){var n=Ye(t);Ct.forEach((function(e){pt(e,t,n)})),Mt.forEach((function(e){pt(e,t,n)}))}(0,9===e.nodeType?e:e.ownerDocument),this._internalRoot=r}function Fs(e){return!(!e||1!==e.nodeType&&9!==e.nodeType&&11!==e.nodeType&&(8!==e.nodeType||" react-mount-point-unstable "!==e.nodeValue))}function Bs(e,t,n,r,i){var a=n._reactRootContainer;if(a){var o=a._internalRoot;if("function"==typeof i){var c=i;i=function(){var e=js(o);c.call(e)}}Ps(t,o,e,i)}else{if(a=n._reactRootContainer=function(e,t){if(t||(t=!(!(t=e?9===e.nodeType?e.documentElement:e.firstChild:null)||1!==t.nodeType||!t.hasAttribute("data-reactroot"))),!t)for(var n;n=e.lastChild;)e.removeChild(n);return new Is(e,0,t?{hydrate:!0}:void 0)}(n,r),o=a._internalRoot,"function"==typeof i){var s=i;i=function(){var e=js(o);s.call(e)}}ts((function(){Ps(t,o,e,i)}))}return js(o)}function Us(e,t,n){var r=3<arguments.length&&void 0!==arguments[3]?arguments[3]:null;return{$$typeof:te,key:null==r?null:""+r,children:e,containerInfo:t,implementation:n}}function qs(e,t){var n=2<arguments.length&&void 0!==arguments[2]?arguments[2]:null;if(!Fs(t))throw Error(o(200));return Us(e,t,null,n)}Is.prototype.render=function(e){Ps(e,this._internalRoot,null,null)},Is.prototype.unmount=function(){var e=this._internalRoot,t=e.containerInfo;Ps(null,e,null,(function(){t[Cn]=null}))},mt=function(e){if(13===e.tag){var t=Zi(Wc(),150,100);$c(e,t),Ds(e,t)}},vt=function(e){13===e.tag&&($c(e,3),Ds(e,3))},gt=function(e){if(13===e.tag){var t=Wc();$c(e,t=Zc(t,e,null)),Ds(e,t)}},O=function(e,t,n){switch(t){case"input":if(ze(e,n),t=n.name,"radio"===n.type&&null!=t){for(n=e;n.parentNode;)n=n.parentNode;for(n=n.querySelectorAll("input[name="+JSON.stringify(""+t)+'][type="radio"]'),t=0;t<n.length;t++){var r=n[t];if(r!==e&&r.form===e.form){var i=En(r);if(!i)throw Error(o(90));xe(r),ze(r,i)}}}break;case"textarea":Ae(e,n);break;case"select":null!=(t=n.value)&&Te(e,!!n.multiple,t,!1)}},N=es,H=function(e,t,n,r,i){var a=kc;kc|=4;try{return Bi(98,e.bind(null,t,n,r,i))}finally{0===(kc=a)&&Gi()}},P=function(){0==(49&kc)&&(function(){if(null!==Bc){var e=Bc;Bc=null,e.forEach((function(e,t){Hs(t,e),Qc(t)})),Gi()}}(),ms())},j=function(e,t){var n=kc;kc|=2;try{return e(t)}finally{0===(kc=n)&&Gi()}};var Gs,Ws,Zs={Events:[On,Tn,En,C,k,jn,function(e){it(e,Pn)},A,R,Qt,ct,ms,{current:!1}]};Ws=(Gs={findFiberByHostInstance:Mn,bundleType:0,version:"16.13.1",rendererPackageName:"react-dom"}).findFiberByHostInstance,function(e){if("undefined"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__)return!1;var t=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(t.isDisabled||!t.supportsFiber)return!0;try{var n=t.inject(e);xs=function(e){try{t.onCommitFiberRoot(n,e,void 0,64==(64&e.current.effectTag))}catch(e){}},Ss=function(e){try{t.onCommitFiberUnmount(n,e)}catch(e){}}}catch(e){}}(i({},Gs,{overrideHookState:null,overrideProps:null,setSuspenseHandler:null,scheduleUpdate:null,currentDispatcherRef:K.ReactCurrentDispatcher,findHostInstanceByFiber:function(e){return null===(e=nt(e))?null:e.stateNode},findFiberByHostInstance:function(e){return Ws?Ws(e):null},findHostInstancesForRefresh:null,scheduleRefresh:null,scheduleRoot:null,setRefreshHandler:null,getCurrentFiber:null})),t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=Zs,t.createPortal=qs,t.findDOMNode=function(e){if(null==e)return null;if(1===e.nodeType)return e;var t=e._reactInternalFiber;if(void 0===t){if("function"==typeof e.render)throw Error(o(188));throw Error(o(268,Object.keys(e)))}return e=null===(e=nt(t))?null:e.stateNode},t.flushSync=function(e,t){if(0!=(48&kc))throw Error(o(187));var n=kc;kc|=1;try{return Bi(99,e.bind(null,t))}finally{kc=n,Gi()}},t.hydrate=function(e,t,n){if(!Fs(t))throw Error(o(200));return Bs(null,e,t,!0,n)},t.render=function(e,t,n){if(!Fs(t))throw Error(o(200));return Bs(null,e,t,!1,n)},t.unmountComponentAtNode=function(e){if(!Fs(e))throw Error(o(40));return!!e._reactRootContainer&&(ts((function(){Bs(null,null,e,!1,(function(){e._reactRootContainer=null,e[Cn]=null}))})),!0)},t.unstable_batchedUpdates=es,t.unstable_createPortal=function(e,t){return qs(e,t,2<arguments.length&&void 0!==arguments[2]?arguments[2]:null)},t.unstable_renderSubtreeIntoContainer=function(e,t,n,r){if(!Fs(n))throw Error(o(200));if(null==e||void 0===e._reactInternalFiber)throw Error(o(38));return Bs(e,t,n,!1,r)},t.version="16.13.1"},function(e,t,n){"use strict";e.exports=n(201)},function(e,t,n){"use strict";
              + +

              /** @license React v0.19.1

              + +
              * scheduler.production.min.js
              +*
              +* Copyright (c) Facebook, Inc. and its affiliates.
              +*
              +* This source code is licensed under the MIT license found in the
              +* LICENSE file in the root directory of this source tree.
              +*/var r,i,a,o,c;if("undefined"==typeof window||"function"!=typeof MessageChannel){var s=null,u=null,l=function(){if(null!==s)try{var e=t.unstable_now();s(!0,e),s=null}catch(e){throw setTimeout(l,0),e}},f=Date.now();t.unstable_now=function(){return Date.now()-f},r=function(e){null!==s?setTimeout(r,0,e):(s=e,setTimeout(l,0))},i=function(e,t){u=setTimeout(e,t)},a=function(){clearTimeout(u)},o=function(){return!1},c=t.unstable_forceFrameRate=function(){}}else{var h=window.performance,d=window.Date,p=window.setTimeout,m=window.clearTimeout;if("undefined"!=typeof console){var v=window.cancelAnimationFrame;"function"!=typeof window.requestAnimationFrame&&console.error("This browser doesn't support requestAnimationFrame. Make sure that you load a polyfill in older browsers. https://fb.me/react-polyfills"),"function"!=typeof v&&console.error("This browser doesn't support cancelAnimationFrame. Make sure that you load a polyfill in older browsers. https://fb.me/react-polyfills")}if("object"==typeof h&&"function"==typeof h.now)t.unstable_now=function(){return h.now()};else{var g=d.now();t.unstable_now=function(){return d.now()-g}}var y=!1,b=null,w=-1,x=5,S=0;o=function(){return t.unstable_now()>=S},c=function(){},t.unstable_forceFrameRate=function(e){0>e||125<e?console.error("forceFrameRate takes a positive int between 0 and 125, forcing framerates higher than 125 fps is not unsupported"):x=0<e?Math.floor(1e3/e):5};var k=new MessageChannel,_=k.port2;k.port1.onmessage=function(){if(null!==b){var e=t.unstable_now();S=e+x;try{b(!0,e)?_.postMessage(null):(y=!1,b=null)}catch(e){throw _.postMessage(null),e}}else y=!1},r=function(e){b=e,y||(y=!0,_.postMessage(null))},i=function(e,n){w=p((function(){e(t.unstable_now())}),n)},a=function(){m(w),w=-1}}function z(e,t){var n=e.length;e.push(t);e:for(;;){var r=n-1>>>1,i=e[r];if(!(void 0!==i&&0<O(i,t)))break e;e[r]=t,e[n]=i,n=r}}function C(e){return void 0===(e=e[0])?null:e}function M(e){var t=e[0];if(void 0!==t){var n=e.pop();if(n!==t){e[0]=n;e:for(var r=0,i=e.length;r<i;){var a=2*(r+1)-1,o=e[a],c=a+1,s=e[c];if(void 0!==o&&0>O(o,n))void 0!==s&&0>O(s,o)?(e[r]=s,e[c]=n,r=c):(e[r]=o,e[a]=n,r=a);else{if(!(void 0!==s&&0>O(s,n)))break e;e[r]=s,e[c]=n,r=c}}}return t}return null}function O(e,t){var n=e.sortIndex-t.sortIndex;return 0!==n?n:e.id-t.id}var T=[],E=[],L=1,A=null,R=3,N=!1,H=!1,P=!1;function j(e){for(var t=C(E);null!==t;){if(null===t.callback)M(E);else{if(!(t.startTime<=e))break;M(E),t.sortIndex=t.expirationTime,z(T,t)}t=C(E)}}function V(e){if(P=!1,j(e),!H)if(null!==C(T))H=!0,r(D);else{var t=C(E);null!==t&&i(V,t.startTime-e)}}function D(e,n){H=!1,P&&(P=!1,a()),N=!0;var r=R;try{for(j(n),A=C(T);null!==A&&(!(A.expirationTime>n)||e&&!o());){var c=A.callback;if(null!==c){A.callback=null,R=A.priorityLevel;var s=c(A.expirationTime<=n);n=t.unstable_now(),"function"==typeof s?A.callback=s:A===C(T)&&M(T),j(n)}else M(T);A=C(T)}if(null!==A)var u=!0;else{var l=C(E);null!==l&&i(V,l.startTime-n),u=!1}return u}finally{A=null,R=r,N=!1}}function I(e){switch(e){case 1:return-1;case 2:return 250;case 5:return 1073741823;case 4:return 1e4;default:return 5e3}}var F=c;t.unstable_IdlePriority=5,t.unstable_ImmediatePriority=1,t.unstable_LowPriority=4,t.unstable_NormalPriority=3,t.unstable_Profiling=null,t.unstable_UserBlockingPriority=2,t.unstable_cancelCallback=function(e){e.callback=null},t.unstable_continueExecution=function(){H||N||(H=!0,r(D))},t.unstable_getCurrentPriorityLevel=function(){return R},t.unstable_getFirstCallbackNode=function(){return C(T)},t.unstable_next=function(e){switch(R){case 1:case 2:case 3:var t=3;break;default:t=R}var n=R;R=t;try{return e()}finally{R=n}},t.unstable_pauseExecution=function(){},t.unstable_requestPaint=F,t.unstable_runWithPriority=function(e,t){switch(e){case 1:case 2:case 3:case 4:case 5:break;default:e=3}var n=R;R=e;try{return t()}finally{R=n}},t.unstable_scheduleCallback=function(e,n,o){var c=t.unstable_now();if("object"==typeof o&&null!==o){var s=o.delay;s="number"==typeof s&&0<s?c+s:c,o="number"==typeof o.timeout?o.timeout:I(e)}else o=I(e),s=c;return e={id:L++,callback:n,priorityLevel:e,startTime:s,expirationTime:o=s+o,sortIndex:-1},s>c?(e.sortIndex=s,z(E,e),null===C(T)&&e===C(E)&&(P?a():P=!0,i(V,s-c))):(e.sortIndex=o,z(T,e),H||N||(H=!0,r(D))),e},t.unstable_shouldYield=function(){var e=t.unstable_now();j(e);var n=C(T);return n!==A&&null!==A&&null!==n&&null!==n.callback&&n.startTime<=e&&n.expirationTime<A.expirationTime||o()},t.unstable_wrapCallback=function(e){var t=R;return function(){var n=R;R=t;try{return e.apply(this,arguments)}finally{R=n}}}},function(e,t,n){"use strict";n.r(t),n.d(t,"v1",(function(){return m})),n.d(t,"v3",(function(){return z})),n.d(t,"v4",(function(){return C})),n.d(t,"v5",(function(){return T})),n.d(t,"NIL",(function(){return E})),n.d(t,"version",(function(){return L})),n.d(t,"validate",(function(){return c})),n.d(t,"stringify",(function(){return h})),n.d(t,"parse",(function(){return v}));var r="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||"undefined"!=typeof msCrypto&&"function"==typeof msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto),i=new Uint8Array(16);function a(){if(!r)throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return r(i)}var o=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;for(var c=function(e){return"string"==typeof e&&o.test(e)},s=[],u=0;u<256;++u)s.push((u+256).toString(16).substr(1));var l,f,h=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=(s[e[t+0]]+s[e[t+1]]+s[e[t+2]]+s[e[t+3]]+"-"+s[e[t+4]]+s[e[t+5]]+"-"+s[e[t+6]]+s[e[t+7]]+"-"+s[e[t+8]]+s[e[t+9]]+"-"+s[e[t+10]]+s[e[t+11]]+s[e[t+12]]+s[e[t+13]]+s[e[t+14]]+s[e[t+15]]).toLowerCase();if(!c(n))throw TypeError("Stringified UUID is invalid");return n},d=0,p=0;var m=function(e,t,n){var r=t&&n||0,i=t||new Array(16),o=(e=e||{}).node||l,c=void 0!==e.clockseq?e.clockseq:f;if(null==o||null==c){var s=e.random||(e.rng||a)();null==o&&(o=l=[1|s[0],s[1],s[2],s[3],s[4],s[5]]),null==c&&(c=f=16383&(s[6]<<8|s[7]))}var u=void 0!==e.msecs?e.msecs:Date.now(),m=void 0!==e.nsecs?e.nsecs:p+1,v=u-d+(m-p)/1e4;if(v<0&&void 0===e.clockseq&&(c=c+1&16383),(v<0||u>d)&&void 0===e.nsecs&&(m=0),m>=1e4)throw new Error("uuid.v1(): Can't create more than 10M uuids/sec");d=u,p=m,f=c;var g=(1e4*(268435455&(u+=122192928e5))+m)%4294967296;i[r++]=g>>>24&255,i[r++]=g>>>16&255,i[r++]=g>>>8&255,i[r++]=255&g;var y=u/4294967296*1e4&268435455;i[r++]=y>>>8&255,i[r++]=255&y,i[r++]=y>>>24&15|16,i[r++]=y>>>16&255,i[r++]=c>>>8|128,i[r++]=255&c;for(var b=0;b<6;++b)i[r+b]=o[b];return t||h(i)};var v=function(e){if(!c(e))throw TypeError("Invalid UUID");var t,n=new Uint8Array(16);return n[0]=(t=parseInt(e.slice(0,8),16))>>>24,n[1]=t>>>16&255,n[2]=t>>>8&255,n[3]=255&t,n[4]=(t=parseInt(e.slice(9,13),16))>>>8,n[5]=255&t,n[6]=(t=parseInt(e.slice(14,18),16))>>>8,n[7]=255&t,n[8]=(t=parseInt(e.slice(19,23),16))>>>8,n[9]=255&t,n[10]=(t=parseInt(e.slice(24,36),16))/1099511627776&255,n[11]=t/4294967296&255,n[12]=t>>>24&255,n[13]=t>>>16&255,n[14]=t>>>8&255,n[15]=255&t,n};var g=function(e,t,n){function r(e,r,i,a){if("string"==typeof e&&(e=function(e){e=unescape(encodeURIComponent(e));for(var t=[],n=0;n<e.length;++n)t.push(e.charCodeAt(n));return t}(e)),"string"==typeof r&&(r=v(r)),16!==r.length)throw TypeError("Namespace must be array-like (16 iterable integer values, 0-255)");var o=new Uint8Array(16+e.length);if(o.set(r),o.set(e,r.length),(o=n(o))[6]=15&o[6]|t,o[8]=63&o[8]|128,i){a=a||0;for(var c=0;c<16;++c)i[a+c]=o[c];return i}return h(o)}try{r.name=e}catch(e){}return r.DNS="6ba7b810-9dad-11d1-80b4-00c04fd430c8",r.URL="6ba7b811-9dad-11d1-80b4-00c04fd430c8",r};function y(e){return 14+(e+64>>>9<<4)+1}function b(e,t){var n=(65535&e)+(65535&t);return(e>>16)+(t>>16)+(n>>16)<<16|65535&n}function w(e,t,n,r,i,a){return b((o=b(b(t,e),b(r,a)))<<(c=i)|o>>>32-c,n);var o,c}function x(e,t,n,r,i,a,o){return w(t&n|~t&r,e,t,i,a,o)}function S(e,t,n,r,i,a,o){return w(t&r|n&~r,e,t,i,a,o)}function k(e,t,n,r,i,a,o){return w(t^n^r,e,t,i,a,o)}function _(e,t,n,r,i,a,o){return w(n^(t|~r),e,t,i,a,o)}var z=g("v3",48,(function(e){if("string"==typeof e){var t=unescape(encodeURIComponent(e));e=new Uint8Array(t.length);for(var n=0;n<t.length;++n)e[n]=t.charCodeAt(n)}return function(e){for(var t=[],n=32*e.length,r=0;r<n;r+=8){var i=e[r>>5]>>>r%32&255,a=parseInt("0123456789abcdef".charAt(i>>>4&15)+"0123456789abcdef".charAt(15&i),16);t.push(a)}return t}(function(e,t){e[t>>5]|=128<<t%32,e[y(t)-1]=t;for(var n=1732584193,r=-271733879,i=-1732584194,a=271733878,o=0;o<e.length;o+=16){var c=n,s=r,u=i,l=a;n=x(n,r,i,a,e[o],7,-680876936),a=x(a,n,r,i,e[o+1],12,-389564586),i=x(i,a,n,r,e[o+2],17,606105819),r=x(r,i,a,n,e[o+3],22,-1044525330),n=x(n,r,i,a,e[o+4],7,-176418897),a=x(a,n,r,i,e[o+5],12,1200080426),i=x(i,a,n,r,e[o+6],17,-1473231341),r=x(r,i,a,n,e[o+7],22,-45705983),n=x(n,r,i,a,e[o+8],7,1770035416),a=x(a,n,r,i,e[o+9],12,-1958414417),i=x(i,a,n,r,e[o+10],17,-42063),r=x(r,i,a,n,e[o+11],22,-1990404162),n=x(n,r,i,a,e[o+12],7,1804603682),a=x(a,n,r,i,e[o+13],12,-40341101),i=x(i,a,n,r,e[o+14],17,-1502002290),r=x(r,i,a,n,e[o+15],22,1236535329),n=S(n,r,i,a,e[o+1],5,-165796510),a=S(a,n,r,i,e[o+6],9,-1069501632),i=S(i,a,n,r,e[o+11],14,643717713),r=S(r,i,a,n,e[o],20,-373897302),n=S(n,r,i,a,e[o+5],5,-701558691),a=S(a,n,r,i,e[o+10],9,38016083),i=S(i,a,n,r,e[o+15],14,-660478335),r=S(r,i,a,n,e[o+4],20,-405537848),n=S(n,r,i,a,e[o+9],5,568446438),a=S(a,n,r,i,e[o+14],9,-1019803690),i=S(i,a,n,r,e[o+3],14,-187363961),r=S(r,i,a,n,e[o+8],20,1163531501),n=S(n,r,i,a,e[o+13],5,-1444681467),a=S(a,n,r,i,e[o+2],9,-51403784),i=S(i,a,n,r,e[o+7],14,1735328473),r=S(r,i,a,n,e[o+12],20,-1926607734),n=k(n,r,i,a,e[o+5],4,-378558),a=k(a,n,r,i,e[o+8],11,-2022574463),i=k(i,a,n,r,e[o+11],16,1839030562),r=k(r,i,a,n,e[o+14],23,-35309556),n=k(n,r,i,a,e[o+1],4,-1530992060),a=k(a,n,r,i,e[o+4],11,1272893353),i=k(i,a,n,r,e[o+7],16,-155497632),r=k(r,i,a,n,e[o+10],23,-1094730640),n=k(n,r,i,a,e[o+13],4,681279174),a=k(a,n,r,i,e[o],11,-358537222),i=k(i,a,n,r,e[o+3],16,-722521979),r=k(r,i,a,n,e[o+6],23,76029189),n=k(n,r,i,a,e[o+9],4,-640364487),a=k(a,n,r,i,e[o+12],11,-421815835),i=k(i,a,n,r,e[o+15],16,530742520),r=k(r,i,a,n,e[o+2],23,-995338651),n=_(n,r,i,a,e[o],6,-198630844),a=_(a,n,r,i,e[o+7],10,1126891415),i=_(i,a,n,r,e[o+14],15,-1416354905),r=_(r,i,a,n,e[o+5],21,-57434055),n=_(n,r,i,a,e[o+12],6,1700485571),a=_(a,n,r,i,e[o+3],10,-1894986606),i=_(i,a,n,r,e[o+10],15,-1051523),r=_(r,i,a,n,e[o+1],21,-2054922799),n=_(n,r,i,a,e[o+8],6,1873313359),a=_(a,n,r,i,e[o+15],10,-30611744),i=_(i,a,n,r,e[o+6],15,-1560198380),r=_(r,i,a,n,e[o+13],21,1309151649),n=_(n,r,i,a,e[o+4],6,-145523070),a=_(a,n,r,i,e[o+11],10,-1120210379),i=_(i,a,n,r,e[o+2],15,718787259),r=_(r,i,a,n,e[o+9],21,-343485551),n=b(n,c),r=b(r,s),i=b(i,u),a=b(a,l)}return[n,r,i,a]}(function(e){if(0===e.length)return[];for(var t=8*e.length,n=new Uint32Array(y(t)),r=0;r<t;r+=8)n[r>>5]|=(255&e[r/8])<<r%32;return n}(e),8*e.length))}));var C=function(e,t,n){var r=(e=e||{}).random||(e.rng||a)();if(r[6]=15&r[6]|64,r[8]=63&r[8]|128,t){n=n||0;for(var i=0;i<16;++i)t[n+i]=r[i];return t}return h(r)};function M(e,t,n,r){switch(e){case 0:return t&n^~t&r;case 1:return t^n^r;case 2:return t&n^t&r^n&r;case 3:return t^n^r}}function O(e,t){return e<<t|e>>>32-t}var T=g("v5",80,(function(e){var t=[1518500249,1859775393,2400959708,3395469782],n=[1732584193,4023233417,2562383102,271733878,3285377520];if("string"==typeof e){var r=unescape(encodeURIComponent(e));e=[];for(var i=0;i<r.length;++i)e.push(r.charCodeAt(i))}else Array.isArray(e)||(e=Array.prototype.slice.call(e));e.push(128);for(var a=e.length/4+2,o=Math.ceil(a/16),c=new Array(o),s=0;s<o;++s){for(var u=new Uint32Array(16),l=0;l<16;++l)u[l]=e[64*s+4*l]<<24|e[64*s+4*l+1]<<16|e[64*s+4*l+2]<<8|e[64*s+4*l+3];c[s]=u}c[o-1][14]=8*(e.length-1)/Math.pow(2,32),c[o-1][14]=Math.floor(c[o-1][14]),c[o-1][15]=8*(e.length-1)&4294967295;for(var f=0;f<o;++f){for(var h=new Uint32Array(80),d=0;d<16;++d)h[d]=c[f][d];for(var p=16;p<80;++p)h[p]=O(h[p-3]^h[p-8]^h[p-14]^h[p-16],1);for(var m=n[0],v=n[1],g=n[2],y=n[3],b=n[4],w=0;w<80;++w){var x=Math.floor(w/20),S=O(m,5)+M(x,v,g,y)+b+t[x]+h[w]>>>0;b=y,y=g,g=O(v,30)>>>0,v=m,m=S}n[0]=n[0]+m>>>0,n[1]=n[1]+v>>>0,n[2]=n[2]+g>>>0,n[3]=n[3]+y>>>0,n[4]=n[4]+b>>>0}return[n[0]>>24&255,n[0]>>16&255,n[0]>>8&255,255&n[0],n[1]>>24&255,n[1]>>16&255,n[1]>>8&255,255&n[1],n[2]>>24&255,n[2]>>16&255,n[2]>>8&255,255&n[2],n[3]>>24&255,n[3]>>16&255,n[3]>>8&255,255&n[3],n[4]>>24&255,n[4]>>16&255,n[4]>>8&255,255&n[4]]})),E="00000000-0000-0000-0000-000000000000";var L=function(e){if(!c(e))throw TypeError("Invalid UUID");return parseInt(e.substr(14,1),16)}}]);
              + +

              //# sourceMappingURL=main.js.map

              + +

              </script> </body> </html>

              + +
              + + + + + diff --git a/doc/fonts/Lato-Light.ttf b/doc/fonts/Lato-Light.ttf new file mode 100644 index 0000000000000000000000000000000000000000..b49dd43729d456e489a8f4c8ec323a47ab8b9ae8 GIT binary patch literal 94668 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

              FsulxL_Yn=fqW!JSYn4UZz_VI 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 literal 0 HcmV?d00001 diff --git a/doc/fonts/Lato-LightItalic.ttf b/doc/fonts/Lato-LightItalic.ttf new file mode 100644 index 0000000000000000000000000000000000000000..7959fef0756e905627298817d86513fdf26d6922 GIT binary patch literal 94196 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 Sv(kH?wp@?o-S`p3*#7{ysOP%? literal 0 HcmV?d00001 diff --git a/doc/fonts/Lato-Regular.ttf b/doc/fonts/Lato-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..839cd589dc5eba0da98b43451b4ec6c328ca48b8 GIT binary patch literal 96184 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

              ucu-&%9a>XM7550A4YWv99%x~0LA&?HZ)eRytM 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 literal 0 HcmV?d00001 diff --git a/doc/fonts/Lato-RegularItalic.ttf b/doc/fonts/Lato-RegularItalic.ttf new file mode 100644 index 0000000000000000000000000000000000000000..bababa09e3fad2aa3e788898e7753ff8d80a8e8f GIT binary patch literal 95316 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 Zdy6Gm=sD%RPg|bPWWD$h#s3t#{x=NUkZJ$` literal 0 HcmV?d00001 diff --git a/doc/fonts/SourceCodePro-Bold.ttf b/doc/fonts/SourceCodePro-Bold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..61e3090c1c6944db11572b8d1e3177402f128c02 GIT binary patch literal 71200 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 P00000NkvXXu0mjf^IS-S literal 0 HcmV?d00001 diff --git a/doc/images/arrow_up.png b/doc/images/arrow_up.png new file mode 100644 index 0000000000000000000000000000000000000000..1ebb193243780b8eb1919a51ef27c2a0d36ccec2 GIT binary patch literal 372 zcmV-)0gL{LP)6w#wHUuW*nL5>vZR zlg{G&%mT~|kL3ei%GW0*UOHUMs5XI$4uxe-L?I@SAefq*207}Iqtjm#e5*fP53AiC z)C|RQfwzxx<#_WfANRGZx{+tFDl8~Q?;~Ve=lM^*8UTTnVL?HTDz8uta0D@d28E9S z_)i8aLz^UE6PPKymi;2GJ`34{eIia-CtfAt0H61rk0 SPTNud0000Pdwe5?6tW?r-ok|b$oDQj8FV%kZPq;(MWOV8?8;<)(iP}>hNMU> z7fbz%jjlr7h8uuoQ~J6}n}@Y@PdTk=)PxO{%7zmL?dchpZX*~n;I{!C>*(8cU;q(~ zAS%Po_@naEU!xidrBXD?;hN|x^%W|Ij)0y*r5vi|?W&Fub(NqJ@z0o=O&SR3v>A``^efOSo-hEdApp;^Jd;9y!%1UfzX6Bh- z%-mbG|0Na{7Ruai_Y+DEb1s+b!*9k%Q!whMxjtZKA*?o;i1g&jy0@( zaU=-@d-h+o%gal6JRXEXA&L3`d2 z%jIxzZ~*p9O-;EJp_Ds0If38rM<5W8ic~K>FOK&2_p!CLg^i63OioVb6k$)zWHLx3 z5;!|M!}<9+#QSi1dRlbEcxPt^;cysUuU8@%3}RwpLRIGG<|IKnoyP6$Eh3SKw7a*r zSDXP=IYc&YZf;7@?fCe($^l9ORaJ3wbAx0uiC8QqRr$2t-Cfy8%XCI3B%pxJW>XdM zw~zPt_s}#A@pxQ5Ly)4szaMtH9lgE1SXx@b+S(fW`ub$fYPE8J7#bSNDzme*Ub07{ zQKV8SjEs!%0@v5ql8ggm!@$6Rbi^E8vBqpRM-}l+@5OSMrl+TWj*gC^qoV@>u{fQb zov5v?g~?>X@bEC&+uLPaQ&Ypn-y~^mZA}+f(&2EFH8eE%dU|@ENpN*_1-)L6_4Rc* zFuq@`IjX9vp1QiaK9ZojyZhnQURP99d=u;%37VRkpwsD4U0sd3x;hEQB&e^i|3QN0 z=H|Os1fRqaw!?#igLmS4HE!G3*ce(`TF} zlgUq0Q544c8(ae&UR$8ps&snq6^bPY3v3xAmMW74Di$h~GCH6E3TaYs2#6A<7K*gC z777H71_Wa;(dfp+g-drPCSWu)#PInZi72LJ;o?i~$-U=y&UbQ89Dul3%3P+Axkzc* zbH-y;QF=hR{qLItf%ci2_&e5wNo0gnVatG?ul6Zw=o$I9Ljfn*ic3`U?>IfEim3g{ zujU&$-hy6wn;w(xme|zJm;lWJxtTFfM)q0`kX!Vu0+d${$}LCddK1<^htTe-fUYL3 zB`SdNsZD>RgvLj1<^@h6_+cDRK2Brcr2~>%$*5S)hyV33PV^teac3%|4lz@8p4?)5 z?t5o^?q+%^%)Yygo~I^U4VR!bTnWuE35hcWrfCDR3q+sxJ79e7Fg`&)RCqLA^2^y^ z0laVfadW90_Fz8Brm|r47sB^u1VgI>kanj)Z4`zMSfHlm8>CwXa$JVM`$2RrmZB-3 zN10m-!;BvH*Br3V8t`DH7m`jf#2upVDXl{5ff18_pzCPK1Zu$$CKKvd8FGeFf)+K<|x33pc7P&S#3GZT4mEw;nr(Ze*F z3&*?-4U-lm*#tber5 z%S_ceqB`b3ko6r~BbvDwdohTvP(3a(pq{x#T$yQsu#OKwEe}KuH^Mh@nxg_(Nw136 zq#a^3xNBke)In+!?qk3%4wB69{pF`Tzg`07*qoM6N<$ Eg55P&8UO$Q literal 0 HcmV?d00001 diff --git a/doc/images/bullet_black.png b/doc/images/bullet_black.png new file mode 100644 index 0000000000000000000000000000000000000000..57619706d10d9736b1849a83f2c5694fbe09c53b GIT binary patch literal 211 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf6SkfJR9T^zbpD<_bdI{u9mbgZg z1m~xflqVLYGB~E>C#5QQ<|d}62BjvZR2H60wE-$h^>lFz(Kw&{<9vg>5sw~gS5O!4 zr|{HuUFIBKiQyL}eBJ-L{`UVT|6_O~L{G%N{Wbre{kQtZ_0LvEhC#5QQ<|d}62BjvZR2H60wE-$h^mK6y(Kw&{<9vg>(S^W+6Zii9 z|Nhthr~iNb*Z!}6uiN$Dz5neG3a-`baBX8yz1H+_;eX)`ni0%X8XBDc-`=Ph(Uan2 zYsR{H!kvIN--9isvHznRsC#5QQ<|d}62BjvZR2H60wE-$h_H=O!(Kw&{<9vg>(S^W+6Zii9 z|Nhthr~iNb*Z!}6uiN$Dz5neG3a-`baBX8yz4q@v|B?28{s)#N@CGn3@%_y|zAV9T z66e<&B4?b6oF&azg|C(V&1ZbI_D}pL`}(^FT2yXwG1Ph~$Q@h8mJYOz!PC{xWt~$( F699+YQR)By literal 0 HcmV?d00001 diff --git a/doc/images/date.png b/doc/images/date.png new file mode 100644 index 0000000000000000000000000000000000000000..783c83357fdf90a1c7c024358e1d768b5c09c135 GIT binary patch literal 626 zcmV-&0*(ENP)5OC%H;f`~O(q$Q#t2<^v$A>fbmv%e#dKTwK=Ku{5lS|}<-`a#7b zzTCOnnT>at)D}AMFuOZ5&%EqFN(lyumd$2ASF6=;nM~%2?gqc@U=#|4PqkX@EBo-9 z7pD#bO_RUa>*faM`8;MYfVi$JnB-zcBFc6gjl$d!bF98Q!!!(Z1_R~P?e!pt#6CHJ9S&n_n&@=9 z%GP;!@Co4c*at+6vNz7o(6en^Q1%qHrc;1)9IRaz-$@S$Z-qdC^ds3X0NvQH;KS)D z-dh&rW&@X;1cS(45z)J&BVt+tv&GMVJ%!EiW) zLBGZW)#Z+gl-Lih&?>X3SS-S#ujQ;9JRXmIB7X)8`d6ETj)D#Q2+$s|<_b7-B9Xvq zwNfqlEp%y3$uY`h{Y$(Gn5@}sqEsq95lpAkFO5dyBmP6^H-51G4J|rN2Ujt<`2YX_ M07*qoM6N<$fC4}Mrzlg<+1Y8PEBfUp0jJpx4B>@E+cy3`^(Gw`Mf+2&yxZm<$to~Vpgvg&QKNR z_f#1(r6svZt%iF?s+n<8X?B&!h3g9Dbb8_=MX}!;HiQSAh`bp^WMl~Z-44teO7W_Y zV4thSL{h;rJY7!l3%5J4H1!tIzB`Dv+YxO(haWeausGZYkI8^hWj6mzo=L0{%;yxzh{5!Htr?51 zvG|W62MzC8BZ76hRpCyO2zOn<%e)K>NHge!-~)Ap33OdWw6hsLYbCxGNt0%wk_2z7 zfyYvXheSG)5HRK1VB~%mq7Dmurw#bi@hEcOr3&G1ZiF*$M=&9nB#VNf&Q^r$4G5kp zTURh&s)E0%5&hyVD}sp<72~zmAY`Y(9aqO6CXF%=zFHGzO-A&I(pE}v70YQxCPJ{Y z4L+?5-crdLn3ZRPEs!A4ehEY3ZRpL~w9>@aMN+{F4dI@v&>(QDHQum!mG~E^$OS8l z!7?%Uwib*ROP67Hw`ika)gX-(8Ia`-u_IEhxG7U<13kSsMW+$lbb2dUMm5p6pa}cjgA+U$^mJ^AjD?&bdi)8~y+Q002ovPDHLkV1g8IMc@Dc literal 0 HcmV?d00001 diff --git a/doc/images/find.png b/doc/images/find.png new file mode 100644 index 0000000000000000000000000000000000000000..1547479646722bda4647df52cf3e8bc9b77428c6 GIT binary patch literal 659 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 Dl)1NK literal 0 HcmV?d00001 diff --git a/doc/images/macFFBgHack.png b/doc/images/macFFBgHack.png new file mode 100644 index 0000000000000000000000000000000000000000..c6473b324ee1dae1faaacc0826639833f551116c GIT binary patch literal 207 zcmeAS@N?(olHy`uVBq!ia0vp^k|4~%1|*NXY)uAIEX7WqAsj$Z!;#Vf4nJ za0`Jjl>Qs8<JF;+Fd5q0wCR k?u=~bH}2*0f`J3~k>FVdQ&MBb@0BAfpf&c&j literal 0 HcmV?d00001 diff --git a/doc/images/package.png b/doc/images/package.png new file mode 100644 index 0000000000000000000000000000000000000000..da3c2a2d74bab159ba0f65d7db601768258afcb2 GIT binary patch literal 853 zcmV-b1FHOqP)5TQ^(M5v$(QKVE?W+9X! z*o}&~6c?_FreF)9NJB7b5Nbn{G0n4+%uJhR9(V5R|NFTpb|HgjefT!tIhLx@DR+N) zV+fHiR5Yt19}k|KnCsND{tH-`IMJ)3AE?OtyZ4>Un|6(d%h#JK`i&a7^xW9>`yBy` zS4SOHeOpC7$?hH5-#7Rswiue_8Ju*2N@$58=a#2OTA3png`w3v->gWif7t%e$ z$NLVS!tFT#8WL|Wa&K~+{%4P2cRfwesYV1_!F=3OaRVHl(>=`%&{x*s30c}#CNE@&;ItrAv!f!)Oy$Q9t$uS=(sD$-J{T*^(8Eez1E-l3}} zPrfHZ1`qsIFe&gipuL8-IZbo2Yg{lFGKs?ZZWcOaOdk*3`5T;$?AjbG1#`B510Er^h2)2r3Y{!8_2Gj=$KzuN5 zaErtW8W_Y2iJJjY)5pmTVJoPJYpanPOEuYHclM^C1F>${hFRpdi8a<2H|Xudf78bm(zwJ9`K%6I?q*Ua~ fW9JvIbn5*B+_J)rUMBs>00000NkvXXu0mjfH&TkY literal 0 HcmV?d00001 diff --git a/doc/images/page_green.png b/doc/images/page_green.png new file mode 100644 index 0000000000000000000000000000000000000000..de8e003f9fb8752c09e7f3655d5d8664b5c62fc3 GIT binary patch literal 621 zcmV-z0+RiSP)QqUjAtB;_Vvt6}AS_5YgM`Uqu`yva+H8^=4U$e4gHb}u zAQ2N{V3A%pO|?Pv?tb6z=jC}SiRa$G^v3q?*6XcYz$p|cq{uLj@#~Fi`J(>5{@&&N zy%T^+;>8cXx%|o77anP?&W1?1A(>-T49z9pyeCl@7YI+Si zKti7=B~``}TImz(G{0PnlQA3P#MAd}sorMjkP!50B7$nAkU^%#nl{Q9lW0@}9fE-> zN(q7tRuiC_T1r|BBtVBTlQ2+70$Rf;eF`Z;lx46Cpu-rEgb)EBKq(b^W8l<^We(`D z43?0=01z<3G6+UUv6`CsWCk6^93!#+<;ws7007{zS3k2k9-zZKFO~(k`>s0y006+1 zgF_jyIhsL-`FMf~JL~C=cV75(CrJ|q;MVO961G=O zm9d)YpJg5g(4i_HKL75eSE}mq$Y}r}hyVdcV~p>6a}oXr80q`oj%+s700000NkvXX Hu0mjfPs|!l literal 0 HcmV?d00001 diff --git a/doc/images/page_white_text.png b/doc/images/page_white_text.png new file mode 100644 index 0000000000000000000000000000000000000000..813f712f726c935f9adf8d2f2dd0d7683791ef11 GIT binary patch literal 342 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf6SkfJR9T^zbpD<_bdI{u9mbgZg z1m~xflqVLYGB~E>C#5QQ<|d}62BjvZR2H60wE-%6;pyTSA|c6o&@eC9QG)Hj&ExYL zO&oVL^)+cM^qd@ApywS>pwx0H@RDN}hq;7mU-SKczYQ-hnrr=;iDAQMZQ+*g=YOM= z!QlMQEn7FbaD->uKAYgo_j9)W&$$zS*W9}m(ey0q$&7l-XEWO0Y(9M=SnhLbwy;d>@~SY$Ku*0xPvIOQeV1x7u_z-2-X>_74(yfh7C znXL|3GZ+d2`3re2hs?MKC#5QQ<|d}62BjvZR2H60wE-$R?&;zfqH(@;q9b3Efq-lM(nr^( z=EYR73-9e)UYMWsXy%?aZsD68Yyv^2$~6QgEcljw%kx>O(f-gQ?@fOOx3A-0+Qw?O zRx~W)kn~Qe2d6f9nMG#g9Q04Mk==M~N!Dglvxk!fgVh#w@ZV$IY1+Xc`d{d2UcaP~ zfWp)_Ivqj}l2SPy^9ZWy6rG9Yx4v67_uA&&9|XA~5-#3)W3%em1peD8RWH^#O%XoM zxMPud%}GTj#~*+7JMxTd!`{^Q+>(D3*|@KV`*G2;{QnANOxu1$r2xIe;OXk;vd$@? F2>@zac~<}c literal 0 HcmV?d00001 diff --git a/doc/images/plugin.png b/doc/images/plugin.png new file mode 100644 index 0000000000000000000000000000000000000000..6187b15aec001b7080b51a5f944f07591f26cc15 GIT binary patch literal 591 zcmV-V0eEcNHZMNv|IbJ-M`( zKwWL~opzjJe^WpCmV9E;(0&ut2;4va_(#>M8)>9$R5viQnf(Nkh~VM$y>J(jqb$cj z+nL1Nm|mV)Gm|9MnHf*7Ja4OEAQz__^LRKOLEwqpiGV^^A*T=#&inGm-62Xs;dnSp zKj&H9T*boh2i)W+(n27l!C)>fq|L%VB1i ziC4p;NwV_}ZjW7$LRW#(_bKF#hp=!IqNO26Z*w2+LEwx{PVnZ&Sn}T;mtzb$;qA*nT@@+ zV5uQ@iXDTPoTbV#FRr~z04|PPh`wXTNoCm9*tG&?e3+fYl>K6+&3|Cc$KOpL`ER+_ dcRl5U#9zn6ZO}GFk7R5;7c zlif>`Q5?tj7Yw@ZCMtTF^Q|ZedeJhM%QPCR*bs8V79p$QTo7e94yQNXRs-{0?hOn_-8n0AMO@u1Ts zNl8QzJs1#rz%RBt?ux>l+amAvh+J!{$lkaqv}+Erb-6j2xp>K4GLQnNB*W`hFg*?P z^AL@~(h~Z+wfcWEXHqV^Tq-#z$7Y#o0;yFxA!00F}F2dX# zjE$iOgT#G4*1TR6kB1Gnn@>$meCh2a>c5YuIvFn-R2W@>4@M*m@-|jiDV?b)bccgA zyPfsMM!rjy>+1O2)5Eg29Z_*2p&qGnmS!OH?vZ(4>QB01d>j%9n4QINxkyT(Dos?I zjaWF$*IQmh`SF-?xU%xMEfjq1=6qY*g&lgG_cXv$BGoIWyfO5 zp>pdV*O+y=&6@N2WWFo(%RtT`Q(H^6zn^a%epE~Kx^mEJ{c8`luC$nc*z9j|4Ms8aJK-ladKLpnAK z!yd|CC&>l1b7`m$MH$ScEIP@XgT41O>|DzL{-38CH68OyX#u=G?d7;y&_o&o)f@3U z2(tr%Ok88caOL`xiQA8o;Vzr-$A$SOu6o|$&0DQAJ1Z7?OACaeoy+)PWu&~aueW<| z*KW^(^2}#30u*~<_mXScFNd6U&sxh5*GGMNytZGxkIGqL%v6329^u`FD6T?b?K!4B z@Hzh?O2Au=((Gu;rvgLMt^pS|u1rEkBgC8$oH%zgT`TvZiK#VDrVG?-i~6a_+WZb> zc1>>lb)xcuo^Cl8k%q3c_d*It_Vtj>RSovF&w;hS=6uYrT2e@-@l@P~uBN`zu!v>e zTm(is&jcQ6vuP?|;!e+(n8w)-Xjd!hwk@r2D0i00ygdKo2Xvs?&w_lajj5DHS@9I! z;_&ji2e{!uusGnVn};Pu|dl5x-FhQyC8^-4Uo_;BLiOXzcE z&4PS2TBWSC=hsw0og;z#(mly@Ed2E1E$_VDaM?kloE4ob2XK&K;OS~-nhIGlA4~UZrJu6*|}wi#TT?|yWUH+_&n($t0xta zBwTzSfE)uAw*L0>+`pTps}L-$jIP5Q_E$Am+l|{XfsKr0Vi~`Em?SJQ#0y)8vsxb1 zMdxJl^){_CDwI^}>)Pw${G?Ajc@P}x{Fvhoi0jbY^427?KPmoA_G)sqK}u$2(79Xg zC%}xm5JDcrsm5^vQEQpGEdJDc^yfuNAlqV1pZQVkOSceV<|{=|=@?=o4i_1RFUZth zC7cu<6%V3dVCI}P6DL4iUgTc@&(nXY)ox}HZ z(a#EgiNj%{kjRLL2t?{m_aKN`{5-&u+HAtQ-Qq#@!I@<(M+B3i@|g=LY6 z90tpW!JuMn_Lcy1q7g&LUSuLE3XS}K#P^nHVUmL`L)dbP| z0bt(+Cp#M-bH!LM*DzJ0Lfn;eTBV@|JvGSgpdoc1RhhV>(G-2(vE|>MrVgA9+?+0m4OzUqbT>-U-jg|v zLZMntq`r?fy1UCMh>z2Koi1SL-~N2ZrIf+dZW|;SWszsde}Dl!HOMc1Fa>K9)e&RI z)A?aK zcviCdKDUg_%#u7YAE`A`Y3$(P4&m^@fEWAvjAwVmRWeUnmkrxA;E!fKoc{9Vi=lvFL}KmoS;g* zdjL?Y!VHUFq63aLj6VZE+tHts?Z1pFkiO9^k*5pGpFpU&5#5G4ATd{t>a&9zKBVB9=Ns^HFU|DTGH8C+Xr2UqOU`Zxe)!|%j4=-QojGePq)pRGe;!f)Czk!u3vP_Jxu8(e6 zf4Q`F$Qio2Jw@N*E@k?c`+Sw}AYQjkT+x)OAe6eq(AT!iRuksKQn%Ao_Ac1T-p#Js I_CnHs0qX}mlmGw# literal 0 HcmV?d00001 diff --git a/doc/images/tag_green.png b/doc/images/tag_green.png new file mode 100644 index 0000000000000000000000000000000000000000..83ec984bd73364134da0f98d27a800c5d3264180 GIT binary patch literal 613 zcmV-r0-F7aP)^5T)AZ%#@G{_P{NCN^P z(J0zvSn~SSm(Ur);-M~8^*;61*VRI`T1BN&LAhK;sZ>I-SVW;vfUfJv=ko^ugnc0x zhJodBxe>iyk3%w<%wC8holUJ4(iv>tL{`DQt zPOsyUbO_Cmc&*iHkqbm3ku`|GcC^OhF>jj9W*GkH;^g!iUVpib_h*=@udp4h(P+e*zL_~ZmJjh(y^BxULwq>9zXoYE8sq{#pN~U0C6!8vY)5N2 z9P*}mw}7X$O^qTtJef1ACWvJT9^wt-)Zh0r~j#0bT`f;-zv6 z^Tmw22!%rMcs!TaUX<-8s;X-B`+Xbo+_uWuFa z1yIPc?DTrQ7KvRhmt*TG|L=EYQ=LqFX;=Lp`4}jx6BE-@00000NkvXXu0mjf=s_29 literal 0 HcmV?d00001 diff --git a/doc/images/transparent.png b/doc/images/transparent.png new file mode 100644 index 0000000000000000000000000000000000000000..d665e179efd797451084235f105425247fea0a14 GIT binary patch literal 97 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!D3?x-;bCrM;bAV5X>;M1%mmiTn0pv241o;Is pI6S+N2ITN~x;Tb#$R;N!@B(=T42&&nK2`x)44$rjF6*2UngG277DE64 literal 0 HcmV?d00001 diff --git a/doc/images/wrench.png b/doc/images/wrench.png new file mode 100644 index 0000000000000000000000000000000000000000..5c8213fef5ab969f03189d4367e32e597e38bd7f GIT binary patch literal 610 zcmV-o0-gPdP)^jb z4`0v}DG1te)wmeb(>p90leRz?_mO+^JKy=v&2<29Od6?F%9%(c8los#f*@G`-%W&* z$)uBj2i@u-@SgX}gtyWPe6d*|w6h%R? zScK2#Yn%$sum0cy>90DmY*i{1XqpClEtktsRTZ)lCUe z<FogV^*tm>8*AlX za4oiR!&85LrobG57qUHUX#{>Vz(RHpB5|@>9O6N$jqB8>%($0wxE5R3)b>Y~xtCo$ zCgEk&A?_#IxHdN)9tqre^o{ho4{?hmPuf@^@I3-wncaRd%|~O3xbrKY=&TiwPYkJroM{;WUQTuMY8vpg}f4o)2%U3C;eEDoiEh?94d(rV57VIF#8VqzW$HrDC|#U`x@QDbgi zVl)t9GGz&YY#D?gc%>hISA+_EBpnXt#pnC`p6@xw0$8TCbULjhlgVx(kuc)%xbgqq zR5+DNDFRN0!y)7Gm}oT0i39}h4h928qY?Rho^UvPGJ#kuW|-Amtrn`Pmd&+bFo@sp z$LI4IQw7BG?|#2ewOS<<3VjL$0=lMY^m;wqZujv5kx1l%Sl;V&Iy4#$ip3&@LV2!7vhhN=PCz%^9v24`qb(+m4W?!q-&~=?ssf5GfnAmJKV;3bvpDm0(NhahZ=&^sqo6Odj6>)Dq_3p~4~ zvb`d3Mydwjt&Df^hVmLtI2x=U&h9(JVYX-!y~z3zi;1>=LY;o(bL$(Yf$lf)dMf0-u^0HrpTG Wk@)HE*94aU0000m+BBgry{~j2fHLegbHP( zrgXNbr0}2;^nywdjLjZe?uxtrd3D(pZH@fFFc0{BW_~jxoO1w7-VX;6vK@ROA$$R6 zEmo;Ht-Mj|>5jUy{bQ^V5@53LRI8AgLpUm|m+15sqcz@QtVSo|oz7ArM8?pIn+>gN z0b=4_b5O|4A*;Q+vc9Vqr~%3V155*NV~@gTz}KSUiKB-uJzjMZ>5%Q#n24H!V{ zTY(LLAE*NAHZ}C#wnj%Bw5OFIkRhkkAW#kDC3j9Wm0YXRaXlyyp>#mVfYG)eC;@ab zDb=T-BCAY4LI(Z@GOTr2V_A{pRwSmz+8Be>CjAw(=gnbVWAeguvZa93JmL(EDxv1m z0OP4q=fpAK1Mq!C2`OkEn37o;m#wF#(t(8Pu#S?2f#x<~4EO{@fmm`p9veD6RZ_jp z@Au4};q&`XuKEYgIiB4((kgxOs#YdqJw0fY>9^K_agEu5+$#k;w#%I2N>n_?)YIqu z`tq&#_^p?-%K*U0^}|7+9U(&k0?s;=r=uCZ%)H9_edH8wK}gB(nUB1FFk+2Ol%BXV zHoFY`D~2x|2 + + + + + +RDoc Documentation + + + + + + + + + + + + + + + + + + +
              + +

              This is the API documentation for RDoc Documentation. + +

              + + + + + diff --git a/doc/js/darkfish.js b/doc/js/darkfish.js new file mode 100644 index 00000000..111bbf8e --- /dev/null +++ b/doc/js/darkfish.js @@ -0,0 +1,84 @@ +/** + * + * Darkfish Page Functions + * $Id: darkfish.js 53 2009-01-07 02:52:03Z deveiant $ + * + * Author: Michael Granger + * + */ + +/* Provide console simulation for firebug-less environments */ +/* +if (!("console" in window) || !("firebug" in console)) { + var names = ["log", "debug", "info", "warn", "error", "assert", "dir", "dirxml", + "group", "groupEnd", "time", "timeEnd", "count", "trace", "profile", "profileEnd"]; + + window.console = {}; + for (var i = 0; i < names.length; ++i) + window.console[names[i]] = function() {}; +}; +*/ + + +function showSource( e ) { + var target = e.target; + while (!target.classList.contains('method-detail')) { + target = target.parentNode; + } + if (typeof target !== "undefined" && target !== null) { + target = target.querySelector('.method-source-code'); + } + if (typeof target !== "undefined" && target !== null) { + target.classList.toggle('active-menu') + } +}; + +function hookSourceViews() { + document.querySelectorAll('.method-heading').forEach(function (codeObject) { + codeObject.addEventListener('click', showSource); + }); +}; + +function hookSearch() { + var input = document.querySelector('#search-field'); + var result = document.querySelector('#search-results'); + result.classList.remove("initially-hidden"); + + var search_section = document.querySelector('#search-section'); + search_section.classList.remove("initially-hidden"); + + var search = new Search(search_data, input, result); + + search.renderItem = function(result) { + var li = document.createElement('li'); + var html = ''; + + // TODO add relative path to + + + + + + + + + + + + + + + + +
              + +

              # IMPORTANT: This file is generated by cucumber-rails - edit at your own peril. # It is recommended to regenerate this file in the future when you upgrade to a # newer version of cucumber-rails. Consider adding your own code to a new file # instead of editing this one. Cucumber will automatically load all features/*/.rb # files.

              + +

              unless ARGV.any? {|a| a =~ /^gems/} # Don't load anything when running the gems:* tasks

              + +

              vendored_cucumber_bin = Dir.first $LOAD_PATH.unshift(File.dirname(vendored_cucumber_bin) + '/../lib') unless vendored_cucumber_bin.nil?

              + +

              begin

              + +
              require 'cucumber/rake/task'
              +
              +namespace :cucumber do
              +  Cucumber::Rake::Task.new({ok: 'test:prepare'}, 'Run features that should pass') do |t|
              +    t.binary = vendored_cucumber_bin # If nil, the gem's binary is used.
              +    t.fork = true # You may get faster startup if you set this to false
              +    t.profile = 'default'
              +  end
              +
              +  Cucumber::Rake::Task.new({wip: 'test:prepare'}, 'Run features that are being worked on') do |t|
              +    t.binary = vendored_cucumber_bin
              +    t.fork = true # You may get faster startup if you set this to false
              +    t.profile = 'wip'
              +  end
              +
              +  Cucumber::Rake::Task.new({rerun: 'test:prepare'}, 'Record failing features and run only them if any exist') do |t|
              +    t.binary = vendored_cucumber_bin
              +    t.fork = true # You may get faster startup if you set this to false
              +    t.profile = 'rerun'
              +  end
              +
              +  desc 'Run all features'
              +  task all: [:ok, :wip]
              +
              +  task :statsetup do
              +    require 'rails/code_statistics'
              +    ::STATS_DIRECTORIES << %w(Cucumber\ features features) if File.exist?('features')
              +    ::CodeStatistics::TEST_TYPES << "Cucumber features" if File.exist?('features')
              +  end
              +
              +  task :annotations_setup do
              +    Rails.application.configure do
              +      if config.respond_to?(:annotations)
              +        config.annotations.directories << 'features'
              +        config.annotations.register_extensions('feature') { |tag| /#\s*(#{tag}):?\s*(.*)$/ }
              +      end
              +    end
              +  end
              +end
              +desc 'Alias for cucumber:ok'
              +task cucumber: 'cucumber:ok'
              +
              +task default: :cucumber
              +
              +task features: :cucumber do
              +  STDERR.puts "*** The 'features' task is deprecated. See rake -T cucumber ***"
              +end
              +
              +# In case we don't have the generic Rails test:prepare hook, append a no-op task that we can depend upon.
              +task 'test:prepare' do
              +end
              +
              +task stats: 'cucumber:statsetup'
              +
              +task notes: 'cucumber:annotations_setup'
              +
              + +

              rescue LoadError

              + +
              desc 'cucumber rake task not available (cucumber not installed)'
              +task :cucumber do
              +  abort 'Cucumber rake task is not available. Be sure to install cucumber as a gem or plugin'
              +end
              +
              + +

              end

              + +

              end

              + +
              + + + + + diff --git a/doc/package_json.html b/doc/package_json.html new file mode 100644 index 00000000..1472829a --- /dev/null +++ b/doc/package_json.html @@ -0,0 +1,207 @@ + + + + + + +package.json - RDoc Documentation + + + + + + + + + + + + + + + + + + +
              + +

              {

              + +
              "name": "secretaria_ppgi",
              +"private": true,
              +"dependencies": {}
              + +

              }

              + +
              + + + + + diff --git a/doc/public/404_html.html b/doc/public/404_html.html new file mode 100644 index 00000000..ace2b0d4 --- /dev/null +++ b/doc/public/404_html.html @@ -0,0 +1,268 @@ + + + + + + +404.html - RDoc Documentation + + + + + + + + + + + + + + + + + + +
              + +

              <!DOCTYPE html> <html> <head>

              + +
              <title>The page you were looking for doesn't exist (404)</title>
              +<meta name="viewport" content="width=device-width,initial-scale=1">
              +<style>
              +.rails-default-error-page {
              +  background-color: #EFEFEF;
              +  color: #2E2F30;
              +  text-align: center;
              +  font-family: arial, sans-serif;
              +  margin: 0;
              +}
              +
              +.rails-default-error-page div.dialog {
              +  width: 95%;
              +  max-width: 33em;
              +  margin: 4em auto 0;
              +}
              +
              +.rails-default-error-page div.dialog > div {
              +  border: 1px solid #CCC;
              +  border-right-color: #999;
              +  border-left-color: #999;
              +  border-bottom-color: #BBB;
              +  border-top: #B00100 solid 4px;
              +  border-top-left-radius: 9px;
              +  border-top-right-radius: 9px;
              +  background-color: white;
              +  padding: 7px 12% 0;
              +  box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
              +}
              +
              +.rails-default-error-page h1 {
              +  font-size: 100%;
              +  color: #730E15;
              +  line-height: 1.5em;
              +}
              +
              +.rails-default-error-page div.dialog > p {
              +  margin: 0 0 1em;
              +  padding: 1em;
              +  background-color: #F7F7F7;
              +  border: 1px solid #CCC;
              +  border-right-color: #999;
              +  border-left-color: #999;
              +  border-bottom-color: #999;
              +  border-bottom-left-radius: 4px;
              +  border-bottom-right-radius: 4px;
              +  border-top-color: #DADADA;
              +  color: #666;
              +  box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
              +}
              +</style>
              + +

              </head>

              + +

              <body class=“rails-default-error-page”>

              + +
              <!-- This file lives in public/404.html -->
              +<div class="dialog">
              +  <div>
              +    <h1>The page you were looking for doesn't exist.</h1>
              +    <p>You may have mistyped the address or the page may have moved.</p>
              +  </div>
              +  <p>If you are the application owner check the logs for more information.</p>
              +</div>
              + +

              </body> </html>

              + +
              + + + + + diff --git a/doc/public/422_html.html b/doc/public/422_html.html new file mode 100644 index 00000000..dd02bd04 --- /dev/null +++ b/doc/public/422_html.html @@ -0,0 +1,268 @@ + + + + + + +422.html - RDoc Documentation + + + + + + + + + + + + + + + + + + +
              + +

              <!DOCTYPE html> <html> <head>

              + +
              <title>The change you wanted was rejected (422)</title>
              +<meta name="viewport" content="width=device-width,initial-scale=1">
              +<style>
              +.rails-default-error-page {
              +  background-color: #EFEFEF;
              +  color: #2E2F30;
              +  text-align: center;
              +  font-family: arial, sans-serif;
              +  margin: 0;
              +}
              +
              +.rails-default-error-page div.dialog {
              +  width: 95%;
              +  max-width: 33em;
              +  margin: 4em auto 0;
              +}
              +
              +.rails-default-error-page div.dialog > div {
              +  border: 1px solid #CCC;
              +  border-right-color: #999;
              +  border-left-color: #999;
              +  border-bottom-color: #BBB;
              +  border-top: #B00100 solid 4px;
              +  border-top-left-radius: 9px;
              +  border-top-right-radius: 9px;
              +  background-color: white;
              +  padding: 7px 12% 0;
              +  box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
              +}
              +
              +.rails-default-error-page h1 {
              +  font-size: 100%;
              +  color: #730E15;
              +  line-height: 1.5em;
              +}
              +
              +.rails-default-error-page div.dialog > p {
              +  margin: 0 0 1em;
              +  padding: 1em;
              +  background-color: #F7F7F7;
              +  border: 1px solid #CCC;
              +  border-right-color: #999;
              +  border-left-color: #999;
              +  border-bottom-color: #999;
              +  border-bottom-left-radius: 4px;
              +  border-bottom-right-radius: 4px;
              +  border-top-color: #DADADA;
              +  color: #666;
              +  box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
              +}
              +</style>
              + +

              </head>

              + +

              <body class=“rails-default-error-page”>

              + +
              <!-- This file lives in public/422.html -->
              +<div class="dialog">
              +  <div>
              +    <h1>The change you wanted was rejected.</h1>
              +    <p>Maybe you tried to change something you didn't have access to.</p>
              +  </div>
              +  <p>If you are the application owner check the logs for more information.</p>
              +</div>
              + +

              </body> </html>

              + +
              + + + + + diff --git a/doc/public/500_html.html b/doc/public/500_html.html new file mode 100644 index 00000000..8bcc8379 --- /dev/null +++ b/doc/public/500_html.html @@ -0,0 +1,267 @@ + + + + + + +500.html - RDoc Documentation + + + + + + + + + + + + + + + + + + +
              + +

              <!DOCTYPE html> <html> <head>

              + +
              <title>We're sorry, but something went wrong (500)</title>
              +<meta name="viewport" content="width=device-width,initial-scale=1">
              +<style>
              +.rails-default-error-page {
              +  background-color: #EFEFEF;
              +  color: #2E2F30;
              +  text-align: center;
              +  font-family: arial, sans-serif;
              +  margin: 0;
              +}
              +
              +.rails-default-error-page div.dialog {
              +  width: 95%;
              +  max-width: 33em;
              +  margin: 4em auto 0;
              +}
              +
              +.rails-default-error-page div.dialog > div {
              +  border: 1px solid #CCC;
              +  border-right-color: #999;
              +  border-left-color: #999;
              +  border-bottom-color: #BBB;
              +  border-top: #B00100 solid 4px;
              +  border-top-left-radius: 9px;
              +  border-top-right-radius: 9px;
              +  background-color: white;
              +  padding: 7px 12% 0;
              +  box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
              +}
              +
              +.rails-default-error-page h1 {
              +  font-size: 100%;
              +  color: #730E15;
              +  line-height: 1.5em;
              +}
              +
              +.rails-default-error-page div.dialog > p {
              +  margin: 0 0 1em;
              +  padding: 1em;
              +  background-color: #F7F7F7;
              +  border: 1px solid #CCC;
              +  border-right-color: #999;
              +  border-left-color: #999;
              +  border-bottom-color: #999;
              +  border-bottom-left-radius: 4px;
              +  border-bottom-right-radius: 4px;
              +  border-top-color: #DADADA;
              +  color: #666;
              +  box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
              +}
              +</style>
              + +

              </head>

              + +

              <body class=“rails-default-error-page”>

              + +
              <!-- This file lives in public/500.html -->
              +<div class="dialog">
              +  <div>
              +    <h1>We're sorry, but something went wrong.</h1>
              +  </div>
              +  <p>If you are the application owner check the logs for more information.</p>
              +</div>
              + +

              </body> </html>

              + +
              + + + + + diff --git a/doc/public/apple-touch-icon-precomposed_png.html b/doc/public/apple-touch-icon-precomposed_png.html new file mode 100644 index 00000000..3097f4d2 --- /dev/null +++ b/doc/public/apple-touch-icon-precomposed_png.html @@ -0,0 +1,199 @@ + + + + + + +apple-touch-icon-precomposed.png - RDoc Documentation + + + + + + + + + + + + + + + + + + +
              + +
              + + + + + diff --git a/doc/public/apple-touch-icon_png.html b/doc/public/apple-touch-icon_png.html new file mode 100644 index 00000000..70df3694 --- /dev/null +++ b/doc/public/apple-touch-icon_png.html @@ -0,0 +1,199 @@ + + + + + + +apple-touch-icon.png - RDoc Documentation + + + + + + + + + + + + + + + + + + +
              + +
              + + + + + diff --git a/doc/public/favicon_ico.html b/doc/public/favicon_ico.html new file mode 100644 index 00000000..1d69efc4 --- /dev/null +++ b/doc/public/favicon_ico.html @@ -0,0 +1,199 @@ + + + + + + +favicon.ico - RDoc Documentation + + + + + + + + + + + + + + + + + + +
              + +
              + + + + + diff --git a/doc/public/robots_txt.html b/doc/public/robots_txt.html new file mode 100644 index 00000000..92e9df7d --- /dev/null +++ b/doc/public/robots_txt.html @@ -0,0 +1,201 @@ + + + + + + +robots - RDoc Documentation + + + + + + + + + + + + + + + + + + +
              + +

              # See www.robotstxt.org/robotstxt.html for documentation on how to use the robots.txt file

              + +
              + + + + + diff --git a/doc/report_json.html b/doc/report_json.html new file mode 100644 index 00000000..9d39aaf5 --- /dev/null +++ b/doc/report_json.html @@ -0,0 +1,201 @@ + + + + + + +report.json - RDoc Documentation + + + + + + + + + + + + + + + + + + +
              +
              {“id”:“abrir-solicitação-de-credenciamento”,“uri”:“features/abrir_solicitacao_credenciamento.feature”,“keyword”:“Funcionalidade”,“name”:“Abrir solicitação de credenciamento”,“description”:“ Como um professor autenticado no sistema,n Quero poder abrir uma solicitação de credenciamenton Para que eu possa ser um professor credenciado”,“line”:4,“elements”:[{“keyword”:“Contexto”,“name”:“”,“description”:“”,“line”:9,“type”:“background”,“before”:,“steps”:[{“keyword”:“Dado ”,“name”:“que eu esteja cadastrado e logado como "Lucas", "lucas@professor.com", "lucas123", "professor", "200000000"”,“line”:10,“match”:{“location”:“features/step_definitions/credenciamento_professores_steps.rb:112”},“result”:{“status”:“passed”,“duration”:273705000}},{“keyword”:“E ”,“name”:“que eu esteja na página de solicitações de credenciamento”,“line”:11,“match”:{“location”:“features/step_definitions/credenciamento_professores_steps.rb:121”},“result”:{“status”:“passed”,“duration”:26552900}},{“keyword”:“Quando ”,“name”:“eu clico em 'Abrir Novo Processo'”,“line”:12,“match”:{“location”:“features/step_definitions/credenciamento_professores_steps.rb:141”},“result”:{“status”:“passed”,“duration”:31130200}}]},{“id”:“abrir-solicitação-de-credenciamento;solicitação-enviada-com-sucesso”,“keyword”:“Cenário”,“name”:“Solicitação enviada com sucesso”,“description”:“”,“line”:14,“type”:“scenario”,“steps”:[{“keyword”:“Quando ”,“name”:“eu anexo o arquivo "features/resources/Formulário de Credenciamento.doc" em 'Documentos'”,“line”:15,“match”:{“location”:“features/step_definitions/credenciamento_professores_steps.rb:137”},“result”:{“status”:“passed”,“duration”:1622200}},{“keyword”:“E ”,“name”:“eu anexo o arquivo "features/resources/ship.jpg" em 'Documentos'”,“line”:16,“match”:{“location”:“features/step_definitions/credenciamento_professores_steps.rb:137”},“result”:{“status”:“passed”,“duration”:994900}},{“keyword”:“E ”,“name”:“eu aperto 'Enviar'”,“line”:17,“match”:{“location”:“features/step_definitions/credenciamento_professores_steps.rb:187”},“result”:{“status”:“passed”,“duration”:144610200}},{“keyword”:“Então ”,“name”:“eu devo receber uma mensagem de sucesso”,“line”:18,“match”:{“location”:“features/step_definitions/credenciamento_professores_steps.rb:207”},“result”:{“status”:“passed”,“duration”:1184400}}],“after”:[{“embeddings”:,“match”:{“location”:“features/support/hooks.rb:1”},“result”:{“status”:“passed”,“duration”:1842100}},{“match”:{“location”:“capybara-3.33.0/lib/capybara/cucumber.rb:10”},“result”:{“status”:“passed”,“duration”:25800}}]},{“keyword”:“Contexto”,“name”:“”,“description”:“”,“line”:9,“type”:“background”,“before”:,“steps”:[{“keyword”:“Dado ”,“name”:“que eu esteja cadastrado e logado como "Lucas", "lucas@professor.com", "lucas123", "professor", "200000000"”,“line”:10,“match”:{“location”:“features/step_definitions/credenciamento_professores_steps.rb:112”},“result”:{“status”:“passed”,“duration”:50928900}},{“keyword”:“E ”,“name”:“que eu esteja na página de solicitações de credenciamento”,“line”:11,“match”:{“location”:“features/step_definitions/credenciamento_professores_steps.rb:121”},“result”:{“status”:“passed”,“duration”:9949300}},{“keyword”:“Quando ”,“name”:“eu clico em 'Abrir Novo Processo'”,“line”:12,“match”:{“location”:“features/step_definitions/credenciamento_professores_steps.rb:141”},“result”:{“status”:“passed”,“duration”:15498900}}]},{“id”:“abrir-solicitação-de-credenciamento;solicitação-não-enviada-(campo-obrigatório-em-branco)”,“keyword”:“Cenário”,“name”:“Solicitação não enviada (campo obrigatório em branco)”,“description”:“”,“line”:20,“type”:“scenario”,“steps”:[{“keyword”:“Quando ”,“name”:“eu aperto 'Enviar'”,“line”:21,“match”:{“location”:“features/step_definitions/credenciamento_professores_steps.rb:187”},“result”:{“status”:“passed”,“duration”:17916400}},{“keyword”:“Então ”,“name”:“eu devo receber uma mensagem de erro”,“line”:22,“match”:{“location”:“features/step_definitions/credenciamento_professores_steps.rb:207”},“result”:{“status”:“passed”,“duration”:2106400}}],“after”:[{“embeddings”:,“match”:{“location”:“features/support/hooks.rb:1”},“result”:{“status”:“passed”,“duration”:343100}},{“match”:{“location”:“capybara-3.33.0/lib/capybara/cucumber.rb:10”},“result”:{“status”:“passed”,“duration”:21300}}]}]},{“id”:“credenciar-de-credenciamento-dos-professores”,“uri”:“features/credenciamento_periodo.feature”,“keyword”:“Funcionalidade”,“name”:“credenciar de credenciamento dos professores”,“description”:“ Como um administrador autenticado no sistema,n Quero visualizar professores com credenciamento aprovadon Para credenciar de credenciamento dos professores”,“line”:4,“elements”:[{“keyword”:“Contexto”,“name”:“”,“description”:“”,“line”:9,“type”:“background”,“before”:,“steps”:[{“keyword”:“Dado ”,“name”:“que existam os seguintes credenciamentos sem prazo definido:”,“line”:10,“rows”:[{“cells”:},{“cells”:},{“cells”:},{“cells”:}],“match”:{“location”:“features/step_definitions/credenciamento_professores_steps.rb:78”},“result”:{“status”:“passed”,“duration”:171472900}},{“keyword”:“E ”,“name”:“que eu esteja cadastrado e logado como "Aécio", "aecio@admin.com", "aecio123", "administrator", "200000000"”,“line”:16,“match”:{“location”:“features/step_definitions/credenciamento_professores_steps.rb:112”},“result”:{“status”:“passed”,“duration”:39487000}},{“keyword”:“E ”,“name”:“que eu esteja na página de credenciamentos”,“line”:17,“match”:{“location”:“features/step_definitions/credenciamento_professores_steps.rb:121”},“result”:{“status”:“passed”,“duration”:18830400}}]},{“id”:“credenciar-de-credenciamento-dos-professores;definir-prazo-inserindo-uma-data-válida”,“keyword”:“Cenário”,“name”:“Definir prazo inserindo uma data válida”,“description”:“”,“line”:19,“type”:“scenario”,“steps”:[{“keyword”:“Quando ”,“name”:“eu escolho credenciar "Simon"”,“line”:20,“match”:{“location”:“features/step_definitions/credenciamento_professores_steps.rb:131”},“result”:{“status”:“passed”,“duration”:31907200}},{“keyword”:“E ”,“name”:“eu seleciono uma data final posterior a data inicial”,“line”:21,“match”:{“location”:“features/step_definitions/credenciamento_professores_steps.rb:175”},“result”:{“status”:“passed”,“duration”:3781700}},{“keyword”:“E ”,“name”:“eu aperto 'Salvar'”,“line”:22,“match”:{“location”:“features/step_definitions/credenciamento_professores_steps.rb:187”},“result”:{“status”:“passed”,“duration”:22029200}},{“keyword”:“Então ”,“name”:“eu devo receber uma mensagem de sucesso”,“line”:23,“match”:{“location”:“features/step_definitions/credenciamento_professores_steps.rb:207”},“result”:{“status”:“passed”,“duration”:1080100}}],“after”:[{“embeddings”:,“match”:{“location”:“features/support/hooks.rb:1”},“result”:{“status”:“passed”,“duration”:303700}},{“match”:{“location”:“capybara-3.33.0/lib/capybara/cucumber.rb:10”},“result”:{“status”:“passed”,“duration”:21900}}]},{“keyword”:“Contexto”,“name”:“”,“description”:“”,“line”:9,“type”:“background”,“before”:,“steps”:[{“keyword”:“Dado ”,“name”:“que existam os seguintes credenciamentos sem prazo definido:”,“line”:10,“rows”:[{“cells”:},{“cells”:},{“cells”:},{“cells”:}],“match”:{“location”:“features/step_definitions/credenciamento_professores_steps.rb:78”},“result”:{“status”:“passed”,“duration”:291766700}},{“keyword”:“E ”,“name”:“que eu esteja cadastrado e logado como "Aécio", "aecio@admin.com", "aecio123", "administrator", "200000000"”,“line”:16,“match”:{“location”:“features/step_definitions/credenciamento_professores_steps.rb:112”},“result”:{“status”:“passed”,“duration”:37367900}},{“keyword”:“E ”,“name”:“que eu esteja na página de credenciamentos”,“line”:17,“match”:{“location”:“features/step_definitions/credenciamento_professores_steps.rb:121”},“result”:{“status”:“passed”,“duration”:15747100}}]},{“id”:“credenciar-de-credenciamento-dos-professores;definir-prazo-inserindo-data-inválida”,“keyword”:“Cenário”,“name”:“Definir prazo inserindo data inválida”,“description”:“”,“line”:25,“type”:“scenario”,“steps”:[{“keyword”:“Quando ”,“name”:“eu escolho credenciar "Theodore"”,“line”:26,“match”:{“location”:“features/step_definitions/credenciamento_professores_steps.rb:131”},“result”:{“status”:“passed”,“duration”:25176100}},{“keyword”:“E ”,“name”:“eu seleciono uma data final anterior a data inicial”,“line”:27,“match”:{“location”:“features/step_definitions/credenciamento_professores_steps.rb:175”},“result”:{“status”:“passed”,“duration”:4105000}},{“keyword”:“E ”,“name”:“eu aperto 'Salvar'”,“line”:28,“match”:{“location”:“features/step_definitions/credenciamento_professores_steps.rb:187”},“result”:{“status”:“passed”,“duration”:30732600}},{“keyword”:“Então ”,“name”:“eu devo receber uma mensagem de erro”,“line”:29,“match”:{“location”:“features/step_definitions/credenciamento_professores_steps.rb:207”},“result”:{“status”:“passed”,“duration”:2457800}}],“after”:[{“embeddings”:,“match”:{“location”:“features/support/hooks.rb:1”},“result”:{“status”:“passed”,“duration”:317300}},{“match”:{“location”:“capybara-3.33.0/lib/capybara/cucumber.rb:10”},“result”:{“status”:“passed”,“duration”:32600}}]}]},{“id”:“gerenciar-solicitações-de-credenciamento”,“uri”:“features/gerenciar_solicitacoes_credenciamento.feature”,“keyword”:“Funcionalidade”,“name”:“Gerenciar solicitações de credenciamento”,“description”:“ Como um admnistrador autenticado no sistema,n Quero visualizar uma solicitação de credencimento em aberton Para decidir se vou aceitar ou recusar tal solicitação”,“line”:4,“elements”:[{“keyword”:“Contexto”,“name”:“”,“description”:“”,“line”:9,“type”:“background”,“before”:,“steps”:[{“keyword”:“Dado ”,“name”:“que existam as seguintes solicitações:”,“line”:10,“rows”:[{“cells”:},{“cells”:},{“cells”:},{“cells”:},{“cells”:}],“match”:{“location”:“features/step_definitions/credenciamento_professores_steps.rb:55”},“result”:{“status”:“passed”,“duration”:115471800}},{“keyword”:“E ”,“name”:“que eu esteja cadastrado e logado como "Gabriel", "gabriel@admin.com", "gabriel123", "administrator", "200000000"”,“line”:17,“match”:{“location”:“features/step_definitions/credenciamento_professores_steps.rb:112”},“result”:{“status”:“passed”,“duration”:23295400}},{“keyword”:“E ”,“name”:“que eu esteja na página de solicitações de credenciamento”,“line”:18,“match”:{“location”:“features/step_definitions/credenciamento_professores_steps.rb:121”},“result”:{“status”:“passed”,“duration”:13948600}}]},{“id”:“gerenciar-solicitações-de-credenciamento;aceitar-uma-solicitação-de-credenciamento”,“keyword”:“Cenário”,“name”:“Aceitar uma solicitação de credenciamento”,“description”:“”,“line”:20,“type”:“scenario”,“steps”:[{“keyword”:“Quando ”,“name”:“eu escolho avaliar "Dave"”,“line”:21,“match”:{“location”:“features/step_definitions/credenciamento_professores_steps.rb:125”},“result”:{“status”:“passed”,“duration”:21358800}},{“keyword”:“E ”,“name”:“eu escolho 'Aprovado'”,“line”:22,“match”:{“location”:“features/step_definitions/credenciamento_professores_steps.rb:154”},“result”:{“status”:“passed”,“duration”:1681600}},{“keyword”:“E ”,“name”:“eu aperto 'Enviar'”,“line”:23,“match”:{“location”:“features/step_definitions/credenciamento_professores_steps.rb:187”},“result”:{“status”:“passed”,“duration”:46517900}},{“keyword”:“Então ”,“name”:“eu devo estar na página de solicitações de credenciamento”,“line”:24,“match”:{“location”:“features/step_definitions/credenciamento_professores_steps.rb:145”},“result”:{“status”:“passed”,“duration”:6728000}},{“keyword”:“Quando ”,“name”:“eu marco apenas os seguintes estados: Aprovado”,“line”:25,“match”:{“location”:“features/step_definitions/credenciamento_professores_steps.rb:158”},“result”:{“status”:“passed”,“duration”:8294100}},{“keyword”:“E ”,“name”:“eu aperto 'Atualizar'”,“line”:26,“match”:{“location”:“features/step_definitions/credenciamento_professores_steps.rb:187”},“result”:{“status”:“passed”,“duration”:10455200}},{“keyword”:“Então ”,“name”:“eu devo ver "Dave"”,“line”:27,“match”:{“location”:“features/step_definitions/credenciamento_professores_steps.rb:191”},“result”:{“status”:“passed”,“duration”:2633700}}],“after”:[{“embeddings”:,“match”:{“location”:“features/support/hooks.rb:1”},“result”:{“status”:“passed”,“duration”:315600}},{“match”:{“location”:“capybara-3.33.0/lib/capybara/cucumber.rb:10”},“result”:{“status”:“passed”,“duration”:18300}}]},{“keyword”:“Contexto”,“name”:“”,“description”:“”,“line”:9,“type”:“background”,“before”:,“steps”:[{“keyword”:“Dado ”,“name”:“que existam as seguintes solicitações:”,“line”:10,“rows”:[{“cells”:},{“cells”:},{“cells”:},{“cells”:},{“cells”:}],“match”:{“location”:“features/step_definitions/credenciamento_professores_steps.rb:55”},“result”:{“status”:“passed”,“duration”:121748500}},{“keyword”:“E ”,“name”:“que eu esteja cadastrado e logado como "Gabriel", "gabriel@admin.com", "gabriel123", "administrator", "200000000"”,“line”:17,“match”:{“location”:“features/step_definitions/credenciamento_professores_steps.rb:112”},“result”:{“status”:“passed”,“duration”:21298900}},{“keyword”:“E ”,“name”:“que eu esteja na página de solicitações de credenciamento”,“line”:18,“match”:{“location”:“features/step_definitions/credenciamento_professores_steps.rb:121”},“result”:{“status”:“passed”,“duration”:8610700}}]},{“id”:“gerenciar-solicitações-de-credenciamento;aceitar-uma-solicitação-e-encontrar-o-credenciamento-correspondente”,“keyword”:“Cenário”,“name”:“Aceitar uma solicitação e encontrar o credenciamento correspondente”,“description”:“”,“line”:29,“type”:“scenario”,“steps”:[{“keyword”:“Quando ”,“name”:“eu escolho avaliar "Alvin"”,“line”:30,“match”:{“location”:“features/step_definitions/credenciamento_professores_steps.rb:125”},“result”:{“status”:“passed”,“duration”:10694000}},{“keyword”:“E ”,“name”:“eu escolho 'Aprovado'”,“line”:31,“match”:{“location”:“features/step_definitions/credenciamento_professores_steps.rb:154”},“result”:{“status”:“passed”,“duration”:1286800}},{“keyword”:“E ”,“name”:“eu aperto 'Enviar'”,“line”:32,“match”:{“location”:“features/step_definitions/credenciamento_professores_steps.rb:187”},“result”:{“status”:“passed”,“duration”:26202600}},{“keyword”:“Dado ”,“name”:“que eu esteja na página de credenciamentos”,“line”:33,“match”:{“location”:“features/step_definitions/credenciamento_professores_steps.rb:121”},“result”:{“status”:“passed”,“duration”:6238400}},{“keyword”:“Então ”,“name”:“eu devo ver "Alvin"”,“line”:34,“match”:{“location”:“features/step_definitions/credenciamento_professores_steps.rb:191”},“result”:{“status”:“passed”,“duration”:1225900}}],“after”:[{“embeddings”:,“match”:{“location”:“features/support/hooks.rb:1”},“result”:{“status”:“passed”,“duration”:291500}},{“match”:{“location”:“capybara-3.33.0/lib/capybara/cucumber.rb:10”},“result”:{“status”:“passed”,“duration”:16200}}]},{“keyword”:“Contexto”,“name”:“”,“description”:“”,“line”:9,“type”:“background”,“before”:,“steps”:[{“keyword”:“Dado ”,“name”:“que existam as seguintes solicitações:”,“line”:10,“rows”:[{“cells”:},{“cells”:},{“cells”:},{“cells”:},{“cells”:}],“match”:{“location”:“features/step_definitions/credenciamento_professores_steps.rb:55”},“result”:{“status”:“passed”,“duration”:105091200}},{“keyword”:“E ”,“name”:“que eu esteja cadastrado e logado como "Gabriel", "gabriel@admin.com", "gabriel123", "administrator", "200000000"”,“line”:17,“match”:{“location”:“features/step_definitions/credenciamento_professores_steps.rb:112”},“result”:{“status”:“passed”,“duration”:22619800}},{“keyword”:“E ”,“name”:“que eu esteja na página de solicitações de credenciamento”,“line”:18,“match”:{“location”:“features/step_definitions/credenciamento_professores_steps.rb:121”},“result”:{“status”:“passed”,“duration”:12850000}}]},{“id”:“gerenciar-solicitações-de-credenciamento;recusar-uma-solicitação-de-credenciamento”,“keyword”:“Cenário”,“name”:“Recusar uma solicitação de credenciamento”,“description”:“”,“line”:36,“type”:“scenario”,“steps”:[{“keyword”:“Quando ”,“name”:“eu escolho avaliar "Simon"”,“line”:37,“match”:{“location”:“features/step_definitions/credenciamento_professores_steps.rb:125”},“result”:{“status”:“passed”,“duration”:10256500}},{“keyword”:“E ”,“name”:“eu escolho 'Rejeitado'”,“line”:38,“match”:{“location”:“features/step_definitions/credenciamento_professores_steps.rb:154”},“result”:{“status”:“passed”,“duration”:1102000}},{“keyword”:“E ”,“name”:“eu aperto 'Enviar'”,“line”:39,“match”:{“location”:“features/step_definitions/credenciamento_professores_steps.rb:187”},“result”:{“status”:“passed”,“duration”:20300700}},{“keyword”:“Então ”,“name”:“eu devo estar na página de solicitações de credenciamento”,“line”:40,“match”:{“location”:“features/step_definitions/credenciamento_professores_steps.rb:145”},“result”:{“status”:“passed”,“duration”:520900}},{“keyword”:“Quando ”,“name”:“eu marco apenas os seguintes estados: Rejeitado”,“line”:41,“match”:{“location”:“features/step_definitions/credenciamento_professores_steps.rb:158”},“result”:{“status”:“passed”,“duration”:2365000}},{“keyword”:“E ”,“name”:“eu aperto 'Atualizar'”,“line”:42,“match”:{“location”:“features/step_definitions/credenciamento_professores_steps.rb:187”},“result”:{“status”:“passed”,“duration”:24184300}},{“keyword”:“Então ”,“name”:“eu devo ver "Simon"”,“line”:43,“match”:{“location”:“features/step_definitions/credenciamento_professores_steps.rb:191”},“result”:{“status”:“passed”,“duration”:2568700}}],“after”:[{“embeddings”:,“match”:{“location”:“features/support/hooks.rb:1”},“result”:{“status”:“passed”,“duration”:318700}},{“match”:{“location”:“capybara-3.33.0/lib/capybara/cucumber.rb:10”},“result”:{“status”:“passed”,“duration”:17800}}]},{“keyword”:“Contexto”,“name”:“”,“description”:“”,“line”:9,“type”:“background”,“before”:,“steps”:[{“keyword”:“Dado ”,“name”:“que existam as seguintes solicitações:”,“line”:10,“rows”:[{“cells”:},{“cells”:},{“cells”:},{“cells”:},{“cells”:}],“match”:{“location”:“features/step_definitions/credenciamento_professores_steps.rb:55”},“result”:{“status”:“passed”,“duration”:103470100}},{“keyword”:“E ”,“name”:“que eu esteja cadastrado e logado como "Gabriel", "gabriel@admin.com", "gabriel123", "administrator", "200000000"”,“line”:17,“match”:{“location”:“features/step_definitions/credenciamento_professores_steps.rb:112”},“result”:{“status”:“passed”,“duration”:20804100}},{“keyword”:“E ”,“name”:“que eu esteja na página de solicitações de credenciamento”,“line”:18,“match”:{“location”:“features/step_definitions/credenciamento_professores_steps.rb:121”},“result”:{“status”:“passed”,“duration”:8252400}}]},{“id”:“gerenciar-solicitações-de-credenciamento;recusar-uma-solicitação-e-não-encontrar-o-credenciamento-correspondente”,“keyword”:“Cenário”,“name”:“Recusar uma solicitação e não encontrar o credenciamento correspondente”,“description”:“”,“line”:45,“type”:“scenario”,“steps”:[{“keyword”:“Quando ”,“name”:“eu escolho avaliar "Theodore"”,“line”:46,“match”:{“location”:“features/step_definitions/credenciamento_professores_steps.rb:125”},“result”:{“status”:“passed”,“duration”:10467000}},{“keyword”:“E ”,“name”:“eu escolho 'Rejeitado'”,“line”:47,“match”:{“location”:“features/step_definitions/credenciamento_professores_steps.rb:154”},“result”:{“status”:“passed”,“duration”:1135000}},{“keyword”:“E ”,“name”:“eu aperto 'Enviar'”,“line”:48,“match”:{“location”:“features/step_definitions/credenciamento_professores_steps.rb:187”},“result”:{“status”:“passed”,“duration”:19701000}},{“keyword”:“Dado ”,“name”:“que eu esteja na página de credenciamentos”,“line”:49,“match”:{“location”:“features/step_definitions/credenciamento_professores_steps.rb:121”},“result”:{“status”:“passed”,“duration”:6737000}},{“keyword”:“Então ”,“name”:“eu não devo ver "Theodore"”,“line”:50,“match”:{“location”:“features/step_definitions/credenciamento_professores_steps.rb:199”},“result”:{“status”:“passed”,“duration”:1134900}}],“after”:[{“embeddings”:,“match”:{“location”:“features/support/hooks.rb:1”},“result”:{“status”:“passed”,“duration”:308200}},{“match”:{“location”:“capybara-3.33.0/lib/capybara/cucumber.rb:10”},“result”:{“status”:“passed”,“duration”:17400}}]}]},{“id”:“disponibilizar-os-requisitos-para-o-credenciamento”,“uri”:“features/requisitos_necessarios.feature”,“keyword”:“Funcionalidade”,“name”:“Disponibilizar os requisitos para o credenciamento”,“description”:“ Como um administrador autenticado no sistema,n Para que os professores possam abrir solicitações de credenciamenton Quero poder disponibilizar os requisitos necessários para o credenciamento”,“line”:4,“elements”:[{“keyword”:“Contexto”,“name”:“”,“description”:“”,“line”:9,“type”:“background”,“before”:,“steps”:[{“keyword”:“Dado ”,“name”:“que eu esteja cadastrado e logado como "Preihs", "preihs@admin.com", "preihs123", "administrator", "200000000"”,“line”:10,“match”:{“location”:“features/step_definitions/credenciamento_professores_steps.rb:112”},“result”:{“status”:“passed”,“duration”:24972600}},{“keyword”:“E ”,“name”:“que eu esteja na página de requisitos para o credenciamento”,“line”:11,“match”:{“location”:“features/step_definitions/credenciamento_professores_steps.rb:121”},“result”:{“status”:“passed”,“duration”:15262900}}]},{“id”:“disponibilizar-os-requisitos-para-o-credenciamento;requisitos-modificados-com-sucesso”,“keyword”:“Cenário”,“name”:“Requisitos modificados com sucesso”,“description”:“”,“line”:13,“type”:“scenario”,“steps”:[{“keyword”:“Quando ”,“name”:“eu clico em 'Adicionar Informação de Requisitos'”,“line”:14,“match”:{“location”:“features/step_definitions/credenciamento_professores_steps.rb:141”},“result”:{“status”:“passed”,“duration”:18696600}},{“keyword”:“E ”,“name”:“eu preencho com "Requisitos de Credenciamento" em 'Título'”,“line”:15,“match”:{“location”:“features/step_definitions/credenciamento_professores_steps.rb:171”},“result”:{“status”:“passed”,“duration”:1424000}},{“keyword”:“E ”,“name”:“eu anexo o arquivo "features/resources/Formulário de Credenciamento.doc" em 'Documentos'”,“line”:16,“match”:{“location”:“features/step_definitions/credenciamento_professores_steps.rb:137”},“result”:{“status”:“passed”,“duration”:935100}},{“keyword”:“E ”,“name”:“eu aperto 'Enviar'”,“line”:17,“match”:{“location”:“features/step_definitions/credenciamento_professores_steps.rb:187”},“result”:{“status”:“passed”,“duration”:66987200}},{“keyword”:“Então ”,“name”:“eu devo receber uma mensagem de sucesso”,“line”:18,“match”:{“location”:“features/step_definitions/credenciamento_professores_steps.rb:207”},“result”:{“status”:“passed”,“duration”:874400}}],“after”:[{“embeddings”:,“match”:{“location”:“features/support/hooks.rb:1”},“result”:{“status”:“passed”,“duration”:396300}},{“match”:{“location”:“capybara-3.33.0/lib/capybara/cucumber.rb:10”},“result”:{“status”:“passed”,“duration”:23100}}]},{“keyword”:“Contexto”,“name”:“”,“description”:“”,“line”:9,“type”:“background”,“before”:,“steps”:[{“keyword”:“Dado ”,“name”:“que eu esteja cadastrado e logado como "Preihs", "preihs@admin.com", "preihs123", "administrator", "200000000"”,“line”:10,“match”:{“location”:“features/step_definitions/credenciamento_professores_steps.rb:112”},“result”:{“status”:“passed”,“duration”:21425500}},{“keyword”:“E ”,“name”:“que eu esteja na página de requisitos para o credenciamento”,“line”:11,“match”:{“location”:“features/step_definitions/credenciamento_professores_steps.rb:121”},“result”:{“status”:“passed”,“duration”:5375800}}]},{“id”:“disponibilizar-os-requisitos-para-o-credenciamento;requisitos-não-modificados-(campo-obrigatório-em-branco)”,“keyword”:“Cenário”,“name”:“Requisitos não modificados (campo obrigatório em branco)”,“description”:“”,“line”:20,“type”:“scenario”,“steps”:[{“keyword”:“Quando ”,“name”:“eu clico em 'Adicionar Informação de Requisitos'”,“line”:21,“match”:{“location”:“features/step_definitions/credenciamento_professores_steps.rb:141”},“result”:{“status”:“passed”,“duration”:5371300}},{“keyword”:“E ”,“name”:“eu anexo o arquivo "features/resources/Formulário de Credenciamento.doc" em 'Documentos'”,“line”:22,“match”:{“location”:“features/step_definitions/credenciamento_professores_steps.rb:137”},“result”:{“status”:“passed”,“duration”:1171600}},{“keyword”:“E ”,“name”:“eu aperto 'Enviar'”,“line”:23,“match”:{“location”:“features/step_definitions/credenciamento_professores_steps.rb:187”},“result”:{“status”:“passed”,“duration”:36157900}},{“keyword”:“Então ”,“name”:“eu devo receber uma mensagem de erro”,“line”:24,“match”:{“location”:“features/step_definitions/credenciamento_professores_steps.rb:207”},“result”:{“status”:“passed”,“duration”:767600}}],“after”:[{“embeddings”:,“match”:{“location”:“features/support/hooks.rb:1”},“result”:{“status”:“passed”,“duration”:991700}},{“match”:{“location”:“capybara-3.33.0/lib/capybara/cucumber.rb:10”},“result”:{“status”:“passed”,“duration”:27500}}]},{“keyword”:“Contexto”,“name”:“”,“description”:“”,“line”:9,“type”:“background”,“before”:,“steps”:[{“keyword”:“Dado ”,“name”:“que eu esteja cadastrado e logado como "Preihs", "preihs@admin.com", "preihs123", "administrator", "200000000"”,“line”:10,“match”:{“location”:“features/step_definitions/credenciamento_professores_steps.rb:112”},“result”:{“status”:“passed”,“duration”:25622600}},{“keyword”:“E ”,“name”:“que eu esteja na página de requisitos para o credenciamento”,“line”:11,“match”:{“location”:“features/step_definitions/credenciamento_professores_steps.rb:121”},“result”:{“status”:“passed”,“duration”:4720500}}]},{“id”:“disponibilizar-os-requisitos-para-o-credenciamento;requisitos-não-modificados-(registro-duplicado)”,“keyword”:“Cenário”,“name”:“Requisitos não modificados (registro duplicado)”,“description”:“”,“line”:26,“type”:“scenario”,“steps”:[{“keyword”:“Dado ”,“name”:“que o registro "Requisitos de Credenciamento" já exista na tabela de requisitos”,“line”:27,“match”:{“location”:“features/step_definitions/credenciamento_professores_steps.rb:106”},“result”:{“status”:“passed”,“duration”:64378300}},{“keyword”:“E ”,“name”:“que eu esteja na página de requisitos para o credenciamento”,“line”:28,“match”:{“location”:“features/step_definitions/credenciamento_professores_steps.rb:121”},“result”:{“status”:“passed”,“duration”:5163300}},{“keyword”:“Quando ”,“name”:“eu clico em 'Adicionar Informação de Requisitos'”,“line”:29,“match”:{“location”:“features/step_definitions/credenciamento_professores_steps.rb:141”},“result”:{“status”:“passed”,“duration”:6373400}},{“keyword”:“E ”,“name”:“eu preencho com "Requisitos de Credenciamento" em 'Título'”,“line”:30,“match”:{“location”:“features/step_definitions/credenciamento_professores_steps.rb:171”},“result”:{“status”:“passed”,“duration”:1189700}},{“keyword”:“E ”,“name”:“eu aperto 'Enviar'”,“line”:31,“match”:{“location”:“features/step_definitions/credenciamento_professores_steps.rb:187”},“result”:{“status”:“passed”,“duration”:13192900}},{“keyword”:“Então ”,“name”:“eu devo receber uma mensagem de erro”,“line”:32,“match”:{“location”:“features/step_definitions/credenciamento_professores_steps.rb:207”},“result”:{“status”:“passed”,“duration”:847000}}],“after”:[{“embeddings”:,“match”:{“location”:“features/support/hooks.rb:1”},“result”:{“status”:“passed”,“duration”:296200}},{“match”:{“location”:“capybara-3.33.0/lib/capybara/cucumber.rb:10”},“result”:{“status”:“passed”,“duration”:16600}}]}]} +
              + +
              + + + + + diff --git a/doc/table_of_contents.html b/doc/table_of_contents.html new file mode 100644 index 00000000..e4244617 --- /dev/null +++ b/doc/table_of_contents.html @@ -0,0 +1,821 @@ + + + + + + +Table of Contents - RDoc Documentation + + + + + + + + + + + + + + + + +
              +

              Table of Contents - RDoc Documentation

              + + + +

              Pages

              + + + +

              Classes and Modules

              + + +

              Methods

              + +
              + + + + From 46b935ef9024d9d8fd4966c48801637575d2ae5e Mon Sep 17 00:00:00 2001 From: ngsylar Date: Wed, 2 Dec 2020 18:42:04 -0300 Subject: [PATCH 69/82] SeiProcesses statuses --- app/controllers/sei_processes_controller.rb | 3 +-- app/models/sei_process.rb | 4 ++++ 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/app/controllers/sei_processes_controller.rb b/app/controllers/sei_processes_controller.rb index 7d07d6d1..77b7c8f4 100644 --- a/app/controllers/sei_processes_controller.rb +++ b/app/controllers/sei_processes_controller.rb @@ -5,7 +5,7 @@ class SeiProcessesController < ApplicationController # GET /sei_processes.json def index # Filtra solicitações baseadas nos estados marcados como visíveis - @all_statuses = %w[Espera Aprovado Rejeitado] + @all_statuses = SeiProcess.all_statuses session[:statuses] = params[:statuses] || session[:statuses] || @all_statuses.zip([]).to_h @status_filter = session[:statuses].keys @@ -78,7 +78,6 @@ def update # DELETE /sei_processes/1 # DELETE /sei_processes/1.json - # Exclui Processo se condições da model forem cumpridas, mensagem de erro caso contrário def destroy respond_to do |format| # Mensagem de sucesso ao excluir processo ou solicitação quando condições da model forem cumpridas diff --git a/app/models/sei_process.rb b/app/models/sei_process.rb index 4a8bd5c9..dc9987e6 100644 --- a/app/models/sei_process.rb +++ b/app/models/sei_process.rb @@ -8,6 +8,10 @@ class SeiProcess < ApplicationRecord Aprovado: 1, Rejeitado: 2 } + # Lista os status possíveis para os registros + def self.all_statuses + %w[Espera Aprovado Rejeitado] + end # Define se usuário atual está logado e se é administrador do sistema def current_user_is_admin From 8d29b9bfd3813854f60023cf277b2c6fc742482f Mon Sep 17 00:00:00 2001 From: ngsylar Date: Wed, 2 Dec 2020 19:03:21 -0300 Subject: [PATCH 70/82] descriptions for documentation --- app/controllers/accreditations_controller.rb | 20 +- app/controllers/requirements_controller.rb | 12 +- app/controllers/sei_processes_controller.rb | 12 +- coverage/.resultset.json | 57 +- coverage/index.html | 1271 ++++++++++++------ features.html | 964 ++++++------- report.json | 2 +- 7 files changed, 1388 insertions(+), 950 deletions(-) diff --git a/app/controllers/accreditations_controller.rb b/app/controllers/accreditations_controller.rb index 6e8743c0..2d0cc1fa 100644 --- a/app/controllers/accreditations_controller.rb +++ b/app/controllers/accreditations_controller.rb @@ -2,7 +2,7 @@ class AccreditationsController < ApplicationController before_action :set_accreditation, only: [:show, :edit, :update, :destroy] # GET /accreditations - # GET /accreditations.json + # Lista os credenciamentos criados def index # Lista todas os credenciamentos para um administrador if current_user.role == "administrator" @@ -14,27 +14,17 @@ def index end # GET /accreditations/1 - # GET /accreditations/1.json + # Mostra detalhes de um registro criado def show end - # GET /accreditations/new - def new - # Não há view para new, pois o processo de criação é feita em sei_processes_controller - end - # GET /accreditations/1/edit + # Renderiza página para atualizar um registro def edit end - # POST /accreditations - # POST /accreditations.json - def create - # O processo de criação de credenciamento é feita em sei_processes_controller - end - # PATCH/PUT /accreditations/1 - # PATCH/PUT /accreditations/1.json + # Faz o tratamento dos dados modificados pelo usuário para decidir se a modificação é válida ou não def update respond_to do |format| # Mensagem de sucesso ao atualizar credenciamento quando condições da model forem cumpridas @@ -50,7 +40,7 @@ def update end # DELETE /accreditations/1 - # DELETE /accreditations/1.json + # Decide se a exclusão do registro é válida ou não def destroy respond_to do |format| # Mensagem de sucesso ao excluir o credenciamento quando condições da model forem cumpridas diff --git a/app/controllers/requirements_controller.rb b/app/controllers/requirements_controller.rb index fc0aa7d4..9f9d9d9b 100644 --- a/app/controllers/requirements_controller.rb +++ b/app/controllers/requirements_controller.rb @@ -2,28 +2,30 @@ class RequirementsController < ApplicationController before_action :set_requirement, only: [:show, :edit, :update, :destroy] # GET /requirements - # GET /requirements.json + # Lista os requisitos criados def index # Lista todos os tipos de requisitos criados @requirements = Requirement.all end # GET /requirements/1 - # GET /requirements/1.json + # Mostra detalhes de um registro criado def show end # GET /requirements/new + # Renderiza página para criação de umm registro def new @requirement = Requirement.new end # GET /requirements/1/edit + # Renderiza página para atualizar um registro def edit end # POST /requirements - # POST /requirements.json + # Faz o tratamento dos dados enviados pelo usuário para decidir se o registro é válido ou não def create @requirement = Requirement.new(requirement_params) @@ -49,7 +51,7 @@ def delete_document_attachment end # PATCH/PUT /requirements/1 - # PATCH/PUT /requirements/1.json + # Faz o tratamento dos dados modificados pelo usuário para decidir se a modificação é válida ou não def update respond_to do |format| # Mensagem de sucesso ao atualizar requisitos quando condições da model forem cumpridas @@ -65,7 +67,7 @@ def update end # DELETE /requirements/1 - # DELETE /requirements/1.json + # Decide se a exclusão do registro é válida ou não def destroy respond_to do |format| # Mensagem de sucesso ao excluir requisitos quando condições da model forem cumpridas diff --git a/app/controllers/sei_processes_controller.rb b/app/controllers/sei_processes_controller.rb index 77b7c8f4..51b90d50 100644 --- a/app/controllers/sei_processes_controller.rb +++ b/app/controllers/sei_processes_controller.rb @@ -2,7 +2,7 @@ class SeiProcessesController < ApplicationController before_action :set_sei_process, only: [:show, :edit, :update, :destroy] # GET /sei_processes - # GET /sei_processes.json + # Lista os processos e solicitações criados def index # Filtra solicitações baseadas nos estados marcados como visíveis @all_statuses = SeiProcess.all_statuses @@ -19,11 +19,12 @@ def index end # GET /sei_processes/1 - # GET /sei_processes/1.json + # Mostra detalhes de um registro criado def show end # GET /sei_processes/new + # Renderiza página para criação de umm registro def new # Renderiza Requisitos de Credenciamento, caso existam, na página de criação de processo ou de abrir solicitação de credenciamento @requirements = Requirement.find_by(title: 'Requisitos de Credenciamento') @@ -31,11 +32,12 @@ def new end # GET /sei_processes/1/edit + # Renderiza página para atualizar um registro def edit end # POST /sei_processes - # POST /sei_processes.json + # Faz o tratamento dos dados enviados pelo usuário para decidir se o registro é válido ou não def create # Faz correções de entradas inválidas baseando-se nos dados do usuário logado mandatory_params = {'user_id' => current_user.id, 'status' => 'Espera', 'code' => '0'} @@ -55,7 +57,7 @@ def create end # PATCH/PUT /sei_processes/1 - # PATCH/PUT /sei_processes/1.json + # Faz o tratamento dos dados modificados pelo usuário para decidir se a modificação é válida ou não def update respond_to do |format| # Mensagem de sucesso ao atualizar processo ou solicitação quando condições da model forem cumpridas @@ -77,7 +79,7 @@ def update end # DELETE /sei_processes/1 - # DELETE /sei_processes/1.json + # Decide se a exclusão do registro é válida ou não def destroy respond_to do |format| # Mensagem de sucesso ao excluir processo ou solicitação quando condições da model forem cumpridas diff --git a/coverage/.resultset.json b/coverage/.resultset.json index 6875d035..30f71848 100644 --- a/coverage/.resultset.json +++ b/coverage/.resultset.json @@ -610,20 +610,14 @@ null, null, 1, + null, 1, 1, null, - 0, - null, - null, - null, - null, - null, - 1, null, + 0, null, null, - 1, null, null, null, @@ -639,10 +633,12 @@ null, 1, 2, + null, 2, 2, 1, null, + null, 2, 1, null, @@ -653,10 +649,12 @@ null, 1, 3, + null, 3, 4, 2, null, + null, 2, 1, null, @@ -957,6 +955,7 @@ null, null, 1, + null, 1, null, null, @@ -980,16 +979,19 @@ 4, null, 4, + null, 4, 4, 2, null, + null, 4, 2, null, null, null, null, + null, 1, 1, 1, @@ -1001,10 +1003,12 @@ null, 1, 4, + null, 4, 4, 2, null, + null, 4, 2, null, @@ -1015,10 +1019,12 @@ null, 1, 3, + null, 3, 4, 2, null, + null, 2, 1, null, @@ -1267,14 +1273,16 @@ null, null, 1, - 2, null, 2, 2, + 2, + null, null, 2, 1, null, + null, 1, null, null, @@ -1285,26 +1293,32 @@ null, null, null, + null, 1, + null, 1, 1, null, null, null, + null, 1, null, null, null, null, 1, + null, 4, 4, null, 4, + null, 4, 6, 3, null, + null, 2, 1, null, @@ -1315,15 +1329,18 @@ null, 1, 4, + null, 4, 6, 3, null, + null, 3, 1, null, null, null, + null, 2, 1, null, @@ -1334,10 +1351,12 @@ null, 1, 3, + null, 3, 4, 2, null, + null, 2, 1, null, @@ -1454,9 +1473,11 @@ 1, null, 1, + null, 1, 20, null, + null, 1, 17, 1, @@ -1466,6 +1487,7 @@ null, null, 1, + null, 1, 2, 1, @@ -1475,9 +1497,11 @@ null, null, 1, + null, 1, 0, null, + null, 1, 3, null, @@ -1522,9 +1546,11 @@ 1, null, 1, + null, 1, 26, null, + null, 1, 23, 2, @@ -1534,9 +1560,11 @@ null, null, 1, + null, 1, 0, null, + null, 1, 3, 1, @@ -1650,10 +1678,16 @@ null, null, 1, + 2, + null, + null, + null, + 1, 9, null, null, 1, + null, 1, 31, 1, @@ -1663,6 +1697,7 @@ null, null, 1, + null, 1, 6, 1, @@ -1672,9 +1707,11 @@ null, null, 1, + null, 1, 0, null, + null, 1, 3, null, @@ -1826,6 +1863,6 @@ ] } }, - "timestamp": 1605972039 + "timestamp": 1606946198 } } diff --git a/coverage/index.html b/coverage/index.html index 7984da51..8bdbd1de 100644 --- a/coverage/index.html +++ b/coverage/index.html @@ -14,7 +14,7 @@ loading

            -
            Generated 2020-11-21T13:20:39-02:00
            +
            Generated 2020-12-02T19:56:38-02:00
              @@ -72,12 +72,12 @@

              app/controllers/accreditations_controller.rb - 96.55 % - 71 - 29 - 28 + 96.30 % + 69 + 27 + 26 1 - 1.66 + 1.70 @@ -106,7 +106,7 @@

              app/controllers/requirements_controller.rb 100.00 % - 85 + 93 40 40 0 @@ -117,7 +117,7 @@

              app/controllers/sei_processes_controller.rb 100.00 % - 94 + 107 44 44 0 @@ -183,7 +183,7 @@

              app/models/accreditation.rb 95.65 % - 34 + 39 23 22 1 @@ -205,7 +205,7 @@

              app/models/requirement.rb 94.12 % - 26 + 30 17 16 1 @@ -215,12 +215,12 @@

              app/models/sei_process.rb - 95.83 % - 41 - 24 - 23 + 96.15 % + 50 + 26 + 25 1 - 4.21 + 4.00 @@ -554,7 +554,7 @@

              app/controllers/accreditations_controller.rb

              - 96.55% + 96.3% lines covered @@ -563,8 +563,8 @@

              - 29 relevant lines. - 28 lines covered and + 27 relevant lines. + 26 lines covered and 1 lines missed.
              @@ -626,7 +626,7 @@

              - # GET /accreditations.json + # Lista os credenciamentos criados

              @@ -642,13 +642,13 @@

              -
            • - 1 +
            • + - if current_user.role == "administrator" + # Lista todas os credenciamentos para um administrador
            • @@ -659,29 +659,29 @@

              - @accreditations = Accreditation.all + if current_user.role == "administrator"

              -
            • - +
            • + 1 - else + @accreditations = Accreditation.all
            • -
            • +
            • - @accreditations = Accreditation.where(user_id: current_user.id) + # Lista os credenciamentos próprios para um professor
            • @@ -692,18 +692,18 @@

              - end + else

              -
            • +
            • - end + @accreditations = Accreditation.where(user_id: current_user.id)
            • @@ -714,7 +714,7 @@

              - + end

              @@ -725,7 +725,7 @@

              - # GET /accreditations/1 + end

              @@ -736,18 +736,18 @@

              - # GET /accreditations/1.json +

              -
            • - 1 +
            • + - def show + # GET /accreditations/1
            • @@ -758,18 +758,18 @@

              - end + # Mostra detalhes de um registro criado

              -
            • - +
            • + 1 - + def show
            • @@ -780,18 +780,18 @@

              - # GET /accreditations/new + end

              -
            • - 1 +
            • + - def new +
            • @@ -802,7 +802,7 @@

              - end + # GET /accreditations/1/edit

              @@ -813,23 +813,12 @@

              - - -

              - -
              -
            • - - - - - - # GET /accreditations/1/edit + # Renderiza página para atualizar um registro
            • -
            • +
            • 1 @@ -840,7 +829,7 @@

            • -
            • +
            • @@ -851,7 +840,7 @@

            • -
            • +
            • @@ -862,139 +851,106 @@

            • -
            • +
            • - # POST /accreditations + # PATCH/PUT /accreditations/1
            • -
            • +
            • - # POST /accreditations.json + # PATCH/PUT /accreditations/1.json
            • -
            • +
            • 1 - def create -
            • -
              - -
              -
            • - - - - - - end -
            • -
              - -
              -
            • - - - - - - + def update
            • -
            • - +
            • + 2 - # PATCH/PUT /accreditations/1 + respond_to do |format|
            • -
            • - - - +
            • - - # PATCH/PUT /accreditations/1.json -
            • -
              - -
              -
            • - 1 - def update + # Mensagem de sucesso ao atualizar credenciamento quando condições da model forem cumpridas
            • -
            • +
            • 2 - respond_to do |format| + if @accreditation.update(accreditation_params)
            • -
            • +
            • 2 - if @accreditation.update(accreditation_params) + format.html { redirect_to accreditations_url, notice: 'Credenciamento atualizado com sucesso!' }
            • -
            • - 2 +
            • + 1 - format.html { redirect_to accreditations_url, notice: 'Credenciamento atualizado com sucesso!' } + format.json { render :show, status: :ok, location: @accreditation }
            • -
            • - 1 +
            • + - format.json { render :show, status: :ok, location: @accreditation } + # Mensagem de erro se condições da model não forem cumpridas
            • -
            • +
            • @@ -1005,7 +961,7 @@

            • -
            • +
            • 2 @@ -1016,7 +972,7 @@

            • -
            • +
            • 1 @@ -1027,7 +983,7 @@

            • -
            • +
            • @@ -1038,7 +994,7 @@

            • -
            • +
            • @@ -1049,7 +1005,7 @@

            • -
            • +
            • @@ -1060,7 +1016,7 @@

            • -
            • +
            • @@ -1071,7 +1027,7 @@

            • -
            • +
            • @@ -1082,7 +1038,7 @@

            • -
            • +
            • @@ -1093,7 +1049,7 @@

            • -
            • +
            • 1 @@ -1104,7 +1060,7 @@

            • -
            • +
            • 3 @@ -1115,7 +1071,18 @@

            • -
            • +
            • + + + + + + # Mensagem de sucesso ao excluir o credenciamento quando condições da model forem cumpridas +
            • +
              + +
              +
            • 3 @@ -1126,7 +1093,7 @@

            • -
            • +
            • 4 @@ -1137,7 +1104,7 @@

            • -
            • +
            • 2 @@ -1148,7 +1115,18 @@

            • -
            • +
            • + + + + + + # Mensagem de erro se condições da model não forem cumpridas +
            • +
              + +
              +
            • @@ -1159,7 +1137,7 @@

            • -
            • +
            • 2 @@ -1170,7 +1148,7 @@

            • -
            • +
            • 1 @@ -1181,7 +1159,7 @@

            • -
            • +
            • @@ -1192,7 +1170,7 @@

            • -
            • +
            • @@ -1203,7 +1181,7 @@

            • -
            • +
            • @@ -1214,7 +1192,7 @@

            • -
            • +
            • @@ -1225,7 +1203,7 @@

            • -
            • +
            • 1 @@ -1236,18 +1214,18 @@

            • -
            • +
            • - # Use callbacks to share common setup or constraints between actions. + # Define parametros de Credenciamento
            • -
            • +
            • 1 @@ -1258,7 +1236,7 @@

            • -
            • +
            • 7 @@ -1269,7 +1247,7 @@

            • -
            • +
            • @@ -1280,18 +1258,18 @@

            • -
            • +
            • - +
            • -
            • +
            • @@ -1302,7 +1280,7 @@

            • -
            • +
            • 1 @@ -1313,7 +1291,7 @@

            • -
            • +
            • 2 @@ -1324,7 +1302,7 @@

            • -
            • +
            • @@ -1335,7 +1313,7 @@

            • -
            • +
            • @@ -1346,7 +1324,7 @@

            • -
            • +
            • @@ -1824,7 +1802,18 @@

            • -
            • +
            • + + + + + + # Lista todos os tipos de requisitos criados +
            • +
              + +
              +
            • 1 @@ -1835,7 +1824,7 @@

            • -
            • +
            • @@ -1846,7 +1835,7 @@

            • -
            • +
            • @@ -1857,7 +1846,7 @@

            • -
            • +
            • @@ -1868,7 +1857,7 @@

            • -
            • +
            • @@ -1879,7 +1868,7 @@

            • -
            • +
            • 1 @@ -1890,7 +1879,7 @@

            • -
            • +
            • @@ -1901,7 +1890,7 @@

            • -
            • +
            • @@ -1912,7 +1901,7 @@

            • -
            • +
            • @@ -1923,7 +1912,7 @@

            • -
            • +
            • 1 @@ -1934,7 +1923,7 @@

            • -
            • +
            • 1 @@ -1945,7 +1934,7 @@

            • -
            • +
            • @@ -1956,7 +1945,7 @@

            • -
            • +
            • @@ -1967,7 +1956,7 @@

            • -
            • +
            • @@ -1978,7 +1967,7 @@

            • -
            • +
            • 1 @@ -1989,7 +1978,7 @@

            • -
            • +
            • @@ -2000,7 +1989,7 @@

            • -
            • +
            • @@ -2011,7 +2000,7 @@

            • -
            • +
            • @@ -2022,7 +2011,7 @@

            • -
            • +
            • @@ -2033,7 +2022,7 @@

            • -
            • +
            • 1 @@ -2044,7 +2033,7 @@

            • -
            • +
            • 4 @@ -2055,7 +2044,7 @@

            • -
            • +
            • @@ -2066,7 +2055,7 @@

            • -
            • +
            • 4 @@ -2077,7 +2066,18 @@

            • -
            • +
            • + + + + + + # Mensagem de sucesso ao criar requisitos quando condições da model forem cumpridas +
            • +
              + +
              +
            • 4 @@ -2088,7 +2088,7 @@

            • -
            • +
            • 4 @@ -2099,7 +2099,7 @@

            • -
            • +
            • 2 @@ -2110,7 +2110,18 @@

            • -
            • +
            • + + + + + + # Mensagem de erro se condições da model não forem cumpridas +
            • +
              + +
              +
            • @@ -2121,7 +2132,7 @@

            • -
            • +
            • 4 @@ -2132,7 +2143,7 @@

            • -
            • +
            • 2 @@ -2143,7 +2154,7 @@

            • -
            • +
            • @@ -2154,7 +2165,7 @@

            • -
            • +
            • @@ -2165,7 +2176,7 @@

            • -
            • +
            • @@ -2176,7 +2187,7 @@

            • -
            • +
            • @@ -2187,7 +2198,18 @@

            • -
            • +
            • + + + + + + # Exclui documento anexado, caso exista +
            • +
              + +
              +
            • 1 @@ -2198,7 +2220,7 @@

            • -
            • +
            • 1 @@ -2209,7 +2231,7 @@

            • -
            • +
            • 1 @@ -2220,7 +2242,7 @@

            • -
            • +
            • 1 @@ -2231,7 +2253,7 @@

            • -
            • +
            • 1 @@ -2242,7 +2264,7 @@

            • -
            • +
            • @@ -2253,7 +2275,7 @@

            • -
            • +
            • @@ -2264,7 +2286,7 @@

            • -
            • +
            • @@ -2275,7 +2297,7 @@

            • -
            • +
            • @@ -2286,7 +2308,7 @@

            • -
            • +
            • 1 @@ -2297,7 +2319,7 @@

            • -
            • +
            • 4 @@ -2308,7 +2330,18 @@

            • -
            • +
            • + + + + + + # Mensagem de sucesso ao atualizar requisitos quando condições da model forem cumpridas +
            • +
              + +
              +
            • 4 @@ -2319,7 +2352,7 @@

            • -
            • +
            • 4 @@ -2330,7 +2363,7 @@

            • -
            • +
            • 2 @@ -2341,7 +2374,18 @@

            • -
            • +
            • + + + + + + # Mensagem de erro se condições da model não forem cumpridas +
            • +
              + +
              +
            • @@ -2352,7 +2396,7 @@

            • -
            • +
            • 4 @@ -2363,7 +2407,7 @@

            • -
            • +
            • 2 @@ -2374,7 +2418,7 @@

            • -
            • +
            • @@ -2385,7 +2429,7 @@

            • -
            • +
            • @@ -2396,7 +2440,7 @@

            • -
            • +
            • @@ -2407,7 +2451,7 @@

            • -
            • +
            • @@ -2418,7 +2462,7 @@

            • -
            • +
            • @@ -2429,7 +2473,7 @@

            • -
            • +
            • @@ -2440,7 +2484,7 @@

            • -
            • +
            • 1 @@ -2451,7 +2495,7 @@

            • -
            • +
            • 3 @@ -2462,7 +2506,18 @@

            • -
            • +
            • + + + + + + # Mensagem de sucesso ao excluir requisitos quando condições da model forem cumpridas +
            • +
              + +
              +
            • 3 @@ -2473,7 +2528,7 @@

            • -
            • +
            • 4 @@ -2484,7 +2539,7 @@

            • -
            • +
            • 2 @@ -2495,7 +2550,18 @@

            • -
            • +
            • + + + + + + # Mensagem de erro se condições da model não forem cumpridas +
            • +
              + +
              +
            • @@ -2506,7 +2572,7 @@

            • -
            • +
            • 2 @@ -2517,7 +2583,7 @@

            • -
            • +
            • 1 @@ -2528,7 +2594,7 @@

            • -
            • +
            • @@ -2539,7 +2605,7 @@

            • -
            • +
            • @@ -2550,7 +2616,7 @@

            • -
            • +
            • @@ -2561,7 +2627,7 @@

            • -
            • +
            • @@ -2572,7 +2638,7 @@

            • -
            • +
            • 1 @@ -2583,18 +2649,18 @@

            • -
            • +
            • - # Use callbacks to share common setup or constraints between actions. + # Define parametros de Requisito
            • -
            • +
            • 1 @@ -2605,7 +2671,7 @@

            • -
            • +
            • 9 @@ -2616,7 +2682,7 @@

            • -
            • +
            • @@ -2627,7 +2693,7 @@

            • -
            • +
            • @@ -2638,7 +2704,7 @@

            • -
            • +
            • @@ -2649,7 +2715,7 @@

            • -
            • +
            • 1 @@ -2660,7 +2726,7 @@

            • -
            • +
            • 8 @@ -2671,7 +2737,7 @@

            • -
            • +
            • @@ -2682,7 +2748,7 @@

            • -
            • +
            • @@ -2774,7 +2840,7 @@

              - # GET /sei_processes.json + # Lista os processos e solicitações criados

            • @@ -2790,24 +2856,24 @@

              -
            • - 2 +
            • + - @all_statuses = %w[Espera Aprovado Rejeitado] + # Filtra solicitações baseadas nos estados marcados como visíveis
            • -
            • - +
            • + 2 - + @all_statuses = SeiProcess.all_statuses
            • @@ -2840,51 +2906,51 @@

              - +

              -
            • - 2 +
            • + - if current_user.role == "administrator" + # Lista todas as solicitações de credenciamento para um administrador
            • -
            • - 1 +
            • + 2 - @sei_processes = SeiProcess.where(status: @status_filter) + if current_user.role == "administrator"
            • -
            • - +
            • + 1 - else + @sei_processes = SeiProcess.where(status: @status_filter)
            • -
            • - 1 +
            • + - @my_processes = SeiProcess.where(user_id: current_user.id, status: @status_filter) + # Lista as solicitações próprias para um professor
            • @@ -2895,18 +2961,18 @@

              - end + else

              -
            • - +
            • + 1 - end + @my_processes = SeiProcess.where(user_id: current_user.id, status: @status_filter)
            • @@ -2917,7 +2983,7 @@

              - + end

              @@ -2928,7 +2994,7 @@

              - # GET /sei_processes/1 + end

              @@ -2939,18 +3005,18 @@

              - # GET /sei_processes/1.json +

              -
            • - 1 +
            • + - def show + # GET /sei_processes/1
            • @@ -2961,18 +3027,18 @@

              - end + # Mostra detalhes de um registro criado

              -
            • - +
            • + 1 - + def show
            • @@ -2983,51 +3049,51 @@

              - # GET /sei_processes/new + end
              -
            • - 1 +
            • + - def new +
            • -
            • - 1 +
            • + - @requirements = Requirement.find_by(title: 'Requisitos de Credenciamento') + # GET /sei_processes/new
            • -
            • - 1 +
            • + - @sei_process = SeiProcess.new + # Renderiza página para criação de umm registro
            • -
            • - +
            • + 1 - end + def new
            • @@ -3038,18 +3104,18 @@

              - + # Renderiza Requisitos de Credenciamento, caso existam, na página de criação de processo ou de abrir solicitação de credenciamento
              -
            • - +
            • + 1 - # GET /sei_processes/1/edit + @requirements = Requirement.find_by(title: 'Requisitos de Credenciamento')
            • @@ -3060,7 +3126,7 @@

              - def edit + @sei_process = SeiProcess.new @@ -3093,7 +3159,7 @@

              - # POST /sei_processes + # GET /sei_processes/1/edit @@ -3104,7 +3170,7 @@

              - # POST /sei_processes.json + # Renderiza página para atualizar um registro @@ -3115,12 +3181,78 @@

              - def create + def edit
              -
            • +
            • + + + + + + end +
            • +
              + +
              +
            • + + + + + + +
            • +
              + +
              +
            • + + + + + + # POST /sei_processes +
            • +
              + +
              +
            • + + + + + + # Faz o tratamento dos dados enviados pelo usuário para decidir se o registro é válido ou não +
            • +
              + +
              +
            • + 1 + + + + + def create +
            • +
              + +
              +
            • + + + + + + # Faz correções de entradas inválidas baseando-se nos dados do usuário logado +
            • +
              + +
              +
            • 4 @@ -3131,7 +3263,7 @@

            • -
            • +
            • 4 @@ -3142,7 +3274,7 @@

            • -
            • +
            • @@ -3153,7 +3285,7 @@

            • -
            • +
            • 4 @@ -3164,7 +3296,18 @@

            • -
            • +
            • + + + + + + # Mensagem de sucesso ao criar processo ou abrir solicitação quando condições da model forem cumpridas +
            • +
              + +
              +
            • 4 @@ -3175,7 +3318,7 @@

            • -
            • +
            • 6 @@ -3186,7 +3329,7 @@

            • -
            • +
            • 3 @@ -3197,7 +3340,18 @@

            • -
            • +
            • + + + + + + # Mensagem de erro se condições da model não forem cumpridas +
            • +
              + +
              +
            • @@ -3208,7 +3362,7 @@

            • -
            • +
            • 2 @@ -3219,7 +3373,7 @@

            • -
            • +
            • 1 @@ -3230,7 +3384,7 @@

            • -
            • +
            • @@ -3241,7 +3395,7 @@

            • -
            • +
            • @@ -3252,7 +3406,7 @@

            • -
            • +
            • @@ -3263,7 +3417,7 @@

            • -
            • +
            • @@ -3274,7 +3428,7 @@

            • -
            • +
            • @@ -3285,18 +3439,18 @@

            • -
            • +
            • - # PATCH/PUT /sei_processes/1.json + # Faz o tratamento dos dados modificados pelo usuário para decidir se a modificação é válida ou não
            • -
            • +
            • 1 @@ -3307,7 +3461,7 @@

            • -
            • +
            • 4 @@ -3318,7 +3472,18 @@

            • -
            • +
            • + + + + + + # Mensagem de sucesso ao atualizar processo ou solicitação quando condições da model forem cumpridas +
            • +
              + +
              +
            • 4 @@ -3329,7 +3494,7 @@

            • -
            • +
            • 6 @@ -3340,7 +3505,7 @@

            • -
            • +
            • 3 @@ -3351,7 +3516,7 @@

            • -
            • +
            • @@ -3362,7 +3527,18 @@

            • -
            • +
            • + + + + + + # Cria o credenciamento correspondente aa solicitação aprovada +
            • +
              + +
              +
            • 3 @@ -3373,7 +3549,7 @@

            • -
            • +
            • 1 @@ -3384,7 +3560,7 @@

            • -
            • +
            • @@ -3395,7 +3571,7 @@

            • -
            • +
            • @@ -3406,7 +3582,18 @@

            • -
            • +
            • + + + + + + # Mensagem de erro se condições da model não forem cumpridas +
            • +
              + +
              +
            • @@ -3417,7 +3604,7 @@

            • -
            • +
            • 2 @@ -3428,7 +3615,7 @@

            • -
            • +
            • 1 @@ -3439,7 +3626,7 @@

            • -
            • +
            • @@ -3450,7 +3637,7 @@

            • -
            • +
            • @@ -3461,7 +3648,7 @@

            • -
            • +
            • @@ -3472,7 +3659,7 @@

            • -
            • +
            • @@ -3483,7 +3670,7 @@

            • -
            • +
            • @@ -3494,18 +3681,18 @@

            • -
            • +
            • - # DELETE /sei_processes/1.json + # Decide se a exclusão do registro é válida ou não
            • -
            • +
            • 1 @@ -3516,7 +3703,7 @@

            • -
            • +
            • 3 @@ -3527,7 +3714,18 @@

            • -
            • +
            • + + + + + + # Mensagem de sucesso ao excluir processo ou solicitação quando condições da model forem cumpridas +
            • +
              + +
              +
            • 3 @@ -3538,7 +3736,7 @@

            • -
            • +
            • 4 @@ -3549,7 +3747,7 @@

            • -
            • +
            • 2 @@ -3560,7 +3758,18 @@

            • -
            • +
            • + + + + + + # Mensagem de erro se condições da model não forem cumpridas +
            • +
              + +
              +
            • @@ -3571,7 +3780,7 @@

            • -
            • +
            • 2 @@ -3582,7 +3791,7 @@

            • -
            • +
            • 1 @@ -3593,7 +3802,7 @@

            • -
            • +
            • @@ -3604,7 +3813,7 @@

            • -
            • +
            • @@ -3615,7 +3824,7 @@

            • -
            • +
            • @@ -3626,7 +3835,7 @@

            • -
            • +
            • @@ -3637,7 +3846,7 @@

            • -
            • +
            • 1 @@ -3648,18 +3857,18 @@

            • -
            • +
            • - # Use callbacks to share common setup or constraints between actions. + # Define parametros de Processo
            • -
            • +
            • 1 @@ -3670,7 +3879,7 @@

            • -
            • +
            • 9 @@ -3681,7 +3890,7 @@

            • -
            • +
            • @@ -3692,7 +3901,7 @@

            • -
            • +
            • @@ -3703,7 +3912,7 @@

            • -
            • +
            • @@ -3714,7 +3923,7 @@

            • -
            • +
            • 1 @@ -3725,7 +3934,7 @@

            • -
            • +
            • 8 @@ -3736,7 +3945,7 @@

            • -
            • +
            • @@ -3747,7 +3956,7 @@

            • -
            • +
            • @@ -4120,7 +4329,18 @@

            • -
            • +
            • + + + + + + # Define se usuário atual está logado e se é administrador do sistema +
            • +
              + +
              +
            • 1 @@ -4131,7 +4351,7 @@

            • -
            • +
            • 20 @@ -4142,7 +4362,7 @@

            • -
            • +
            • @@ -4153,7 +4373,18 @@

            • -
            • +
            • + + + + + + # Permite criação ou atualização do credenciamento por um administrador +
            • +
              + +
              +
            • 1 @@ -4164,7 +4395,7 @@

            • -
            • +
            • 17 @@ -4175,7 +4406,7 @@

            • -
            • +
            • 1 @@ -4186,7 +4417,7 @@

            • -
            • +
            • 1 @@ -4197,7 +4428,7 @@

            • -
            • +
            • @@ -4208,7 +4439,7 @@

            • -
            • +
            • 16 @@ -4219,7 +4450,7 @@

            • -
            • +
            • @@ -4230,7 +4461,7 @@

            • -
            • +
            • @@ -4241,7 +4472,7 @@

            • -
            • +
            • 1 @@ -4252,20 +4483,31 @@

            • -
            • - 1 +
            • + - def check_date + # Permite atualização com base em decorrência real de um período (data final superior a data inicial)
            • -
            • - 2 - +
            • + 1 + + + + + def check_date +
            • +
              + +
              +
            • + 2 + @@ -4274,7 +4516,7 @@

            • -
            • +
            • 1 @@ -4285,7 +4527,7 @@

            • -
            • +
            • 1 @@ -4296,7 +4538,7 @@

            • -
            • +
            • @@ -4307,7 +4549,7 @@

            • -
            • +
            • 1 @@ -4318,7 +4560,7 @@

            • -
            • +
            • @@ -4329,7 +4571,7 @@

            • -
            • +
            • @@ -4340,7 +4582,7 @@

            • -
            • +
            • 1 @@ -4351,7 +4593,18 @@

            • -
            • +
            • + + + + + + # Habilita deleção (usado por 'db/seeds.rb') +
            • +
              + +
              +
            • 1 @@ -4362,7 +4615,7 @@

            • -
            • +
            • @@ -4373,7 +4626,7 @@

            • -
            • +
            • @@ -4384,7 +4637,18 @@

            • -
            • +
            • + + + + + + # Permite deleção de credenciamento por um administrador ou caso metodo 'allow_deletion!' tenha sido chamado pela instancia +
            • +
              + +
              +
            • 1 @@ -4395,7 +4659,7 @@

            • -
            • +
            • 3 @@ -4406,7 +4670,7 @@

            • -
            • +
            • @@ -4417,7 +4681,7 @@

            • -
            • +
            • @@ -4578,7 +4842,18 @@

            • -
            • +
            • + + + + + + # Define se usuário atual está logado e se é administrador do sistema +
            • +
              + +
              +
            • 1 @@ -4589,7 +4864,7 @@

            • -
            • +
            • 26 @@ -4600,7 +4875,7 @@

            • -
            • +
            • @@ -4611,7 +4886,18 @@

            • -
            • +
            • + + + + + + # Permite criação ou atualização de requisitos por um administrador +
            • +
              + +
              +
            • 1 @@ -4622,7 +4908,7 @@

            • -
            • +
            • 23 @@ -4633,7 +4919,7 @@

            • -
            • +
            • 2 @@ -4644,7 +4930,7 @@

            • -
            • +
            • 2 @@ -4655,7 +4941,7 @@

            • -
            • +
            • @@ -4666,7 +4952,7 @@

            • -
            • +
            • 21 @@ -4677,7 +4963,7 @@

            • -
            • +
            • @@ -4688,7 +4974,7 @@

            • -
            • +
            • @@ -4699,7 +4985,7 @@

            • -
            • +
            • 1 @@ -4710,7 +4996,18 @@

            • -
            • +
            • + + + + + + # Habilita deleção (usado por 'db/seeds.rb') +
            • +
              + +
              +
            • 1 @@ -4721,7 +5018,7 @@

            • -
            • +
            • @@ -4732,7 +5029,7 @@

            • -
            • +
            • @@ -4743,7 +5040,18 @@

            • -
            • +
            • + + + + + + # Permite deleção de requisitos por um administrador ou caso metodo 'allow_deletion!' tenha sido chamado pela instancia +
            • +
              + +
              +
            • 1 @@ -4754,7 +5062,7 @@

            • -
            • +
            • 3 @@ -4765,7 +5073,7 @@

            • -
            • +
            • 1 @@ -4776,7 +5084,7 @@

            • -
            • +
            • @@ -4787,7 +5095,7 @@

            • -
            • +
            • @@ -4798,7 +5106,7 @@

            • -
            • +
            • @@ -4818,7 +5126,7 @@

              app/models/sei_process.rb

              - 95.83% + 96.15% lines covered @@ -4827,8 +5135,8 @@

              - 24 relevant lines. - 23 lines covered and + 26 relevant lines. + 25 lines covered and 1 lines missed.
              @@ -4956,7 +5264,7 @@

              - + # Lista os status possíveis para os registros

            • @@ -4967,12 +5275,67 @@

              + def self.all_statuses + + + +
              +
            • + 2 + + + + + %w[Espera Aprovado Rejeitado] +
            • +
              + +
              +
            • + + + + + + end +
            • +
              + +
              +
            • + + + + + + +
            • +
              + +
              +
            • + + + + + + # Define se usuário atual está logado e se é administrador do sistema +
            • +
              + +
              +
            • + 1 + + + + def current_user_is_admin
            • -
            • +
            • 9 @@ -4983,7 +5346,7 @@

            • -
            • +
            • @@ -4994,7 +5357,7 @@

            • -
            • +
            • @@ -5005,7 +5368,7 @@

            • -
            • +
            • 1 @@ -5016,7 +5379,18 @@

            • -
            • +
            • + + + + + + # Permite criação de processo ou solicitação caso usuário esteja logado +
            • +
              + +
              +
            • 1 @@ -5027,7 +5401,7 @@

            • -
            • +
            • 31 @@ -5038,7 +5412,7 @@

            • -
            • +
            • 1 @@ -5049,7 +5423,7 @@

            • -
            • +
            • 1 @@ -5060,7 +5434,7 @@

            • -
            • +
            • @@ -5071,7 +5445,7 @@

            • -
            • +
            • 30 @@ -5082,7 +5456,7 @@

            • -
            • +
            • @@ -5093,7 +5467,7 @@

            • -
            • +
            • @@ -5104,7 +5478,7 @@

            • -
            • +
            • 1 @@ -5115,7 +5489,18 @@

            • -
            • +
            • + + + + + + # Permite atualização de processo ou solicitação por um administrador +
            • +
              + +
              +
            • 1 @@ -5126,7 +5511,7 @@

            • -
            • +
            • 6 @@ -5137,7 +5522,7 @@

            • -
            • +
            • 1 @@ -5148,7 +5533,7 @@

            • -
            • +
            • 1 @@ -5159,7 +5544,7 @@

            • -
            • +
            • @@ -5170,7 +5555,7 @@

            • -
            • +
            • 5 @@ -5181,7 +5566,7 @@

            • -
            • +
            • @@ -5192,7 +5577,7 @@

            • -
            • +
            • @@ -5203,7 +5588,7 @@

            • -
            • +
            • 1 @@ -5214,7 +5599,18 @@

            • -
            • +
            • + + + + + + # Habilita deleção (usado por 'db/seeds.rb') +
            • +
              + +
              +
            • 1 @@ -5225,7 +5621,7 @@

            • -
            • +
            • @@ -5236,7 +5632,7 @@

            • -
            • +
            • @@ -5247,7 +5643,18 @@

            • -
            • +
            • + + + + + + # Permite deleção de processo ou solicitação por um administrador ou caso metodo 'allow_deletion!' tenha sido chamado pela instancia +
            • +
              + +
              +
            • 1 @@ -5258,7 +5665,7 @@

            • -
            • +
            • 3 @@ -5269,7 +5676,7 @@

            • -
            • +
            • @@ -5280,7 +5687,7 @@

            • -
            • +
            • diff --git a/features.html b/features.html index 81d4d1f3..184b6f21 100644 --- a/features.html +++ b/features.html @@ -303,491 +303,491 @@ + + + + + + + + + + diff --git a/ABC_Score/app/channels/application_cable/connection.html b/ABC_Score/app/channels/application_cable/connection.html new file mode 100644 index 00000000..e392760d --- /dev/null +++ b/ABC_Score/app/channels/application_cable/connection.html @@ -0,0 +1,123 @@ + + + + + + Ruby Critic - Home + + + + + + + + + + + + +
              + + + +
              +
              +
              + +
              +
              + + + Updated + + +
              +
              +

              app/channels/application_cable / connection.rb

              +
              +
              + +
              + +
              +
              +
              +
              +
              + A +
              +
              +
              +
              +
              4 lines of codes
              +
              0 methods
              +
              +
              +
              N/A complexity/method
              +
              2 churn
              +
              +
              +
              0.0 complexity
              +
              0 duplications
              +
              +
              +
              +
              +
              +
              + +
              +
              +
              + + module ApplicationCable + class Connection < ActionCable::Connection::Base
              1. ApplicationCable::Connection has no descriptive comment
              + end +end +
              +
              +
              + +
              +
              +
              + + + + + + + + + + + + + diff --git a/ABC_Score/app/controllers/accreditations_controller.html b/ABC_Score/app/controllers/accreditations_controller.html new file mode 100644 index 00000000..19248e3f --- /dev/null +++ b/ABC_Score/app/controllers/accreditations_controller.html @@ -0,0 +1,184 @@ + + + + + + Ruby Critic - Home + + + + + + + + + + + + +
              + + + +
              +
              +
              + +
              +
              + + + Updated + + +
              +
              +

              app/controllers / accreditations_controller.rb

              +
              +
              + +
              + +
              +
              +
              +
              +
              + B +
              +
              +
              +
              +
              65 lines of codes
              +
              7 methods
              +
              +
              +
              5.5 complexity/method
              +
              15 churn
              +
              +
              +
              38.2 complexity
              +
              24 duplications
              +
              +
              +
              +
              +
              +
              + +
              +
              +
              + + class AccreditationsController < ApplicationController
              1. AccreditationsController assumes too much for instance variable '@accreditation'
              2. AccreditationsController has no descriptive comment
              + before_action :set_accreditation, only: [:show, :edit, :update, :destroy] + + # GET /accreditations + # Lista os credenciamentos criados + def index + # Lista todas os credenciamentos para um administrador + if current_user.role == "administrator" + @accreditations = Accreditation.all + # Lista os credenciamentos próprios para um professor + else + @accreditations = Accreditation.where(user_id: current_user.id) + end + end + + # GET /accreditations/1 + # Mostra detalhes de um registro criado + def show + end + + # GET /accreditations/1/edit + # Renderiza página para atualizar um registro + def edit + end + + # PATCH/PUT /accreditations/1 + # Faz o tratamento dos dados modificados pelo usuário para decidir se a modificação é válida ou não + def update + respond_to do |format| + # Quando condições da model forem cumpridas, atualiza o registro no banco, redireciona para pagina index da tabela atual e mostra uma mensagem de sucesso + if @accreditation.update(accreditation_params) + format.html { redirect_to accreditations_url, notice: 'Credenciamento atualizado com sucesso!' }
              1. AccreditationsController#update calls 'format.html' 2 times Locations: 0 1
              + # Mostra uma mensagem de erro se condições da model não forem cumpridas + else + format.html { render :edit }
              1. AccreditationsController#update calls 'format.html' 2 times Locations: 0 1
              + end + end + end + + # DELETE /accreditations/1 + # Decide se a exclusão do registro é válida ou não + def destroy
              1. Similar code found in 3 nodes Locations: 0 1 2
              + respond_to do |format| + # Mensagem de sucesso ao excluir o credenciamento quando condições da model forem cumpridas + if @accreditation.destroy + format.html { redirect_to accreditations_url, notice: 'Credenciamento excluído com sucesso!' }
              1. AccreditationsController#destroy calls 'format.html' 2 times Locations: 0 1
              + # Mensagem de erro se condições da model não forem cumpridas + else + format.html { redirect_to accreditations_url, notice: 'Erro: não foi possível excluir o credenciamento!' }
              1. AccreditationsController#destroy calls 'format.html' 2 times Locations: 0 1
              + end + end + end + + private + # Define parametros de Credenciamento + def set_accreditation + @accreditation = Accreditation.find(params[:id]) + end + + # Never trust parameters from the scary internet, only allow the white list through. + def accreditation_params + params.require(:accreditation).permit(:user_id, :start_date, :end_date, :sei_proccess_id) + end +end + +
              +
              +
              + +
              +
              +
              + + + + + + + + + + + + + diff --git a/ABC_Score/app/controllers/application_controller.html b/ABC_Score/app/controllers/application_controller.html new file mode 100644 index 00000000..296eaa6f --- /dev/null +++ b/ABC_Score/app/controllers/application_controller.html @@ -0,0 +1,143 @@ + + + + + + Ruby Critic - Home + + + + + + + + + + + + +
              + + + +
              +
              +
              + +
              +
              + + + Updated + + +
              +
              +

              app/controllers / application_controller.rb

              +
              +
              + +
              + +
              +
              +
              +
              +
              + A +
              +
              +
              +
              +
              24 lines of codes
              +
              2 methods
              +
              +
              +
              2.9 complexity/method
              +
              13 churn
              +
              +
              +
              5.72 complexity
              +
              0 duplications
              +
              +
              +
              +
              +
              +
              + +
              +
              +
              + + # frozen_string_literal: true + +module Current
              1. Current has no descriptive comment
              + thread_mattr_accessor :user +end + +class ApplicationController < ActionController::Base
              1. ApplicationController has no descriptive comment
              + before_action :configure_permitted_parameters, if: :devise_controller? + + around_action :set_current_user + def set_current_user + Current.user = current_user + yield + ensure + # to address the thread variable leak issues in Puma/Thin webserver + Current.user = nil + end + + protected + + def configure_permitted_parameters + devise_parameter_sanitizer.permit(:sign_up, keys: %i[full_name role]) + end +end +
              +
              +
              + +
              +
              +
              + + + + + + + + + + + + + diff --git a/ABC_Score/app/controllers/home_controller.html b/ABC_Score/app/controllers/home_controller.html new file mode 100644 index 00000000..9f7cffe2 --- /dev/null +++ b/ABC_Score/app/controllers/home_controller.html @@ -0,0 +1,123 @@ + + + + + + Ruby Critic - Home + + + + + + + + + + + + +
              + + + +
              +
              +
              + +
              +
              + + + Updated + + +
              +
              +

              app/controllers / home_controller.rb

              +
              +
              + +
              + +
              +
              +
              +
              +
              + A +
              +
              +
              +
              +
              4 lines of codes
              +
              1 methods
              +
              +
              +
              0.0 complexity/method
              +
              8 churn
              +
              +
              +
              0.0 complexity
              +
              0 duplications
              +
              +
              +
              +
              +
              +
              + +
              +
              +
              + + class HomeController < ApplicationController
              1. HomeController has no descriptive comment
              + def index + end +end +
              +
              +
              + +
              +
              +
              + + + + + + + + + + + + + diff --git a/ABC_Score/app/controllers/requirements_controller.html b/ABC_Score/app/controllers/requirements_controller.html new file mode 100644 index 00000000..478af501 --- /dev/null +++ b/ABC_Score/app/controllers/requirements_controller.html @@ -0,0 +1,208 @@ + + + + + + Ruby Critic - Home + + + + + + + + + + + + +
              + + + +
              +
              +
              + +
              +
              + + + Updated + + +
              +
              +

              app/controllers / requirements_controller.rb

              +
              +
              + +
              + +
              +
              +
              +
              +
              + C +
              +
              +
              +
              +
              89 lines of codes
              +
              10 methods
              +
              +
              +
              5.0 complexity/method
              +
              17 churn
              +
              +
              +
              50.35 complexity
              +
              24 duplications
              +
              +
              +
              +
              +
              +
              + +
              +
              +
              + + class RequirementsController < ApplicationController
              1. RequirementsController assumes too much for instance variable '@document'
              2. RequirementsController assumes too much for instance variable '@requirement'
              3. RequirementsController assumes too much for instance variable '@requirement_id'
              4. RequirementsController has no descriptive comment
              + before_action :set_requirement, only: [:show, :edit, :update, :destroy] + + # GET /requirements + # Lista os requisitos criados + def index + # Lista todos os tipos de requisitos criados + @requirements = Requirement.all + end + + # GET /requirements/1 + # Mostra detalhes de um registro criado + def show + end + + # GET /requirements/new + # Renderiza página para criação de umm registro + def new + @requirement = Requirement.new + end + + # GET /requirements/1/edit + # Renderiza página para atualizar um registro + def edit + end + + # POST /requirements + # Faz o tratamento dos dados enviados pelo usuário para decidir se o registro é válido ou não + def create
              1. RequirementsController#create has approx 6 statements
              + @requirement = Requirement.new(requirement_params) + + respond_to do |format| + # Quando condições da model forem cumpridas, cria um novo registro no banco, redireciona para pagina index da entidade atual e mostra uma mensagem de sucesso + if @requirement.save + format.html { redirect_to @requirement, notice: 'Requisitos criados com sucesso!' }
              1. RequirementsController#create calls 'format.html' 2 times Locations: 0 1
              + # Mostra uma mensagem de erro se condições da model não forem cumpridas + else + format.html { render :new }
              1. RequirementsController#create calls 'format.html' 2 times Locations: 0 1
              + end + end + end + + # Exclui documento anexado, caso exista + def delete_document_attachment + @document = ActiveStorage::Attachment.find_by(id: params[:id]) + @requirement_id = params[:requirement_id] + @document&.purge + redirect_to edit_requirement_path(@requirement_id) + end + + # PATCH/PUT /requirements/1 + # Faz o tratamento dos dados modificados pelo usuário para decidir se a modificação é válida ou não + def update + respond_to do |format| + # Quando condições da model forem cumpridas, atualiza o registro no banco, redireciona para pagina de detalhes do registro recém modificado e mostra uma mensagem de sucesso + if @requirement.update(requirement_params) + format.html { redirect_to @requirement, notice: 'Requisitos atualizados com sucesso!' }
              1. RequirementsController#update calls 'format.html' 2 times Locations: 0 1
              + # Mostra uma mensagem de erro se condições da model não forem cumpridas + else + format.html { render :edit }
              1. RequirementsController#update calls 'format.html' 2 times Locations: 0 1
              + end + end + end + + # DELETE /requirements/1 + # Decide se a exclusão do registro é válida ou não + def destroy
              1. Similar code found in 3 nodes Locations: 0 1 2
              + respond_to do |format| + # Mensagem de sucesso ao excluir requisitos quando condições da model forem cumpridas + if @requirement.destroy + format.html { redirect_to requirements_url, notice: 'Requisitos excluídos com sucesso!' }
              1. RequirementsController#destroy calls 'format.html' 2 times Locations: 0 1
              + # Mensagem de erro se condições da model não forem cumpridas + else + format.html { redirect_to requirements_url, notice: 'Erro: não foi possível excluir os requisitos!' }
              1. RequirementsController#destroy calls 'format.html' 2 times Locations: 0 1
              + end + end + end + + private + # Define parametros de Requisito + def set_requirement + @requirement = Requirement.find(params[:id]) + end + + # Never trust parameters from the scary internet, only allow the white list through. + def requirement_params + params.require(:requirement).permit(:title, :content, documents: []) + end +end +
              +
              +
              + +
              +
              +
              + + + + + + + + + + + + + diff --git a/ABC_Score/app/controllers/sei_processes_controller.html b/ABC_Score/app/controllers/sei_processes_controller.html new file mode 100644 index 00000000..6641afcc --- /dev/null +++ b/ABC_Score/app/controllers/sei_processes_controller.html @@ -0,0 +1,220 @@ + + + + + + Ruby Critic - Home + + + + + + + + + + + + +
              + + + +
              +
              +
              + +
              +
              + + + Updated + + +
              +
              +

              app/controllers / sei_processes_controller.rb

              +
              +
              + +
              + +
              +
              +
              +
              +
              + C +
              +
              +
              +
              +
              101 lines of codes
              +
              9 methods
              +
              +
              +
              9.2 complexity/method
              +
              18 churn
              +
              +
              +
              82.78 complexity
              +
              24 duplications
              +
              +
              +
              +
              +
              +
              + +
              +
              +
              + + class SeiProcessesController < ApplicationController
              1. SeiProcessesController assumes too much for instance variable '@all_statuses'
              2. SeiProcessesController assumes too much for instance variable '@sei_process'
              3. SeiProcessesController assumes too much for instance variable '@status_filter'
              4. SeiProcessesController has no descriptive comment
              5. SeiProcessesController has at least 6 instance variables
              + before_action :set_sei_process, only: [:show, :edit, :update, :destroy] + + # GET /sei_processes + # Lista os processos e solicitações criados + def index + # Filtra solicitações baseadas nos estados marcados como visíveis + @all_statuses = SeiProcess.all_statuses + session[:statuses] = params[:statuses] || session[:statuses] || @all_statuses.zip([]).to_h
              1. SeiProcessesController#index calls 'session[:statuses]' 2 times Locations: 0 1
              + @status_filter = session[:statuses].keys
              1. SeiProcessesController#index calls 'session[:statuses]' 2 times Locations: 0 1
              + + # Lista todas as solicitações de credenciamento para um administrador + if current_user.role == "administrator" + @sei_processes = SeiProcess.where(status: @status_filter) + # Lista as solicitações próprias para um professor + else + @my_processes = SeiProcess.where(user_id: current_user.id, status: @status_filter) + end + end + + # GET /sei_processes/1 + # Mostra detalhes de um registro criado + def show + end + + # GET /sei_processes/new + # Renderiza página para criação de umm registro + def new + # Renderiza Requisitos de Credenciamento, caso existam, na página de criação de processo ou de abrir solicitação de credenciamento + @requirements = Requirement.find_by(title: 'Requisitos de Credenciamento') + @sei_process = SeiProcess.new + end + + # GET /sei_processes/1/edit + # Renderiza página para atualizar um registro + def edit + end + + # POST /sei_processes + # Faz o tratamento dos dados enviados pelo usuário para decidir se o registro é válido ou não + def create
              1. SeiProcessesController#create has approx 7 statements
              + # Faz correções de entradas inválidas baseando-se nos dados do usuário logado + mandatory_params = {'user_id' => current_user.id, 'status' => 'Espera', 'code' => '0'} + @sei_process = SeiProcess.new(sei_process_params.merge(mandatory_params)) + + respond_to do |format| + # Quando condições da model forem cumpridas, cria um novo registro no banco, redireciona para pagina index da tabela atual e mostra uma mensagem de sucesso + if @sei_process.save + format.html { redirect_to sei_processes_url, notice: 'Processo aberto com sucesso!' }
              1. SeiProcessesController#create calls 'format.html' 2 times Locations: 0 1
              + # Mostra uma mensagem de erro se condições da model não forem cumpridas + else + format.html { render :new }
              1. SeiProcessesController#create calls 'format.html' 2 times Locations: 0 1
              + end + end + end + + # PATCH/PUT /sei_processes/1 + # Faz o tratamento dos dados modificados pelo usuário para decidir se a modificação é válida ou não + def update
              1. SeiProcessesController#update has approx 6 statements
              + respond_to do |format| + # Quando condições da model forem cumpridas, atualiza o registro no banco, redireciona para pagina index da tabela atual e mostra uma mensagem de sucesso + if @sei_process.update(sei_process_params) + format.html { redirect_to sei_processes_url, notice: 'Processo atualizado com sucesso!' }
              1. SeiProcessesController#update calls 'format.html' 2 times Locations: 0 1
              + + # Cria o credenciamento correspondente aa solicitação aprovada + if @sei_process.status == 'Aprovado' && (Accreditation.find_by(sei_process: @sei_process.id) == nil)
              1. SeiProcessesController#update calls '@sei_process.id' 2 times Locations: 0 1
              2. SeiProcessesController#update performs a nil-check
              + Accreditation.create!(user_id: @sei_process.user_id, sei_process_id: @sei_process.id)
              1. SeiProcessesController#update calls '@sei_process.id' 2 times Locations: 0 1
              + end + + # Mostra uma mensagem de erro se condições da model não forem cumpridas + else + format.html { render :edit }
              1. SeiProcessesController#update calls 'format.html' 2 times Locations: 0 1
              + end + end + end + + # DELETE /sei_processes/1 + # Decide se a exclusão do registro é válida ou não + def destroy
              1. Similar code found in 3 nodes Locations: 0 1 2
              + respond_to do |format| + # Mensagem de sucesso ao excluir processo ou solicitação quando condições da model forem cumpridas + if @sei_process.destroy + format.html { redirect_to sei_processes_url, notice: 'Processo excluído com sucesso!' }
              1. SeiProcessesController#destroy calls 'format.html' 2 times Locations: 0 1
              + # Mensagem de erro se condições da model não forem cumpridas + else + format.html { redirect_to sei_processes_url, notice: 'Erro: não foi possível excluir o processo!' }
              1. SeiProcessesController#destroy calls 'format.html' 2 times Locations: 0 1
              + end + end + end + + private + # Define parametros de Processo + def set_sei_process + @sei_process = SeiProcess.find(params[:id]) + end + + # Never trust parameters from the scary internet, only allow the white list through. + def sei_process_params + params.require(:sei_process).permit(:user_id, :status, :code, documents: []) + end +end +
              +
              +
              + +
              +
              +
              + + + + + + + + + + + + + diff --git a/ABC_Score/app/helpers/accreditations_helper.html b/ABC_Score/app/helpers/accreditations_helper.html new file mode 100644 index 00000000..7e9be2fd --- /dev/null +++ b/ABC_Score/app/helpers/accreditations_helper.html @@ -0,0 +1,121 @@ + + + + + + Ruby Critic - Home + + + + + + + + + + + + +
              + + + +
              +
              +
              + +
              +
              + + + Updated + + +
              +
              +

              app/helpers / accreditations_helper.rb

              +
              +
              + +
              + +
              +
              +
              +
              +
              + A +
              +
              +
              +
              +
              2 lines of codes
              +
              0 methods
              +
              +
              +
              N/A complexity/method
              +
              1 churn
              +
              +
              +
              0.0 complexity
              +
              0 duplications
              +
              +
              +
              +
              +
              +
              + +
              +
              +
              + + module AccreditationsHelper
              1. AccreditationsHelper has no descriptive comment
              +end +
              +
              +
              + +
              +
              +
              + + + + + + + + + + + + + diff --git a/ABC_Score/app/helpers/application_helper.html b/ABC_Score/app/helpers/application_helper.html new file mode 100644 index 00000000..fbd45941 --- /dev/null +++ b/ABC_Score/app/helpers/application_helper.html @@ -0,0 +1,121 @@ + + + + + + Ruby Critic - Home + + + + + + + + + + + + +
              + + + +
              +
              +
              + +
              +
              + + + Updated + + +
              +
              +

              app/helpers / application_helper.rb

              +
              +
              + +
              + +
              +
              +
              +
              +
              + A +
              +
              +
              +
              +
              2 lines of codes
              +
              0 methods
              +
              +
              +
              N/A complexity/method
              +
              4 churn
              +
              +
              +
              0.0 complexity
              +
              0 duplications
              +
              +
              +
              +
              +
              +
              + +
              +
              +
              + + module ApplicationHelper
              1. ApplicationHelper has no descriptive comment
              +end +
              +
              +
              + +
              +
              +
              + + + + + + + + + + + + + diff --git a/ABC_Score/app/helpers/home_helper.html b/ABC_Score/app/helpers/home_helper.html new file mode 100644 index 00000000..d6aa50f4 --- /dev/null +++ b/ABC_Score/app/helpers/home_helper.html @@ -0,0 +1,121 @@ + + + + + + Ruby Critic - Home + + + + + + + + + + + + +
              + + + +
              +
              +
              + +
              +
              + + + Updated + + +
              +
              +

              app/helpers / home_helper.rb

              +
              +
              + +
              + +
              +
              +
              +
              +
              + A +
              +
              +
              +
              +
              2 lines of codes
              +
              0 methods
              +
              +
              +
              N/A complexity/method
              +
              2 churn
              +
              +
              +
              0.0 complexity
              +
              0 duplications
              +
              +
              +
              +
              +
              +
              + +
              +
              +
              + + module HomeHelper
              1. HomeHelper has no descriptive comment
              +end +
              +
              +
              + +
              +
              +
              + + + + + + + + + + + + + diff --git a/ABC_Score/app/helpers/requirements_helper.html b/ABC_Score/app/helpers/requirements_helper.html new file mode 100644 index 00000000..035b9f1f --- /dev/null +++ b/ABC_Score/app/helpers/requirements_helper.html @@ -0,0 +1,121 @@ + + + + + + Ruby Critic - Home + + + + + + + + + + + + +
              + + + +
              +
              +
              + +
              +
              + + + Updated + + +
              +
              +

              app/helpers / requirements_helper.rb

              +
              +
              + +
              + +
              +
              +
              +
              +
              + A +
              +
              +
              +
              +
              2 lines of codes
              +
              0 methods
              +
              +
              +
              N/A complexity/method
              +
              2 churn
              +
              +
              +
              0.0 complexity
              +
              0 duplications
              +
              +
              +
              +
              +
              +
              + +
              +
              +
              + + module RequirementsHelper
              1. RequirementsHelper has no descriptive comment
              +end +
              +
              +
              + +
              +
              +
              + + + + + + + + + + + + + diff --git a/ABC_Score/app/helpers/sei_processes_helper.html b/ABC_Score/app/helpers/sei_processes_helper.html new file mode 100644 index 00000000..43f990c4 --- /dev/null +++ b/ABC_Score/app/helpers/sei_processes_helper.html @@ -0,0 +1,121 @@ + + + + + + Ruby Critic - Home + + + + + + + + + + + + +
              + + + +
              +
              +
              + +
              +
              + + + Updated + + +
              +
              +

              app/helpers / sei_processes_helper.rb

              +
              +
              + +
              + +
              +
              +
              +
              +
              + A +
              +
              +
              +
              +
              2 lines of codes
              +
              0 methods
              +
              +
              +
              N/A complexity/method
              +
              1 churn
              +
              +
              +
              0.0 complexity
              +
              0 duplications
              +
              +
              +
              +
              +
              +
              + +
              +
              +
              + + module SeiProcessesHelper
              1. SeiProcessesHelper has no descriptive comment
              +end +
              +
              +
              + +
              +
              +
              + + + + + + + + + + + + + diff --git a/ABC_Score/app/jobs/application_job.html b/ABC_Score/app/jobs/application_job.html new file mode 100644 index 00000000..42d7398c --- /dev/null +++ b/ABC_Score/app/jobs/application_job.html @@ -0,0 +1,121 @@ + + + + + + Ruby Critic - Home + + + + + + + + + + + + +
              + + + +
              +
              +
              + +
              +
              + + + Updated + + +
              +
              +

              app/jobs / application_job.rb

              +
              +
              + +
              + +
              +
              +
              +
              +
              + A +
              +
              +
              +
              +
              2 lines of codes
              +
              0 methods
              +
              +
              +
              N/A complexity/method
              +
              2 churn
              +
              +
              +
              0.0 complexity
              +
              0 duplications
              +
              +
              +
              +
              +
              +
              + +
              +
              +
              + + class ApplicationJob < ActiveJob::Base
              1. ApplicationJob has no descriptive comment
              +end +
              +
              +
              + +
              +
              +
              + + + + + + + + + + + + + diff --git a/ABC_Score/app/mailers/application_mailer.html b/ABC_Score/app/mailers/application_mailer.html new file mode 100644 index 00000000..8f3bd09a --- /dev/null +++ b/ABC_Score/app/mailers/application_mailer.html @@ -0,0 +1,123 @@ + + + + + + Ruby Critic - Home + + + + + + + + + + + + +
              + + + +
              +
              +
              + +
              +
              + + + Updated + + +
              +
              +

              app/mailers / application_mailer.rb

              +
              +
              + +
              + +
              +
              +
              +
              +
              + A +
              +
              +
              +
              +
              4 lines of codes
              +
              0 methods
              +
              +
              +
              N/A complexity/method
              +
              2 churn
              +
              +
              +
              0.0 complexity
              +
              0 duplications
              +
              +
              +
              +
              +
              +
              + +
              +
              +
              + + class ApplicationMailer < ActionMailer::Base
              1. ApplicationMailer has no descriptive comment
              + default from: 'from@example.com' + layout 'mailer' +end +
              +
              +
              + +
              +
              +
              + + + + + + + + + + + + + diff --git a/ABC_Score/app/models/accreditation.html b/ABC_Score/app/models/accreditation.html new file mode 100644 index 00000000..f0873416 --- /dev/null +++ b/ABC_Score/app/models/accreditation.html @@ -0,0 +1,158 @@ + + + + + + Ruby Critic - Home + + + + + + + + + + + + +
              + + + +
              +
              +
              + +
              +
              + + + Updated + + +
              +
              +

              app/models / accreditation.rb

              +
              +
              + +
              + +
              +
              +
              +
              +
              + A +
              +
              +
              +
              +
              39 lines of codes
              +
              5 methods
              +
              +
              +
              5.2 complexity/method
              +
              8 churn
              +
              +
              +
              26.1 complexity
              +
              0 duplications
              +
              +
              +
              +
              +
              +
              + +
              +
              +
              + + class Accreditation < ApplicationRecord
              1. Accreditation assumes too much for instance variable '@allow_deletion'
              2. Accreditation has no descriptive comment
              + belongs_to :user + belongs_to :sei_process + validates :sei_process, uniqueness: true + + validate :check_role, on: [:create, :update] + # Define se usuário atual está logado e se é administrador do sistema + def current_user_is_admin
              1. Accreditation#current_user_is_admin doesn't depend on instance state (maybe move it to another class?)
              + Current.user != nil && Current.user.role == 'administrator'
              1. Accreditation#current_user_is_admin calls 'Current.user' 2 times
              + end + # Permite criação ou atualização do credenciamento por um administrador + def check_role + unless current_user_is_admin + self.errors.add(:base, 'Usuário sem permissão') + return false + end + true + end + + validate :check_date, on: :update + # Permite atualização com base em decorrência real de um período (data final superior a data inicial) + def check_date + if (start_date == nil) || (end_date == nil) || (end_date < start_date)
              1. Accreditation#check_date performs a nil-check
              + self.errors.add(:end_date, 'inválida') + return false + end + true + end + + before_destroy :check_permission + # Habilita deleção (usado por 'db/seeds.rb') + def allow_deletion!
              1. Accreditation has missing safe method 'allow_deletion!'
              + @allow_deletion = true + end + # Permite deleção de credenciamento por um administrador ou caso metodo 'allow_deletion!' tenha sido chamado pela instancia + def check_permission + throw(:abort) unless @allow_deletion || current_user_is_admin + end +end +
              +
              +
              + +
              +
              +
              + + + + + + + + + + + + + diff --git a/ABC_Score/app/models/application_record.html b/ABC_Score/app/models/application_record.html new file mode 100644 index 00000000..f884e370 --- /dev/null +++ b/ABC_Score/app/models/application_record.html @@ -0,0 +1,122 @@ + + + + + + Ruby Critic - Home + + + + + + + + + + + + +
              + + + +
              +
              +
              + +
              +
              + + + Updated + + +
              +
              +

              app/models / application_record.rb

              +
              +
              + +
              + +
              +
              +
              +
              +
              + A +
              +
              +
              +
              +
              3 lines of codes
              +
              0 methods
              +
              +
              +
              N/A complexity/method
              +
              4 churn
              +
              +
              +
              0.0 complexity
              +
              0 duplications
              +
              +
              +
              +
              +
              +
              + +
              +
              +
              + + class ApplicationRecord < ActiveRecord::Base
              1. ApplicationRecord has no descriptive comment
              + self.abstract_class = true +end +
              +
              +
              + +
              +
              +
              + + + + + + + + + + + + + diff --git a/ABC_Score/app/models/requirement.html b/ABC_Score/app/models/requirement.html new file mode 100644 index 00000000..927c2725 --- /dev/null +++ b/ABC_Score/app/models/requirement.html @@ -0,0 +1,149 @@ + + + + + + Ruby Critic - Home + + + + + + + + + + + + +
              + + + +
              +
              +
              + +
              +
              + + + Updated + + +
              +
              +

              app/models / requirement.rb

              +
              +
              + +
              + +
              +
              +
              +
              +
              + A +
              +
              +
              +
              +
              30 lines of codes
              +
              4 methods
              +
              +
              +
              3.5 complexity/method
              +
              9 churn
              +
              +
              +
              14.09 complexity
              +
              0 duplications
              +
              +
              +
              +
              +
              +
              + +
              +
              +
              + + class Requirement < ApplicationRecord
              1. Requirement assumes too much for instance variable '@allow_deletion'
              2. Requirement has no descriptive comment
              + validates :title, presence: true, uniqueness: true + has_many_attached :documents + + validate :check_role, on: [:create, :update] + # Define se usuário atual está logado e se é administrador do sistema + def current_user_is_admin
              1. Requirement#current_user_is_admin doesn't depend on instance state (maybe move it to another class?)
              + Current.user != nil && Current.user.role == 'administrator'
              1. Requirement#current_user_is_admin calls 'Current.user' 2 times
              + end + # Permite criação ou atualização de requisitos por um administrador + def check_role + unless current_user_is_admin + self.errors.add(:base, 'Usuário sem permissão') + return false + end + true + end + + before_destroy :check_permission + # Habilita deleção (usado por 'db/seeds.rb') + def allow_deletion!
              1. Requirement has missing safe method 'allow_deletion!'
              + @allow_deletion = true + end + # Permite deleção de requisitos por um administrador ou caso metodo 'allow_deletion!' tenha sido chamado pela instancia + def check_permission + unless @allow_deletion || current_user_is_admin + throw(:abort) + end + end +end +
              +
              +
              + +
              +
              +
              + + + + + + + + + + + + + diff --git a/ABC_Score/app/models/sei_process.html b/ABC_Score/app/models/sei_process.html new file mode 100644 index 00000000..7e1544da --- /dev/null +++ b/ABC_Score/app/models/sei_process.html @@ -0,0 +1,169 @@ + + + + + + Ruby Critic - Home + + + + + + + + + + + + +
              + + + +
              +
              +
              + +
              +
              + + + Updated + + +
              +
              +

              app/models / sei_process.rb

              +
              +
              + +
              + +
              +
              +
              +
              +
              + A +
              +
              +
              +
              +
              50 lines of codes
              +
              6 methods
              +
              +
              +
              3.2 complexity/method
              +
              10 churn
              +
              +
              +
              18.99 complexity
              +
              0 duplications
              +
              +
              +
              +
              +
              +
              + +
              +
              +
              + + class SeiProcess < ApplicationRecord
              1. SeiProcess assumes too much for instance variable '@allow_deletion'
              2. SeiProcess has no descriptive comment
              + belongs_to :user + has_many_attached :documents + validates :documents, attached: true + + enum status: { + Espera: 0, + Aprovado: 1, + Rejeitado: 2 + } + # Lista os status possíveis para os registros + def self.all_statuses + %w[Espera Aprovado Rejeitado] + end + + # Define se usuário atual está logado e se é administrador do sistema + def current_user_is_admin
              1. SeiProcess#current_user_is_admin doesn't depend on instance state (maybe move it to another class?)
              + Current.user != nil && Current.user.role == 'administrator'
              1. SeiProcess#current_user_is_admin calls 'Current.user' 2 times
              + end + + validate :check_signed_in, on: :create + # Permite criação de processo ou solicitação caso usuário esteja logado + def check_signed_in + if Current.user == nil
              1. SeiProcess#check_signed_in performs a nil-check
              + self.errors.add(:base, 'Usuário sem permissão') + return false + end + true + end + + validate :check_role, on: :update + # Permite atualização de processo ou solicitação por um administrador + def check_role + unless current_user_is_admin + self.errors.add(:base, 'Usuário sem permissão') + return false + end + true + end + + before_destroy :check_permission + # Habilita deleção (usado por 'db/seeds.rb') + def allow_deletion!
              1. SeiProcess has missing safe method 'allow_deletion!'
              + @allow_deletion = true + end + # Permite deleção de processo ou solicitação por um administrador ou caso metodo 'allow_deletion!' tenha sido chamado pela instancia + def check_permission + throw(:abort) unless @allow_deletion || current_user_is_admin + end +end +
              +
              +
              + +
              +
              +
              + + + + + + + + + + + + + diff --git a/ABC_Score/app/models/user.html b/ABC_Score/app/models/user.html new file mode 100644 index 00000000..b1e92988 --- /dev/null +++ b/ABC_Score/app/models/user.html @@ -0,0 +1,132 @@ + + + + + + Ruby Critic - Home + + + + + + + + + + + + +
              + + + +
              +
              +
              + +
              +
              + + + Updated + + +
              +
              +

              app/models / user.rb

              +
              +
              + +
              + +
              +
              +
              +
              +
              + A +
              +
              +
              +
              +
              13 lines of codes
              +
              0 methods
              +
              +
              +
              N/A complexity/method
              +
              7 churn
              +
              +
              +
              0.0 complexity
              +
              0 duplications
              +
              +
              +
              +
              +
              +
              + +
              +
              +
              + + # frozen_string_literal: true + +class User < ApplicationRecord
              1. User has no descriptive comment
              + validates :full_name, presence: true + validates :role, presence: true + + # Include default devise modules. Others available are: + # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable + devise :database_authenticatable, :registerable, + :recoverable, :rememberable, :validatable + + enum role: %i[administrator secretary professor student] +end +
              +
              +
              + +
              +
              +
              + + + + + + + + + + + + + diff --git a/ABC_Score/assets/fonts/FontAwesome.otf b/ABC_Score/assets/fonts/FontAwesome.otf new file mode 100755 index 0000000000000000000000000000000000000000..401ec0f36e4f73b8efa40bd6f604fe80d286db70 GIT binary patch literal 134808 zcmbTed0Z368#p`*x!BDCB%zS7iCT}g-at@1S{090>rJgUas+}vf=M{#z9E1d;RZp( zTk)*csx3XW+FN?rySCrfT6=x96PQ4M&nDV$`+NU*-_Pr^*_qjA=9!u2oM&cT84zXq}B5k!$BD4Vu&?bM+1pscNs?|}TanB=Gw z>T*v6IVvN? z<7If|L2rZi0%KIN{&DZI4@2I75Kod~vRI*C@Lrk$zoRI`^F$Oyi5HuU*7@mriz!*p z<-;A`Xy{#P=sl02_dFc|Je%0lCgxR=#y~GBP(blD-RPP8(7$Z9zY}6%V9+^PV9-}S zeJrBBmiT&{^*|I7AO`uM0Hi@<&?Gbsg`hd;akL06LCaAD+KeKR9vM(F+JQ1r4k|#^ zs1dcJZgd2lM9-ss^cuQ?K0u$NAJA{;Pc%#+ibshkZ%Rq2DJ}Id^(YlWJx)DIMNpAc z5|u*jq{^s9s)OpGj#8(nv(yXJOVn%B73xFkTk0q37wW$hrbawy4?hpJ#{`cMkGUR8 zJl1$@@QCv;d1QK&dhGIO_1Npt2c7Ttc++FR<7`t1o^76cJ&$`{^t|GE>K)k3GNh{I92zC*(@N#&?yeeKjuZ6dlx1V>2carxUub+37cb#{GcawLQFW@Wryy^!4biE!Rvyz z1Ro2&68s>zBluk~A`}Rv!iR*c@Dbr8VURFXxJ0-?Xb@%!i-a}8CSkYmfbf{`wD2Y2 zHQ|TCuZ2Gd?+E`8Iz?iUS~N~HT@)&sEqYwENVHt^j3`EwC^CsML}j8zQLCs&bWn6u zbWZe&=$hzV(PyIXMgJ8IdI`P!y)<59y>wnnyw-WednI|Lc%^yedzE{&dmZ&U;dS2Y zC9k)=KJoh6>nE?fUc)p+Gqf+QqQ}#Z(Ua+EbTA!ChtYHBC+G$AVtOSVNypHsw2f|| z57Ecylk_F}HTnwuKK%v#9sN5!#306#5i&|f&5UPs%mQXL6UD?a$&8iBWb&C3W*5`Q zv@>1IKIR~ElsV0uWu9j)F|RV0nGcyynO~Sc#7N8&dy5s~(c*F9N5zxH)5SV*n0T&u zzW7P;)8bX)2=RLHX7M(0tk@t<5~ql*;tX-NIA2^QwuyI%8^q1xc5#<@ulRuYi1@hp zwD_F(g7_uz8{)Uc?~6Yae=7b${Ehf~@h$Nk@$ce$;z9ASgp!CPGKrr=CDBO6NhV2x zB{L+mB~M7gB}*jBBr7HBBpW4LCDD>N$##iRVwR*yvLv~ZLP@ElQc@#nl(b4ZC3__M zB!?u&Bqt@$NzO|yNnVz`E_qY(w&Z=uhmubvUr4@@d@s2rxg+^qa!)cS8J1E~zSK)9 zk@`rL(f}zd9W5OveN;MGI$f%hhDqm2=Svq!mr7Si*GSh%H%hlkqor}u?NX!EEKQSU zNpq!z(o$)qv_@JlZIZT0cT0Pu`=y7aebQ6Xv(gu&FG^pLz9GFTeMkC%^dspF>6g-P zrT>xsB>hGDhxAYBkaR@mArr`GnN;R0^OLD$8rc}xc-dpJDY770sBD((aoGadV%bvJ z3fUUjI@w0qR#~(xPPScUl$m8|vMgDytWZ`etCZEq>Sax`HrZ}jk8Ho}u&ht^oa~~k zU-p{pitJt4N3t8TFJ<4#{v-QI_KWNf*`Kl@*@(A?x4@hBmU{bo`+2LpHQr;q$9q5K zJ;gi7JIs5Y_Y&_F-p_b%_Kxx1?!Ci1!#mHr)Vtc-?%nR)<9*2cg!eh`7rkHie#`s1 z_YLoFynpom)%#EHVIQ6kPx>cKQ_h zRQS~TH2duK+2?cA=d{lYJ}>)R@p;$hBcCsPzVo^5^M}u%FY*=oN_~BO1AIsMPVk-L ztMi@Xo9LSspA==WB&S*uVl4V7bBsZ6Ow%WsQuJUl%vOsv%FNx7`s5UAW~xPRj!Q^N zwi+UnqRjDntAR@;SgfW*vp(6Brq42&k|Pt0u7@erYKn`qB*Yt|l44BpR&$iaU;sM- z4d^4IlC0K*WWCuG6&q_xHzvW8D|?VmP2oxsjM1iyl%%N4$e09kOp@NLPtiwN&H6aA z-eTa;a#fN{F^O?WQSqF~OEH*?dP|xqDK%Li3CQoKxK{5cQ&V=BV@$F7Xc#FxtWojs zXNfkM61h7$%AA;DPB2qoM4Ov7+011Nf%sPRE(aRk;t@!SiLC) z(4}(2HO9bnN2Nq^J%e^*xrU$#s~$RKF+`d5K(ClYZt5*oeM)3>R7_%elsPso3MS`4 z=E0Mj$&@IdAbalxm6OD4U#Myq|K@ z-&JTzbUk*Y0-^+{&H*ME<4mrECC04R8!ZMC(2?u*ebPc5H;tpCU=m%_jxw7~>F%j@ zrQFl$N~Wf`Uvh+X%>u^=z!V8t`pCG{q@?>vOLA0Fl0G9QDJnVY@1Ddb#95Q{QE_nz z(2-1F6PRS~8IxqP=wV8rtMRU$!gLw+F;Pi+V=Q2cGRB&cV@%1(K)mFrc%%OB*-1@# zFgILx%zA6OUJtY}rKE5z#efjS0T1cTZVdO+9M=22Ow*gK34rH*)?hLxWC7zvB>|5{ z#sH12*7O8mIkT%*9G`Hk>dLs;G!k%{O^NzUkTT2tE?TUH)Z}POWNL~_)Z7`ae_Ylj z(7?KJE)jQ&Hb*3o*rWtwBJh@*Xep@{0}KNAUT+2=21z$2x`_$+QVf~#34kTq)f2bC zy5teaYIF&ri#6S?KM*c=&h^$+?f%Ff49eYLDyV~)MBo$Pac=%%%@&IxHZ~dv3zK7v z)+Z&!aB~(1vu4#BfHILT-f*QjQFJ9zQ(O;j%x->){2xR8tH4$FUnM|M7YE+2!8H+| zWQx|On?W8yq%DaSP+~AC(dGnwTuhWj&oP~wvyCRJen%=uy)iDqm|)FJ(pxO9f_SqD zCJAN`7%eq6S|0`S9FuB|F{OY|rnuN6A;l5}g3RfWXkb3jsU|ZpPHK`V$znApB!a$$ zM&b>rphC>h6sWK0Bt38=XbW>{Od`+XNK_^W~`uM1%SkU{?CLrT| z*5rU5a4DAt4QsU|SYaF~z_MnbZd3}WFFoi`11Pc7q-YRfpk=(?HFGY!oON*L+>FN= zrpV-2sAV;nKn7Cumed63yhYD(iyLEHoL(PiGR3;=k4uAd$Ws$QzZ>JBRtl%)qmlt( zlrcu1tdC7hu*PwHfTp+Wtez}SISAlE3{#BBi@~MV=s9VU~oa*A29jU;4uHLv)t`=cj zMkBD=0}Gn;Kx|?3|5QxeB>h7H-63>M1rORUPw)_81!IgVnE33zbVFL~|4d{TmH>B{(ST?=mZBvFKDQ zs6e71u%5ZNZgM&lh)@6d3N{!aL268{00aWAef0lv1i^_}z`hyP% zyasc1UyCFdAscUwN{$1kE)jexW8Cx^)1woB65NEk+OUEqN;12DT?I)dX#Iaq$3L>1 z0{Z(M#~c61xyK|v7Q!EnR;&(y&k3ik}S zXTlwpYD`!>eg3q#=~2@ogTnwcEEv)N8U~)gNue|5Zu9Vhq$UQ zm=4KMxM#pU6K(*VJ`HXtpAMkY0d#r@+&Z`cZaTnC2e|2O?BUZ~t%L(~5I_e3bPzxX z0dx>R2LW^tKnFpq!O&_jzy$+bFu(=7JFw8*!oumUh8A)!p+c~``Gq=nX{h@Ft%X3% z5Wo-u7(xI;2v-IbLfjP=0TLY`(Lp;p0M!Ag4nTDPssm6Rfa;(#p#T>OaG?Mf3UHzB z&MfAN0W@?*-1IoE7(i!0*$e=k0iZLWYz8zr1Dc!>3NSJ7geGSI+)RL*32;EO5TIEI z&@2RK76LR20h)yX%|d1ZTo}NG0UQu4Bn;rfLgIqB84nAECszh=Krr33X>d=6I|%Mz zxI^I9!5s?s47g{)9hRo&)&V*omkuiHfLuBtmk!9K19ItrTsk0^ZaOp=1PulO91uze zgwg?_bU-K_5K0Gx(gC4#Kqws$N(Y3}0ikq2C>;pDE*Ri~0WKKefIhllfC~Y*5P%B- zI3SA-$f5(X=zuIbAd3#jq6+~y9l!xibU+gw&_o9`(E&|#KocF%L`hz;)DWmLP3;5fv}-Kn^2%lD9|PpXcG#w z2?g4O0&PNpHlaY9P@qjH&?XdU6AH8m1=@rHZ9;)Ip+K8ZpiO9yi^YTHyZbQTB``tr zgIpb(AMAd(*f?muyEF4$ViPofhWp)2_v3ym^WC`x?nk)$vC#ck*h}=pfDBO)G+>I#QjVRoW zDBO)G+>I#QjVRoWDBO)G+>I#QjVRoWDBO)G+>OYsYl7UmCTO7>(Ly((g>FP{jT5xc zjcB18(Ly((g>FO(-G~;t5iN8hTIfc!(2Z!3d+HXsN3_U|XptMyA~&K%?h!3=BU%JB z4s&B!kI%_aQR>IrR=x#+$+m z;mzdD<1ON?aK+rWLd3m{XXDlKF7tlj5kBJc_#(bPKaf9_AIz`iH}m)K`}oiCFYx>M zm-%n=-{;@vV?KeH`Llwpf*3)(AW4u1G4l#RpWvL}qTr5jrf`mMv2dxdS=b@mD?BVb zC463ZN%*qxvhY3O_rhO=4pE>e9OBP801EGXWnOSFyAwG zTv6*$;wj=_@l5eN@nZ2Zh*qaSY`R=r4N>V1@qY0M@g?y!@q6OWAO?L){EI{=882BR ziIpTnM7d02lhi{L`JCic$vcvdC7(mg_&<_gB)>zHn1$%@bchNskS>9k@H5g)QoS@! z+A2K_vEG-ZuS?&8IPWLY-yx#=u>zUPB{q&{POCP9RCmd^r+u&(rp@QL@y@~QS|_v!Z8?{m!OIiHIVSH0@lOL9!ke`vC zm%k`~TmGs1M>&>{C?twN#iNRuig}8ainWUMip`2>g+Y;`$W@dm8Wf$1Ud1uRDa8fF z%Zkg2w-oOyK2dzBxT(0M_(gG7NhzgDwQ`Jdsxm}5Tls`?vGQr%R{`icA`e!hMW`33q-@SEfp919`B@V$_Hqg<(g&v8BX9I=vHqtmmC?CQiTI)~<@i|)VblQ3H8$=5wV+lKpUN(tkX3=CokeSoksl^f7X+{TA zIF)6dh2AY2%Q6!H89e$99_(Y*(NEJ_CXL1~&@gHZ!{tKhI3Nu-(Ha=IyBUSBv$eHT zgB60#)|^Z&R`8NoCM!ETi&2iFnc+MaF`j>W($I9M|{Fdn9I0?i2Fo&$U{Z$8c3Z@s||tuw%~3Wi@-Qn;%~T~t_BQle$H z(%4@xz~aD7*k|q?4X(!xeC$IzBLc~&skAbfW@1}K{oBs2(=e?$os8k2kr~4h zJ2O0>T)++~{L*NRd_Vq^9U6!SiC8JPP*C~V5;d_4fTOkv@S@>s{2b%v$CGe8J!BW$ zWJe|m8oOG%dsIDzy=8keLkF>xe{|R014mR+Y`{OWCs<;@^T<4GVD_^hV!}nQuYO;{ z5XCB*xT4s7O{^guzsd)gfXJQqzy2L25&H1IC#;IT7k4stQAl`4B!EN5{B z%pdSc|Jk$sj4=3m_)QJ7aLt;9j9?+l;Lq7qmdS+Ivq3g^vuWr9Ori3g?wip|f$O8$ zKoRc7K@j_H<&QM^hJ3>(Z90(msVr_2V938oGun{|A+`@ijA8@%`OHKb zX4RUNno+1Fsm@K#$_0FLSyEoIDzhc4IalLA zb%1SMvT*GQkdEyv6C56npQmv*NZ^3*=Jo3^6G|OS!ffJ!A0cyp)U<7ESpTewESXBe z$ZR6j5FVLIBA1gywK2K6+Nce~K6us!{FM628+DDZYQJ1{Yuj%-_7@*4Jyh0S(blr7 zQ-nqAuHCuK`7N>MB2OiJDPqjMF*dWAQ9BcC&ID(IiorKn=&gOoj_sZd&SY^p4GIN6 z$ujr8`Q{!onZ=4VG(+JDv?mkDM~vf;4L=7e7Nj%+!^8^nu>vGj-o{J^t(iXu^z1a6 z0mZ>6lSYiTBz1Onc}b2oGRqXbRTVgdgMEsSh7)?(We#mOJJ+mOJP0 z(|Qi(A6B=uRoAs@&vhI)^SmmM?4jyV%qZQ#(?JiOp< zO{!&p^j-9@LQu~-JXr0BLP+N0wPX}7F42$#vX!5n)@nGY9y%j9*xJ{XrX>k@D<2ov z;k9@ap064LgRzKg!4DG~FhVD&S$f$cv~yq~%`67qSK?$420t)W6Gjt0(Gb6%U_j&E zc%%E!0Zp~w;f&=Ih*)jhQCFX?&9BMdRk$mb@co-hTT9zZMTPrL6hE)Vh1dg|@K!K* zTZoNO{z3a$X(ofl(}7b#UtVCzXvSV&Z`U&KzyA9B4F4p{ELy#Kk(SYcNpULjSf-&I zC$NOGes#q~y9(8uDPS^NbFd%F(Htv)nK+TfCuw38tlM_BUwZ`qLE~4!4&lS}a0Gsy z)i@LaJOb1^3B(c{rnOE5SBkCp2Rcz0O>36T0c(Z(aF&Ay)hz3moP-^ynaT#zZENX=Dem$rBj#FkIX-f$24$w)OS~yvH)( z;A7l3ngKsZp>)h9ckmtOY_fr@okIf1XkZJh%-n6NwH5?e3U*p|sN8HWU{vQg zCL+RkEEHe`i*@)@mf6%Uu+exiEpRDX8aihIL)OnReaLhgw+fiIp;iYz59ArZ1N^$W z8he9^5ti4N)s@r@Zyem{Z|+Sm1c_1NM_Js=uBDk{aG(Y}0$W-k%aA^j1y>(PYAw(T z+zKnO1%98!@D$>A;fbvRM)^KWHGP|@VZn;bpoa!(Sl4WS1|n(q!%|jb6E0=7PP@Zy zghoFgO>licKEUwAAHdZF*9VMpB6Jp?IRcHAdma(6LTQ!$uG!tPgz^r867LH@VA>{RgLukD%WQ6OsZCj^x4qz~8LrOebNhkr? zhA-l$aTnNsJcl$2$S9Iwjw&rKE3POGC>Jna&>Jp23*GpIQ^=f)f@R}>BQhZ34VuY? zuC(OB3vdOMU^W>c_GFn)xdG!Q_8Z-3M%jIh-&wc2wL|T=E9h*@$t=;PE#qgFWaMP2 zop%M91+ATRTE++?hk@I073jMNb_UCs&9<0cGt&Zt&uwAA!5GR1s|QvN61bM;yqFCe zz`4P-q;?feYH=;olG|l#X$fGIj>qtqNu8Y&vpO-(hm zc5O#vb9>EhY+ptD@9Hhso7N_RG2mP_3t9*N6mMs3^hANHvM2Ut83!nEPIqgioI}Ap z1!jzd;1ZSz)l6Zhy;JQJHyHgbL5aKZA zb(hGdvC@4#?Ry)wjXk9YGCG;OyqzUk>a3l0&3WL4tcPibPCGDuVP>#WUrwqV58>0~87#&v_za1|68Z4FK;8kSI~i6PbuJ&@4!#2{Vqkt@6*CBW zq^@pPT}^!eGrVzlV@XL_NqKPqQ_g}FCW-|#)7xu1ZSDo{#df;4m&vN%*__AV_vnc< ztWQ9f&-r{KOo>#5r5CZsjn6eVW?h8olB$@4yBkiYA0i8Ii+|h6)AqA!ybzBiW646s z&sK&@$s>5K20Z3KVyGY+Z7N$isbziwvcf!l0qZni2*D?ux8bmZ{_kk7Z*FE>ejwv4 zbdHCs&{^n!r=t+A@o*I~+Qz*6`kiWWejWLhq>&kaPQ)SF!4UxyB<#v;-jSl>Gy!K9 z_c!nB>ePHEWR}vf9AoeXS}I(AX~Ua%53qTT!;@|Wis8qh2iyWg3#%=of#GLn7MRT{ zbECO46BI#;)taIiFG#WW?AHQuh+RiB*5cfVZ=^pjXXMwjsOc zkew0cLXVfj0@@R=uF#&k)P3!ms3YH}Sa6as z-+zA+GXolCB%%>8a~>xQfqOv4<#Gf8qw+ZQUkE=Sl(6)xtKZdNR{`&U2{nTY%Z=Gy zQU@?kaW+rLjjCYpK2>ky-cG170gvZ*bTZ5S3j(38Pj8ECkL-!*sp+ZT(;%wrtK`(y z01g4q*A56nU{!-dJel_Py5?r>pr_+!zTJ*f@D^OGV%D(a3?88IT_J;)u-qaoyN@E#8N z^ERHLWduYvems$BhX*iN))}m0fC1Zjm{SewU=_fC!sS8&%w(Ed<}e?+tO*DVTnibc zjb?5OCxLy>IcnXjVQj0odcrtYOZ@ACHWTkB^Kz9)IrK@#E)UG?-_@ zyb8?I6c$t!s-r5ImuYEjb4^RDid!giOzq+bATcBw*$R$JIHO+5-eYcF4-aNs#yc&Z9}$OTab3Op!K zsi#?r5kN3(ctA*k8KJ|2W*Y1@b#+WBhy@XXJaSCQxr>XI5JASqMq`;Kld-bAz#$00 ztpcFt_QsBe-J-5)tZZ$AWh9Fys_?{Bn4R>8<~U#wLVSWzwKg=i)@Xj{dgtn?uS85y zNkc=G_ASRGep6Lr12>{F&gJADOr+tAHu+dj#*69~_v}8z2!d$r2jgt0YpT~ab=W(b zJ47G74Bb=05~M-RRIo}0>@4_3J@h$l%(1K^1eme4Lj_D}-_=l8r>SE?z=CZ86S8e& zIUj#3z}tqF^W95v5&=;zj_qMSouCH^rw1L}n$iK99dvpj=Sq}-Dj0CFsFSua$FYND zPO;olnE~&00?SOH$8oJ(gUJSmPspUu-~}@~tUIj*+5$_hX?G^01!GoJsIuU3WGsOG zeQ|v1iw{E-Ah;}8oko^b*A#PdasuQbgi|n#U^C0)=GoF(@|bS?1w>+UwkN0(S{Y$D zjA$O7#}Jli^7AV*8gm0cg@;4M8|<=lUq&}-bjUY<-uw33dw(+NiCU5+%q}j@)-ak$ zV^=|)i7GM?C@UchsS@NB+89kuQDJqV8u;ga?>H6f4(GwZl=v*SS`x%#fq>y#dXDBC zQ-e)v&&jOPGW^b}cJMHP-VQ#;_zG|&m|oztI3heD0H^c?uuv@gfh7oFhvfqi-60R*koEXQCOtVrdnj{zmqE>_i9bPb`GX62 z%G49LQ6IZ8mJvQn#{n`8INIQ-m3v0MgE_nfH^4OB@{rAN`_R8NF9v=C!@fh5W57ik%-Mi>^{T} zAofqh{)IFXkmhluc?M}pk>(20Qb_wa(#9a|5E``xjrtsoo`yz$h{jApW459(SJ1=L z(8JwmtQd{mfyRE0#@D3Q85wBC1vJxu!iLbSwP*{{<~*LE-IaVGUYz04?rEOYWd2m!c<6qo?@jsR*<}jaD?G6O-_{*1Urv_MvB%pml+0-2t@jI9m56dX`1&r=tz)(Z<)&rip0N z%V={r+TxA2^rJ0KwAGFxC!)wO6uAUNnowi|iu?dYeupA|N0EP_ZFMNhA4M%e(V-~% zB^3P~idltXE~D59DE0=@uRw82P+SL!yMy8%NAaH_Lpd_MixMWIgnX3n9ojw$ZNGsM z(^1kml+=onXQ1RRl>7!t{uLR=BI9giT#1Y^$XJYwmyq!-Wc&=7#voHYGQEaUSd=mz zr96&O)}tL1+CifoImrAJGS?%^Ok|mbEOU^h8d<(XmLX)VM5&c1Z4OF*3Z)xR`T)vU zf->GgnWIo<5y~2mc7~#zsc7f(C|irN3sLq*DCb3#%SX9wDEBv%>qL3aq5N=^-+}T! zK?OdjU^yx%K?S!^VHhg%Mn&PMC>s^EqoT8@I0zNjppu!WWF0Emg-U)!rK?bBIV$r) zWihDiYgDd4V8{4#1uMy)hzZ9r`lYF~xgO{l#ab@ZdokJ0YwXm=&r zeFJqphPpCP*Bhw27InXa_PmAmhoA#-=-?D|$P*oU5*_*o9af{m&!8il(UITK(dp>u zPw3bW==d&l!UvtWicU^IC&SUnbae7CI{7?0wF#XXM5mucr@PUa{ph)JbXJ7UJ%Y}) zq32oj{2g>Y8l8U^z3?`=a2#EnjV^wUE-BEZqv*w@sDCGV`8;}c3VPiez21r5SdHE| zhAzjU%YEp|W9Z5!=*=tWYCF2tjNYn1Z&#tWucCJX&^y`a-EHXIBj|&T=z~r)@CX`s z1%0>_efSdkh(aIzfK(Dxss|NMo1u%aJ6M?c1+A06nYN$97~(e0z?XMgl_8M?Cr z-T4;%`ULv*F8b{&^t%cDu?78CgYHg8gHebqrBFBpTm7Eh6pu&oj!^t*6#son@FgXT zr-U~tQ3WOHr9@v*USlbUQ`6s4%nFKWqQotfWHBY3LU{*JJ_5=olk(j``F=<#Kc)Oa zD8KKhhlVKsbCjxyQct7;HB{hoDzJ@W=TMpwO1q01b(R|aI5qkkYRqhEjDZ^SCH1hJ zdbo-j8%>Rir^YX&#@A631k{9TYQkx1!e`WkFQ^G$QI7;tk6fZ2y+l1WhI(u-HL;PJ z_$4*z32IUbHR&uhc`-Hl87ky)D&!!g%cXR`QK3RAl%+z0snEx%&{}GS7d3MX71lz9 zy-m%UOwC?Q&Hj;^6GqJ;)Z7Ww+|AV7R%-4`)Z>2C6C0>`YpD6}Q420m3l-F&`PAYo z)RIc-$w#Osd#I=Q)KkgSvL)2hfz;EVP|LScD>hOqFHx&9sMYhRHBxHrIBIPYwe~M+ z-4W{9)71J|)cQ5l`hC>;@2CwTYQq+4!w1yHd}`y%)TW8lCL^`!3bi?w+FVC%iKn)1 zptk-%MFvrkH>qtpYTGp`Y7Z6l3l+0~iuI&oXH&7yQn6`NY&)eNO~v_BaX(P;CMy1I z%CLemyh0@;QrqWI+drieuTx21P|1aqv5PWwQz=erhk-KJQr7cSY9f`kfl7~~GJdAA z)=@jnRCXbiGnL8}P`S@jc|}ydlPWkt6+c52S5w6!RB0+zrlraiRK=TAivl7{e^0k;pVIJl=A~4Sr zmb^S=Ab*r20=5#I5klDC;VB10R?)*D;Aab@fkPikN5!xh;yZTFK>k%nmXhqoQ!w0D z`nqozt^_Q@9)>G(x>pzi$Zj&3k1q>vKz!ymnp_qFm9B;FD#iR^J1oBn=phB{wUU8ByI>H$ zx8!$q^&C71XwoQrfyNoM=PID%C?&UCEhwxkFVqYV5Ia96*Ay3}8rg(L(}Np?fUSV< zJO&x*C>!j`DNaJG(1B7|a?Yb+Ls8lddmB)K6#yE|o@S4?6&lz_NK%B zkq5-McvwqBqNhLl@$vtvtKdW3|Ni*N)sM7Ti$$=S=i!I3M{ifpp6J)(lYyQ1kItoa2CREud1?qW}t zM4Dkg^u(WZ_eR(ZM4m(7XDhLZ?W2K;DP&7Sv38K>`~~8??IrDMDYinNha}2FiOrT> z8fWDINp)=E?=H;RV^ycIj%P?dzqq-zv{ikudG9{VMbCj6I~)g<*PUTb3Et$Cl1&4S zF!BbzGapVPj0g@yT%AR8J2pNGeYam|7_VzY*!nqQF95f6X_??}N zy}c^XE;S%19?&dkI$yl~L4z+~*L5H4Us%Ws+y(Fdhs9L_Wq|Ns$Xsne`9HBgz|0BS zI@STA#{FWu!U-$<>onnZrtTk~;dZTr?qf9E#+Bd{t+{3f-o#en+%_)cTwCLKgmtMA7k=EzdSd(S4Zx%j-keF30X!bM3MnU- z8j66_NCc!Hx&=wlHNVnQJ)A2URP3aIH7R9BUVB!JhAcZ!a5U#=){%f?FPu1c?7XP9 zzNX%;g3X%JI!)9Yi{4y!QB+r42wTR5h2^k^M8=FVwk0x#IF2}DiCZ?|Z$P`9YMsJ2-1-0Jt2 z_iqvv*W1hNYCD9#;9S?}KM!Uf$~#;TaDY6`&#G?E?Nnnk?C&(U@6xtku6wKg%HhVt zEeG4Mh9EFTT+L%xjVB!0tF3bl7)na&HF3|!pG&ydez5sa(-FM{#m`cG+2uf29T+j|ZIiwhQQaBtkbmc4h zV*1L{>(re1uZ-E4u3bcC^U0g_kh{yHmH{o!S;O6yP*aK?eR8GlIrLf!WX=NQ} zl-0KC%4&`Cy2I$a?lkf%Dk~~fPAeR#xB?(fU;`Fg9OsoyEfw9lO~izk`a33NvE*4H zDaYHQ`j*(D3<1M2&fB^96=_Ym0dLN)Eomrgs0^@IHq_MD4nFDl(0}kr=ZE~#y84O+ z*T#55Rl}~@x;H=cmzD$PU^(bJoKBC1kexsZf?x%YLg6^$J~snT1>~(@NrtTWEt=dV zRujbWz^k~ed>8_3pfCq;1O%)v1quT_hi*GgD0fz6=Vhx&xga~cxxGreOSl(62#Z(X zA$BiBT+4)mHfOx@bpGk=;~J-K=pethAZ1UAn*0C&Z6t!9S(Tdu{5MOGncLb~rEP=Q zA4JN25TvA}nhUf}-N-?Hc6@$JjLO&$c~UbNA;^NWaaGzbFvNhS7h358Tb@~!1DmVx z_GH7kgD!P2M1wlDgH!Yx?Ti(0x{x0qw<&$Sdi|!Z<8fM|#({jN9*5Fk5_<})?K|KU zmm@-em$A+WVi)4C;e?7a!XImBM}#9{cW3Q^g1rIK4463J7MLW(%%QuEyEkF00SI&# ztib=vkwqK_V2*(>_Fql>G5CnGwz<5euo0wxz#mR_)WCtYqVkerExAsv^Gk}k5axK; zxQifne+6VXLfF#W&|Iq}e>l3s*zU9;pvZUhPy=xAB$!U%%Sjj>?+L1FtLmz2vB6R7 zKe%3i4bI}~(yEf`(g3_6S$RCaKj)Z+6gn>QkLJYeGpK>p4KX{m=V(cx^CCYdA%9)G z%9#ec&S$|3=!WwSJ$c>fO&aGJJdn|Bwx#C>r03)dc5? zAQ0>a{PHX8IojnXR?+w>n0uP|5v4zdlM-a@4YEOv+h{nRk@Oqv3y#+|w%B&(H3302 zFb9P-psFeh%SwwyME)q55Ke;Ccr1+{!rmJ~ZfWK3!4VwLFF=?C4hb%2TVh3I(i9Rll`K}nIa8lYHz#W$V$QxpPX|K7v9$=H{JrZm zcO;b$JTV5ZejGomcJT4@usihU*V?LTTTQj97t{otb%O!$v5Jf#YdC#@z-MFdPg<_)c3024Z7yxZ zX{0cYR~4RM2kwqx@c?f$?fNN&-YH+?3Lg9@h7}K-&Vd2f-t!U`HWFZyYv51X39AI~ zBX9(T6FB=2;R#CsyAn7C`_jOmcwiy~)DvNo8CR06cq{ZBo^VydlqG%zmI)R-aLjT5 z$dyKK>5V>R)dUhLoL@E5fxJJ2r+RwNoQHE^{mbI%NHP~hYPvefSlepSzD2Y|_7Y@a zY9_B;Mtrq9a*a8bouZ7Kyex}qI7>K%ZEmcoYtnoOJ5IB&!x3QPO*ozPv>IsY^U4*> z*B)%^X+5Emg1U4M0T>=S!tD|Oe|w&02Q^B^RHqOA)%h%3KIB*DR6=!)KK+QMYa?F1 zolmHPzs$mnI&mQlCiH1I%`|c5y19|sCC&VdHw&)4qr$J?mv9HZ1=mZYgS_%&!Lp3y znk9MsPa|jcPgEZfcCbf;nEB;%OdZtXwv~GsC3X${ug9SJyOXFjR#4I8w#6b(t)~he;onKx4+XoqKb%twrsn zZAAyN4`l6wgH|(%)(tK@K4CK-GAA#%E)mvA&e}}LB zbPKXq<#~VgU-fe&x{oiW!Qm^{3D50t!n3=}wnu%nO4-cj7ufO(*=D<~Nqwt`5sRB&PuCXhsj@dTi<<52H7)AFK>?QUJBFvcpvC)#G_5a`ys+bV zK%Y6Pd$W4DT9B1hT9&1)sv+{@MTCu79+c&8kM9}+SLzF>e;nb^MU4(oR}p)R0Md691%r!J&2P;SdP_oLMFu6B05;>kLWc4)lfKS#W5?wI%|hoq`hu zfx>*xp@_k|@M(qn0}BG5U2uozAAEj+p&UwrwSy6k5G4?GJvc;fo9Di~NbR%>7R`O; zDYJGxI8E>dA7Mun!eUxuWd+Mv?U2Gj!*NnrXHTVJbU#n}+OZll+_5Y9iNS;+y;7d? z0U39NOnr$=5>;koRA#6jd8DT55v}v3;fIx1->hl6s;zGAs%wRSh*vrmsjKW&cDt&} zw!3n-W=#W`Q1glEkfXx}Qs8t(5j3uAvN51y4j&X3@w_#tyW_a0#W72@XmpdFU zwJ9yH+wscx?pEEqr)oTK)^?2gpr4CX53 zcPo2r+|^&z-!C2~cl=iL+i$A+vuEqhsqt()|4CRs?j#ddlj!)ks=9cs^W=y`S&tXv zr`qw7n>R~ts_}XJHWt7kx;Qcy=3~uSSTJ3~f$!iYD%?V7I(K0-txXmcqySZXyRjTUA+J_CRG|P7^tz5RVVzNI33P*p{0cvi@F5gCc zd9^pcZTn6w?|%2a%F6e&m9M>#@!Fp5nmy`T)iJ zi=lMC;hb$h#99HCFYoKypK~Bm9XMDJ$omVwLyP3QFYmJ9%@>Y}x)1)@aYEgJAF9c2 z)i&ppg=eaWmym3&;~XW`(=}vo>PGl*;8;06R*8>kPqf&4t^!sXg3 zyyb<%qV~NwZ_jfNI?$F?O!A_$YqN7y!S&8$^IAY1T7g3=@eIwg!b&{JjXj_hEbf?M zEK@gLs48#JHgOB#!m5g1=*G$8(2d;8w4Btc06Xa<-6fg9;ABVdud~@CVJga}S!k|L*VRApay+;r@@byUz821q4~J zRS758;d>ePZy(nsI9jUgbCvnt|COeLwHvZ3H`A^ILubet?!ZuCk*cVsu&zYI9sA)v zGJ-=ekJDBN!^g7eup%3bP`Z!i!?_^tiz8UTLA=U2kV(7FZo5idXSW0S-A-#P3w{Nj z#x1Ip`*!wN8(l|0ir~;uNp7CjIl(!ekHdtIfqrddhhbmhzSf3??|2r^5;`V0C-8G2 zp!+swo#B{R1cZqcz)f(j2>j7O#ZZKi9kN3h(-{K00(PezY(t3a>=TKwvclWo?6?j! zLbP4j$>Kxc+4nnyU_25bKx%^sscYZxnb-e+vHdADl<>_>P5x zpDIf#N=i#L&Qs1){L)g$sB;VLEp^p(wY6HuDaR>(Z7pQfE%w4(?KAKd+3>*d0H5oW zaByI7fRDQ{d__>kl02Nt-)q_4nxIbDo@23U$t)7a?PuUwaDneIoL36}2_&4tfiFUa zAn?UGti?3u(<|zq-WQ>9P{VEf$gcA#7t|Nd??2bAb)dmE{=Qf0uU=8XY8@)wR>FsN zBLfiN2Ty$z&FzfXNgk*?ya#4VzDi!pZ9pg?WGC|4Kv;H%(9q*lmdqijRqPr8-i7{#0a<#Ka z5A34sT|ZkS-?m|P(&X__ha89P75E+j!zU9`_u}vNP>7p&4*P8`_~JPv#&?x#Z%=$x z0Jaepk7N=bf8zK}X)mnIE-WN}kU#tj3$rT=?S=NLHaPY82mZs~Zf~oy7m7Y}{zutT z)Rb4N$*aw+C@5IA%paJys7M9+aXkw`skXL?vNq5S%{6xW#f$#%HDzN(Q$=I3y>OSP zBQB;P24VoK*@;6T%HfdV5IzCM6%K|BhVbz;JWYAxgze3^6Pz33A9rH8EiP{ARDVt& ze)xgU1z#1V^kEjq555e8fJoOlWlN#ED>-F_g*&q|bJGh&`6b2qc`BH$^(^KI>T0X2 zYqckPp6|K@8%Z@yE$yn#?AHIo*qgvNRqXBKAkAX*;*td0q&cU`A_^i%0XJ5GB4sD+ zTiIy~rL^h3rEQvKY11T4_kE*4Tb5E4WZwiS2x8q)@hYHl-79m_N%8kgTD;!(zVGM% zH_{|0=ggTi=giD^d7ftyIjhwQxcS3R(fs)ulJ3q{k{2{UIQbT(B{>tpbN^YU_X^7vwhtHfNgl_b`YXRm)J{q|E5@CJ!g zqd#cHJIZvm>6|Iw1xR~&nWMOfhfi_;Qix(^97Aj)aHo)eB0q#H`mMKdbF;H^vRQ=2 zVBmv;+4#Vk*eU5@l*vE&JE!cgMz`2(7MnVsF%yp-?P++w|7v-X+Z(?wB z-|(ho*6{Fdb+_7=mXWfauYL@R9v*I8))ek1Oz})<3O{CTYVvcRcApmYC*Nz_E(~^$ zU|>Zo0g)MC>L1gzAaWu@9)-GGxE>E)aEz{EsPn)r19p)FYIyX81`QdH4=8}eMqssG zKt5B9(1>>n`XOm!@tl5Ln;C+#%^Q^l^1Zruv%mNQQm=6@C$X9~_U5k%z%Qh~zgP@= zf8qV#7|8q=jh`EDqWY*R*It!(U)Wpz{^Cbrw~Eq`h1eqeq1;n$ZQNS!-*wd;>$|l) zDtU{Fe5u(|pS-7>Llm54^d@bVd0by(#215ydrtv#`~HSdS??add23-sB}j>^dpU_i z)o{WWG=7XhBkEz$V7tGJT?ZmnuKWA7vEBVKTwptE)qaPlMA^oo@F=7|O%asHB0bQr zL^!34igLy6RU;+0*Hu*?#j}#raf#{v^dHJka0F;f@C*j~i)ZyEBf6^L8sz)?e83)T zib2jdUDKV|o#^|E#?9V(Xh&@H^TiIHMxoJHz#q~55^kb^uG{XX+2P%Z?nE4pA@gM% zE;M=?eLeVt_9fWVAamn)*s==J0r#r|L%H`I=RZmGGWI}-BQ?155^{-Q_FUpE>~WER zfyj83q@x|f<#GgI*ulLAbz`R<9ws@3$D?FhQzcqZqz7IT3RC6rJ=8r z*C}53n#6Fmi40de>LwDBhH?;3oQ!xvy!#OBQ)FOl6lXa$-n`ectPr*v zko3-Sb$L14c5{@dD9xFes7f>>;gswwY&W(sDNzLyL@esgShSB@J2moZf02*-O+qxD zgPwz|a;Qy`w>C(P-NUJSh%oHbw{DWzG7?K;h2g?5e7wa@XvpnGEm>>I`mp3k^LRWDvH1T?jtan@DV9 z6B+cTl=jWjkiHT!D1_j!H|Zd3c@Rl)q{aGS>LAfbOpv zKRSdAA!3;yTFATI`*{c*atr;zyNPPpM{M~62e22_;1iA#k#G`>6bB1-=eswvzBTw) z*0UOEqc44$JdOT5crfc%NOLyGgqMYvMdZmBaRfS-uIp2wzYL>Rfcpt0Jq_p242pl> z!OdsJaBibJOLTf{(-7KMbuWpYP%ivB>{rrHMNWZcWd?(%-)~{_zvhH3o)t=AJSeU| zGO{a3uRnUmdnSPN`XeK~{wPe~py3c4*S8(vSD+aXGq|$){A*k{V!4OOVNqRONpp(| z^nmC(ZqkRar^0*fsc62N@8(205-SU<)p2gVJAho4ee|)YuJ-;BwH!T6-WDNu^1-3= zSNNXuU>rV)D>{j+LQ86MbS>A-yZQTeT6juyG(TyQC|XB;(1g|LIC7Z2Eka#hTRk_3 z4IM#;=6=9ZHS{n&EQ)65u8ZbAnk3TIHG!*zz>wQpT3syr-n-TJnUZu9im%`Y_HcdF}k_D~uF=<@})!5YYhonVs3Y zQyu@&N21!gk|uVpN&cetzs?2A9p{>aU+>$WI@q7M!)T0NG!HYuk--+#>Uu3yT{J%# zSMI&0p7s>!*lBt$Du7w6z=;4~fYCOrUlNOZ?b9&!&kH?^7D+El_0vhPdbHBfaiYJY$^ zPrx*ddC;9L=n6IN8h2-ztUs0bi*EHT#vj~fim4&Iq$)n`ar+=o8&X~P@`35|dVDcl=B09QZcH;~+ee~(4 z5nb2_2K20<$h;5I++h%^t_}vFLfRHi8t&XzCWgrnWXO{|Ka-B5uX8I_uUWBtjWjJa z#gKqd|E|3i&XS^Hp5&7x5>JMbyJ|Lj3NEr-d1Dj0g=k#l%B5Nk`4L~wjL+!WASvDd z9Cgq*dQG*(w#5<3<;68D&X`Y^zdTSC>&$W`a;tV$ZoT-=^CaY$`rw^eNk{mtw|+{x zqb9@2u!C2Knnz@vBP+@3cG4~_Zg*a4XJK||cz9_&G!VKYj5^r^nLyWy!bIQIsU)`m zi+PRiB62RrV#*QinX`AqG@9?xhI-^GdW-1kYh)LdbC#SuizxiUmhavt`GU4ZkOM}A zd)Vbe2K5!RWDrs@7!!~{nMilhS@c6S{SbxDBG|zH03z1_gjhy?E?plKJN{Mhp2<#G z?5FF|HAlVz0{!DZ(5I!{8{lp2h>6)j#m_y5nPipB{Vn{}`b=aPIdU3>-Xv=&QBy*1 z(zO^*XYpyVnL1GK@FSGC`>P}yi|G&XXy*<%rr$(M-)Cg2>Eprs0B zgP}ULhGSvB$H-&!(JyCFA73IG|HF_EF@TJuMo2JBqi;n`roO(IS86e_#gL_Z>!H@8 zdyY$sYn;^$Xc;yJ5QPaYFB!wScmle3N^ci0DTRmtx;I@QF$*$fswFwSw}%%L^NGSL zk;7Ktw6h-W=rA2rxJ}JsEo2(`^;xzoQXOSe&z+O2(s^lACr_J|8YRvA) z%+D^c_~lq34}eGvf9DQ(R-k73G1^!WUQHf5JHTc3v)BO4P&=Kud3GS`?iA$Pi%ms- zG|)W@f!#58?zEG@;C8?M0VWw~YlmG73RocNJRxgpZ-V6&h@XKj@_t5Wzb_I|&6@TB zWWTH%dnqyEwE?7v4INC$2q+Rf|JXy&cI%XEC#~E2-t)a#bN`^8eKD?Ug7r9WhpZip zMi9^3y6(RU?I~-&423siei3y4bLanCkf|CqXB26Z#yz6zpprZ_gg)^lOOorrLq^Ph zSUXE#p5qUG-}c>^uccjG-3OI0>0J^!EEwU&f6V9CKeuj#c8ru3gN_=!mmE`L;D$iW zIm~%JJ$rtN@NYH9eEs<71yS=O7D{QKg|kLdzrRlMDaMOx2nh7!>(17n+jT}t`kc9V zi}frZ-*&i-+9x3?{8imB}-hQDf;E;tR8X9et2nNnd$w?yRZF35m(} zC@De+7L`4^I;keN)!ypdS3oAeMMi#sRDo1#eEX>BsG12nkydh-_j;1d4j2rpnucbC zgwRkI35F>l!6wgeME#En^O4{9m>d;`bN5_s@N~h%_Nv`g*#t*Jyg4e%GfZP8J@j4Q0){MqSXa@p0GkwiYhWH)s^sI;KZ@h78Ke` zfyH86edNLZBI?T{-HHMCp>j+B2{1WmE&Y89C*K7KF2gz8*IhDyj#>Qgx=Tr0S5NwH z-KDzBT4QaG?vi{QPAALhcANgend4zG<$b1djlMPRjCH?SE zxUM|3v~V+buR}bV$`%F9=jpee08vsxGU&dmkL&kwU4VNL*{Lh%c=D|fAS$aUt*cYf zJIK_e$vkau$TD*fK(;%`P5gN0I(hyYc}(r@5Cc>|cyDY4;B0o{eVYFY)!cJI9_Igu z&R`fve7qW#2C#(wl0FFfV0VS&Dttg#;D3c}$nKsPE^(zGf~r6_qAm{(f~Z@U3!ib2 zOUw>Y`U`plwG}KfF6|@k?)e$nakeX>#?-}twJtAejD-@~@U(Tkpxhp^dDFTGX-N;Znm8HfPX%B!iC5$rRL&dbFsRz#AdJHhgD9v z@v92*Emp26xjB8WMY`ZXXnTk1K;iz1J>2gw*Pefoyp|!&F13`GsfhIZ?}_yM>8N!F zxFfDZ6>W7%%fr^L+3}|1VBvvsDQ36D0UGyQ2p?=C$$kArkC9CButwN*Mn>k5*EH21 zYTgyz{GKQ-lP@&wEUb;7E1m#miedm5tYJnax$ad{m<52fjtf| zT~nr^mE8ld2@W_mx!{Gv!1a~16NShPT#}f|fW{#%B?RculHx7UDuNcpL4=kN(gjep znsr8`gSDuE_r0IH12xC zmAhyYDT7*HkF=TY`R8>zzJIwomdEr7b4c`Q=SiI2S4AS|F!C(jMz8n2w&B|_5&<0? z#mP@QIrr%9(SYQhX>UK{1@`hZl0@FQBZ{rQ{#=8)_V(>s9{pgOCOh_UEL!#!dr}pT zGa#dULKmK*BsdZtmvY*I`BSIOKYNX=$7AR7*SC8bx%2&VP%lET@g-$RdT|O+s>5qD z8q;>B?(}PH-Mw#Ds}!OW4yURSLqVS%b(}p5BMJf^W+MQqvKOL@q6&B9`{_W9C@~|E ztEO|rDQW2`*?j79qt>`AG9xNIDwRrZ`sR5Li~#udACYl95)tq^3^qev7T2_K_ol}6 zsZsi<%pLUkXkSFdlT%f6wj`w>wZzPk;nA+`MUf?uei0kCZHm|^h4KaD$0CRz+bt9ZLT*XdN{n;aOE!w+oRzx`lwePMlm19`sAw>Y<;v{;4A|1U~%Oco*| z-^k<>D%Sp-QN@uH2t?%gV6%Kmh)kY=pL%|f&%sX&P!0w^9K&uISa(RK(GL;7O1y1+V&ot2&<_2$EwcT0N3d7Hq*F&H4SI1QWS1z&0=&prF=_Fd6?qV`D7tp=xI;;ZU#v3%}Hw36h^ z?R}M}_yf>Q5$`23HNqD1xz(iKhs)4H^11eSGjJ>18@k#Bt5i61bXIg)EY}iVxqhW8 zJY{8UG>3iOwlt2~1em2oi9^pNo((_3IcjWmwJMzASn9E;x47JroYE3idu;oLW1L+g zf9oWfn*(+?XnktxBc>yuUa^c0;?pBu-nLy$(R6c9{?(8>#jQK8jM}}SWzF7@1MAp|nb3H6p8|Kf2UJp_-Dkw z^nUo-U+JDnlDcO~O1lD-uPYdJVIj&?m%7sCx(hY_9TdsY{mLAHD+IHS#fb$E_Ymr6A6=HRA6qzDZfUJTj*pk@D7$h z)P`!hwex{oLgt#KS*G;lji%D6-2vSJK{6KZU8HdbxC02bk@En1!Gu71Q^yk1ILNJN zX87e!$kGC&yt+7O`=(YqfK<3OMd-m=NhA~L@cz&WaUn>2_78y5+M`n;bTEuQQ7B#% zR=b~6(q(M`9QgmJx{H=gIZE|Ny&Ge9x;(`D=~3N-mX>M6!vI+DOgC@5vdnIW<*h42wveq+9)&bonRy7rn^5h8L%v`Y@9B zOl0u?mC7F3E{|5w`WB}pI+BnZ@`5q69xYJjAZ8$)0(TvcT93>Z8x|Orj-!3a6aGH? z;qnu16y^}bXB1B&i0X5gC;&5+I|Jk|AiSOCUamy6Y&m1Njo>0)q&|ihkW%Tlhl-c2 zj9IRh&kxv^RNKhERrAJSmE2x^J?gXTDw6d+X(p@5bKE;`ebjVir?lnkn|r@g%Z&k; zU_~p)L#?f@R&}1;YRTi}&PlGMoVfVa>8n?%78OQTuHeenyXYe;F+=1k+x5gxcaB4C z(wZ_#_8lrXd`R{Cy6aTTZP=K;kv>R8N9aRpxn&aVH)zwk!6+@@)vaSU1uc?nerdP!rjde;9Q??q^o2Mluhw;l}!xu)amWI!Z zpF2Y};=s5)W4W3+JLk1%JLv>O5Z96kPn`~ZC-Op!bnA_;Hh!mm?|fy`JN%*gGfmY; zrKQbf@9$%g)BA&6S0`gBu#w0++;xZ%wF$&nW$o^e4E-P4!^p)FWYxXn8wjE}(4P*G zcwP~nec{FnV?D2Uo)!7~eAeZX0JD~>$z(y~JIWntOVgvd*SFEfS4>yWn6tBXHcz*I zPBTcxD`dM=_ip5c_f%JpkjF3Y<_hYL7d5Eu4y)PDS7d!ihm>uX7RJ};bZh7nGdHN> zDxwM!xDToCt&zlcvNXM-KB21h5_#e+b!}~ozLIZDB10xS5~R5pS&SF}-4*By;32)` zFCK~Jpj> z9NuWMRJwgdl6J0&`kWp5&-vWq+-0R9byADfY*Eosq#v{|hi>BxkrCMu>e#qkTO8kp zPV&$Q@{~y$Nc&MhNr$N;qjGFJ_~*fZov@e$tA$(SQ$a6GEU}hYO8AS1PoI6OT?(9m z`yr?^eoc1u1-#{*eq9UwMV-pL$PxLpj~au|^I%Xocp5?T=~0s3Z6)uxt;8v5B}YZb zW6c-esC@^nJQ*eKKgwV9nSa;QWHO)}dx*Z>{VLfbKZI<=zY`$5JRU@(NZLlu4dz-6 zC3RJmmheKR8mGfv-OHGxOPOPLs zm&x0zuXbNKdWy@e+VSZde@NS_$kRius`3k$U6<6CE@vcO;H~88pW5TNH=f)vJ~K{w zbkXjhaVoG!X3V4$c_Yvb-3jiYtk3b#mm~uh27VBezxZL(tXq?6~(0hH^F} zXW2}4%ndeBd&~}#&1lY+?g_<^4Qh|w=&(5RY;A2*9Ms~LJY?RWRm4PEOaXJV?eI2{gG zE`GvPC;d0C1I@2R&_atmLYG!a25FH0=??q~Nd?JD%`nDI0awNKyrv!0o@ej~;RQ)H zyt%v-8GkX8iv&zJAsKpiKPDH$liXG*a3aQ{SD-+0X zn54b{OgD$-kX-r&d7A!KA+=bn7FKFn8lReGNJ6OtC1DNQTg;sBX{fN?v%cB$sWddV zaYu_9Iq`}zCs0botkiNT%d26i4a7eH%kjl+Ac1$h-x1KLXV^NV%>k9eUmqF>(hvnx zoiNf6S`4k!A@Qd#2s$MhCB%x#?Ult9YIm);qB1oR{_ZGGtcXm<@V7IwHnX0i%Y@%V z@9Sn9oviMz6;GbAd>YcE%RIk{GNUqekt*8Z)myzNtL{>hfAl3Uu+SPv7z&m{4TP=G zL3JL5+M`>AIO1kNg2dBk%-3}KIXeCJSW=k#F6sZ|m!qz~PbA|%Zv##Kp@Zb-2&f;f zK^2Bd5%xn#h@D(paCR!vc%EOBw1ljr4y^FuY?P8(32`xxa)na6~2q< z9D{ckzl!*shI%KNbJF(+o#%+EjB7CX)o1N=R#YPS#`z*g$B9ykD>EzA4rfk|gRgg1 zRXOU9ka@mj&SF#_JNmIpGt@68b9~9XBlV7|Drdc)!+UAc{$#kby;(tD>j^{r zaqVVDJKuKrz~SbT#nnYMMK#je!sA5Rs78S|J_;X(=V;i>St_C9-*Je)f)E~=xU|jr z=36QtP?Z0qqdC-sszT_*5%c+ND?`_9UMCHU2pY43InD5xQIqc8=)=XIHpN`vH~#*| zR^p>Z#G!hB@j=@gQZil)m2q$#NC1Lrxa4C*jsQ#$QLab7#kI4SJmN(>4j7;0dzaGJ z=mg}eafW_VjuII!k2qABQ)#Q<*4FCI9#+*k>WZp4`Suq>o8k|?t!gTHySk1w&h&Zj zT)lGP{ChkuOCI~;#bK9-LUre(rW-qtQIW2QE7BF|N@AK9A6V74N;;+e+NeL&O>h!{ zW%`k|FWL{a`2b!|#Jhif^o zxH+~srYNRJswi(81B157>**V` z-|{Jx#qV~-$LH7*__ewPx>f4vXh%^j9~!VfdiO}}z67dHKLQH3jE&s5PaJY?u7xY8A4g2Ey=^q|m{ z+oU7r(}^KerJ|$1fiLyy8*e+xT3NG!+KVQ{s2G4ABP9VG&Wsjr%{yGuQYl4k%q69k z5_Nlf^}%Dj-6E3j+fNo+ekUq23--LCQv-7^ud4)+>KQN@^fHe{jCAmPk^B&Vd;kZ^ zXFyhQtH~t|N~HMKbJ{sxd5&8n8ORWI zBY6YlhZwAnox=-Vv@__U(t92TqhzSco}wg?C`m$5M^Yz4VeATU9m8cz@8f=Pb_*bj z-vP1+OUm0O-ZJO0GUX_f)f_ER=WU6e3IY7sbJ;sI9*YFkoZr(d-rCu7{#_hLOsAoy zFE_i0rj$HhT2WbE3j3P|lD;EKtPOX|b81@15ZsF+WLooQUu4w0-PqtdQk8!qwu(qy z@-Lol(f@}j{y&#^kbi|e$WBj%ve1bPVs@d)m7SU)mH&v%S=mtUHoMHl+1VKl$)O2} zxzc<~RC10g!vYDv4&Z4_}n!6me}HSdsd^V&{SlxW)`I;n+x?$ski2O zN0K?qk*wF-Oy${``DqrDF+C$U(~(-RJu%rS&B@C)+jvu&!I_oaQ)7b>_z`1qR7!MC zq%^L0OQoK38F!mqc_j{Wp}ojn>~NIkyqO!e#h73M{KA|jHQVhuc6FZ3Zc{nZt4xj} zXIe={Zi+M|w>UXool>^ln9CQ&Rb*BbNHa|_dNY@9j<3!uv}Bu1CUbgGq9dcoY>RAj zP9dzilg$TFurRRbG+d-Lf3L#kA7~7p62h$Bg_>K4h8m_3%4P zx$7G&mOQ7$nPr#8Cl~BWw;||-Xx6#g*FU*)Qkvt)x8|!W%mvBC8M*fCe3RXlUzF>F ze^H#9pPl70)wa)zd?0h528FpM> zm{p`tPIp?GGmNQH2gLC6)hQ`{U0V&7YFoLr%Ft6niLn|_ zTb`rRuj2@_buvO+lsu`#iB%pXtn~$S=q*thCunr1`bsrgBw5vCUG% z6(m;`Ik^JIk#tv1a$@piC$gEKiL+m+jpo{)uWF+1{{@E~2rTuWh%!-DHd z&CANmC^Y3|NS%qMq}nW}xw6obEX{)xnxo1|aU_-J0&fv-HgQ=Q$+;OulO;OVW=buM zwIeIO4Izs;eD(9 z#i0;iXpfM&eT5g5^obKsbuJ-KbdT>I?|UEV`3JJNmu2n=?g=7ye<4U&l~x)TN0aH0 z_%Mzxx+?a-}=DwmHLVrl?oQ0E3%PCPMaq`bEC5si>{F2UFK$ z`2F?Q1GkA~qg~8NMT!;q<$Er;${7Hg0Epe2awdxI4&`Aa|9pD?AcRE~2(+~VQI+KH z^J%Y`37lUs(=bW*r2BdjB|s5yK>GJm$J~h$AzetnFKWUNHb_}2KutSA9;2P4uZDJlKju*+X(T|_ z_>1~=#lgp?gD@AC87|8NZM@6_?u{-f8Y;~?rqaxQ^##-qFZ>6+b8n?;{p!4uEIkSx zBvQtHA>O^P-(lJRw#*9Au;qk&Sux%{QLtAdWF$^2Ve%tAXF`&^SA7l%CLWYG5T%8i z@WYmT6mj#GswTI_R>LKStjSzO)dO$Ds;S&Y>t6;Nc*V~=QHkIC{QE<{+oWA*x*t=L z*u~^$dYB7EW`(CK@p_c-p?@tvF!t`VJqr*(1pZ%SEO?gwKHVFUNdel?D`+M_f=zkd zM(TmPj2$?Zs@1F31-WkjjLSE&Hl zZyj0BWcVQgw!5gdx{3>HZrpHOJzFM!tk3ZcjbY7PbyaQQE_HorypyftR*!Zw}*Q<8B_ zDZ3}A<^KAKQz8~E;+fpEXwl-WlP9Vs?0W6Amh;we(Wwu&eXRcM!=^K*`EN#x7HY#M zy{eMe^qIJ8%Be*h&|>RF+EX3dK2f8mdJA2@Y#&xao)iPMAq(F6OVXE42) zRE{9fgo9ke!P2*nlSWzaeBFjM9GN?T29qafm>NXHl$_)o=;jQc`XqvrK_@jp1pQMM zz`|91?=V^b`9|rnx?4oTz;?+uz=C6~xOUG#vB%ooBBBpXI{7SlQf&l07pAy zZTnt*=6GS%Tf74+M!K>{|0%xm%s#aLl#DEcAuGeLYR%HZh3e;qZd){#r+ueQADS`P zFn-s>vx}um&wLztQ!Ss{=ldUbpSr=52j0K>qw6(C3P@^}_pA z7u1K_(xMyq3kx?6p?!j+WV+y1LewNTH^*l4%Xd2R^Ya@Td_P;6k|~NyONIK89$+8( zvXTZ4+tHAjpOv4P?`O(2=a_97`M!w9VHH|NJB8a6+^zF;h=fjbea~m)b34SDY+V3x}2Jp%gDBiFvQMZ97*WtL%Tgf&op1gI_ zCf+j~hi=-mb@F0WH`F6=gwTdi_RGMIoJ2I$(?&y;@}I8K6ZC|He(#>B^nMaD0XXS7 zib25`zz>R{LLm5nSU~e9ID7Xxl}wfbkUu#Y+4GZxO*4-Yc^B5WA~y19-#paTf@!LV z$nl6LlVQqlHr<%@E{9b9r=o)!7S%3P(+9?kp$}+lwFfuw!U)d@aHk^y(T_>#oKFH8mN@We9wFK84Oj{SvKe?5tU17cH(ou#xL7cUOp39NB*9 zii$i5)P#gQb>-5wl}9+?H_z|hQeEomGiQ2A{S~pw52ifRHdqZT+AH7{Z5i^$GuK|@ z-4)&CqS^1>*a$6!kw~FEL`L!~k*7d=vxdj}2^pqah{7ob2yk$rGy{YI8fT@ZyMrmN zQU&YN9<;RJr3px?T9Z;rc+x^!M8&D)>*7`S7$mF<(N>BzELpG>VMlMQ6%MqrSIDE8 zH1`U5+{1mu$cfdRunemgh}zW|ps`{_tRXVR4R8^)puST$T8$ z`04ScKPtiJ2W0<2A|KQ#pQ#rf8>hUw=ERIL?gt_feS>8mhyNjwp9(lBk=Fz?HRm>| zEs~H8VM{l!YFOyoW@|SsRIT5XxMkzIs`^N7!Dtb7U45uM_M-atuiu3>UaniBd`c{T zAYd+)OKhK#ZOvq;>ZeyukC+&=VR{&MW1gt7eAn*1>gMW%P<|YZ-A-q#5^Q*Je2d^3CNzyBE}~D4|cajd*j-A?cb!F^7+;&ea?})XKFUx={78`txhs=DfqV zY~CBxGNi=p`&CwvO=K&}1v2MN@B&=xV&NJC7G&Ji9XMe zm(3Mq)@HQoNx*vF*bgt8PpiLt&slPkKUsXN_So*Dd-mKgXNwRaBEhKNAue_m@#ugiCkZPb|V#;zZ zeM{no9qZHLVq&-Iwnm2~ZP82P=LKg3sprotZJNuks|nwuYu$P(>AmdhDWuugLJ~x! zmdZNSr+II=3b^v(hWvx-H`{EEgS<;(ZqF$ZS&}0xYtp0Zsl33fU1(XLPFk32 ze~!0p*qF0Losw#`r1Ca&jzvYLQfq}p>My$L-<1XiCuqiEd2XOAhKal_@JbRZNQgJn zgYoKDHc$noVWjeDgh7E|Tn`1c<30tocg5e1o)v%bh_f{$cLKHJcI`y6%V!J*GMI#r z#O-1$D6<5Ph$-R@@fUCGyAyu^*xA`NR~c}Z(F^Yeh{%Wm@`70YGdKzm@^!s~><@#B-^0>eNJ0flHm`__ibB{HK#b)g zt+wFRsVcHpGx^hkV|=^#Z@C%8-@Y9CH2p*GG|}!JMP31efZ@P$;W<1*>$O_c)w-wtZA#C(ml() z6o3Bp&(&nek7O>{frJCnpL88fK?Z&bT|A>|<(^G^Nn&o6F)lkLGc-HZ7zZM?QyTEr zGJx$E$`@RyQlSr6kc+T>WgN&-uhJN5eR2Gu<2$(3bXrEJRh2X^Y+l4FY3%zS=s!kO zn}q^DaX*8lFb4ptG!(BK96kp#;KLdcEY3Qeaku6+tMiwnlZ!rT{Q!0Lx%AcbtIbPh zPhT@oH;j83b;e3#gZ>5H$9624>q8!eV0a?@tBF)QqiWS|)Hx~FV2o#VHl-Tly>)&P zb%va-ifkn_LB8oGZ(@PgO{nd0&>Ett>7@y89gpPJ(AQX{$So?#VJJLdX;MB0~bq;IOJ z4U0ssN2|DiOA|m!^iNcF#LqK3AWFk^g`X*>Xq|%vmCe|oS#ThoiL`o$y0R_Zl z0qri}_QkbW`qd?Yco!TE2zdbyi203iDcpU=AW^P=9_#&uGO>dWp@S>|;w^(IuXr(c zOP~OtOqJdHli^+ZwhKUYD!Mu#hw0IJwCMK+7Pm%tfyt!;_Sd_g75fPt=(b?LY6a~D z4QwOOR`C(ERp`O7+^jcmtpGw9V5z_Xb+WEbHwdVDn9Pt?_jE#eU2(4y;5|&uJwp|e z{%n})PQzOqswrqQ*l3oDEy3P;vkjlZ#Ybdj*Qf}-&1Z23ys(u1*1@eZXyPs zQzo4~Zs0`P*DJP8`wsm0-Elk}M;@ZDBDwrB5pAju-LYULk`XuOwf(ejGn3GwMzGj~;E z%eMu2238FJh5jPSKx98vg)F-(gWJ6=rg4>ehYs?6{N~UVn-}#i$|%4c z0;l2Bz9aiu_=?Jc+6L9(?KRtWa~ZB8W3jrp$nJs@iTbfXSY%|<){R)x%S&JX)6?fK z7WZA;Ek@$@KBDWGGIJ1AmIQ5(MwsM@QC?cz@>1-}k%OO_J!t3PowGZ4{#JAS>gmrM zzX*@}x?1*Dw`2e)*^*JUB{NhioT0x$pH<;j;9xC95uinBmE=Rs{WUD_VvYSfSD*Jo^h> z)_v3%TO3#<5k%ms%5K^Q|&OxjhJF!6tXXJZl+9IyZ!>?R9DwnsvjN%!w9VJBNzeM zy+`9foyTh&x?R9FfyJTl`l^9QzhXH8QFR#r+Ds zS3mm1(Gk-%t+JDMBd52@*kTod1A=$VSi78ykBLEqaO&8(Pp4Cnl*WtGiD>T6Q*Xr8 z##G1GNY@_S@m{+M-1aqCm-KaH@Ih5sLm#Fq5&9W`C}|Opgjn`~Yc0VnTSBD%zzhOXQLgGj!3au<~t<30!81F)>Lczcust)^ptahI1P)sxO{9 zaIS$rcYMz!Bn&c3_{NIz-OZ}HjM}7fuB_ZuTc>JHXo@K3^6%cdd-Y@K)sI`g{SEyP zP5hk<6A2LPUZE=gu4+7b_(Mu zjzI?o4Qp6$c%c(t@4!N)x*TBU@DSWD&>g5u1ksxV5UEpK(G!&Dq&i6g6x7)|jS$`c zo&1iK#R2bAyYfw04xV(s=6piTX1^)ef&(7jgXnHV<3tRDP_F{GQ$nGX_ekBuz8!IS)^gU^Pp~ww*BL z5jI!BBpR*BGFmJ~t~F-u&K2q`+1UlxYHOT@mAq#N_7;Xn^p!P+TF3-=@nVWmuY_&^cyLm?hAkz}3A_aL_-NCxL3E> z@)d2cqS!dC@FrQhI|l@l6ivIhi=mLw;>e`H6zbFEl7Oe#1}bSVzO^%UYW3eBZ0@sw zu>D`yw7-C9+`oZo{|hYbZ;lT@X-qtp-BnK%bWASS9ZIU zup-S~IoNi%pK$*FrJ-9O7p@;8>(*h7TZ}RDHBIf3f8q&ZX%=W*!?+WjWTP13jO4N= zV%L@}SlpcZ&u`rd$;&6Ed>qMjS7AjYca`MhohLf3tC%t~Xvi)xStR4T+nDGrQ>g{F z1#{L%8bq;PVlM69mp8cQ0@M%W4KHzJD0(2(DZ90!P_t0%?{ohn3vBit%^vfYyf7qu zU~xdAyD!J?YM&!RNKmURPcBX5g2jo+SQt8((cR0rb}SQ(u8vYVUf2Bp*y;bHjIo;O zOsx&;Qjyi5jT#w`6xKS>t&IB2%yl=+bu-L$Z_U}@Z)SayQP_TBji8W|MgLj%u^PE_ z>I5`jcN@xNrgu1knA*uQxk1!K7_k@ZR#0@j>H&9vjRRVii4Guw$wUW+!Aa?m$z@uv z0zrpFo;^))HQ{zZ*+49h+=EcF7E^8;ylKXE?Wr6*WUt%K>h}$*)#}xsU}FeID7m{D zeteLo*N@L}*s-cS^W%NxcTd{$3c)&&VrgG6lNBBp%qE39@DfC%WK`!J>k!buRM)0N zF-#m3&m8T5gTH0D*TKJg((BmeB!7>7n z$AIyK%ArF(DuZVRkIc#twWulv5&@@|-_`%S2H1*9U=yr69m~yP%9UW_J;i`GbyGaC~d(;h9^TFqXQ)@jnocO^>r&q`Vn_fX1_0n`m1*M?0IS zu3Z!iDJ4t+SA~DbhJl_h4i0Ze7C?R-AE}n;M8m}4;UcPS3MYz83Dri!vV)XPv?!A* z!oyL~rf`wG`HmQ8(}^H59f;#W=NI2WdDEGKRHq2vb?v0HNd$!pYm?PWlE*{z9dg3B zgFVdgZuFPUgM$Bh?WAi0QhOBjcSz`va}+1o1`68(2DM9#o<&T^61!GdoUKI zVB_K>#9Oy;g?~T<9sV=csL+zPHT}Kp2(1!AbR8ZSc8tV$vjc-Xth|mL%xgpxCorIg zL;=yd4%)#)>+t4Pt?K|`Zwq@6@zp64+5$A)X;_!J@1d^c{oKfUE5DF=G=le4Aj7O2 z4y$Oue{F+R!wxFOLBee`zMbu5hiKoQ=X<0#oTFPa;+t~U# zS=_N@ySz215k6xz=tK?J$xnH|y4!Gam=9z_4{9JuBeazuhnc^HDLWZgh;hr2tKus*svFgAdV_^LL1oe9v4<)!|`}_yfvd*_qPn~&EdoVR+inw z9>2)$xx8yJAt3UR=1p{abk&y_KZfbdGT}Se@*Pch3I#QU z+l+}A&#!A4+RBKr=vLh0?Qkm(!p38vG`0!9%5{B&TJn^VLD#3vUoe%;SJ%#-d!G}G zbe(bv8qcl8o4-%1$EdtE|Ln9anrUa}UxWO`y`^38%5Pr#V05Hx^arnf!y%cz9_bw? z_QPSQfRfw*=5u!+a!)4gL}BESA-~W^AZvwH<{@i^pn#q{@(V<;dL>R2z%TX+llhCE z^-7Zofl7ik(qNJ)4r?bGxl~xxv71l}-%6cD5Km=eEp^6{im*_B{!gvnE+Cpvx!bxNe z>{Tpc0d{-=Ei64bt;poUAGe*#d_?nT!3!YOC9H@^T z!hcU69&(kwpbia6oHR+bz%{=@%MGJG>w(xEqN4o@=|jhda0uLL1f`CYt05!tX9Glv zefeX*79!Z%57&Z0uM5mSB;UOK1d(5i3(U;okbPr9Wqg;GtY&@XHu?$cecJy+U<4(3 z3vu<7HeCZPK#*j`e+a)SlQU8?^c-a9{uHeZoffuO4egPbt6l|+xbz|8)zEBw8Ud9t$9PYM z5cHyKn+E+NROT&^oL7=D%Rr3jL&pOq4LC<1I%XNK53StNqHoskt1N7h-fjNr0|ut| z`RTQQX1*|VUwlhpb7AFPeTx(Ye*K~hHN2+z1U8MJ-7JHrn+`J*LgVOuFM6FJZ7^xW zD5gc=7p~Yz^vOdQBDF}dASa*|%j4lb;DaPk2AHp61uR}TbqH4cHZ9y zGjAaFkw4j|Pj~0v_H%dMLR0*EzkeS?9?{67CiQv!Z^f`pBkj$St(@22Vv;fqjyxpSR25^PuzM2`o8C-Mqr~?`-IdH1t^iw zGF0S4P6XHZ1;Z+^nFg|QY09wK^x=85pL#=RK2{alULraf@bqyyLM{IitnOEr%)uJ; z!X0R>z&5-{lwiIP>C(k_`ItA4rk^Cg$UGhi@>%ZPO8M$o+?CXo4eJiXuqBM9%H&_N z6^w{VM$XFQt4X3p{$)JYuZmG&Z6bLpRt%7myic8 zkfHC8#~o6N;Jmm&~1*wNS@4-q~@jCQytQ?&~$( zu05n>#}1^kJYouvk4-s0^a`6 z96KfwzUexlw3nw>B-&?}`zF~F(v69p2mQPL@Wrw$3FXFj6Mf5!6$SQk;X!}VL%#08 z-TYy1iXO%Vn^^osGclO~tg>9`c~W?ij7Hf{3QviyUV`V;1n^-3*#sir^BnlakPYad zyDFum^pcF^K~gr6a7%9t|AqRr&>0c5!IJDsDK$!=)@`+^iwYfucHUWx@clbv1CU{C zIn-L=W99OdMX#R+Uhx`vb>1FP*AfYo$3NOV_i{QBmWarbBIR3ero1uNg#}i9y(_Hl zOi3(BP+KJl2`Q1OJdN?J@K~nI%}81MW{98Ahu$6IF^Sd~%69Bg7nbDZm-50QqW7-G znpq0eyLwMq!&?S^j9?;vlDpo8N$#UP6a0PZl*RSN-Eo!DVsAz^J>3jM7yOHE#g5dJ zZO#b42xooVZl=xEA>LLMwadV<_^Mr9S5sV5h^0!+8c3c)J&aj5!YPb#Fi&rbJhvs? zibLMd65&*L-~tRo?%QHwC6=OMYgJmYUusdDH8l;gm{#BJ+fa+s$`E7HNhZQj?(QTo zsyZ=n?Z&tNN7#FSH*sxU!#1|0xeg%-@(^3HM)ZUddJQEeK!DJ}1TdJ6ZQOA0MY83h z<|?^Y+%edI4Vd10CqPJmgc2YLNeBt#jC5q)e~q1c-}`+3^L(F+Mw*#(&dg}$oU`{{ zdo4^D#t9J_>ihx^`irI)J@qfp6YF7Ey@1D7`U2(#TZ*sBu@oIQdeqM0R7!-=^!Pr$ zrxWloh&A*;rrnF}PBZq*KkcW~(#?I=(glk=p~sSe+765LFmm8taP6$z%HDA6(+yum1x| zJb9w=>$@^rhsBqbcDGBaNGy*nrH{!Imo6ma)an0$L3%6;oIX`HwQ>3hz#xC5KbFRp zCsrg0HJ1?$@)+v?!>l&f%4@4T!JM^Nl~N|MygMF;Z)<}o{hxE#B zpbfV;3$r$iuL!bE_7%aCS3W$93-}pri znC75zY!Fl~dpRi^VHGzUwl??*3YxxKgM1Cj`VN!G*U%UQ3iV%|8XKCi#$plyUowdg zBt3n=`tkyaByOUmc+e0Zm!6i^JXADgS9CU<(@AQMRY65i}8Fi087pn&=$&yPUEx zc-Rh;7*uiK3xitqM9UoZK%`g0N;%eg`^Iez!;tyb&3rP2}h+KgTIjb22@ptD}%PD z?%ykWkpH0YK4&!Np3Tf+j1uXtRD?gpAygutF|Gaq0GPx9WGOOYKlbc^K7%0~hdO@s z_(J9z5fB#61qG~4T`!+FF~9IrrP{a%#J-F)7)F#%h<9*>+Omvt{JSRJf1r9G-@8Aj zVY{+=Th;dF>w`}csf4CY`Y$EVt@A0pGw$@0)O2u#Cs49hT-5K%*j?ck)^=1JO3(P8*=d8T+U(WNl4LSI-&a!Ibsjdk~e9wsy2W0KZc zc$L$%ndMCjIPj+>?cAl=Ek~0GSx86+=@8l8CoV`WUPGOJq?}xEUn2N!u?KB3SR{nW zkB7bW7W}N%TW~x8_u))G>^+{FG;iYS6~T-k!0pk2nmh#F$xcsKhe=|a$UmaxH7X7c z4Xp_P)x7TgYx4O=q@14!Ger=3)uBsw>W2ueV8_FK*ORopfL9CMuyhx1LVP^P$?Dw1 zg19jyN8nyFYUEn2UYDV?c?=OHWT+CMp_zXO|i3Zw@LB<)lARuP;BMU!|$z z{0ld4k7LqIW~~{#6T*06G=KwsEAf@%8x+%C8$ZDp-cQ!ih7JO*A%w`gVF(`B$h`uS zN_>7|Q3fyrLqz`}U(L=z1UoM$%VZYp#&E#c?Sa);2Y6{E@CK!wUURlAt|$f(;iZ$P zk!EsB7B8B!aE9%@C>OO(jfe>iw>i6Ll8kX?)up*EU0OXD%?+7K((q6KYL24~8LG^r zyku9nrHELO0~{{&YMe>9DJRElFuPXp@7+9i_t{^~5EJxK8?w`E4?N?-cO+ZlKm8pU`{cIubI(!s`@qOJh=Gsj@6G z+dsvZe$jEug*+A`#6H22)hW%8i7-+o_&fWMJ}mKevU&2JE||seol76Zs{t-#rV~9! z&$&RS@f_Z}@>P7F&TK^TPg%?QuCk!4M@e#yoO8jR=Y+Y?t5?JaGa^r$XJ<+Kb`*r9 zLuWx?yo{&`jS73C2o~N>t^;0mPNLBMe-|ZHXyd=iLg_{Q-^cq3ZTq0@&f`SeX!X?q zp-ob?LO9s};Z;urJu@;L7A*1`-&#LoJI0BNq1j+@5wEnhQTnk+moA}iUq+DaA~IcE zh}7a0Uy+r^t4OrS#*0_;m~Am)H=0Hc!sF^@-N4_Zw03>TEIbvVn zCjQBR)PpHv5j_GbmUi)Gx>V#wXNed8^LZA1Zi}U3ZJ&~{4df#cJtCe#dCLM?VQGia zU+yLvi~2Atg0(7`jvwUMXu|SBK)r|H$w!RDiG1gT{3MI>X2HlyLeKJ#6w`kUUq~Ba<$5QwOz55w zC;uPbgojIrDZyj8R&dOD{O_WNo7D`eRo+=pz7;k@?*5+_P}W<+$X+3&Ei4`2frAzP z*C(tYIXyX*TyrWc)hXk_@-vZ4r0a{BSVJPYs>m^AnRMi0Ec9)4rSu}hgCEa;FscRx zii86EXi%L$vyB!CB%nZUZl+nsm&WoFZ4*mvAQ9bbUD_MW3^?2WC5ibzGgEozj!P_V zSOj|2stgtKC^ECv%BX@Q^pzH8$+m*ZiUO`8zXpoNh??JWsZbRlRUkYmGD-#EC%V>6 zY^Hn3-kv7}{iJ_BNVBab>vh(4-FBT^r`LJ>ifq*#aG7$*(nW5sVAs6m-&R-e)mMkP z3OT-=4_9?Ld-$;af#(sJHy^mTyVD+e_dD))^rXj~J5baU2*Xz%nW*<%=_>Vot9;9? zT&bUU#M2dQ7CrCWAwBeW++FXu>uC>ncK{E2x*Ya=pg(fhs49#-WQE@YJg>;2 z7Cao6;rbN+<7P)xFT4|uDhx2r4>350L$>V}!fUt4O(&Z(o2am0ve?O|)a8eUrWy35 zU<>@?QFX9pS|_skRq1tc<#6{qyM#5Y)Q1JpTj;{$qBDZc5y;g>zG{48g+`vOtQ&qGrAMArk!a)lzTg+)LDw2{?RB6gIl_4Q7 zSzs%6>C&7hw@{~tI5Z+YLWNAU%;1t}fwI`8i)&CID|RU<&#F^xW2#gU#i4MTS^g52 z3F^|qbqPXjF37<$t*Z;9R$>)8-haA4AL`@6`|v*h)di|a70AJy5#%|AJFC=Q|L=DW z{KvdIyL`Dw(EO4d0}P{>-@|J160}hJ+E4dG?Ms`09Lqsc_}ll@TpG8U!eg7&iG z3zoJa{>Hb#2EmOax^$^?#q;O8c3sf#@^%%}!*+S==X>LAJ82gVfHYfUJ7IU7OMJ0# z_k_fSheHSp!dij|T~1+=5|b#~cH8#<8Vj}q4u8NYx-6~UT8ZgCcOS=?YuDG-WVZy~3k zQe7Tf00u`WsuzVABUP>us>BGWWjjm43L~miT&1ekSYCt?=$1=qfw{aA)HAklI4<9M z3{_Y?R^h)B-W`UJmmWZzTr%@DMpzArwEvxCIaoK57*?B?mY0&9f+X&g3`RF2Y>XWI z4gG&3BcLGkp}4p(zc^D_O&pCTtvNN%H8&NB-g4Vov38GcXJ!+_$BRq;*+pzLWtdZQ zUGq|tv#^V=m<+l~`aC0(Z(fTv$V<~o%~_@U$Y>X1p3amGx+zUgijgs-kFDw_N79jr zE}%O`DF;DmL)>3+Rjl>ZZ#MWdbA%yh$2LkLjmK_h;B_D$E>+Mo z#9#dCn`=b$$D>&~1DBHq^+w3e3NWlciPXhhsDtc0lbs3%3gC?7G#By{6KS-Ph7FaV z!Vmi^ez8dh3&%OQzrwl*ZZ4o=l}^`4?(byPYv^}cy~$rJNu`_a(|I>J+V>>waqx}o z*^`R^M-3+L_C}+5sknAVvmq}h+jO4{bjdByf`~mm3l8#bbnP~V%)o)l0Vzm8Qs!(4 z-MkS{>Y;R=jAoJWk!1D^5CknFPOFE=sHo5KLC|{WO=Jcw2aV6nWF3Cf(=`1-=98Rc zh&3l=ry?b-H%atk=yVAf^h;5Cyn;-Z5Z`84xMRsWS&xnmOlT(nU)Y~~3LsxE2Wv0u zQC!B)#Hy2#hy2?Zk}zKJYAO12d}FR%Ul17p7MrJ=-FGW(BR_T;&|krSCZ_g5wA&&I zO=w5q5=kZhfS?vrFY+;+NygG;OiGR^-7F`|#fAB~aH!?vYl~7$@W{;vjgki)1UcfU zI>ZP**iJkcnEJTD@c=WvC6gYK$@a*AM0W1WUZuqb1^J%r!`J#JF4n$>WZ!tjUy@Rx zL#F;>a)tjU+pI^{wW~Q*ouiV|rD6b+lYlu~YMT(fHe!A3I@h?}ajjtosXsr(B|lY_ znmt=Ry@`7)%gw>yhz7FuNQKg~Pz^HB36!%`waB%*JBd$n(?_6TWOZOd?%M zwUUh+bh-^nq8C2TrP&glpPxPeZd>YW5J~6L2@)bQ!bFx`tnl#%|6nVUPxQJR5RU89 zhAll(=#1B0k?1|Q5KL9C`? z3`fpM9+R3nItTeFCfpB#`kNIV+yHTMQF4LWEWkKj)aE2pf{6ibnt|opI{sn3MU>t{ zVQsSs9}%_e(K&c_-d18e=ZBDJx3;rF@vhRYwg5gr(p4#A3#Jp`q(!O!Uvvad z#&UBQAbw^;SsiYpvKOM{`2WpXZ?dwmS==mx|rV* zMM9h)FYbrFv#XZm>*b0-%lbQ@p2iN=zQUd%X!8f`<3`n8J8h!LcbppCM78AtK4Ck8 z=nev7norPHU!Se@EzR`}Eg)sWv{iGj98^w7|W^;ZO zQ+KT4%mdk7J*e)&p%cojTc0#vwJ2$^YT>3$0Rdaq`FO2eJcPdEox%8JY~AW7>tH3m zjazr>xMtnC$cqt-H^RH})uf-iRQwI*Bl;})6T_9-eMfhZ&mM#-Vs`zb0_xv=Js_*=hTiiFzE^U z82M-7STXHK<*U7^opN5p!bo2ovqcxU)mJzXzxu79aNL#gg1)nVaf{c^b=w2>Y|39) zusDBF!Tf#ence83abfO02s{&VOsT3;n^T$?(kTAx@sqy{%Hxq|w(N#$(U~}q-scH( z^5MCoH;D69KJ^#441&m*+fT2oc~)>W=~DL9w37u_RA;lUT)Fyy1W8+N?XnIb39O$w zE?T9^&Q~F{i`zawJ6~RIj`dU0k-*sX%|>!p4|b};F*YKtVeYFolKd0kmieV#JA*jTdztW>4! zEOCe~K3x`@u1=1VhpS3=DlZe)ZzOv(^$F!%O-yj1pL|PjVraB7Av$&ICK+WVn{tDS zVz|)qy2NJr&icZ-GG!ikj*P{OA=gk;C9^HJ+-7&G$|57wFR#oPg?&SDJ z+X+P0Z?7At9}zX4OI*Ba-4YEGPZbo&1PY8ISQb--a!Ky0eTiq7s2}vt9ztC6k>OeS z_gvxGL;KF;FvU=sLjsHfG=*5k6F24Q)I;lv7BS@$^drV%?~ZhflBHhLh?hju5`Qf0 zM*M-;1Mvr#Z^g&y@}o#7ydx&7Z11w0G=T{?i|CL{O^h<3T+;x*aW9Z%Hx%LA z%W4aE%6HTzhL$UfqH}|A?!6??BJIw$N&QYWC{6+e9U@j{WOuB zk190USMDEBwkuG%YLsQjj}obPupJGQv@~ol+aYhRiT2J{=0+L)ykv-klV@f&NFSw5 z=Cn~MF{(JmH_ST*YGS^nJ42Mw)#^RR0VJ0kH|;L3;da(GmmZL}H^*+NRhEUCHh(4S z4~A-qS8@3Es=|WmY|fBvsA!QrOBCB)TL-XSiD7|33DpNU;w?E)w5_4BFx-oy-V)2k zjue(K@REcOM=s{OFV9RhF%_8lFVNHZkT%3J3L>jhlIJdtp3H<&M;$!b4DK2#(bM;8 z!8chp`SRksDNH0D(FJ-kUyfAB1^P+|(cR6vbf)|}riM5gFw{w8Z)4pYZR{*sGJ}+e z`iLv%SIw)M-!!aZrU}xf)h|i4guKi56Ol^#h&`UXCmQD%>Rak1U*j9QB~%$5n!M>N z87A^ynKqS&a9e7cW838inoD=qD9dY1t++Bz$WwNN?E`U8RCEGl>NI&pTA>FhsFd*z zBW#?+Co?QNo(nZqCN;=+?5x<^q6BPJWLNnNkuN~|-NccCckXA4h1Kf}$bH+*RVKw$ z`^aeu^j6X^Io7BR3Au@w$~U>_AQhmK(;SSdOLkjOEosq9}%9YwB^6;9~-Ebp$782!=8)GFAr-GiWcQ(n{$;pW_^*S zkp9S17oFZ#8L5EV6lAQ+^ zPoB=4W5!eSy9*9e&%yN-kY?89XTz?|Hf0sa$vkm=QA`|A9zAJ@UWdbU}g9=81z6%1e-kR?LS(EJ3C(+{X8{e8rWS3rg$c zWT7}eFFggMxl#1v-ik`Io8zyLR9nRlWqG}XkH*!CrkNr#-|{DPFl_JA%ox4WH+`yp z)^tYiu`G_h&qdP#20B15qizztjt(fN1Gp0U-boL=?AnZ{##RmP(|!rOx4_R2;lRvt zy|Ov$uKwChMt|~T3AnDy$p9Ted4lo=G9a1^;Nr;p9w+p&Szk}p`(`nEnptLhSMWXJ z`*yOw)QVvLKntk+pV4YQk$z2nA-hGqie|F(qapMK*@a1%PNy@7v=aIY-9g+%Po}3?TQUsq7j!qDK)x2)5-gzX z6+U4Tx}a^M9+$~zd(7-cBee6cAuJDcAQF_U8!*g|5qwHB_)6ANO(*OiBRZ;~jCO+r zvX(9M*;O*2V+(mM0@b58%Uf;cSL8jLl{bq3Tgw9kc?ciUfylrMc>0%h++;0C59?^_ z6s*b=NFg&7(wFXn`(N#`(5P2vt;ZiWwb9tQs7XXKYw`21U3CQnhrJ4kIN^T zN0{cG+jHth{sl8xxPy4;$il!Ysypiai<#4JD_FzM=F_W-;I~?78>^>B$;y~ym(;kD zK_!D~hPa*{M0)uB6-`$9lE8d2>-WD-#}SwM-xxB-x{S?k&f62V{j00vo2G1|TQAYL zJQ^9%N8LO2BX9Su12-j&tf3oQ>H22yQY_NXJidV;qA{eeHxWV^5hSRDEd2Rc-G!F? zOS?(X9ul+@!T`ejat=v*M#T5X_b;b_JJq2Z!Z1w&z#){54yL&OMy7bJ z4cQz;<+JEW75%v6qx}ALpI+G9s6UdjHM>Q7WMU)SC(yqinLm5@oP zWR%zG*mL2#SCvMj1*L~Er1YhL^SAs#vhA-~7dcpGkd16W{G!CQI)=(JLVmp=8q~ z*daO^e1{F+(s$D*T81{I^#u<=KN&v`N(U1q=h?iX>xVo|+IuBoM?#G9mGGGUa9E;4uH>o%75_!~|U-Aqd0&-}PDR+3W&s zVTzd&1TO@6xMZPJGRPNGIr^u~IYq4%q9#e%`Ii+xhWB!!y*q^`cq_XP7q5M{P+fjAIS!Lw81FD_!hmRn#@kn{* zaqAB?-!ZoCZjNR)R|gS0U5++aYobi>c+Zv7S56NZtNr+3*3O)5xh(}P)h#W1_ijH> zafB&9Y(CHilQ&gRpR`Qn>sWoqRND!OW$Gs)H&Li#2bQ)AmZ=h}-+1<|vSX0gs-z!? zS{06Og=NP`t5TrhvO1ATc>dR;uUrr7W&>Q3>m7KtbvGLsTUJ?FT2@(A8WR~A8xx`A zKkXIKwXUkNYh9$W<2aqiF7fhOsA!7R)N1E}uRtK6rt0I&n$QO*U#WTs7%h@b})NAG**!(}x0pKU!uTDJG+bqWa!n zb9{&`o;~f=zGSJ_nk8J5HP-)?T(vitI*x??*_n$NUUp%)#WTueTwl$L*a;aAHLtA+J9YQxP2 zCSOx#tWfGDj}usPmbxM+5h?s-*@kFyCPV+Sea7a2Coe5FH31W112!cX%gnijrXp>b zDTA@Rpp@OP1EX%nBqkzG8<(h*er#tqV&$R()G2K)Bkg5(-Y$JL;(R>F(-|v{Q%nup=QSzxj4|RepVe)+{vW z=$_m@Y~c8e&AJ3re9_u{hkdRTG-R8zw-+`QG?zDHpA5!+M@^2lT%8RSXuU=iA2K68 zLKBo6kh0!5*I3->RhyWbRZ&`IHr3=5Rx-xSlF~v`R;K>jO<=|CX4m`uEe3UnA%qDr z7DXUe+7KJ1&WKNox|rE$Y$`d`s%z2JuF*|l63>)ZL~=z5^C64I<+o^>lZwWtr4%iW z&;%#PnoDZUwdyM#=}R;6J}%Z4Yj+3Nr7@3V=dR3Oz)0V>%eE_=)n3*{zsytZRPUg@ z8|VichTq65F;r)pTWX(gBn}(zgzt}NNHQM?K0BspE>kwHz$bVlQ=-`eiH{D(a*fRZ zD2kK1J7(A=>p(cHG#S%!(%}_O)oRNM1UBB7^iYN$Pgk;;(4$H+MrEx&RJo0jGWK?M z_?nn*c6PbBSyAOlCF-KwtZ0UQLAJ0N>U5(_Tbxpa7#XTErsovGZmmqxg)t}K6-rZu zL)j%-lNytptIjJnW#wb9OtZSO0yNionv^`HNmB?l7>2*#hUac;*{t$Z(kmo9lfL_P z*uCH*Yv`aAIDH(!pe?cLDPK;WL!D|XartiLoQ=7d+?d{)Q9&nP1N4OBsxG zk)xg6%k+vrnzAc1tIo&$7V~;OnK=0eMyj&2bDVQy!}*ZM5x0|WW?j#D;z{0{a>lb| zYQ+~iW|Mbn{8lAp=EaRP_BRg6q}}rSC9aw^V%^fkOM?=bfS7;`-Os<$w`g#7w{Loyr5QVI3*==YtHYJv-YE`uv6{dV9 z$5fQLP1}&soKs$~y}Wo&!XajLT-H<3WCVJh4muqA*j!mrU-!+W(+#-iRd(*T zc9AI;>3iRF&bb`B(Ouzr)rMvo8#5eA(8iHenaQ)*5c z2M}o;4@o+xlYtLg{+w!d)79q144u#a#inFH6$f%}^l#uUXVI@YjE4OPBLo4!P5Lnu zvJAOgKDnFn2YIF}_b&4;@n(7xfPU{!px0zEnRP z5xWf_bR4fPWD1TP%RMfaA{I!7&L4mT0}^J7VN(n=>@bZCVx%k5^3w~_@)Mfko8q^V zf;X?pP^0lVbv#M?8R>9_IBGD9pG!2>DMDx#jCodfa@n$*90N?w(aZ<3bS+)+30(xP zr$sNxdndOaxxxKyro-Sid2)Ks(MulYQB_JhutkIb2z5M%OM;X2x;x{qMzrsYMuRocxkbW*B|3d@WCxQ1@Ugpe)a*iIA@vflZ zx@L1-u_9HyiaYY1-gEijzn2k&ijtG1v^;`Fl@_Kk1 z>goc65Z4OYN(W}dF>x8uTm9tvU_JF+o0RGs$mxT;X)(RVft%fsDYHHTSf!!KGObQ1 zSsm)HQIaL~fcn(?-lo0e9k9wUW2HTOhA&2@?P51;yKGK#SVam~k#a(_V>kL6J~lT` zFUvO@borHJoF0^x;<5(^3zX(I;=o_oMP@U4M{hctI@qqLH+0_4ZPr`lnF3G|XZ(+G zo?rp64OjwOIIsk!RSG_Qi4!2bLKNelwH72p32WhUCu1z8KM`I7cEx0`*D3_yNH|-b zTCOhU5X^8Eo!vP9&@{QtSv+n2szn=-geEA8$EQLrcDYkiV@X|^Fm?D@)J|Q*RBsy& z+*F1tsZ(v7)`;gHU3ng{3NfjI9bN+f-|WT_i?;)1JBEK3S+kek0s^eyH(j!A!qVFR5`B&J zw9WDwmB3alB8e=0#RmrO@+a^7an<$lsR!%!tz=?K>LQNGkJVR|l_>Wed9d%%(pR(n z={v#R3_o%evhwvlIZ7YPS2&g+(gIWTA(+fcb|_}EFo-v6Tkmi3hO!2 zKpR=0&Jaqavx&h4aa}`>$zaYfyJna{;+{#{U$~I75_1};-8r!C8`bHw{Sy~q=cJOY z`lL8le6a@F{X${fk(dApSLsiU{&p(TuET_k528tag z!!8P$`hO`QCDfp*QCEkTY}GNgQStO!`qVaBM!r^%qsVZWj%2M5;N`-N;nC^j0?Njt zGlXP9szO6EP?)A-Auke{44@7j3n0yKkfe@qy5uHO39IZfofbK5aY8CEZ~7KF<^ufK z9rnvQ{uam%!oftQe|ZJYX#9>+xT+Nh#7=YRcqpb=qgJ^7p&-JFIr@*NGprhRz>mGzrS)dr&*TG`SIBM*2UMKQ1(`|v@!cQ}4k0r#s4CK`Z%E1Q=_c7) zEWPd~Nw6ANeM0LPQ5 zlcC$VfZXuxPYwMIV|1P%!VL8()|O}NOWqd1=xa7)jpXvFaYcY$wkdK}^G9R@qhI`L z4czD{m2vr~J*FrmivxRDomR9yK3cDjk1O(1f(}Wb3(dxM5=Ik9P6>iD5=k?pcCf0X zOt*v6l3`zO)5~sDJ*A($n8WCAtvs0z9nUNgksIa`N4+e~ezU)@50c^1g}26QsAO(P9N(Ub4}D_N0$n=IkIiPIaxNy$UYc#_Qq zdCiaVs$5fglT4Tj1`yJ?>mI(p`O`u=<>JqLb?eqNaO0Uf-Ge17{Jaf3E2_y@}Aa->Gh zp+^E4X|_8(5`@T(ESfCGA0C}KaDZZ`SVn_;*?|0D_2-$bfo?^w}wcFtr#iqeuAn>1>|i zU3o-YP2ThU zVb~ADtEkk6I$*QPr($zUQcKeAih>qU#43)E5djc$b0WQjvB*vI=Z}a*2X0{j5ptyc z$dpyYb2T_S`r#~QQb%SXNb^3}LR{r=^nS4O9I;p0Qrtu)mcCs88P#jH_hoePHIPY& zsEi|(NZwhD@%k5;wHK{saq#?NHwx1^Y!qEGa)rYAMOl)Pm0ynbLYpTN;an0!p6-|A(?X8nC_ z4m|R4{A}AQGLl0Y!eicrR_SFKsr19t1-SJAr{!1KX3^NXfhL z-JSS*!i&<8IF5cs?YNG|Vrn;f1a(x-Mm?Yd9E&hJ3wfc};HUz`@*j#SBOrj#eZlrl+U?a|B*G zHc1^7C5tpimnI?g11nPU3)2hbLdQ(UECd-t7q}dAiZ(DZfZdE26677MdE^yK&1E37 z3#P!5Eme>&05T=xzgEVQ4@ER;0^o81G)+ctkOHuT-2h!@C>c+Z?{fT-zgX(|F^%R| zi7M6MMPYK=DsdcOO-OTdwoMXylf9zn>U-Zl>&$YQF?Y=u(HzXP2!r}XM}>=jR()ub z9Eci{Vha&PnztoXV|47~q6gfxGkv4Y>OtBt0M51kOfuk{>Td1Drc=AmApJLxE@D7# zJA^t9>L>ql**Wsg8f75q7D(*z%8+;be9mo_rv$}pS*cup_2i-Bhff@I{rb|Wrk1S7 zdB+!3(4JLPQ9M2m>GY!7+NF*1ZOtvW4=NAbsyUUpo4J%5+O$+29IQ#&sysnv{q>j( zOC#d+6Q67700uWts307!ClPdAqyT{m2aY9N8Z6xfpf->xbc}d_0$@i^T++-~CHjhg zIsJrxG6(3oF+ikclI~8#|B7fBmf)wvI~yS$3Nh~jHr4CA3ou8W0C0f7oo!vZQ z$$Z>D^z~NZ26`<{>D2q~gtGl#0O6Q#-?~=BdO`;5`L#tpW!$B?-~xL6b9L)=rS&fi1NR$6Z9#QwJ!PK3Yc~XO zpEin`sw#KvlI@Dz;a|l`3*Y`uE7=Xx28R!j2Z?{OZ4&Lch^hI-%S}y9%BCjVgJWL2 zVDw0>a^^_NUJ|%l4}xPJNB-*9@C~<>R=rqH19#Juy&S?*FZ9YGFEDnE@o!?9{6Xt2 z*MF%G;D({v9=%C3m|SoJy|ftE__&O;cqN^%v@fpq$P=Pd<%f=4klmYoW=ed5HXZ%Z zIFGN$Skc+2rLFVilfRrZIW99UJ6?GL;P{Jumm%14F3MxiJo%)#|K4&O*6PTwM2n&} zE}bu%bYa20l9J5q5{`^G@tR(tBmTYR)AI}OmzHJ;TRu5{l8zTGtT?&pqWs>atKXJn zl%y3aJ;(%d@y$s(5nE1S%XgQqd{?3swk$;krTbaYxyl{wmt+s-otwyYG}B_XFS$Z4 z{{0%H6g~LxOL$I90y^Iz%&F;ZTUV}c$1Skn3vja8l5MeN5!>Q_n)}<5pXM@t2haGN zm6LCs&Yo%6aZvfwrC-nde4)Cyvb?;KAqvNpixzGQ;YKYQwPe&{CUo;WFE6>*yaP3x zm7~v$I63+(v%Y@m*%LBvOpI=cPqnUDCJ>mK+K4YwUtZ#QZR0ckK& zwEms}aWCw+z2oXP#3X9^yY8DSGFv7D?qfSfi6XDxQr(e1eOOX|PpQq+BG-rECtI(v zS)s;|t+FXmV>b!Pmq{I;ibxD`g)>1HeOKfw#qTkbGx(AaE@;BA;>oy=p4I2)*ts|`qSlW9s?e!h~^c0<6P^2oE7D+Y-AoqA~tKyQRIiO)Px5xsJe}_pBCj38_;2xj!)&ukuPU6l& zn1D!BM5_>r_23&l6>k4Rut)s6Wf5z;iFCBIICya(%WKSzQ`&BlIWhFQi1tY#hY&J; zBPVajp>n4bB`?I0fwN4^=H8;?6Qvt6^sw&r>D~LkMc*e%OiNBmkR_Os3gH`i)NlS6 z=zgctf4Ods2;Q(twr1O==5TJYZKe(o?i`J)rYp$fAvT$^a&we9xtS)NX)!<3rFq-7 zJ?*lCp{<*%xI7|nCEZT9TYA$CE?LOF%|vQrR`>o^q5Z;aQ$Z0}3ic{2Bgjez%S$j7 zfSGh1{@0Rs$lB}VUsp)?dl-21_(GGtH>GWs`}ky=kiabi*Y!x6iV-UfWGoqwK2AmG z$H1icY}RQJLmbWygrS8N~0G4O+11aU-AuV{s z+rgk@NoHv&9%(9yfy*n1o|eP^;YR{7U8^L*vX~5dIoIQ~l58ekB0Nem`uR6>que$H zNP!o&DYhxV54_-~@Cz}uyUc%iG;OzLkFsM61aL^heyD)V0{7Ksd;SgH1dv${)_c5& zP035pr=&36-cyr2irFWYWExPV9Z|FLkY|YAo6*zjETMIZ9#;WV4(`Adi{c z--X0JsK?^GfpNywK8I-QFu;(8VR_EM`WZh2`9n}aOkn~7W~+dsnw`HrK-slQqtPej zY8cPMKd0Br>wnHVd{~*At1r+XpQwb4fUt`bdDcsK_5YLI81CyA%VotGLGKM`?L6ut z*czC?x{&cD#?s7UZcAxcbDQiGB0&wcNm1q8^+P{x|1;|xsdPcIQm#3JEMD(YTUcA# zDBs)cyMDbd{Fu$WsT)-va2uF8FdXF00o7#_lOzb&0H_5v)2zGZDhg3w? z)>c;5a->D_=IIY_-aH-GhXXH5It^v9_ZUzN*^PSqH%H!+oZI@eRz%;Egj7b>bQS4I z221F>ohYEEgoBrd3>xMpI*5yW9}m)Z|NP%~upYErX32*O$nrBHfNn?}U5<2y1gOES zz;%k@I_xA%yw)sT>eY^zSuyyJX^B1qh$OYZGz1525-iunB$4BJ39jC$Q#g4JBwjzU zv|fUkmr(E&2VrZvd@=p-yogpxXc7qimk<>Sd*D}%Q_dtMFlC%Cg)1mHrA5y4*;DPkqP<-@NcgNSZy6X z3Cr~laHd#DUmlmPu_O209G|gt553I%2Arn}#zGFUJFShzS zlJ#Qga%`jPC8TvC+c94veR7=KpGfc1@qDB8b1_|SYZQvLqF4v=sVCBV*wSGAT=LHr zoX?Mz_se;n%*I7OKzwks`H)q}DX(_0Zs!ZxM`X3)p%NW~JNpoCA1V2>w&^VFUOAjj zpRU`KQ|Jq|FbVb9AhNtKxtDdP<<$9Iduk69A7zY%g$BgEKSc`G06I&k1A0hZ1t+cF zlw0t>1@Dsul5P7A7ao>lPSdqFZzZ#F)hco$_mzOty%$N?pLr1(SG{`j2VrRZ(V`(A zN^jV?Ii7{LUssuakT@;QBk#Db3>A^lU+igwRKSY$sp=KV%xIzGSevvVz@NJoElO3T ztCD2W_f?;hK^J?==E5B_VBS__#(dsv;0z_?%T`fERzYbwsI*HW5~;#JErKi4L~oBk z(kW6;mD0f~|K!hfI~Lkv`?y4>C&fg|BFked>-lNF7oOrws$5lm3bXPC+!e+%@*jxP zx7Q9R^O5#dt~IWrjx*BynDjt{Z-6XbkLR4zY^%wzEyQAv(mEDvvaas%tjG8PaQj?g6JFwn2r%eJF&Yu@W+WaW`a5234W{oNY^SR@^D#$9$%Vly+phT6MwfgjIWysE>;lxf( z?7rDvvr{R(RZ;+_u!h-0By4W1MxCHZO4Vg1RWVgb>Z(QZMbVMrLCURRsuYBFq&4cI z%);{0^3uk-24s;p6l?3`bq(6Y3Z?XLMM6PfZY%?}#GUL{v7c;Q$Zc2@8nG&CK^Bt8 zmrluKG6z9aWD}h%9~e-yZHrP`v!Xfdq~W#^Pvv`<;Epg5Pb1(np1&j2?;&P|pWc&8 zcRbuSdbv{Qh`?d=kgQ#{gBx{fT-CT!%bP!cxZoC!NJanUyK24PxLM00-8VAx{OC_~ zjcvBfHivhhxA~zk%>O2bc@M5f74fq)6MuWSLHsN`!SZB1iEK`!jt!+_Vd)H^Ljwan zJtyfs54(CE(cL?8I6vP-*qW3ydUPOtzk!NeM?}t^I9Nu-&xaGyZx60LujGg$aBhuH z9yd0+5bP^ha3W}5siT^ znBJmYpkc=dr3G6KpN0lCcplc@KYZBr@Zo#*j&3B zO2Q$cg@S@-&l(8pM=WpzBu=M5Eu*N*qfmCCv zk-l>zHZLJ}OHo{I`;GeJS$Vm|hki!%I>%52E!XT=byx}$ma--=CL=a|X=IQ(NWCmB zA~hm4N|%(*7-F+h^|H*gg2cj%qV#PBb7sD=405~1tc-%JtgOtFg%vrKx!={9bs0(X zXwS&aOw?w;`#uc~iVF8y5|@;vZGax~j>;3)$|{eYKXAF_BxbX@8K+kltBciV{RCpP z!{J8EX4dnuY+(lSUgc_CU`l*iLV7@QVn$*{P*ysAO}+(*RS{(wCLL2z1L0+5aZXL4 zx!jnQotsh0fCYkOKcn-Bay@{gfwmj0wM1h1k|c=UmP+{j4_R*v3O<+D&~5{^lK_6l z%K$Q`V}Qu^${NA)H^>SwzDQ`X8#S`~J`acuiuQ|l^`zo)ar6WEK-#mdeWWrcadkto zT%D4l(jfMqrd;p?SvK#D{0DKvj+~qZB|ML<_m8#CaXEo|lkBtJ1uXZVh#w~@OwLm! zcXXrvS`BAA2^}Vzvt(S*f~X8#Dzt-BHCnAMO_#yEy(rNcbUJwGa?|qUX0U^#<(4P` zUA7caoqz&{J4i6Qgg?AH)G7N49xh=;8=^RPIj^A3UF@sG+0zN3LnXu!)`3WpjF%h_ zxb3}*6YgTsF7IjEzmj*1xg-Qnd=!?~Vkpd5Op>3MfB)Hjt|R^-YplWSuHE``-n%#NTBzUb4Txd1 zi_K9?qe*nv8dvYl`h~kTlXlwf(s5acNIHW;3rovogw#m8h~6a=5RvTd2@Y8YOQrQN zOL`9`xa5>w4Dv%q+WR*M5{)D58Cd$T`hT%Sv19-=C|05?v|m18FdYC%iWPX+yB+=G zSB~fESgNHzz#9jtg-3qBDiIYC{|JY=GqD>`Y*bY4j6oNAR;YeU|Oyq1AblpirOoIMMPTk zC4ni-!>U34J>2>=UC}A{5lnRTWBMWKv5H&MaY5v(trNJuJjBg)4b58R8p{O{>2c^W z!d|OEwbLaoLg0Cc71WTOhp`q7M2PYDb-XXZjJA;NSU_?uo&Pi!UVSZlV#}eGWn6~` zJSf=-@tN`R`1p*p1Z9T@^8Q!GY+1ET2GXR}wd>jTw)%b)NyC^p<7ATI`*bEJv3a|o1t0M!vfI{dm zv3)@o{QJ`w$*Q_F`y&P4c({lZI%NV&Vl=uMwMJd0PFU%Jm7@KXb?t{>>Njf1B7_qB zfC(OzOO|NK;=hSMrWuX=R|M!|()fU6Nt^B5Boo{mcfu~P<&pO#q`)?nB|R@rqwnT} z@>fi{=iR$Qy30#!575m_eMAN-Ed#}dVnay@a>$?|9D%9-cDfketvb33NrKDKJp_?H zzmd)0*$oj-2^+NGGr61f!Vy;bm5RJ1CnYcfNRPWKa0^L?Z=@n6JwWaV7zuiPcX_IH}UZON+LRO_5sMlq&wZg39#@y4S=i0 zg#^;+H-9HR3}jx`U7V;h0pulM#IvH6bIWI^HkGqe$=7!!LPEw!GMN9H4DRVB z_9KI(?QY^>aGqh1=|=3~7m-7e%pR{`M8j-Vh>2l6k;AXuk>3%^LV4N&zseyKPJFi> zRJ3hzZLw`}uhtXhNZYHnS1XBRKwH1PE?H$|#xj91wR2~sxBXYAz zuY(X&1i2$3D~(`87(-Udp*k}b(B9-)}y#>O0yJzIx5G8eo zH}De)Of(jp5u-V)$3O+u3+g;F@Hq&wbgqJrL0ICG9Xe|n5@fN&z^jei4fpeksGcQm z;)l{;%U#}qwaqA*TA-H&j#^H;wGJy^yU+7jIzJ)E#aLC$JBn-{^53(znWd!nSkYwq zf$u!{jD6?rSso-bc$e}da)T}ufobDk2QMH&svkYa zMyn7Z0I_MD&3@+$z3gcX>0WW-huXa*7lXk&OZZ2uH2d@akFocFi{fhAhgZYQZZ^gk zmm#pj&Zw~)V=S>p(b!F5Lu1E=Ac7#hvvgP%SlFfa-ocK&ml!ogi6$l*O;6OACzdnI zS$zK2pn2Z+`G4Q{`+ctLPC4hynRd#3U-xwpZp$Yq-~GbuM8P%;0rP%o;85%dPK|2< z9r3O-A%yrzFUuBRytGiSmEBQc>NZ$12w>1^sjY3k9RFF$B~jY6O%1Xz@G=o4tQoPLH-Xdc zq~s>&8x-On9iN#UBYY;mxova^KXH;i;yp1XCL$@0_X(}4ZYnLTG>PSZ{GR`Smsv5~ zr=br9Rf*nLdyj1AymtC+i_m9h>4mT8>vYC3x|AP2Au4pXm>e0O9L0P2)iyU5RWw<| zs=Ggy$V|!W$ck0(kdb0_WKO7`{6reLjoWN1R7Jk5hSij+7iashS zlHcUrv~Pb+6@q}9(A@Mcl-=>cBzEm!GDED2Dhl1Ig-v)EjASyot23*I9G|n@mmE2R znA6l$KVJk24xlw|K8!8XHkLH8RX+5L?OTSPA*Yn->9uu69-y9@_67zDCJ9MN2>5_}Qf79dn2ecxmbN=8P)}my7``0ohB1rDFs8fU}aav$ITQqfkjw zn5)38nGIlu;^Pw%;>8deT}BNIXu{3r>}-osC?^I6EMbYykGkL5gUg9G$HgXqI}66c zv@lyAp#&LXjoI-z(0(%K0RJxM>5#T^xpC%LJ!U7}DI;v22uDm|^hR?$ED{!TE>f1F z1~(-WmuHB}iQ)CJu`yzVEu)AgF)>C~(OiK( zH!4c6j}oG6*#$J7i8AKs3;2TE+yZ1NB=OAmxJX3?eI7<~F)w@XYwkcuHrm7XSuZ&Vsio+*lA* z%oi6F6eF{oJ%Z`HU&;Y0q#+vm&X%q5QQHJ!4umOxEiK>|ei#$vDh9Y{ftKUK7zlE4}-D2Hvcv!eBv|4sqXm#)fLSvgO2&<(1!H|n@f@QKt z4e1$~7_>jVPn5Q)f;|7RKjjrns!!H^Dh2+omWnTA9r0;Hb7xPy_sTz-HcNkP%FMngI{ijvH+8SzQ9&w}OCV%MdFWa>>x z-8%M$su;&43xL`Dg`0QDtiQ#lyU5^1A{MILzQ4cY5`VI=tRw>-S$bob5n6dhLu!fv)HW)Ool9y=N>pliYIJHOkhLfz{!H4DoH}5cRJ2dmFs`t+ zu&xlReN=5%>n@jm(lWDs(a{aqZD)zkNyv$p6AlX-<~!C?Wz`mO#_p-H0q-gr+Vwdl zt3}eICNv2H5}7s?0#efCZ1O7!QTNy3iaWyqhQ8)xztQZUwgqs8fM?JtJ($U4Gs`pb zjm4QoPGq38A55Yw8ED%tC&-9)GA5+QCu%d<^m1c8!z0m{%(NO~x`a zo|2}1^H_k=TH%bSVLtEAYA9`ga)a$h-c86!%t|&p!PT4rS926QiC=cI=@;$&tIo+n%Q;&>mXaW7*rI zy@hBz4;y6uhAF@Gry#F*A~|qifN88T<&=y2%gYX&(Vh(1=TR=?1^Z=zAi5VV?>;D$ zuBHcf+W)SGI1SGJMEB8fkvcex96IE#*+<7{zDHEJD@27lEy}JA$-+Ikd-n-MQsf)k z{W^uJP4TX;bgXqT$>->0a`}a| zePdUl7W=h7Xs}RqM}SWF`{op z^4`ii)#YznA3V}N@_ex1TOqJ6b8lT`ZNEmNKK2ME*e_C1_AzoM6X`6O zm4_Z>-M7n#;twq`Bc63AFdV5sUoHli z(Ey~Q2U#*gm`cYEqW$~#r^`qrok>2OCH$65sB`tfr|UBp4j_|y3-z3)^~K7cu%1F>p))fT1pfmLYP-DB`aKW7V}G%#fGiG2C{-V zi#fw<%>>aYlb>~QNaqC~kOShoo5^d~ClEPT*os)!#o8q~%Su)VQmE|#htq$p`7D^1 z&`DwU$uqI%`17Z8N={+}(l5nC`86+uykN`(fw=oR;#q>p>L=wxkYV+3}*Up#a&S9Y_LuG?BnmL?Zyna|hEyX%4yuY8!V^prJ6Z zE+&3ZjlHOq0}}9g@=svGMdAl7`h({M5~{R~`;c}}YMZ0A?UdfY%zGz3Z{V{Nhj3=* zhg5|0EhWLALXE^Tq8R1;pMgv9PA9gvB&PTa}!0kDY%!Pa``Iq#% zw7k4bWy(lQ#YC)x&IB5@IF{}KPM%uY+W`fFC1Pzz^Og4YzG>|T$VfT9ZRCM=4LNCj zHi+9~++^C4U3}M(4z8#6H%2~Pu+-77(Z4yk6%Lmr+X!S#z?AnEX^nTX{UQCv1zw51 z_LcUlyla(Lgh_Szdy03LwmL0sW2Y@4@R-WZLUZkvWwmGydVpr52r`vTP=KhJ! z=7K%_z5KivoOK)tv9RfMFe1)gRusRxC1F$2CW8}P$Mcn>)eLOgTd-aQsi?bjhYR|2 z+u03ALDVze5s>?>2Ua#N&O1U99J9T>GPd#CyiyXp#UnIfam-5Zts9)+%Nf66^|qx! zA2^YyDNLMSlCO`}$K-2)Vr%4-@()^;9sngW67AY>+~<6Z(;Aw{BsMlDOE0N2vl_)U zB=LOS@rGRokcN&waJ1!Y`KL}a@>|AIYpQF|HYC->L8&(CTgH}#KzGdXTH~n!{yUKd zpY?LAXsv3lZMeM5@%N|1{stLb7k<}qk9l9_KBLNd4fZ=C0_E@_VTGk$rJlv^`CFVO z`7)LB^WLAKoe}+h;C$h>Z`78Et)U)HXT6wHd|8Ww0pk z65Aaz)mVQAitn(mEPRT&P6wI!_z$$-sj`2jFJ?!J;QO3>kvLu;pFvNn>kbqNL%CCn zvNyUdk8@piDdB)DSJ!?t@093)+2rBC{VSJ-xPSa{#rD$}!YEFawH_16`~LLRHlq3J;DOI8gbd}5 z;+WcIZBy2srUI;eSib4*MGzAF{5@g!?2Zj>77iWCFFJsbdF6TA1TLdG4UM_vtgK9{ zPN@{2UKU){jlvmcDJ9_Az~#4GT{X<39$~=2r9igH=`81!V$#RS6pT72GT?9-Kp0!jKrqyLDFHaT>12N2&tX+v4zxs1peo-)K;{s#9__3b z{Bk~;-|k4iR&e9q3!6D-VD8U9{ZM%I^ZPMlfpkpfCU0LhZmh?N+ut{R^6Txkxh?|w z*RMIhIWt0B_{QZQ7Ikx24Z=Ws(cmjo{A-(-to%4o|G`S_@^ZIBz5-bGdw9&8LwjlI zCi3x8n6bBzQP)YBpt0AJR@=}w$w=*~`toBiEKY8GL^$%Ewmz{gwpOUks>!agsL0i> zDO~cwwDyBq$%^N0ziFR9{aMpS!-fr7+Y{ybG`HmS&|GAt2k4%Iw!7=M@H3*XofkE6 z3aQ5(WnF!8Jr4`!bfqRme>(NF8JamEtZ9eQ$49Ffpr1ZM3FA3ks>~=Y%P7kOsRfU8 z$*J^_QnP#momoxaBVHFi$*Dgn*gBl;Lb&V8u1%e?WcIY_=jYrMG#mPTeeTQaV(-K1 zpMZgnk(7UTE`8MZ?4y;BI(3gUUu%A|-tJtOXuq{%BxfBeaJUoko~~=r0zMl_h{Q5RZ!FJ=zRzoee%N( zPekc;Jx8w70#ZP))2{$^#P6tzQTrzg`8yk9Yx3b@6(xIL|`(=q!`i+2EmY& zY)IlgQUk-i6IEM0Vj`BIFC~YQZrmlqNS<##e zijUmzKSm`jJ$?CN>o-leO_`2}D>fL#odpNp+QXkICB0k8nD>bAF42I3EYX}^RZ?54 zJ+<@1j&{gSts*fi$Okm$Pp6hiBg)4DU_lk(s|Sj7$`lMeqv(g)kZ}D9Fam@JhpqS3 zh8e@N!-02fFb7-vlLOC(VA9u}7r5mf9+fJQ6jlVVzSHT)#%jC9VtA|J1t~UI` zRu6&drA#^Pa@XZZcd8Bl<+QKKX}5Y{$MdwOcFAc=WgU!zAJQvuF`+kqlis9NZ~&}< z%Vi>ZV2$`b=%BKQh6(%STG%gqWrZ=lQj9zje;f>KUtp-3L+)2q8qmB*KiST4pU2K7-MD54`My$OH^E7lCr--x$06?Z9 z&37l@P|~S1_u*g?n9tSZfll)sc(w);@4+ODCyRArmrUD!Sxp~<6j^hB8uk-ckjH@Y z4eDfY1X(R$@rRzoMm3NHUG~>>P$5&3SJ9Z-BOt90>4QIw^eq`H)so(QaVIjYuv<*>vJ%o4PO?Y?g z*zB>qN7QDY@elVN^ATHv(*|wT8W5$VhhtAKq(n!j#qeE=SWPLGGNMI8Zdy*RR_mX~*cNM~-=m2mKQ0+iSF4r#~-tQ{OPBJA9H2Jr6`U z1e@UU2<+@2f%bRg&|nTg1bgzB#j<5TkROsg*M%)Wj6lp5djqjI5J>%g&#(h4)CznoZp1{9|r$uDqn}9IP{{HLclK`p9`weAo^( z8IPTRAbwSS?+^0wnd3p8yG0`JG~hipYst$9DpKS7d47B^TUpWOj{LM2W5nPjEj}&Y zkPwe^l()3)K3;JKPH!ZarAe)27;SW7UJ03HL@B}IHOblT2pMI%WP%J6Jg=G#>GRIH zT!B}_R<9^(w|?~K^$5K5*9S)KiQdy$uy{Uu(y zR9&66&%fG9<39Iu#Hl4S?*HQQ^U}(r^G5&T7~QQa7!#cqk{A8UXmDRa;fgn#$y_K@ z(s1s%`rtc1JI3S(r^Q5*-*i8};#Ch-^^bIGf z&HI4ffQnz>zkXum9$ZVOxzcw=QhUrx5m1G?%6}`!NOA}x^o6oY(f`YTO=mrvu7Rt7 zo02+Ksih9;x(d|mI!%INyc%&Xk2y)hw$<0SiG;J|g1^_Je#b5Wh*jIZRcg&e#s8h{ z2bb|^Ynu~M$mCfd2;&`Qlo zQ-e-AU?(4f#Ua`R$)45t4edTMT;#xu$-t_POT==CblCe@UGaud8i zvyKDk%}>|+0J_|75lyw~*yOZTt89a81050M6fF&u1|2(^c5Br!r&UL>XSHphZIB}! zPKEp6vO zhgbd$x}}0LrimHep2@Bug&{@3Wyu*S_=J`ESk@ZoOUcwN2=N7dRMvOl2yfhtyq)*i zC%e{DrPwt}NhX-MrX!xmS8Pp4l0Pcz0_DB;zZnB@+&9=U@4q)f>{_5qFvXh^Oe=PI zu54O!X)5VGoP0E$uId_Vo!n1P?yC}w@FKsdElDm+E=*C;0YFW<&fhGMesSru8J#emS8!Tlt>8&d3XY?4CSrcC#R-m_l*rVb{6;`J@&i1$}=l%XU4YY7i1Qi+VhhhsjS1Pg6nQ);;#dA z_wjtQDhRLvL+P9SYqfWfQOr_`qq{`JUG}UGw%_Zl)%FE0% zm*!i_Q>(#-2+)N+KB;h-OosafLpu%qt6OS7_PijN5b{o4=(X+9YumG(_I7DqShv~( zv?rVCE%0<%SQz;Jzm`}HqeluLNV_^XvIVj>@Q~sV&s>#zbq-*Fm+yaeS!P9rwzFfg z`dJ5#C$|aCRt2j`G|3(tr6zR4vkr1l2RZ;9d4}O*gJciiY>)lU%4YjJotAvA1}5r$ zwMVIat-Cw5_gn2p0PCp{NhPV`s_<|Qtg?_U^^<;d=6O1l$FyqZ;{N@}U0sz>`1B#X zFhfX>Aq70CA=O+Z`ow`%W+Vq3ZZ56-lV(EGfmRO1%3Klri1G2-00QmFN+B0xE>Cir zM~s>{9sTYkF&UA5F#J~Gu$BKgEbvuXwjQvmJ>}_BTMu+6*nopqn$4Lea6Y<`2$BxJ z8>DeAlXT3Sut7{h=V<18lT6$c^jMKH;ALs|DH649oN>@Lv5a!*utlQ+0)ETy5H6 zHweRXtNqX5deZ+TgMXjBS*hVNl#Z!YGF_i5LC38s|v z)R_47F>aA=UL#jem^pXy^kHsP5imJyV)FY&m2u@}!)87pB03;N45M~o^rh}^yKs5g zPUV|i5?IHROtz)2x+PmoFFZ~D%q(SEvargxvjl{x=&EmD77MOtd=Y&C#!Apcv~uLF z_dql;;IvRPZ)oWT-u4H(W!nySh>1lycg|pTBvozoRN`j6pJ37CQl1)s4nI0 zYr4!|xL`0|5bqlA20%Xx3Q{ENz!h>jvHmnD+2B~ zXXU?T%$>3wu9>uiCT}uQh&de}5b16-I(O(TVwPlvv`gkVGxt}FNm**E|7|mW}kx1xyubs3w(V2d|HFg?GXQ1chGgFHWi3EW*nVqRJqJ5 zD%m39^{db`{wLewKjROdC_PXYT)v=D{Gf5-apSLO!Hop6C=>ZhC!(U8Md`gF0Q2Mn zz0F2`l?0ZK0Qz29D4&)P?mJbWGg)Gg?lAj{8}jz@2roudYR49})POgYPcF!B_P#yw zu6I){fX-`ktVg;%$G3>`)A~;vY8t+)Yx!kQXl3Z(hHH&qHZ(L`PTliGedBj^d+IMY zd|TfhotsfuMs8^m?u}U9`N-L>iKC@-N2+ZU*hqG$Tqh3m8NzFNo>C}ii;NP-liQ4M z{EFRK9zO7Ky)8Bez)?osj5Yz@i}hf(SZ|aBklwhdnya|ew;wbhAf$x=Y)+eDTT?wR z3~Mbzhc=v^C|d=6lBIWO3E82thIMV_!c&S9AU*)Lzl`D(Wkonws7#6m_#iQ#iA*Uo zDYK%p@)=VI8)N%`>&A4T_cZV+DH&`xft>uMjk8NOF@~g+{47=z*V9Fj4nzfS#JKeN z$IxpKmQwl5Bt|o!r(WSqU;CU3C=9I;G4R+999_y!qWFRu!ZC zaJl?`ilGYs2)X=z;M*i)-sfP=Ga4aMi+?gB9)475SOazi2pA*kot`G6LvSvsMpgF@ z`pMK@17!+5gF%HK17wrr^8_g*&Jj7})B-Z&5*Xy-@q(Pl_l{Vv3ich~ILC?=;RCu;|@0jA=(QoIOAm|vJ> z$rTHNn5c-*q!78zihi4S)EyAzy?yrA)$b9=SOW$u_fOBf>|Ap(-!O~YSJ%)ECeI!{dzKX>=?lcD0LHA>!_KDB<9!GS z58t`7IJ`>ChhjjkS%wcO6a@h|0DfblqLNXe1Vtacn=kGHNuA5#8Y=X-H*wwf#;0N5 zzJ}*_#UkRapaS}adF)(ecc#CI$jO`fWLXR;S#rIfS2;8mRhA3tGkpi)>z~)S&+{5% zcp`Go%ManVJ}-Y)8Sc78yo&PsC=~UyHx6*Lj7x|17v4ZT#0D^S4pjisWdwpsB?GCt zAJtU(QN_cHhgj1CjGo<#1{Gw$(z^e84McK$y7%_Pa=NiwQcQj`($dp=4FWzZ-6(YD zmEWFpqYCQ)aN3;hetzCwUXp&iavXE?ATY@X4!%F*tG;PZE|USDHC*0Lww05dQtRM) z^1*@2mblww#3jvF|8^l)tZBH4ClyW6je%uCS@6#6jeI!uD`xlCnoAI$h%}Yu`Hf9l zXZEklNcobYDX4gp5Hh%w-Ct3HcG7O5i?emv0&aECTKDaOrk|t2Z~IpLDqi047PB}m16jnzzB8x&_UtU&QkeC;3 z786X-CVz|Sql)0FL)udZ_nmKRiSe%!wz)C5S^CoO2y+PU8xj#5mK(b#O8m;NB4CA< zG>+z?b_68(@+kIjC zt9x{1{T@0`WV&<#_S10>RkkW+*RR%8Zph@xL*zD7KVha+iFtl)f^9D3?*?X!6Q3CE4sSnm93W)M){^%gW{5 zXRjad_+X`<*Xmdi%(jZhv>(D#t?zMPExs^QaF$f;%*Bglh|aW^a>n^Z9fGq`Vmr=X zfcHUaAXRN1=bBHiJ-zPq$ET0LlD+!OsUOFZVF_oJ5fxP-U}P)VN?p#lo!~yjOAR@}bg8mmFZbL zUVa1750{CqvhuS<@QuyC{8@F#=jJO*KR^7`^|WU8EYWM_FXgE1A6z?89Ha_Hs<%~g zbnGcI;4~UReNQ`;st+A-6jIAyPGvNT1V=^B0p;HtxIdpV5THTW{b&v>$O<%33jZ*D zprBEt^hA@QnE1u_Y(+_2fJpXda(=;xv!2W%A>K2E;*(p-vWjGXkv77exwCuUgMDwoqB@E>v!VGP|qt$=_K9FeZHm~JY$MJE^xI$QUUCf}%>t00UeQ)wF_SlkBU{8qtPlnn9 zsUhWJ1#wr_wI-no zq?dIv+p+kQe;(wIW{Ngm`3-^E#CvQ7Uf}-yT}Gp%cARBT7nL5DXf=Ca_<{S3RmIlS zCWn=Y71*UxbnkKr!sY3yP`M}+CCz&>ckv{htwbT%FW*x--H0Tz8#L$h4!!aeZEKL!(xzu{}XVwvqYg=^1ebL~K>W zTWOnS4d&+4sw*sJC$DqFflht*ytbk=qgWuXoTU!zs*O7ljL(rN-!9Pxhb2b{wC@tq zmp#{BaS7pwh$h1Wjei?9oubU@Bif3R47lIbXJIv5wc$n1n@iy{OhV4rmyp-lrd`=} zr6QeVU5eu_W+_V+GefBbrX$1!4rfQvZOjh#V|~-1-!4XeZV=CZpd7Vn?K|W4uKP*6 z-u=#L*_!Tm&JCd_6nEK0FF#X@e`V#kgneXaA$b{wbbHC2yw&LqGzumJnn-JuRW0?> z)duf6x@Xr>0r2o)2#7i0p1w^8V-u2+6A(JkugS=qXv@1Gl1FqH64wRqIwB`_?yQIJ z{g{sSWb}sEcs<1G$Qd07?#2JWNOL~^*>%Tt2gMV-J@o)aPe)qxdmc(t9 zA~~m)hNp8WX{o6Q$1>aOm_%q?B=FPNgv6}uysN+E7K#bw?~!1WHajajTe!~VSQ6qg z#CAIT33-Rf%FNEp=D%jMvl0?Ssn1cl8Y(6sH8C-spTuhBp(42u;6z0hYCuV1h#`Me5I3~-OWy<2e!qF1r z;nGx5o;zjPmbIP_WnnMrzDCVProAQWxLI^ohD!PJs6vXli%_{S4}Lp@dfdaM*OEWJ zB+*An?k+O?Jg8wHLfi<`Oi$1O*=tTbc4ptRzRGk=oIqo?@i)Up!H;t}hx8+CF7nGaQEdo_5lfwfOw(zSwa?1S09aWKg z&T5J8hsxr=51C7FZd^G-`FnEUnlqOk3vUna;TInWY2x#AI7qzSQ06RS_U5-#?B^{O zLn`Q!MddDpFk;tm+jgboP13p1A#*pm3F|hx#%|?<12VG%MLI%Bhx;>DCnYWzab(SF zncZ!>OAhddcZGY_iVg0CA5GEPJjq|2o2Q2x#>@6@o^9>zt*!X;bQ3|bY31~WZH5Ga z8rckQOHfg?3MEAslqJ^lM-Jqc?GlRyGX7f^M=s=NFE81(Rn(NLHtr3+^u3n6b@O*( zfAMJ0#%7^uW6@$4#3Eb8Er{x(mT$?*;ELeBR?D~F5?4?uvkq1lPV+@qW7iCDZyCXM z&XWGTW*5TCC0Ag5U)HH?ja`3n57b1d>x>3XFE`0twr+XekJc81T@E@1t6w30`CezYOESE;Fuu!J)6s+O7x}Sju0ET4qV(z^mSEN zDocj};`%@Je^L9p&Ws=Tys~m#9kbQXtLX$z#XYdw!PFM7>q{oV6{0zz`ChVsOk=Xn z>beHd_e&t;h7;v`VsV&^RjccCdA)n>#jb5+cDz7eVG(~6C(c%WK%M>GN7$@0Or?l61Dq7vXt&6#J3bI* zD*=tiW$n@v^)G7DLy6eHyw;%rM{K~S3WTkjs5=Op`;(v(1hJldJI4ays}pgkjcVb4 zy#AtG!mBz|a1j`7dJ)b#2#~Igu0dQ^<+ZSa{5T#1mqe=wv^;IUhS%HGz)%b7_t;Q_6ue!g>4#Z3{prwWXP znWgXxNS#KL!JLxel$ny0oy1c$n~)F-MI!yO)KKQms*%U&%RH^5J7MU#MkC2<2p`>! zE2y~f%|$W8E7!L)NafjhH0)x5NoFxxng!_a%jA+AFK-XFYqCuZ@JOXIgR$`IU{iB5 z0*2g|2GAhKHy;sJ?F2aZ)?ai^j|bQu+8#0i0nyvHX{no1HlBkL6aGVnxUnrw`BhaS zfYuKm4|oD$T(b3FIw#~00yeuZ>0=;na^X(SbiH#YWJnR$&Pp9Xe7GX+;yKRb8EUZz zpyJi*g0_2#U43mgn8nMz-kYMOQ*p-zlK1XhYdH(HcZ5U|5bJ(JhN`L#mjgxf$Ar({ z5uWvbhGK(asnh21)L#`C7aZl!LvHHt>a8MZ+J?|dMCR-vt3f-kJ5exPr9JE4y7BQ} z@U6jAZRtTas_p$EfEnQ=R=0|Ls>aVseq~Uo&o<4U(-{Lq!{t((LK&!Ezk*ln|q z&?&91cBHpXSSY!IwH|-}{ku?Rl84vwcx7ori`csFc>ACHgA?SO4lDbQw?E+jJdTyt zfA$=A^V}!;v{r;3=V3JO+{fL}Nfw6}U%iPF4hd=vn?3EY;kwyeZ5@oQW3LW@;9&oh zwUS^A)pFJh8R4>xtoQ+MgeX!f?c${UwgZg3`U76AZCV6&T+?+~K(!&4iug-r1H^~t zvc8eqg3Cn+M7(O-V%q`?a+G}YZMST<eKbYMH`QJ@9{KFOM8x*_a20e2yEhDGl@)BCf%YTUmV{v&=Rc^J@1oBqU1|N5CPmtfZEF2p077vizC_p1O zgF1UA8sF6<;5$s2R(~zhgx?<81ah6n#hDC8&l<9lj`@jBIV`%Ae^BgqOO=`(UzgP_ zT{pm)Q9r_|ARoZaXEL(Ii`gEj<^x8()g|xr+k+lz6zXlQn>SQuU_Y$ah?K$A3 z2C7M`44I&$B z>{hfO5=$Oa!|gvur@5iGW&ju@v1&lX4yn=eBlPrZ^@fH<-ul0VMwZ>>bF{+vb8W+WtAI zKMo6U?Lww?;mk5{I^58&QMcUB~-ZgaMe$7Wvh^x0u{ zvrpUJZ1EaMOB%9jDjNCD;cR0~kWZF)4a6oiSdw782=)`8fuXVP3@Wd!tthV%;g_u~ z5B3wKfnD3UTS=dUeJc!*Rx@NA90&L4?>zmTHjkj=LdAi$)lArwgpVd^Z4YsKPRXN@ zQ)p4q%rv0Gbs?9?^zVtw_n5X^A}&2}Cexi6Co&x`RJ+xcJM6w^jnK7}UE{uG?b_X2 zj)>N!?2+Aj4uk*S0T`=8^dO})2B70UWD!*go&B(P_mRWyyVr=%yx7Ro@n_C!0oghP z*OZM!%K|mPnk$88{ZOL&nzg&#kBFUKY@w@p*;?7Q9p1La z#@JZf>LpoAb1}hml(Vi~BWEQ`Sh^eIlD%{_xywtdB}QVU)#nn=>Q9S^fg z3uM6=zQOG6KacV@#%Gd9U&bK*Lnwr`=vz}-6Ly9M1_t@ZHpJBH>s9n%r#)Ah*HnAr z99`g^FQ7es#H0uKWdy(+sR|EEjgJ!D{{pz?>c6y8yVAJY_QSQe{-B%Z)d-fL%B6wY zu<#%_8Tz`+1no~n2mB~{=m7o5ooKoJDHs;1$NF%;n5gBeF7MePgw_OChg7RVLZZWc z&>{odrXh+iFQ4py^iXQHkY8lT$P+W)szY!X8?Va9t}uSG_2fnEpEvG(eMYD&Z_01Z zYsqgbtf@&YOD>HrQsJBnV&Y7p{BU|B3IO4>(ma!xlUrqki<}|5eP?_xwr@6!0kU|k z8+_>s+Do8zgQ)!yidK9JM6g)$@l-LoIi|Hut7#ZVS5dc+$sr!KMVu6Xf{Y0x#yZq+*4I-YXVB1K0x(N@r(Xk*}?#FA!rO+NL zrwqoKyh?xEPhSzuK>^tT{G`EyCV3aTOqyWGTA8 z6_C{14w_B3v-r`2tYkECeaTuQRdZA0w=bFlGL{g4c9mqz!EdjBzJK-jY!Tl10RW`p zb@3<_rF4g>@m}5OLjRNQvjeNgLr`UdoUYgNbO39;g0Qw|`tk>pgqV<^`0!}e+7IZV zu;*{%h0;SGieUx8=BQHDN4KL;#|kYe&nGWmgu;1oMNUb+>d-}Up_u&6li$gq@O7Vx z#WCgj{BYI92?gjA%eBN6<6mb<0pC1=*I2YRft`SV;S2*YtpCs7OPzt8136NQ5H){V zE7-OSg*X4?LmlQw)k+MldqenoxM)jw2sA)vH*x$>^)oxnA+a5M1X^vifP+KkjDO}j z5IQ^XQ)6iAPikQ$C0oN2-wjHV{?Dmk5?ILBB z+si_l1hSrODlKagZP8T4MJ6Of39f8pLUy4@!j;__h9f=smu@*5nfPLB2#OiWdWB-E zD;w3FHbZ&!$l)&q;=mqk4)rP#n@gHY5Awu`y?S`oaRL2iB29 zFi+%X<>ZK@nYA595Z_X=mg&6VOlNV^+2Wg*=BB2A{4?39zk_Wv`@to06wJ&fgdNkK zHXkm@kerGDmb>JhqcojeKtE-kO>*NBvl24nGLo|#$&b>@vefod#v9`wvQvpxXEM1+ zzgjq-vHj{`$V|lt4b*H$x%jq@}WbFYjlI<-U0$Dx< zFYi%$fnEY(lY0gSiYN%w?@~(PHgFocG2>aOx8%%8J*C$ec+As;j3nyVWyd_RikwYh z>rFpJ#K3%Mvs`PF!HIa=0BQ!1KnoEnQ#{~AuA~p>|GPUp@~xr;k5 zhkq7_a0Q-x3TAUH85j3i*cHEvHXl0Lrn0H&+csZS=kX=ncJjJA>9d}^dg5;DgMx>k z(Hla8Fyk0ZYyK|$bJvfjNw4+fH6+>IZQrsd6C#PO(;b>ea=5a_&spj2Y!}LXhgr_d zLv#`d#Hi@|9{AY40f0=bqdX5uo0;n-(>F!PHH~tH`Pan$bgR7WJ5l3z7E^SG79z+b zJ#VZX{FnIGUj)ot19)6lhiyyA>&WB&{kNgN@fyD_f$Zim9)8txCRK?Y=zd;pr8*w$ z=ngAqQ5U2neLAz4<4{R=swJ=Sn4rDkHvDh#{@>({cG8bWyXE8u$#0Cgo@FstsS9;D z4niZ1-`*B(vynPxpvR`nY^N_#Z?1_t@`!hK+VUYCArcnwtpkrpuS#OaqqllxO~1$D zUw;$!C>fX`UzK;rCTF|fLVA#$ux70L<;DNy#Ef3(J2Hv$3k>uV-e&y*D{DpTPGwzX zWv%cVTU!|jS<78rJIMl_R7XBi(}T7;d3nb3>*LN9e&t1?P2>a z55gWM${NJ+Yl!kNVJDDv7-0b?g&{lEhlk)tSzrXSr|Mz_Fv;#R5^Ul#{e^ zlw~!`H?IByR|QB>OkQ;4^{L!05~}m~hNU57w+>|Y|Bo-*uTwY#X96UOZx_t^`{UMu zWCI@;=)3jD78f{|q}RD0{;K%m-2RZ@6N1kYCWUPY`XF~J?>#GVy*LAas~&Wc7A*52 z^FCai)3j1({FKRHH3cnaq4#PA3pI>>qV10x{!@Cm=lYg;$IFkM67kh@m5Mn*XonLcgkzjkDUA%hD zVv)Yvl|`MeJ}#%Bi&%I zG>SGr7_4=+pLxv*S_6OLdRj;8U?y4u>n#jFw=k}GLo6xU-&U}CQPM0 z>8PdDnWvlSIGE_YL`@7#MMJQ-UXV&3bnTUZ9NmImbQCJF8esiFbOlb?5wv9|VduK3 z1KS+n$5IcqvQn*C`753rKmrqWQ0^f^bWj_yb!^Zfd8!Vn!xJK6VjzAAhEXt7k$Ro< zx{is-ODHPVy6B3F5@PZM%}Q7-K}c~(DVK3biK+~i`s%Wac`{E9dqZIjm|p93GPwlt zL>L3P!IG0*BN?)!A2cbg`Hb}=w(Eu*JoP6__F>9T3R!8pGX+)aNh^}wz^fS}n?g3o z`)XOT0X6_K$bojR7b1^r6Og%(i(^79A+Sm6*^tn<@EDoS&Jr4s?pYq_)ai;5Xmnn2 zLWvykm!Btgx^`O1E7My;tDNLvrUj354>H6ZC)0!AamD}cC1|$5R3ZCO@be9#^6WK+ zvzqL)&H!U`ngM4gPMmlfqKN-LevnB{HF`8IeYO8ygljt;2A|J@v$w%qD5$af_U+pf zfBxA=hw?OOvz)CrcXNkz&-ebXT@xowyoD5@Ve&Ocd;eKwYs8VwplX>7puq{HCT$+> zu*PtZ*rx!+{2Vu)HW2Jwn#5UHJHgV~OEyPEtf};L0*K`^2KQ{?!tNq*W^&=(HDpkO z=e1NxL!e^EY0?JbInfyE;Ti@KT|NrFXW?X6n0sL}g7FAKnLS9y1L^ATFG(E^c%Y`K z7v95mG7cuH5t8dY`B}TfG)XLH0C5>)J>!!yl4De}cE-4lrd%6&Wg{QMZft`YiQ`Ad zoW8nKgd}fDqB#{hF$POFO>8TbGjAx^ zB%suvsUJf>8oeDf74u1??z!Pl=3Kj{-h)>T&YS1PzdF5UyWUyVC8cmdm?sQFOvJL* zA*CZDCT{^fjEf_{#b?xm+3@g$m>5hL!RV%`)6ahVkEJe)_4Wz!P7*gKG@2$1J*OeYgXp0;Q!lv_XR9*Y+GGJ8=3Vj z2I74mi&y(G8V~)TQH!Xqh`yylMJqrPHwU9{uP7C&L7Kuq9I4+u%0@!38Qo}C-r$u^)Df^ zYJ}ASLh5qpBPkWK;;)4Z2r4MoL+Q(o4z`6ce)0aHzC7_%@9;0Jg(q;Sb<}Ly!uTfa z3;{ZbVRK{53F!u_o$XJ@n7pFIBEG07D=$y9z9ijGPd8`h%P#x-L7RkykaEnSavui4fYcrgx(`%w~1L0lW=_oPm$#0K6CQ2<# zcDPV@i0ozV<`7Wtb-HroH#iom=wDj|TIqu>Bp`@Z`$HZu5>!HGyi@>51^Pms6)LR| zsS6~5%2_%ZNb=bZ-7|~BZ1oy7LTGwGd;H0*d;5q=Rc?-`2;x6tgZ1$-m^X_{ zsBSn#4E$KCyHCU=VqTKo9L>*RgCc^0&Eh_)x;5hQM=H8>B*;@%{vW#D10ag4Z5sw< zcGpcF+p-3B*%?jj-H2Ud?_IHCK|rNT?;REvmbS3;4uT4(s9?i_(ZqsX)WpQZ5>2AU z_!#4vIp@Bw`?_eLip-I3kt1B+3NJIXV%O7Ezp^y5 zWBn*ZYq3v3jx#qvJ_|_~kDh3#r{J963=*aYHOVrP8R#l)$`b>!z)F(WNQ4y>Cd@vul}YL+oiUJbO3=>=<{-#^Peo zH)uI<$lElEw>FZFwm7`CF|&oyx{Q~#S7YfBkeMEGD};5^-#RU9p)6TNVWWK;LfY$ zt>!DLdD)-cxoBqKR5gNgV(Jneh+ngx?7w&V-i9ZxzsAT~FmRnZv+N*HTyI~#{fabe zuHGfcpBO^3h(f&gI6d*xI|V7}mbfDyX3;eM*t|mC_U?&h^c~8apgj%N0hc{4IGsip zKg){rlD`I6;cPRNcHXyf!L-T)*t_5mS{+EgMZ(W+ax?4+O(h0coWnMi(YzGDNCRdue3FKaJw1HfAk!_Jn6lWe0D=F?q-M!N?R751x z$!9yr@Cu?mhz!` zQ_Tz9^2IZ7%R3*3A0D-dL8GZN$__5(UcCJpcev#q?(lgHh#*}>f~wEt7#+-*Htqjm z6ux}`&~`tvPm`OgFOABx#*m>e!nkh#x1rF%Nd0ZDOqOjum2ltLiYCaGOcJ$9{#(Ts zvKd_(^nf>$Jk8HPGq}IDFkH5xlKOc!C{C5{rnk!RfZ#1B6`nHk#u-fOmE;!{IYs>; z=GIWlF7C(xn}Qf`!!!9Ak!5<(#$!LC zTDDEw9U(?ElF-`z%SL*OmYV1h=aUOOOersI)qo+?PFzb*Efl zEjcL$d5|kAMbK%JsHh7+&Lq=+IwRjpO@EN^u5HsT=qG0}j`_?1tR`SK6tzVt3ccmM5co6Fow>ZLm$!5iE}PKW=Zd-zyK3&sed`_ZzFmT5Q)Ao6;XJ8@QIao7}12p%J~Mo zu|?qIe1xazpIP2$Q6zr}`-L=7^lt$43DbzlshzX``=>a{0SU=VVto11+#jebXjmYM zUM}CJ!C;7@i}a3Y(Y=z)({S)5zLQS)Aa8pZ&!e612aQ{@NZ!#({gnh@tPTzFleDaw zQ9E88799_2V?MMqCj*nOQoKbfL4bbB8#BEEQl-ID+;lzzW5j zcgC+WvTnbssjRB5mQ4>v^YYipP9HX8Gwr3Oy@s5)KMW^ZP>_NeJJ@-gg{k`C>e>+iu71e_ZvYbDd}Dw$lt*(9*W&@JD6>|t_2#} zD$2(68~6Cnml^AJGj;cR4g8RglZ-C`(MJFJ#K-1n})As11 z29J1yQfS~YI61>NNce`12C&n27Pj(6z7;Z;6yC*GIt~A8+waO05b~z5LKY4wGa@1@ zOzj=z?~4qL6sc$V&OH$TZ4us4-2vNQfDtT3Vcjib7pKtmu zT?IBR{$I$%7vqU5aFP&kP1}9?%=*jz#BEb^%^61oI|m(gKIYb#e&q1En@4uuBlbsr zJWrN<|HG5sPn+*I+=qAaUv;rHX%kqB>Qdkcg^+5_Szd;CTk+*%D|%szx^^^_LY|O8oN;Cu+nQ; z5xXUKPIJgXnN8caKIKPuerp#mTdAd;i@)-^RKy<7z13WNP-gOi+SZ?srwkrEZc4v? zf+0#Dkq})RUKC!KQIuSONRS~sDJ(8DH!wFaTUM;ikIP`A4FQQE zA%SUu`e1MuM8!wN%2F!zmAh3LnJFn5+|``hCyMT6>`tkQ-xqy)+g_(aUAb?Kx53*G z?57QqB_P929h&5o5D^B1xGq^2l!~fSvoo^|Iq9YQ_h*5C5HiMTDgf<~JaH%WN$HW} zC(mR)iMtlt;(gEVut)jE;Kc1oA-Yvzv9e?_b!fDi*{<+)poZN3bnQ0_F3=p}L;n*% z4=$HM6s513S!?Kn@S9#kV~4oeZe8uQZ2RV|n>Jg0nRPbj%Y>al?!KO2c5KG&lX)e3 zrH2^9jJmIqiV_cREcOVrbM~GQw+JNO;^NqaS+*zE%RW2;N47i*ZcUOQ*#;RG$%)X| zRUJvHjVp1>NzB$7q8J5jAI3#r@{?;G#! zsSDU1=HL|taY6H*$R^Qx>AelUg)?q%xf%tGSccx9_SO6OsiKULnUQJ18G-shT}W|Y zdX!ccmyi$Qp-}EKn`1W7EG#Q5HD0UL>ci7R!^0xNqJkqbBK3*dgm^

              zA)4ApBHI0o=#zcPGS z;Z&!ro%w+kGBS6KGCVvbHIxgznSHPNtSni2yrej@II|?(+Ig1ml-NnKwsp?RQ^}|F zO}gZTzErxxGax!XBe5dpTEex+YhsT70Ytaq)>Q!VItrMO57SX_GJ&RFEXQ;dM}pfG z%CwLi`bm)1A@Wn5V`+F!62yc`u*X{|xAnJ@ft#TAO8dxuN%m!a+1X@J=KkBMxAk|B z4J=Lf$f9FIV`YFDu2ddRJCS-E*~8M4S`u4+j2P+A0(Gu7q4udQ#fn z^u1|&(+vJuc&TN$IOfr2^-D&yG(}gH)xhW z1L^au(#*n~q+;2Gc9}9_;exFT(~!+7W-QG~8+dWkofw3VW)O=Xe8sm7IW}L0H4P~n zhbobRk`&9Pk?G3V@~Ena-FRLs@H!=()}Kx}4Jab)24o^C4V8IW1(^j=xuMx9kf2UU z!=~BkIq6v$I7M?iv$9Uv8}otWv+2}k8?{3C82S@sR zM>JQ-kfTR~8^ex8Wa;$!thDBWvn6LL$Vdmm&LlQdgI4yf z(Y|p3)=_SeTXfrGyp6wd)9iuE=jayd795MXCW9vxY;I+bPyKeT@W$=+QH0jvjq?*7N7BtP1uUhKU2ONN>MIOxt0$MRYHGsf88a>kP!SoAn0w;bdwSIKH&eZG5rSRI(%=iaN$FRYKKv!9f7%q7{0*GQM%&{vh!d@VV zfPI*uB6wDn;`W|UNT_mMf#qd-8TLXi>r&5rp$as=jAj*)>4}|Z^ry}IR|v<(n+<1OR4D61r~_$K1@K4claWM_vn`DTi;Z|G_zd%>R1miu|hQ@}*$BTX^tN3{Q*2+i8MoIJCn)-T9+yPTxUvsxvq{HDiA^NnC^nE~-7`%bt?wo1x zU9tnAP5RJ8DzA7 z&bYa>r;7G`JeTy(VILZ zF(rjSW!xvizH`Ir&!d8=|gyfYv4Y};Bl%7xBm^uJ|jQY@+M|JV$E zSU}!Ivmkmn5$P@@7QOW?CQuUMQAXp8Uy9$Ok+FlidCPV?2I&qRmL|J@W^61PVTkxB zS2Q4!d){-KC#WaPT|2{@6Qah*`6x-rnqynf1!Ls-r|=H`+y!!scE-yU6=pl+!aE!0 zBgwgvW5-I)$>_o`CHYalb>~hbU$%Bwh(cOka+0iJv3~&Q4m~7}a0Hn3!S+}n7NVj1 zP|kMmFGrT-dZlk{sGqmWyOSoEY?%&Tg;K#>1)I&A!<|`5w%li5$@?RXsLxiNgVvGl zh?Qs?bVrY=5Kn3|Lz^cd6cLAFV*edWLM6n03h)!fl&Y`;Y(xjTQRO;n&bGghtRv=b z@COc5wb{dyqwM$;bOUQ3f~XTMfbz(_ zHHg|su{o=_<1bbL#Yt(cC&NQp^RGHbcJBJ3KYBZGh+8aL>bGSRhqd!P+%jF^W$ZVE zD&n}5gao~o|44%r=!JV1pWGrI0l5SWCGGOm1eT`Pjj|DH>b1|19wd{O`U?nUwVHi@y z)32?C$v{5(skX1+JHB!ys{o1rKR-fd#h&l}P2?)mXkIQC21wdvP`b+7B!?FNAe{JF?#Q4#O=aIHBWfx#3o2xvRn$>*WhQ&2 zopiy;6;~rzc-TiW@eyIVF!j<6r!OC?I&!3#BNOg2{4N@=-0I`x6vD!LZObIYgn_nc z!RDrG_b*jmtmYs{V8vwS7p4`eJMR+>H^nP&N@&*sjF)$)vy+N$l+uWPj8H3?v+BZa z4yncBlV?KrRHy(3dSi)OQ?u&!R~K#-7U&Yd`t)Ns56FT{Ia&gQYd_{pMcvu+IE7QU z)?b>NgOuA-2dc{(kE@8YJ9U;W+hDhJ+4>WgS#nBRlee#;jD-?yZ-!iwkblX!_R-Q6 zPU~0U?0z24L~dBCU5Cd`#3Z4I@S^i^vpkD&2I7n8pGUy~+_75B*mRdJtXR|t8Vsu( z(scl_R-0x?wuw1h6SFn$B26TJR6-5|)lBDh&Y>IBAtx9Z_i-e>zW9R`Zko!OYxdI) zPga|Cq!}&2d%k?l(XXSq#FCWK5*6Int+nl~l5IP7IYx3WN0aNDQP#Fv(r_rq z9qG5X+RK@Xlj;Tz>;wsl0|gU$W%lCGi9w$dKu4rFBVif-@D0^zDPJ=t zk~fUvH8JxUcAs`tQ`yidl)=ETN92eB=t;n}pAn4B1Ro|NKp)_*+L^H<%Y}U-3}6&L z4BGwE+_!3z^%0Ho>WQ^WVnrVUM~4CpUL~SA0-4jf#}A%Wx13zNG$u)07UMvbLUo)9 zyeI(3hcZRw)y6&Qn_t<@bqH{D_2Hlv+JgxV@Q(FXw=a@x-M;T=G&hJJ5dKy6R}o)X zQyK5eBxNNVjjGFMPG3HI+<9Xz`&t-|y-_Rv7$d@=Ac*+-a?_cXGskys$Ysd@;Wa}P z62%Y5aQ&k5aL)W~x?o4`iRBbr(|4lrGS<3xS}$tXX~pbtou3sco_UxoVZvI!TsoT* zuGeDRE9;zL$JDm`W0JvocCDyZvP1J_gZ)|-L_>?>7KJTlM}d{&10JT`@h?-RxLX8k zruez&=J~I0H696c+s#72WedYwN_nGLw`jjetwuN|t#ICwyID*|l>k!RSF~7;lBeHX zd{oB$3~68-Sjk=E{d>qNED{-Udk%R=dk2Sz7W>OB3udS6=zWGBV_xqVcC8<* z9c&&Fu}ECIj1dM%<6%r-E9C$F4knU&M1E!pE@oZ1q9Sua1MC0CmIuR*vW0FtGIyvI z2#$JWDn&B|I~N~;#2osZxf-$J~mrP)e6d$QNriN=;t-RK>c|lZSSV9a( zZRtD4Da6TVYo~RDvCGUy;F=s|E>>4wx({fiAE8RIk!fyn+X!sKCZU3XoIM_5E5T;eMy=TI+iZUF7d+?3K36U!tN=n4u|ZS^*^ud;pg2Qx`7A!i8Tx{9)W zc{PZZOD>;Szig@9hGiUe#>GZV(OGi5vHUcRsGuYj#i1kh@@XT&03p70<3(Uzwvaze_H{=Wzhv$c~?fVDIX*X%;X0YF$Zf_<> zHDHe_%1_aln#mbyQ2_)`+mOo$LDh)7P&Mr*iHwem1_;SVD2fl$hQxx?l}L1tPrL%QHGrOTs8Svl9!W- z6hN|)pLRlc#Dt~fM;1b=Tw)Zt+YOm%cx5}Krx4?M3xxZAVBG!5b2OvqS2jaW0+iWZ z+p0}>m18!n8_U9rxu5iq+}sl%UCJE^D0N(^It$(_ok5qO%aFZly7UL>p&~YO0X$+F z*#hUy#!uDsxlxV+;Qp4om#D?aKd~oLBN6$pPFQKsFF-jotZ)#6zB)l&wvVJwC}QGdd|e zE=HD^`1v3@QEig<5!W4zb=PCvHRmT_-JB$&HbY$3@b|i72Z^Z|Kev7L9`U{pemb;h z?&#l|x4===)#PvTR}LFS8j*UvhOQC(p_Pr#o!Kv6feac{Xfm!AWEmXpNu6XkFh!g2tgVdrrJGvTcj2(+FaXXR4nBRz$VN#fg>o^*S z41V8E(sgAZDS7moEPwsz0txvH!Tl~TdS_rV=kX)piX@MKps>(me(|G65F=+Elf}eB zvHwA{iQ^9{&unX4zi!*M_3Ik9ojudocou09u_?;4+Zxub+vd1VEIlihcI-}uI{Y|j z_&k39=i?{u{}ff?kt~p+>^lyc@sBar(VVO#BY;Qh1v4=cAhcc>s*l86FESDzl#`Jk zYDbr{7o4>tv0T*e!`fJ@CrEG=UE!0$3|1b=DYVgM9qV;Ungxit6U_oUj#)Io?oRLx zWZ@%Dfjk1OFBWp>=G{`#%dtSO7-)-%+(JN`-b!I_lZnLPFxe*ZNzOnT+cM|bWD>{w z30OM|geBNk+<{mp2sCvw{;F8qLFYmgT9`qw=86*XC+lhHL;AHElt70jfh2xCCzwkv z&OJ6FXOV2)a7Q#7y;bO{WaG)ci8pTCL(=D6XQf9s+#ZGVBpXp^XEG{ z>K8UR0V>oRw$p&xjlC5oH=91-k$UH>FwK3S!i?pM_Idgr^n>A z^R|u%U8+61&I%cHtM+>7H+gwk$HsbjZPI(~wcgk?_txxIx|*)G`cM*UwDQ`kKe>1B zsis@E?%X+Z)@qqySkb&=lbd(e)V35KJX3RhtxW%XHaKerKEI=9uQ#9ZDBdaCNdBV) zjrah3L~ii`uqN~I`DZGYv-}D&v9D%5wOk?M3x1|Q+enT>iRULpnc}961Ux+$AxBBZ z&zUox6AGn*AFqJkn=kLpD}Y<|WBEeq<~*Q%XZ{Fb7r94x_y=&pV8MzB4DgKdRO5xWVQf#?pGMMI zH#3EU$o74&zfylnuV=|}emXf|>i>*5AAWl2+?%wNV^#`>EShfr-Enlq-oYvGT-$c`PZ?V>8S3s@SQX~#TVl&hhI~OhK_C+My3gU$y~t(Q%;uL zjC>asgcCs+=*A)D6hfNX7h8!^iZ4w;q`T?Upm#6L^)F4k@H^^d*S3Yw0X*PQ;qKz+ z;pST7S9hSIrj9LGsf-R577If*JHU_ija6@4YTU9iL#x%&I+^na$lsxA2ogRHfESw`@s>+sYLz zgpND{z7UO1%}V0JuhThBbX4B~bcl6sT(ftC3S#o{arSkF7QqK{ z6Bl-a$w*Gm&Qxa^l4HT0zJSbvm?SZKO@>-WWp1j>1Nj_|xY08qo4rB09>fLwMD?hT zu#C3RHes1KC2jmNei`{^DweY^Awwv(Cr9ONy+mA3Q8LY;a-?Fpk-frHtDERHY$9^9 zBgz!&Y&9M1R3E__j(JW$eMmKA2(-<(=_78_8v%k^HN7Ten(1;5S9R!n+NeB1(8( zmHaAxh89AhGr)ULMqj^yqiV=oni)j>x4)Tv;1_H2lB_wP9{VEv z-IotYFWE1#`RDX1MSae3*QRk9wi#O|)1HCUBAA-JIgZ>YZh=)eS&2bU#mTFB)xpzg zmqM~vq*IHOSrySgq0c+}LK7XTqsu3*q+LTR`U2OGL-t#Nhdh(^7VaPq9qq<_bVM(L zPNWaK9cVq^c>4~ZZMhCzqq{bY4IH~jiF1BTgAp4C7q(i6gMi8ad0GFI! z0MGzll^u_fNcK55_fy)#iGHF6kah*|#1O3IhLMjKkS`Jl457YJ&t{Od*U1+z$;UD@ zkyhv#fYwS4d7K_jbKh~~Z2M>>$pv>s1X3m@vW@emS4>uq8t1uoIv5yc0D_%Ozg8h> zc_@Btoyo4b|HSiW^@Drm4L3MYeoe$<8%gp-zO48wCR^fd>JjwpcQM1lMl$(W*DwwL zQb}xFh_!QG- zC0Ub6rXg~$0_1Gu3j`+CWOD65xphJyE#X#?i2@(^Z)pQ2t%gG6sL9*xFp4NBV!^UU zd^B)}h@sb=8k0YgrrwQ_n_7_!@D9Ex|10t`Cr$Y?8;R9#U6Cg|RK9rKy2XIt{vus` zc3lfgc1s|sHO7&6Z6qPf$$=&C^^YQP_2(N;pFApSOYGA+>(a0jR4%v-vReOo+7EPu z`-G6y_P*;p7l)&5eR+qzIJ*2CfUdWK9u+K4x9yAt<|DM)7MYfDcdo2WbknHu#qM8w%quG z)6XorI{(J{`)&{2AH-ZtER}Wg$g_zRfvFw|kx9yPg2wx1 zW6}~6Qxnv&F|qx$W}0;9P6_&H%YxK zD{6aUWcbF4n2aP@(bo{k?w#AX6lcHY%C=jcGLJjogg;O}_@v@P z^kINJoWx!aBALi}UJ72X@L5RCi-9^~c7 zYTv+;liti#w8F!o8$^c3&>r5Pf0NR6@j{TDFdXh)VG(~i1VjCUY-V&;RCbI^e|_#x z6Ik@2{K0^td_%gZ+HC`spikR!h^W&s=7+8febz*_!tZG-2jayNf41b^*?+QV;Hdjk z1Dx*_1ejk+d=STbDfK}FO6sWb*MuO%D}5lADM^)PfQHSJ=NE&93?b(KF`ocHv8X5o z@T0(XcO(Q~&=vA?&}0k&Ju|9%PvE4x`}z83yhMT_?-iUXo$T54j#_(pHEq z){0Jrx?JncC!#u)?5x2of)AD;Z)7EY;tz=&m|saSgG3Le!=2XtQ>6{_34im0PF?Qi z6ILH85mpE*tf)7n%27!JZODr%)#v3}11D?*eTHlMiqAAh#p_inCvkwmM~~9jNTNpr zG968d<$Mo(we<*=19t+JKsYyWzQ(TD*iO0CAtT$7YyT`=WBN=Q#*AQnyk%o?Ux~O%Kc+au zH``Y&7+WM`G-Qm1TP(C9+Qm`hC=KGAyLV?7BQAjz!7bUby<-^CtkRKOCI*Zid233&AOfa?zja72g$abf2%fH$yI-X2Bu zHj>xo`Zn<)BflwypWxU=Y?FT~6^sxG!kIN8ijDJb!hB~rZ)^jFiZ~-Y{qM?8EwIji zw-W{QW(1i(w2^GWyoO_@zxrec^fC4&ZL!gHgTLJMR?jYo`!)ejGD9vRCetll|k zJ~fk3vw7>+x~jK2|3D`1;G&xRNiPqw$&)Po0=X|yYZ4}J>NjHQys5LN%=u=B)tT1D z-MQ-X&9-!Q6S%U+b^f=N(b-qO8~Z{HU(ho2&yIkg1O4&6=r(v}lFwzLRC+g&i)Q&x za&kr^tn2t)NpH~$@V#6hKBkY5+IX5VAt%9yo@T_A{Y{pyhQbEq5`T=~8}RwpVbRu+ z2E|!a&@Q8`$`_L6mrSjsc^LCTlIu2OBBS`RhT^s8d!g?t-`zDtGUEpZo}xa=B}uN! zxhc}PsCWo=he@`JNe-)pPb5L{y5c0342fXI33g9G_}rSw6sKkwN>qGrX%@6&+3ARO z-;t0np5FqmLbrFj=m=;c1u`uuVFiwA{*QLJq~1N2+%jUbtaNN9k>(>&;Af`GHj>h=EHA+K!nD_wMvZZ`bEdsvYt zGnq-(7d-so`t=_kF1S8%<$70pKUQGA4@nP>N(@1WM<}M7;^~5AR6WA_@Q(GBtJJg$ z`Uzd8o|u2#jf?k8baz)Fo7Due*2Vl1V#0HJvo5hVu7P|CQe##{Rh@`h7#rQ;dF8Q8uc2wIP=ADF1$crQIMaXU!l*BkS)6i>Cc~`cdabD zbdmc|SP-rc2oIO($TsCf)PXwj*IDNzye+(z+=hL9(HmZuK$|vu(yDl*xOvkQ0=FY5 z&?<-*FVBgrmP|49F_8Yej?M~ z%J_dt6_3D`=+HhXEP;2HwVB8Y2^qVK44h8j{09ifrB}=ik{7Gf43v#KT*P(6mlc0wv_gU=$@bQU|oAHvEjuXaV8CLEFG- z#1Y?H(|*uX{`S^f{}u#~FY(5WCdo?pGW!9rGo03|g+-JQ0uRO_OfUuYNh-#}fn*Q| zn$}(n=|7N8d_-rf=^5x(YVmy3Iaqo`hJ&b0lo;zCgJuGeN*nqPB|ecH7vQR~eWNlT1*rDdJmYo5Noo`HEmC9y0tDk67f z1Y)ELF;GoA>c*I5p}ajFcE45n68s^prcOi>vZkIv?XMG!EPG?xrKD&vV-1lhFw ztu`h~1&rZqY3=FiuPe{Xh*{Gq()E`5y<|r9t+g01=4i$}?)L$R)K@}B%%fu{yOis@ z35n73)gVgi;x*_YV#9wU5XeWrW1O@X`p1$Rr)ZbHCppSqzKML`5o)C6A<$$eC#|cI z4mDUlY?yTJM%Y6$d(Q8?_t);HWv17F6h;|hvbC%(12k@G10?AYBEkVP*%=sxsB*M9 zF&W6>#7UOJvtSWvDp1~AesKoia0aBF8uZe87oj^t=Jx>?59Au@tPe}*f;LNjE5!*Xt{Cm+qo(^ZW15Mi)XCJGk=PTjOYWh8yTERBY^C?=t=YN2Ha57 zd^~4Uscs@iH+bP)nnt&&XaKwoi%B4hyj3&{BVj*4GnUqeNZd%5#lNzC2kf(5{9OEE zH&wdGPR^^GJW(~lZ_1{5te=a~{(!$MHV>k#@C5Fz%qcJ6T3*zN#D6N#!jrL^$%wI} z59@bulMyxe$JnEWTb~|+A07iS%k8x1+*eeX?J{~$0-yfkd`xuh7ui!kP5oEuTEDa@_1t-K;=$F5H z|9C@ny#+@!fYp=!`nnw~tszT`PM;x~BV-&I2VYW@FhQ7ri;@M-taQ?4AURH17GEHB zSOYb3Q2R(`(qXv!!}Ns@nBNQUTlalU&)C3*sHRf@ zBf>%0hYT-eyE`FcP~tEG%ZYnnNSfP_}v#m8>LmRL)-%27it2F}N z7ooL33@x%vJ6S74{EFlu5UVz(c@h^2bqYgBZiIDYZgE_(8sPZi;w&)pX&D+;KksH@u2-haq3f&MV1d{xfrXGd_AOk0y zI)c-<5aMsq_k;68XVr+~!{Oja#Z!hHWHfNiHjr7>$}gg_JU6=!J&-V5PWfC;<)NZ?~>U5ktZ>u{{U2`DK`aoKZcbZGB zU~84;;_cz0lkuZk$a*=@(YBb7cfus4n{JnnTj$0uY2Gzy2Wok&e4wTpyn z|4Fo)4>wT2Vk?+khG<;|{+WdHAeP&9KbHR{I37(Y{WvUqK&5~tmV>4pZphHwc z)KmQWP7)4LJ{`B3`s-rSVhnNC@djf8gj-rb%8jg3ERTwTS~ZrFJ(|CkOruvZlMTlV z36SLHW#^}J-;?jfef_-z75M+pCErO3uv!{-p7^I_>u@C2e;>(*qr~!Du^KE#uhNM8 za0wEr&EMNFL%W(D@<3mI2dptcI!+fLb14*7grPe&gF0cbQnc|KE9yjq3F=0_03OkUI8_fU_5g9>tB8ddl-Pwg;!D{f= zFj+YndHHZtpf|n^h+7-8C-O47)JEc~)BIt&jdRmW2hvNiyRtnhL#$1FyPTmvwCR=P zhYmf?04It$bT~lD9bL0kAMHUm3cQt`ca*lh?;|d6uj|m8c$2)cIJ+ixkM%%uNl7>I z{D+mT#kCpU5l<@r1*yS%`4S4hz!>AXwFRovG>JY^dd!;?0>XOdWIE+rYW_O;r4^Bl zA=9UjH7So%Zf8E;CmSUdz9o;ak;xJp@y1#uKNaJ)SAPv0k>*1c2kFOGK4n)gcAGj* z1tpG+^b3*%$9Dg3iS#~Ol3b!MDZ$^z{i*am=|7E3R%7u-P;_p8?Dk-F3wPz+L70Dq zN<`;tVLCp16nuY?=mB$Tl7USBUoo}p%IBIGC9J$9$&m003;a^xmnj+jQ~IkOyt?F9 zJ|#WnCtfnP-3?xT!`j5qj02TP)3Ar)z3@r^XcXv|@2K}d?ne+QWk-md9T z7c(;YS}cl<1~huGwEbn<3nhkNLm7Ukge1|SN^n$sn0XYWe7Nx1q|Q1gEnGOMbNxxz z7Cr%KxB+c}TxZ4;W&-K4 z6m7f(&Bxy=@Kp3B+M#6WM3AH`MASwP+Urk{54 zes}>UztKfxKRsmi2Qt{ncMMiupTw`QvG~)5PXd2k`>r7Rg0$1aptrO|=8&z)SPL5Y z7UBr+$daSJ$|HzJmjXM5oi|^&=XonK95R&nSR^a}u16lj`mmP?cxnjiEXBV-=%_V*I>?fabSQ41!Dx+`70EkGp;?DBc^ai;h zSVJ1+2JM^@OnGa-eo)R^BNUC626U>w(cgqA!W8CO$72sj8#C!Y?R0lVE?Y%(0 zp17LdAnQyk$XawtN=!SI0TrG(9!Y{U$O_1c@V)ypkHs9ej;{`{@+pu(vsDO#JJP9g zLxQUZjiats4$g@S4sSiY^?Ks5BXCuYvm!%mX%TIv<{?8id@&2Kb;>dqt~@;OTn%W= z81$Ccj&Yf|dMSqm8s_I$=W#>(s~!hEbh!iZh%6UjX5z}D>%LC3PEJE=r25MfjpsAC zV|-KEzUX~{<#?g_&C1u`J$U`wlWO>6m$L+8N| zML1^GNC!mX6e`*b9v2-shrmU*qpd%)oeQ_Gp6@?fExvL6(RR0h$NaCi4XoQD3Y+Z4 z%LefEPpdSDpi2kA=KT)4Xad>yEDU%0(220x=zT)BM+vWWL|SlO3^AKzl?cicLOU~|NTN_@VC!eYW z3%Kwg+_O#2{a3UHf<5#Q;T9zU9QYuvcG zbH|UnHTN;cH$fvB4R3-GNt?Q~#LPs4Hr-m7$``|?RtCEku2C=B8RI94Ye9sUibLxY z^emHd>@gC34$#{*9ota!t^SgXYTsO;M(wg2@PfY3qjt0lBi_* zd&KE6Nn?}AdkQvTCOR)OORv)B<`(*}d{y{fL=L7zCp+8iVeh^p8~F;nL!) zQ}mKT*RM9-X>4uW@Tb>ZnSLBuGYpU&(^cUorT$Ygn_lAeY+Q7#p4CUkYExNqMTi72 zce-9x=4x;$$<4_OsSKqiHX89dCs+80(fvv@0jv20=qfcmW8U9!a8O5@NNS(A=KH1cVlP zfcUahM8Fvh+?VKa99t?0E(kAXL2pr9P*B2|uJb*VNWif}fH9AyWs>0V@L;YTsX%pR zSh0i^IaewqP=B%m+h`$2Mkg!vi6jAR%hOoJ!Dt60Hd2=)x)B#o2a9e)$FpZ7P{=dM zk(M!0^LN1rv0$NCp#JX~5WS*C8_8R9laXwd^X+tm(sj%RuV_{q9-b7gc5^ctK@dOj zl=JV4NI%(JGAtBN`Xm*ZR7CpUBE#6Lq~GD+$;4AKV{M(WPF+xtq%Gj~MnBu&s`6V) zzle5XwZ2J?!6CA!$iSq~O`CEysUrfD!O9XA8Mg&I34RkJ$J?rG^Tt}ErfU>X<1a@3gQ}xvwsvF){?VH#b zjjwOAQEWFa^RYKZJ=9zZ&3JB$oGs&^ddk zfm+Ki#L`_XN6%mwv3w0=^?y8(bYpiAE(C(_R!8R{cF-+Ta`0g8sv56_ZD0`g7f_2XS>Rrv;n&UcNv`a1iqR6 z?SSL7o6N_!JAAhoC`ilX>hg-}BkN>j$M?#4@Y~7BXg~#}GKFd=woC~03fz_9v^S8b z2EL^>7wKr3Pj+Q^l{zakB`piv7S%};4S2@0scx2Z*#YXlYg>zdGXk=WH z-GahgWm^Ka?%JUC@X9F-;9{~Ezw#)M?O=>``q-{57v=NbPL1@Tc*q*4Capa`gD2hW&<%t_^Mt%M6Za z)yGro0d%E5kcxw8sTCvuKJp5U-cjHI1TSr60&*%ME6{wTW@K{;XMm+XW)yYgsCPkf zesVz)gp*RCD2?3zk3U7gow-B0HggqCffwv6WQM57v1cuZg;chdi>(u$Lyhk!s{d9;6?zd9y1Nd$Yx;Wao` zjnto%h*axjNs=goE$$Qe3}!a%x|Z{|FI&~*FVp7c>GIVPkveS@XYU`ls={7IyEYSM zHtAu=OfjgVJ>0Y|>P=g+%eHZwDpm&hZ}PJ*UDf0#bGvaj^uBt3U0P->w`td!pq24! zwL9!H*UA)j_J)R?O={$dAsbZT{5tp9!Ec-0H#s?M+3x77UB2H@=3i1BwMSi6o>_o6 z*mz?7Z?dw2IAT;*YNfCv+sQ|Ji*oA2YoKb@*6`At|Kt~w-RrJx4PwW?=fK}ZM8*n>^i^Sn&@V*ZFO+Z~q+-J?AWOQM-nSW)`xEy$ zhJr|R|ACwBiYDL zBf-(ck1r+Lde?)Ua|{gRy)v+ znUV3A0RtNL1D9V}ZLC(eWNco`nG)LjEBC-RxzHz@&4}6sW>7fmB`cRvGfwe9m&R0* z2^ZiagojZNGEjylu!^HQU36L(j()Y4E~EdZhgI}EnFGN1IYVuF92+a8-NRdG_ZpMwxMoLO!Xj1%zxX2dW$h}p3L#B9; zo}XsO&y<~qk5^hxdZ}+-42ikH8IqaoJcwd+@9Pd3LL25NS<}^Y$MlEN%PZ11gmc@P zv-E@qw8nZ_g;a+-dM1HHbx7m4}jfjo6`o>nq%9}vYmZy z@~)PzJbyG}e{EKy^&Ngp=Ar1rzI(0dK=Orq{f;`vYHR8X|3_{}kReb#mu^vdl?K&l z_iGPi9VpwImX?;9mIiV4K~^sHtFoOu9NglU*EoVAOP87izP19ZgWEHbh}RCrw35HC zJgeJwY@OOJ*XJ!{S><#G&$oLp7$a56c(nk5cT;I1D;hp_qZQ&-!_nLpFd*Bs_Ezve2TP@ z=|B@r10uLDT|QkVbTO?_R+X1m0jUR8JUZ1UAi&2bpuFnKfM(~z>|y7%<#uXup5wb* zRf6>+lK~w5Q_{c9$-;j>$~^>)0nNaVF=7Pdr-0Wc5K9;u_f3= zBVtzs6r_vvp*QJ6laAOGjbe$45@U+dSV_^um~Nsb0o1I4HR^rWz!=Z@<(~h2p8tKW z<7TbB_Ue6o>-*lXW5{{HaFAa2Ejk z-y}#pgn^%9GI%K>&Yn%&c8bqCS$3lOsI+F`+@iTE`aV3TL4Ql%CTjPnkA_;b5``xj zr~)a^{v0s}v)Gd+90&U#;#LSCWw?XRT8|v<*TvzH{>&FxR02$c!A#uovjt@?bUC@^*#`aq*U3=of zrb{ZTqf9RL8~y4ZGKzPf1scO$`E^uEk^)yJBj|X#j+g(6?ZXHxerxf=L`K%1IG!AP zOcNWF5Re`qE%o1&4?*UU;KOyIL$JdVgOoB#BfkzbCt!Dz;YU-BMjr;&!rqcy<}Gh-*8CG>gX*|zw> zU5^WNaNb}k`SFRuKXq|@06#b6owui{)_B+L-J+4Ve0YEidX)dQRQ~JwQT=BO4VT8$ zCGOs>{O!h(JGK0U9j8w0JSRQ8Y{%SrN^%#vL5irOY!QtsJbUeDK5#?-0u^0KmXH5u=wzx%GTA^XgZ{m`j?;lX>D zm5KP*d411lcKBy|`6|8By)(S|%v`83s;w-qQ|&w$6{K;ewz^fy#9SO=`FF=(pYuzE zv@E?aAyx^|k38IYIImal=p|lf(eV=)IH^|#9W-+cT_g=#o;GEP(miiZ?i@ZfL7So7 z;J?dX<-0OugJw8cRX$!BlM#aIg3mUd@q^bToX0* zgTp6woKn@)WTw?x@LRL$;P-wRdYCZiiPLBa=*(g*VZ&NtUjIx{e@chPVNxuncwz_wv=UzH6xS zA}sFF;3WmxNwhOf-{vRHitw8VY0g=|oGb<>9(bR%bcP|DR%&Rh2j$_EmXVPLrK*{k z$~yo1Lr8p%G#8Rv(LazQD(rpCV-nA3s?w@-x(duizdII|rB=iiO1Gz{XQ!z~mr&nY zIw6Sq`Ofg775$}Io*}(`dE!It?l*(&ZxQs41-?&$6VLwkF)=&7=foZ|?CSCFj^C>! zQ+J-MKd~S9$0rGp9`x6U#w_dOb1nK3qSlwTockE`y1`&(+LgI0t)8a|u_WwvT+_BQ z!6%%kUtg$T9^>EWb9nuJCmh^nwv$b3cCD!PEOmOFhL@29QAln`c5p~=MraS0QmUOo z!aU0Ys7q{tg$eM^1ah^^j+?6JliPA$dg0t|;4hiYe zk0g}QFxOJg>J{~?oyexgfKnU1f8F7YjR8&|#m#h~n@@ZJzQc*@*TRZsqA#siCs=E*ussXGaL6GKD@6H>LzgWxXGpdMD^*?b2#zPu-il% zE6T0kUcXDZ&jDa3JHSKn1)xvL0Cn;exlNe)CHVq?DCP7v-=dc*p7qnqpY=1yMb8Q( z9WXoaE`q}x#j|Dlk)n>vl8$Bi5gp46BSgCbw?XgbvtUuFUxAO0(kIzB&X4zY znLdwNL`vy95^}Z>9Q-*ylVm;MJFFZ@gyDjM^c@9Mg&8(CA_R?2y5K1K75_8Pwo0+N9&Fq=IMl9oi&Q}{(kG%2Q(bz0d*!% zcwc*T-=SkX3w3P2-v(fy0Ta(*Lx3*{l{$24M-GAs9i-vtBHBeliKt0Fcbb(o2dN9hj&RgZXDIy?Jvu_(t=&VY2l)P|(61$=>dKQ4lNzhs|6nwk_o(|rt2ucY~ z4(8X)n;PV%!h+fZoArf{_C0F;MiVtVZq`gC9dd018QpYNSJcGk>|m%4O|>DO8pFJf z0SfokZ_S*!`m@WQp8V|k^^vKsEhG!uR&_9m;FI$7V)GrKd;o2`g44 zdO`kt=~u+*$GS)L-)g?R`A73pmD~nZvl{9(-=+&RsGw$uj0PxvjUqj#UEy~I`P6Sz zg>H?HjM0RWzH^|H&HRxxzo4kFNLjhQDkhKD6&*fQs)TB|^c?=M&(fM@DvzaM>!3m? zV(a#;D$HNv28v%Q-(gakp_YY4tU4(`)N$z%Hc@WBdh9@Pi_ z((Em)uG`N5tsqfiKL(Vyaz=f_PiLgTfjox+rNC}Vp?8PyMl7S)8DHfm^M1Dq(*>JSz`0-nXF7O8 zY^5w+TjKolu&?^uad9GJ7AjKChn?|1w)|7CE1s7&o?Lgr`((|P@n=>p!(GW1#|3Zo z*}mwS&&jMyM^1ujlID2)@cZ>pBsE!l`O`qJ;~LD!vqka<{jUZcFrXb!8kDNVM@F%Q zbfgkj99N)Y?xY@^0dLQV@L8%kymU_W+c*k~>9onXhn7N@onhiQ*|V_{!~#ZxPBAnG zHxO$m-I_OvO#Id9r<9+LU%2sk`DbTNe0sn1&WDG8km_fOQR1=SshBS#>wAgTk@b)* z>J%$#Fp^hqu_JUgW!Rs3ESc<6Goyi}^7Nu7gm%V%5vAC={r%ZciArZKO7%7sj zxBX_{zT;RNn;sFHFnK;TbHxT*WV}UWT>{9~ z>;~~dhlN607LgOHowa0;8`Rc_q~4wbhtE*q_6*3KprOqe`0Kl#8XTg`hI~G&IkseL zx;AFxJC0i1AeCuzf}I6_O}2uy#zV?+JFp2h7t;)p z;jVsy;w@0jGU%E!^lMR_RZrnaED$GwSD^$vx z+g-D1lIU4uM~h-4SR@b7sn-nNqK<0AdIiMbrepxiC5lWCJu3lWcBbARSDoXlz?}jS z{tpzhPZtnwdrn4fdbSgFd64}Cw52{G^2RU)4z9{-TpG;+WI5epa8l%^Lse-GSxkmG zW^V@pLzz=|kc4LxWHNN`Y??t-j`AvO=(3=K6z4w2bZiOJmFd)c{0HgTsafe6PPFIL zRAMb+sX-yE-FHOxi3nmyxw*;+{d!SOIx@j9Z-$AmF$8CiVFp#DW~8TXPjPx^*q9Sf zq~puuo#ZvcR;8wAKs%??E!>kOd^5d7>m+ZUw=tc0O>@c%IZLzhQXxi?>IlH*tei|~ zcJ}t|*%~PPjuYi%Z%59P$++Jq6*O2y6S!gvl-+3_))$W zNDkzjV&L1;C-a6D@#ME}{y}D(09?aN&E^YVc-&Rp{o=v_==Yv^f_hSPh^hKt6wrui ziSgZ+nNY3V7lgPjvoB}}K+xkmYz#*hsc}>B5Lgl(i`7HKxQ4eUOEHB=Dr3tczg1V3 zLAb=q831uzO!AD+fvF&}=q&AoIu92XaaRH?LWsQ~Vk88UCCGcxAjO8aW_!7+TxXv- z`j#dYI_(2!EbTqMdE9;A$&2qde}9h*2p|!3v8Drv_)M`tMa+((?I(fo;E5EE=|LZNwH( zPq6f(wwlgShJ0|=8Cv$q7#p0sgp>*+qN5{t!xeEvba}Pr14(sxc{Q)UBCalvj?gTY zkUXJ$5(@#e*L&fnP&&e}`g(P^`GX(qp?E4&LiO+s6!?i`y^JxcVFAMx)(@y@R^v;7 z@d}Mk#?p`x-T>_#%?B=j%WIly+FNJ#EZ5M{-mC;;FV4NG0oMM_i9Dls%>AEm+P0mwR#{94FO*>n4HHDg4c zs~+-9_YlHFL+BI9PSy@+3^8jAG!Eu1IG73t=TE_FBm++mN}yw6wU3FX0(cG@8VNa@ z5*00h0FDBho-~?WWd4^}-KW$^hx|z7^N2Ikpeq05;g1?JCG1N&X&0R@rD+}W74b4X zq)EUg!Nf6)(zuCWpzaR_>SVo(etQ%ZoIwKNCx@F3Cg7Gk1R0kmU&=b<%4}+G_|Xf0j)13&!pSbR9Nkb!5MSjNAae zv{C%ZY-RXf&!1^>;qJgM%;4)LB z$oe(1Ki0fRHUv3;`0pK-<#i&v;?=QShA~?a>q}oj1I%WeBOUqm>peo}spfg?Jhom# z9XGSQO*^yTBaMEF_@gr)wHWic1<9`uUT87*XsBIwuhOAi-8JB)WB6AtUYf_7Z<2ckLy- z-;n^J{cx&UHGr3|0HJvBeY#jBccoTC*DqV3IXhS+uPCYCoeSL!eOhqKW_1Y+Ch_an zq~ZwF36oRrHqL<;D$Nw=iqj} zBKn=?5LHSV5U@jzEnlS!h}i1y760U53Li?Gx3p5tXVUUb>q>o8@mtcP5{i=x(=?UZ z-M+<<(klP_;Ee!ENdj~|M!hRmMkN`(7*&yxSC^Ql(&_Swixame=4gD&!Ya4!m-;m& zHGK>+zWYw%bZ+yGGNmpjOLy=+kDxMMw{3gM)-CA)Ta;_6Hl5ymwEO^HA5*tenUj^B zQ&zt@p@84Hv3U7v3b@XhTa<}A5({-jd3l9=^X{vk9y}{ObF&JFc^y7m6g8Q(nKgV2 z30VX+SV}TmdfIm=v3g4t5*!rb)3mBCRC9Cc>A9yyNL%QjY7nI-D5=*1pzqtzk^Gj8 z*iD%EDYw=K*Zcyp_hmPZ^S_WGr*Y1ku7va-E>B6MLc4rR{JJ^{g=_$o>??|oPe=$; zm6L5Ea$BY!qvtBi!*!w2PKF}Tg@Uhp?Z`a%QJquA6Y~AB9Sxyz^PKc6XhXM%!)$dY z#?f<4AK7em2W-!bHa%3-Yhj5jNGz43=}e!*U)L-&VTexRtAsH~SrqL>J+zcQ!QtEu@9w0{+~Tjum|ICc1# zx~Ry0$n-*655#}n)z>Zst$vT6N}WpRwB?6DI`r&Jv}@u?GqWyds-MU^*S7eI;SQpxR`O|6jnVA$%< zJ@ijv)p8qq!R5y?xfJvof0T_OwL5G=X#g6|-i1cPTq@{nG3XZIEauz=c*o0yW`aZe z+67o}yuXW5%Day*vCs)Z;$Nc=PqLlo##~oAh6S7iLpozy^ z5FYMvVybR#h|`%BZ|{3k1th~~3@cnH7&3}&hQ_O(+k>x&&Gu{^iY$w*WLs(8{qjpU zz;gnkTzg7AL^c$>K4!o{XSoK0o(yUgG5tDpFsxNOws3DHj}$;#F*}H3vV@v#qN=wF z-YR;V-_du6bA3PQw90EypQ%2(R?$+asc+ly*N(^1qALZTeWuhO)w?S6a|{ylmtj#L zZ+I<~UZFR(8D5K`zX8ANENPblG9VO)3o=%D=-vVwQ3u8kMmsJ?o*Yu+8#?JoNWZZ4zmrJ^ zdf?Pd_5s6;t^RD!%1#q^F|~l-OD6vd9i8b=kjOg?ED|&^4#yfCq2Txo1Q=b%6GZjg z12H`@Jdw!%T8tOA16q!azTUXIN228Wj!yDD69p?Fn-y_!5m|AikSB_D#L+0W>y_Q) z_m3;hsxB>cVyq|Zv*{IIN=q@&aQ@or-6D#N;FWC!&r%V*S{clY1SuFsnh08%;-)KWNT*e;ols z+-vV2yb?Yz*F20}Byqb&}{B9jteD6c~o(?x4hIgJ)d^~$}XwbpHgXcdv z;3G9S(@aHCQC3AlkyI`gXtl*rSqWNgLRM69LXoy2tGHN7CQbz-W7h8Ia_^&#QRP8d z(b2xXj?q!z0*ZoK;|{lXy(^-2XO&ktH8gv^w#aR_v#Fy&UoPhWc9pWp}7AI6> z6%|1r_V0?5_vV~k(>U|W%ssDa<+qgaYqp0Z3<#AT&8~^eQig6^wqjB6gbkrzooFg5DJm)|OesjyWul-` zb?9RZlzweTrCB)Zx!-Q!%gT0E=LxEM@pwzp*=q*G#(QeLnS#cSjS8d!*mHS8gBqI*|zDzUdc7g-Ns4 zEn4g^%_{YYU4_jRP|L!kS!)W`Zs8x*om+W!Y~`kJGZGg{ zsZfCPSbyWGElCd(r#6^+m>Mf^e_M87ym!1!EX^R;SY@H#(M$A}qCUHq`ws|wi_YO45sJh4b*p)LNpdPP`QTwCx&FPPI(K(ac^Mx=k3`*;T#TSvy7ApNhMsZGC_ay;q$ z#`LuTkW2ZVCK}$Z1{#3FCeng?U02Ylra+VDmhHQW?+wjGJT|95uY8Lyx>|O=rcsI! zq#q0)EhDA7CK#S-CYTJkoFN>!DL) z=8o$-m)ZnU^_ppGhbB@hX;!*Fxcq3}N;>J6Eai~}#P`ilFk}i0eISOW;#b~CDnU1; zP9&|4%m#;7W{!%IM@XeqZ>y@`xjlQQ=3>f)+;f$CbbBgxRYFC?802o+&!oEcO7We7 zYYbCoI{`n`Cl`Jyg|x;9vm?hIp6DeE23!GTUergQMSMD*Y@+6yr=(L!&~sHUAq6bi z;f^^{nxtQ%AcyHTkU0+Fw~a>8!vIu)368o$pxZ`42!$MjlxX@zFCtuf*-+9^->Wm% zkWGGh{yiPvd9Rn~9OUHn&(2Ec(g%ttdY{$;-fH(79e2wDdkJqoE8QhcTUU#-61hGW zTZZT;`U~jz_PE!9JkUS?wYzL2@!QMy9|5faf{sFHdvUIj$!nZ%%H%f8Hjvqb%qC+t zGiEcdflaUmHn$^ZqQ!{?$vWsL5qGv=(=$f)tmQJ>9k|LmTBfocbTUa%%e6Ka)ba&3 zJJsc9Bs;;0EzFY1otc~czq?79o9N%&%$b|nf`1Du$b*}}3 z2(g_IO+TIMNOyuN#hy>+ig23E%2jCJDH-?L96J{?`X{ zoX7@n0?^MSNN;36(j0V$TCLkN+35lhrsq8ksN9ec>F*R7P`rL$6q)DjNGER+#kdty z;g>4p2`s_n(@RjGJPPTJqMu%xP#!{Uzm0MtlQ+?M&H+){^_2lml>tY!`zp!2r;Z*_ z_6(Wkb-V9?OSl=O8)-}#IaoaB(Z4QSc0w=49l$1|NH6{(#~0imeYf~iC+M6^G?oYD zYNO4&T`}bbe(l5nmFD%{7kRX}a-UP>KJBr93OesEN5J@iEWNUqFqy2xn0R0R7`^T$ zz=4zKwJLhE3Reh~m87K-$gl^{%Gb7$8{2RdQW;5Gq~uoTI0gNFHT_{V{u+dyP}$NH zX0VK-A>UDdG6pPPf6_l4$@eF_{_8E805;Q9tCyCMka4(f83V4sHqvT@(DLYsn|9GTvEfuFu0$N@MRE~T8V7Pw zbj(B1k0z6(e(g}O(6~Y|3Bq`bCfy~AMCAR|3d3~z1bfiw%*57nI-9~wCUZysb|9at z$s0hQ1gfB}HHJ*kKPG{1>c~{$c$LWRkr80@9acheT!3)j=MP4dn?}X~H$+|?(+h%t z7Zhc~=&XkI)$Rv2w3Oc}eIKh^P~JglLvCb_Ru!{dn;a7!7lFIA^Kl{TTzi+6e4VrN zH?k@BP)>DPZA5WIQD}5>d_oj1lOM+hOG8$L#BRtKnL6vMeZQ6-|B+lj_4U5@ziqr2 zvM=uV){>Mxar+udiuUiWDm#%Z-J4bsQM{ zu+Wt_eo*|T^tn6rSEN-(lx$1emKGn8yDc}OD!vL>s5aW_+>$C_*y*q0kQ`IzpC1+- z9-ZR9Bdk1Ze@b0>ZF&Cw=sM}M3MfU`c{uTmZ@uqMuf$Lv;1Dct2yF;CquY5{YODv@ zvxy2s7ktFCXk)NXaN@H1jqF4H#-_w0^+$H;&V?M2LbDeU>RVaG5$PZ6$Rg@;vI+>o zDUf{8zD}2cqzFF7F;H_pH@H9b{ew<`jzJ-qH^+WYPm)OQ>_rue4tYL+K-@e(qJEH@ zo0o%oFk6h)m7g3Z6R&4nulnQ!3MFJaKjH;IQ|WVk$3R8o?v44ukwM#1HdY2z1|3P+ zRk^z=|41a%Bq1YXfM1YS7hV>g8lD;(o*SMQRvTNJSDRN>n_3GcgmuqnD^hm_R|Ka9 zr$hzk2jvCtirSUGE3aZ#%5Leip`Er0`Mee3M^=>hg!_cYd)02N@i`rTxb{eG@tLjA zB^w9c?zHM{sQ3t0@u>Q$xa!=hywa-FYAIbzQWO#U))j8q8n88aU3EZpKx6X0>b*4u zjS>5>l>L`q&~CsZ?S|?s5Og@U7WC+0{M!@iZh&$5P|+Yadt@#!6Z90Q1V;qTW=>{( z%?6kaF&kkv+RW9=&1{C*+h+64)|>g5Z8i%ui!zHhOEOC{%Qf3&_MzD&vm0ign>{f5 z!>rwWn)yugx6S97FEaNuUuEuZ9%-ItUTEH6e$4!&`8o3s%s)22W`4{3OY`r|e>MNz zyxm-H!C6>a*jqSRs4a$DOtfgW_|oD#i(f4Muy|_GVew2T6iS3v!v4bH!imDyg;Rwy zg>!`qh0BHOgd2qc!cbv^Fk09wyej-f_)ugaau6v+ylA3mn&@rOJkcVNr)ZTZT$Ccp z5`84PCi+5jPb?M>6Gw@Y#M$B^agBJFc)z$o+$g>+ejxrs{8-{DnJZZ$@sg~S_(%dJ zp_2C`7bG7`u1H!WMDjw~M><+MQR*h0A)O~(B@L2plg3F;OYd3QTPiJ`Etgs@w_I(R zZCPYlVR_B+Tgx`f=Q0bKrOZlZD|3{MkWG=zlm*JtW#zI%vPRi^vL@MYvUXVqXU0i5 zp6kyI<=i-LE|iPr;<*$qlgr@>xE)+Aw~sr_o#ejeTDeZ{c@Og*c0FF}q3Yq>V_1(# zJ=}XN>9M|tPY?ed;XPt{B=$(_vA4&^J?{2+-qWI|rss&B^LsAsxxD9^o|}3G_6+YC z-E&9J6Foog`K0GFE1A`6Rw}FhR@1H4S%q4~S>;;ktV*q_t?I4zTD@m=-s+mwEvwsB z_pE-ldT8~h)njXswcL7`^(gBJ)>Eu!Si4)#xAw3Ouuiouw%%=h$oiD^dFzj?FI!)? zZn3^&{j2pK)}1y|n;tf{HcA_3n?W|iZN}TU+Dx}uXya+K#U|7y!=~Eipv`+W=WQ<9 zT($Ya=AO+jHox1n+5BZgZEbA(*-o-`vt45AXB%ysZCho#)AoSvVcSOA)3)brKe7GV z_K|J7?O(WRd|@ZHSmU7TH>U8!A_-5$Gl?M~WV zu>08Viro#nAM7655jlpuTqAdp50np+kCso9&z3I$G_{X>vpifLEsvL{$TQ{n@?v?F ze7F3d{FwZ-{G9xv{IdLp{7d;a^6%xp$e-E^?R(hU+V`?|u^(zb+J3720{eIDm)ozl z-(VkNA7LMBpJrcVztjGJeWU$*_UG*{+F!B1VSn5HJNw`4+w40PW(u)_Q#dL#iXn;# ziW!ReiX{p!#X5zbVv8b75vhn%BrEb16^gxzgNmbyCdDPi=Zd?EpA`=kkFl7UIaoSa zJIEcJ95fCt4uc$qJB)Fd;P9ryJO@vQ)eajR0v)0pQXKLeN*yX4>Kyhs9CUd1hD;A_ zolH?DZ}q0ko$0D~->kkIBI6{l2YODMto%Qx^x~c!lwP-gqx1p{`@c|n-TphJm(h0r zru619N-uU?kZFcw^E7~$gbl)|Ss)`va4`g`9`2O}%O3hM-jJ(mu|W(5j~ZNrI`Ft2 zWwh!VgIGBP*H^KT8h27JyDS+lDV>i3UQ;Aer&z&At2L zO=6^bUKUrDp&Z0RI8V(1w3181{4GgSqt(>L{P3WaGbt_&u@469rG%S_WF%9OgqO^e z$r&=h2tI339Ev>{R>#waGKuxR3IGCwdP|X6F;|#gm7?6X-zE=E^wnFd4T3 zRU}E0ae3+zS+$yD$iJK@1&m2a%B0-H{1l!WgT)SAGiE%~gp>kJb8(hK+k=sO{KDZlhYmtwtU8QFFs&!_^!XDr1R3 zc<01#s<|K(wCh&TW1x(Kz*-8bXPEl3m|J>cO*8l7o43$*-S>vTr-;Sy8y z#eh;3N1sC92LKeANdQgs6bD2vHOC;T@axSn{ZbmPOC4jNdO0dzV8LBpjBYSW&E3aU z!VVcXQf7saV87r}@_Emuchm;d_AD8z^Cjx0rXm@)lF=-D)LewDmqdVDpxH7`u>>;& zdi9t$-yFj&lew>y4dKL7P~SEn&Js^pO4Q^Yn(8vL!w`Oa)m%-!IvqU}DNByZIL2?{ zfgQVth2EpHWtO`0yrD%w($vpZcdQbfTQ>OEbd_OjtIRM~GX2=#bDn(1>St?2VRhs+ zbse-_#p|`?9b^NLW4H#D0E^3xy}hDan0U*KY9efSj_B%sRu`!xh}tc65UZ5UWf$H3kd@)B1zOeOj}+vqk)aY!c4P z5}?&`Swu$VkEmO{loY6$j?~zkxV(7WJ8S^Q{6^}bG(>=H zCJg)@wtQ$ocu52hqBqJi1y1{8BFTJNn%$XriX#C2Hsh z{EoR@l5s41OV^xeZa$&6ldW0Gb5B#%=mMlS2dyHG09IK?Ej26Xl1fugpG`me3hF5oWJi0U@2NL;O=KMF zK5oPpvk~T9E-Ge61=`x46so!UkYic(^-i2(4@RCI%}?X#e*9n>#;#eNleb2*D1VLj z#5YGQ>c7@$*L(FBs&4Ln=s30s=tsW~z??fsN%rHs8K)o1ciJ0t3T_GJMEypL&7taW z8P|K6D%ZmNNX;D}u`;lcK=Qahwbnqs2~vD)3bEkG0QKGmj-RuUsx!Uk zNfRYe*^%3$_}13SRu!m-&f&SFkLJ*JQ8p$!ow6dmBBPvtyN}uh-?>gl1XZAKPFc$H8nFmRbvPPxK~0d6Gz0} zBvJ<9pPW2i9|pXkqPzmgI)c%Mq{uiQuyX-=lk5HcxJt}I`ukv1jlq528)Bd)SwZM` z#=Vx5^ctS7hg@!^XmI4J*&5JkBP9VeMnt^~_c^F|)j2G|RsdpxV=zJIB#+z-DJn|W~c$4yYy({+$-H>epg<|ZW zFacvWe;t)0d=t|>o!9}{d@&dU=H4B5>BG{}!lFEYot22Pqs0lCadAozYbH~%-cQ2a zm9gIPj+z^bySi-{By8Ho0(oQMhckF?m+aebzn$=(e>u_!od!Y~SC~fpFr_;J_$~pQ z5#k@!nBE=5Ef~yaiDeEjZ}PW0ksIQ?OkGM&+8Ju;s1Mt`NKG$^XOPJv<6NYnEw128 z!p>nFXrI8^=D>$$#XxpEIMQEc!HMgz1=*?Q&d7}S*W4I2mMIk09%}>}b~-X2f0+tx zR9C&OV&`tw1I-aij64IR2dNZiq6&uVT+fhwdy}?@zcD?gRS5TnS6(lFRUU~Zt zGr1{hC|3h`TLCB8hxv3jN`Nj2MR4}m5racd&4tPII_`2TR%=j9ImQ`vjzNH&Ll)WH z1-sOJ-hxYArrYwF?q~QWU^~}I*jAW0sIi;kx}m(gkhr;8ETps%TQQKcfeua&b8)4( zppD}ylFQ>uxSJO*-sB{DHR&lT%hQ#VL4UNQD77dlpHIryW+$dYafZ~9BVO36iev>k z4Yb^{Qt=PPtU$mR2R0eDb4;ThHYq5Hha{>jrc!T(T?UPvE{aV}jE@Ckr6eIQp)iF{ z%g+Z+5k$VBQX6S6n$F>DU^SH5`D^+Z#)|^Q)COv%Y%piKs2_4*!Ux;SVKwfrF`e3T zB}LmI|DK<_Jy(@3(I%#*CM6`rI~hcVU7}I?ZzLR5PM3WnI+yb|?%3$yB}Zp;JX1*%x5s>9go16*%wbicZy09WXv?wq&avK*{Qjt=w>Vlf#O4VlEB6Sz1D)u;%-Sgin zfpm!(^;yP{)rrqCuuYl~pL5VQi&c4J6i8<_bcG6{JucWTRN$WWHApM_lc|U|A}c=L zY30iJ_^gPMI46!WR?g35dWRkBiJBjMXR}4vL??ZY77FL zEW*?ZV?Wdp9Ep6@sIwL96F0Vwqt=I=~*i~WsL39t`4h`JK%HrzPH$Gg5=^T`Ru3S@_KL-#SE+k}qR!BXk94+Ip z$;)Dm=)ox#du(`n=*mxSeSY%djjykcoyZ&h;@0vZ5fNJ>L!OLqEG{i6D=n7R)N=!; zPwVH>GPRYz|LN83s)E9z+@egbpA0;)+)>)5f4=56U#$%Xj7%8l^I8qJ9)jxkA^z8J zl*xe^#r!x)aCz9y1U|h$mr? zudY3Zy}d81x>tT#aF+a!l^d8~SX(~75;$H%F3~FrZAM~}R>gT#dK_G>0c@*IH0R7$ z8@^U?CwvdBUF++&W^IG-@#75*$9Xo+**e6Hz$OyRZYU{Bj$`|NOyR7>?a7xiY%Cc# z75mGPN3y+~-WGot-Gxi2#4UuXx+=G*5=S)>##x-gWj{8ioCzL~+){I{lc@P}YNdjL zck{D%CKSJah1mbDoZQl zK1Cm3jQ(z17W7baObWydUGun__0LYQ3}Uz32<He($3v zuqxuBQljJIdE+6Q=f?2QTErZ6Auil>fbVj~t|Rf=9dw8%0`Z~UyANr&9Z(SzkJ*9C8)Y3j&GGH&Bs>flCYs!aj; zrNJ5wcs#W`R9}h<^OKS?LCiwm#ex5l%u0`q3x^e1%&C@zZ42dk4bWSYyVH{Qxw(&%*v3;EmJp|@{S?_V*Kjj!&D*JJ8Gxj72wQlWCta%X47wF!J{zWT09y_I4KB73FXiH*hq|3)A}L ztd~D-Jd(S2FN@lbS8=K=1}`o=bK+|acLWmw*i`w;824fmm8Y}X3`(=+;7+>`0~cCd zqG}U&?@@9fV+*7L0m}z!15*VXqZ`b zE(sg<6!^ua2gi}8+##S=abQ7cz{;AK%+dY<5H~TWBS3=cN87{bE@fOc2a(cYkRz=i zJvefcwGxy#^Bi4)?$`&wKpvd17adFsdkMb~bK-`**qd%C@I@7cp_aosTQFMb3n0}W zRdbNhVq+b3#E$Ts0f##d(olUl0sff@>;x9f^75ZlAYt|wF9foeHp`bb3$d?Ro$MVkC`!#y>{y&H`tn$#R3otWWp1 zUU-8qybH|4Mju^&SjfLazx?nIPA|XxzqH7DSc=3)CDLR6w-Xhbbt1}bs7sMxg1}j@ zPtYJ}6nrH3s&}70e4jO~R;_&Nl-7Bzt6Dd<`n7Ipjcd(mt!iy(J=%J;_1o4zTA#OB zwef8O+6J}_Z=2FKuWeP^mbSRIoVKdAhPHEUSKGdA`=jl7yHz{iKBawL`>OUW?Q!in z?N#j!?dRIBwtw6H$5Ylf1W0-Bf21sEwQ23$>ejlTbxo^J>!#MAR&8ruYfbBs*5=mh zt>3k_wh7v7+MJQ{ptg~1Zfy(N*0cq+Y1{JJYTAypHMd=F`>w6EUC?gR-n-qceL?%0 z_MmocdtQ4@`;qqM_UrB6v6NqYkG{F$#lja;UyS_r{Kj~{{ciop`l0m$>)&vJcHjCJ>z}QEvi{Nf z2kY;xzq7t)eb@RM>#uRScH8o2Xpu>KrZZMUp%a*f8Gw)MX><*NVk?f>5=v7iS= z04HD<#~5~Im%r>6^Vw=^*QWvt<3JT$p6@!6CDAg<_q`V{p1-g(6EmL{2+{QqZ(U=~ zlGPu+|L3?dZ?w<~g3OxXPb=6e(jpmwU^R>VpC0zT+kGV)kO*UXH`>`dCJ2E9=BwWj zCK6${FgN4F{NQ16usGqSG{(o=wSv(mKPId6qbu&7rf|&7RBmQBy_?cDg@L);_-MQGZTt>9>d%e&!BS@| zAB&g08y{_Vxw^kunBHMBe?pkdUw0n=&188pK7W57%KDbcFKZ7|U3I7DhQ9iu+ujwI zDeQlmT7iQ3GnM<_@(lOxwzlauH=5#vf1xq`?)bXht(j@c7wScYcjV>o`mpSdll1}i zm}>=Yc#Q3Da%1Mpc)IKZyW=;yTfo2Zd$(!w&+=%h3sZUE&&}k<^1#@d)7OmB(0afuINbCe(I) zV{T^McIFq~#xaw*v$T!r!+bTK|FoO@!5n6hh%l%amLHZ5%n2|3YXutQSp#?D19y$_ z(RP)k+n>rjrnO`s}--{Qf`0zdj-yKcw-Ql|Znfx0~w!zqd?@PM#J($IXcPY%i zEZ_h1z^@g1Ol|+4@tg8wGTC=#XOF2am>qfKn907Io>$+Q-Sqy_u7zJb-R}@W`8!UQ zcf@Io%VaV)??c4o52#O#V%#1nXgU+|F>@jCcpKZ_J&A z@3MF03-+%5t`!Vm@tMZ>tLZTRq8EaGtY0v9QyVgOxLGr^J1@q*V@d<={Y-i7cC%-3 zywbm3mfe^J;$ivj&b!(ametFDK5R`erNd12{AYbi%)83U;>Nr+5`MbsN-G#{3WIoD znEk*1TOcrh-{|8tGo`?++wTaNU3N3C@eIPM{E6?6zA8c)@KO^scH4!o_z?+Q%*wmn#jm(a1a)TTyWOP%NAtDac1wZ1xhWn_FxWi1+ucgwYJT#~ zK%Cb7e0;;4r?1`W?L2GkmJN~4qeqVV*Kp^l{{GI!Pod5s-l5(hTfH|7pBcC%Y-)se zXkdW%%=z;?=1iS7X}-tI8Os*TU*xgWJ0#REaEtTU;p2yoG{&*O-+OJSH$rdp4si|( zbPn_NcK$oTQ1A6&%>Twfe8iWHh}$_VWbFp;fVCl;o!5qih4`%tH+tC;80NR$I~2)> zggJMo|95_U!@`0ljTphgukFg)aKFHRbQ}R(I`1u^-XjEW3IYW|f=EG#z)#>K@D+p! zoCVVbYXw^c-muMrZHr(7zB>y>3q}e?3H~J*4*OJrKYq@ygbFpjc?&`jF2opm1ANXz z>{}4$R6zvXL-7^>a}gdNK{#Sq3%@f3^9Az+9)daWH4PnaKI}6EGX%>73t(S_x2487 zLyxYu^5reqXbk0y)C1uXhO)6Q|5RQUW<7kE;@^l6 zA+LmC@2nIomJp<|0saGwdEX4TwQyzbeu8x<)8DadK`8dN9==1n>mmd$toB~5jen|b s)(&B4mq{38BT$mA^w<7dxZ%e9{-66Cfg0+{%@$)VvB8fK@L&J^FN3;7EdT%j literal 0 HcmV?d00001 diff --git a/ABC_Score/assets/fonts/Roboto-Medium.ttf b/ABC_Score/assets/fonts/Roboto-Medium.ttf new file mode 100755 index 0000000000000000000000000000000000000000..39c63d7461796094c0b8889ee8fe2706d344a99a GIT binary patch literal 162588 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 cASb?` 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

            • 2a-ytx-(Y1%*Q`;e(V?9Smc22g?_xG~I&%zq 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≀A#j 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%0AHUW;|^l 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 literal 0 HcmV?d00001 diff --git a/ABC_Score/assets/fonts/fontawesome-webfont.eot b/ABC_Score/assets/fonts/fontawesome-webfont.eot new file mode 100755 index 0000000000000000000000000000000000000000..e9f60ca953f93e35eab4108bd414bc02ddcf3928 GIT binary patch literal 165742 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 G*yFsbY~cLNXLP73aA74Mq6M9f^&YV`isWW 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

              5q!RY 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 + + + +Created by FontForge 20120731 at Mon Oct 24 17:37:40 2016 + By ,,, +Copyright Dave Gandy 2016. All rights reserved. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ABC_Score/assets/fonts/fontawesome-webfont.ttf b/ABC_Score/assets/fonts/fontawesome-webfont.ttf new file mode 100755 index 0000000000000000000000000000000000000000..35acda2fa1196aad98c2adf4378a7611dd713aa3 GIT binary patch literal 165548 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 z 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 d0mRO}xo^G_%I z2O^L=ATW7lM&^H<^*^2eAN0eSJq3(x4DA1L)&F4euaO6sK5joV1E+r+DAqq4sQ>Wu z0|aVj?P25hA?l{GgpFa`oP%>HM?@(=7t5y$lA|Hyyb+&}%lcF7Py zVOq>>oZbI%cmJ;c1Ox&!PmnY&6cmq2?4Nt?RBbj#@*S#u% z($dm;AKJG3Yv)w@yrS19dscW!&dp@T$utcaiktwRu?l%Fgn7##v*Q%&IaI$|O!P}5 zE!tXI-Ss#N&%~+2xwep6)=D=@bER^nrNZX=A{Jq3H3E=sm}xcLG|pUA-88}8wRPyv zPnoSTxscjcm{McuVx_s+*=h#*Xv3UB1T}&E{uxPi!CD1QZy{>6F_-GvT;_v+@h3%S z3~p6JKLUMaO+O0%W$iTHs4{|UN^?L;ts#@G+64bnV>gujTO1A$SfkJKhUN{&{#iBu zbrz-NBAI4CWjjIN*&fwVu4RubbB`IvgcJ!WV;{$}bpWy2K1lw(2Xe|eWcN9U#V^J= z0v&sgD$Y5Kh^J4utKJ8w`)YkScnEwZDG=2~oYvdtqau)|6HAhwqW$r>MKydMdi-xf z|IPEi=Mls`ySoS4Uu8Lk>GP(?uENKw#l^+NO;vrl>caNS*3!n4J~PMG6%1?`Lo`8D zP!I`IikK!Gm+D~0Tx5dT2;-4lEPJvvNz@Roxn4bK2&F(-3ukKoTzvdLw9r!ZsOd)GFakMtPqh`I$P>j#E63N~^t! z8t)N`OP-Ey8cNVPKsgcS6B*&w9LA&4rPERq64J$9K^)cnN)EQxZgj#nJKXDP(AwtHNPvj4d!y|3WE|h>aXutjp#eR1Va1(D~!1cD@#G$XK@| z8ScdxW>*_WC0A}fCWQ_Gk+039h^tbyU`-AaRQXE3C@|xuc#bIvB-u`7jVA9qExYjR z=L}OyA;5`@PuJUM+d|rr+H3CQORerU?U9!{Bot;XUqe}i%R=!=DIcZf5IBHt${UX7 z$u&nXerDE=@3Wd|0@Hz$q*rpVDJ+Wsi!-OJ!$UKaeXQAz3oz@z3unQS7l<)x)linz zAH493JdOfC{BNrjX7CVfZBLDtgiqO>03bm9Y%opN;dZI*d!CgC7s1So zx$n!T6vhxG4g7BozT_i+(EXciSh1 z*WKx5dLayUw$Hadz3+<5D}%BZCKe`cE4yNK&2O zC_2B@YGbYTJ=@>6O14_I7;gA)sBiMPW}zMqr`$mljy|@#K)X4 zywlOE7bt(D_<9aY(j=81rYh}wpQBZ2>BFX$_0y{XD7Q1jV-(PFSPU`4DYgBSjuXGW zB&TypZ4-Ia;ZDv{*YiZ4BK%bLvA^d#3^`kw)^(lO=^V#PS}I{JY8vD2<6?gDUgByH zoos%w5n5SA70~&_wmZ}=sE_CH+$5D%I~M^tEkJ<ZQI7BsvH)rso$j0Tno$9{71< z@V}SCAhApjLIvlX0Pxk%zZqkf%M1LSF2n#NI}?5xPC=! zobSQlu20xcw~DY&-wOel-n@?qJ&by)A02bP=f7VUb$6h9A&zxij{$poi1x&>usk&q z)o~Zd^jeapPeoI1Jmh>Rc-6+ws~2@GiSZz{hBgw^soz#me0J4++L57M=6^+@00R~q za2yth-1NjYw%qz!q2gOQL3>x?qI6L_n5iR9jUE#0ppndAXQSaxXgAAg+?Y2ZVSq`= z9KUjbab4|QH-zBoMtL>BP)ja&OJ4O?2yYF#*>9aH4X@u0(otsJ5@}kXX@!4~Fy4Wh zDN>w`7i{CSlIi9?H2YDBB_h~K`_cJqA-9`a@G}pVc;w6b)PGdJz9MqO5mS;`wb~72i`W#}dhh!aglheCet+(79kLz+P{)7XRuyhb{YxtDFZ#1N?6e^# zh*vvtce7F3I~yiY){1)rPtn#OV%8zxe}b9$IU5=66PVl01yCBSd^dXUKhK1G0R|IV zcvk_Ac>q2IN6uR13{;c-_cRbEqYJTB_{Fr4IijaDP_s&jXx0$`sG}^H^o5 zz-Q`#Xift$p?Wb<=fxuzXVyNKg#>QnXBe)ocjuyk{hgW=c?V zRs~?RkX9n-Kuh2ogdASyGctZ-79U~PP*d!u<<~CRR3B7LYtxF8T{?!Nye0d%0n1-I zI4RC68nKpBKg^rfqiJ-i4HXbQx4>=dyxjLao>lA4TIu938pOX`7jX~@WPeN@jr_P# z^lTrnNnS5FJgePCzFZ$yZEE2?4_z#R){UKOsw3qqM;Tb8H@A2_3MP!1!fsit%Vn(B za_2OfhiiPV49y_-YDhUHAURUHq=tlP%rx5l^&mD@G^8z-Y=Z-tIt3L`u!>WVQxz;^ z&9LZUjm7~;VIecrymMSz9sAiMQWB|u=tF>$?NZ<_+~80;Rt&KJZ1cdqEdhb%EWus! zdJaxE0R*U{g1~6{#~l&e3R1mY+6nb{2=-5{7mcd@paR4GV(zxv{CelE`s$Ei#`XXd z)c6s?t)+nM8@GOItmYqze$tkR-@pNBhUdU3!dN9ILMYJOj4^aUvZMFQFK=P@cL1r6 z@U=sJ<=N(Bq`QQC3-wJHuee;+1OIT=^WJf^vichJbLK-(8A>DTum-ya`_|C7PvY^V z-X#zAoguBv{!+QTW6rx3-!1S_UiFDt_}ti$D*F?fI@AHKaETKn;7R7C5HXlh^h{!o zsrxdvVOX}7A?4Tr{6o+@q_3pMQZTg)Ea1)Q8|O#l$}N5<%GqV~ZE>N)M!~x7JUKA5 z9t(l39F)9Tiu!T`O`2ZQdW$v?+Qe4m558`xNHnv~bX8j4G6ay*PnvTLCWgm@K+IP1 z^SI~_P^NN)(Qy;gv`8wrCM0r zdu^7~mAS%W$G8dDhB^z`1T=lN-^sNz%Wcwkz4|)K)IQg@u1iEb91XhJ5xEwYDfvM6 zkLOfT>Goml>)dkK7RrcGd}4t$1w4`Vi@x?8r-Xz-T@erhoTTvYj;62sm##V72KMKy z7jCvo37#eEob8=(e^%k-w*#CwiWcoBL~yaY-mZ;3#7$hwrE0n&Z&_iqW9;qZ8h>;~ zOjAz(rmb4$^7bp}HHOIkg&1oXJz&O9f5ETRc`KDiwH!c>87$jXR}9R=#e{N-{typMNosUZX^8aPu^3Zb=_A_|$kJ2>CKI25a~u?@$|xUD0E z3rV0H2Dkhmtcz}Bqr1R;PGC&s1*q_(cw=w!eh^JIxmYy6ip|~R@0t~6h9kSKF8k`r z-rmZ)soKb2jgHIODnmo-1=6%KLu=Va>yJSJgYnC@P2eB{+<2U~g=4b-hjNb|x!65z z5!Z3c@32#?=kl#m5f8>l8a@f=Wi6&X>j+N1+ruaQG?CtDV~PXb>@WWf2Q($z>z7U+ zMBlz(Z=2s-T8$d;Ue6M3l3xRuVhSxm5s{3BKIpgmi-?-oisza zkmgcLp`Vnlx?L~qe?(H=WYV)H)PPR{pA7{5h`m_l^X{d`q$MOR49YduCf{c>9PI^G zU)!twAe$_^TtGrD{jAw%Wfw1k)5`DgJXWP`-7XNQ20MryLW6t0#t42k2 z0hnOio5PA`bpihQ)A=v&;|;YU&l?F@fC_Npa}OspB^Vr!zTb{NLwi)Hy`}19z@fr? zU3Jh7xd)*wL=El;v+()ck_u(iI_w^muPd_R6?OAcCyxtX2(vAWE-tjbs3u$PJ&jfGp*j;7`8P+@e0HF88@NU#6t?jH*EMz0L$My9PHiB zRVebeoyHC8Wl&pm$IT(G**{Utw9Bh)HAE_^TCH*ta-8|<-fxJ&aV4hWUSV75)+$)r zdIu%X^B9`Hh`wv*IW6Ho^#zL)v08Di99QNKyQ4Ex^x@3G;Cg6K(hX}D-{D_(j!D%6g}xd;qA)E>mv@<*$ZX$rUpcaK+~5kxF2pAac=%N>3B`6+-EO>fzLHkzfcD>r`}fy+!N&}- zUH9`HP&unio@pV+24r=ON7xE68a7?3>8!kAzHyK4Lb=YbvQ+HBn+||W{Eg?GVcYQ!l ztSPK!t!;Un>i4P0$ET?I9pdIh^EU0+RcYthPqRm& zPB}LVBWJC5;`qzHr{VN*QZ9;5?qvVIY@^viP)2>OQxb+mdkWDzLq#%PR5z67y??M+ zSjDiw%%q&n3QENt>Lwj~Ps8*c{0xvFm@csrU=eyiH}Cpb=6h0&O92O%dTc0WV%R`6~bS z;QT3eZTz7V7f#K|S{Kj{_}e_u;Joz^)V0uvH!H@e3WnVKG*Y;R5RQx=UKb=?4!qeb z=_DKa-vz<$?}ZxrbHii^hC> zLN`k`gS9^kaeye-(%)p=Q!i(kFa)B=q#!VbG7-calS3zKZMl8Kg`I^HD#h_iN?($! z>66rNVaPiYq<@#JX$rYXkw1$h7(yVDzNky$V^i%H!;0ZYI+ZXhW#@zfK7#lXMnh2Y z^3kcr0*7W=&Ss!urbd>4di6HWv0K><1f+uu%DQIF7AJcpusQzmE==J_e z-fwZbee~KU31mUe(k?U$jD<>ni>OKvN0|-t=m-(#j;6O&G~<{8=r6^gv3$D&K-xY8 z-A~Ae;#6^CAZ`&J{>W;EQAqsZ`r@~1+yiz(zXcIDK*GBO!0caA&f@eEcUcd0SLAp% ziK^4%9xfj7AK-j%&m}#)l$Krz(B|KAu~u{JsH3mYsRF-@7#pkE z;OJGjbEEV%#{Qt8>G*G(Vfh9<)rQPk1eaSAEZCJ)F~PoR(h+g}tl-VX($ zYO0R@KF7}dH^^v=pHnQ9YSNiTJWm+f!v@BwqQ$Y$ei`a_1{_|I-ss`3Ry;b`bNIE$Rnb+z+c*ky}aexvI*zKtJjccvTTZIqk!Rw!$+NgN&BT7q-IM^YM>9lAFF3qsj z{Ui)Y_-SRrj^=N_HhESJD-ltQtL~Y=Od(%jfPRpq8P9`F;O6pc)s_oF{z{=|n6er5 z!u-{h;{bvm_L%5agg+m)4aA0YAb@K`Qv~YLWx~sGmt6*V!|?F z%7PdL2(eqp+SqbvQ;>6xmHK-4tnG6El;(blqDJ+}Q2=*wlRYGBr%&K>9+K^{Aa z9GQ#O*$%Ki>UYmph71RnuwA?#!9vfTIuG|p%N;AWWwB5C+IE2*>xGPGkT?t@?Dvhd zt%Wpg_71*1_@0kBba@@FZN^TvjpVY+rkq1h2gtm zJPXCjvMjf7K+`s#pH$0kv}>*SPOV2H-e;NChSuuNAtqhRtEe-DVqBG7vr*enVEmVd zAv-&^RqMyAthD#nN)(w!Yp^GI_VB1e$~skiRlP3K6DJObNVTJM{r0E+{x$grTNFbh z_uBsc88W7$jtTI-pPGD>}Uj((F_m&nMmhI4lhx z;SZUOC;SP$w;q=0ux8Ozq190iFGeAoD%-HBSfOO9W&PK~Tem;KeV~3gA0dW>Pv6I1 zYNn)N-+Qq-I+AJB!=V9uxeoR-tL7t;-ZGy%%>9l;tMtQJm7z}(vh)}z8v;!QqkT%c z`Pr;kXU{<7gZGe(<&Zjp1|1&SGt0&iI1JiBIdPElDo}oD(oS=FPy1_j?dy9UkEB(@ z9bfbpt~myqXy`*o?NPpA2S*3Iq3$t0QzT^=d^GlO7pmjpsXe^IwU{J-P?mtkdD4jT zbfg}pfa66t&>R@5s6DBCTElqWD~=VAB5A$Y$g3nSX4Ol}s9ozugn47sFrns|d)D7D8mh1^h>F8%3W z2a5TI9W)%RgrtE1+L(i!DwwV@xZ@VytBSnvu3ay?9Y$%KBd@=bFp#4X>B};lBl^>;B5%>LW8TFDeNLsW?@@;#fCxMm!*pX9lfHt)uuajgiV$d zT#h**{Ipyhjltvp#_fvwZ6(9T&)Rb;VTsa~=gJDe$;q~EJzFO3Apn2EXrlA~F^1;i;H_jG>WmV*SvFHky zf3twjY=>%B`6@dr95pk37;>@x#zI%UP>yJ?6%2RCAY-s(SLIof9c#sG+>FEDjD6gU zD+r3UOyZKt5Q%XW6oZUQHH@|K!@vgu>y(j~#NpH5x9l+GPE6*P91EzHBE}krNo7~5 zb|0;8aj<>dJDCakJW=LK#vk^V^`8D9UP$2lLk&K$X+Ag;(w#ZeR7?dFGzJkJMi;Oc zoicM8#T@0|)<b|u?YyW0!6Ew$>Y~pX2XU`J zDYoQ`d*fm7~YwxoZtL1W7$X*5n>+fi8oUqvJri& z6nm&FFcO9AAX=7k9_;yussklMDtxu6t5OkjY3tvL7s1PUqGstoYssPT_ItLMXX))Z zJ03DK>_IPJgIKX7x8Rw<+?!kIc9MEA5hw)}5-iqzE8VFOr%mr5VC50inCtJ#tAQL} z1%tXg16rH5cZ?pPJcaYO6~hh*gGh%x5*s)RLDozXG<$(Q=kn_7fh78e%R|8C^X%4F zm9*vMr4{4*^7ibRo5iK-C*+ed7*^J_i&Im+>V~x=%ybD)(9wLptciZLN_)YB5O^v@ z{$Ja{Qtd!!GiH0^v6Ue$NG8nsD)~)N*JjWChU+1?Ny%198}eb+iG#cLFl;OopkF>K zIJg1zG{!THV!AKNdnO5aW zt-47+g@#B%3Z{it%Q@M`87PUsQr8-l>(V z7?crSbh@OEA$m#}=67-ZTp889W3?AU=1tjMdw;Ne(Izfm0-RQ+6jH&8gwGA_(Q}sf z2cqudmvKpmxhIPXLGEOm41F$3^s>mhI5{xLs3uHjw&8hlNfyhYWJ>LMMzm7Au8{{4 z-78CWHW(hd0`W;PqChl|g^3)t!&RZbm@=i00BhlV_)wg0=hMU42F)9g3L@3ao5I}H z8I}fZ8eb0a?<61oj=9=X+T!Eq!RN*aH=0Y9i8s}rg8IT>C(zNJ!Th>8L<=0PZ>~y% zhz0Bh?ag(U19g*K4YsztBIx+FBiiPs)+@S)uF6ph=|=6xgUL*jcixtPvskp*56`B0 z={4aNiYE!i0tq@Z1;pR-k?I3o>lQ~?sYinu)T9ag!9h~z6;ikT8&2oT|A@)-z( zaQOIKXY~=W6~KLycubCWOz(G95I!BBDB0Pny<_|zlgVmqx-mrqM_VmHhiBtJ`$Z5w zCPrd45%V_Ko8gYvDbKOB4l<(Fy#)}+&?NnmY-1A}rTwO$s?$(4W6U5%XfMI)w58zk zbnp#zcaX9eQujFlW$d|exgN>CX+D9ODCFX{GoRcYei!0W`_4DPA4@ELI0BSq?GTP9{qy5{Jp>{!$ilU=1r*;&BcRg z$*q-IA(UIbR;y$MuoVtrm}_sru-Iv6QF-Z$*v_HQLPEzhFGyrl8>MSf`fNpzygHW~ z_QJA574ufXwN23TR!mhNU*^BKQw@5<dJs*_=x{mDYt5qy%uW6HuIrYQdUw=BHHG z5Nt@%wEdaq4{)mv_E2B_!pNn?M`+Gf3%JA^GCHQY{6Z+#==o?VMBVKN&I-5tw2=+-ea|`(iVDzDkf` z_o4ZdXMG*j@}fOMk`);6@zP0?jJxg|pqYLnuYp;NEjq=E37d$523+{9c|=_m;Y=FC2zr0q z9ABp`#xa?^D8x?{^m9Pb8P5(LYi&GbahTA*2ISmx(8c(0gM7mGV0*-m^P2+5>2y*D zK>!ty(}TsN$-pvPyv8MaFTTJ&O7I6s@>;4;BIl36G56wWqHwlP{~pWLHf$Uy#0Puy zeV;G?gvis^Jxj`$>M5o?zm}_}UVzVP!9jt89Pwn(1x#nRAN`d2;9sJ`tk0AOz$1+E zH{8RxgaNe%M&|1hrS+*9C*P^Q=fDJ&p_?m6QWaQ!V5kK*vuF%HaecM^I*D{f1%Ubp+IA5m}APs2n1ZJu)J^J{Rl04s^nuyFN`DfFR|@!RJFA-DyQV<_xaV4SNKY62@hT@DgkLAq~ zhG+%xacHfgNfA`ZaU>zuj+4n`fU3TLj}&960XK1bcKm{wvmh9SVn*;5QgF*KxDXp> z;Zr51Q6HgH%jqJevB^Jiu6LMSlE`WNR1ubZUzzA5+#sU+UBVg8!D?yT@>=FvY+EEQ zC!*yn>I=^d@TLt~CRiEKJXWgp@5P+?!Jd%4yZjSDVZ z`OkMD7`^B2*g{%}qlKpgf7Zmo0$lvg7&BQ)Aza@3G~b|J$Ysk*P8I&CB}bAMZW-~Z zIR_wi6Up0t%hZXSOGa=}k*;=(xjt200^6TTRMf=`GX0xknXv$dY&rT#xsb_X8RNyA_$By$)d>6vNs2f?oR!rfdl)uT3^wm? zQwUBwSI&b&0r(I>$MjJH`fi%N1_>bz?&Ie_?js~TGj-`X%$+E9%n{r<<}`S$e`-p) z=*`trS)6S1Q%@D>CURjquWCtl()2l|<=i+Y;!j1i7jdhWpckp=OwWUJ0MIi}l3TJ6 z%ie2wuVKrrw_6uhff+-6)=_Nlw(qWRJwWbgGK?~1p|U<-iQ8R_>vJhnE;jiLPcBi1 zRW@hF{B?5XRh6|AR&h%$^yWc*ouol%@U#QTr4H?XOSYZzd|Vm2@o@5F7Ops_jl7Q) z_!ybL>GEq;&gio9wM`Qi-TlKa5EY2IY0@jteHNx%WR6`sJuJP1f$&aYFSPnLp{u4Y zEC0QDql)X^>kq8ecE4t_gb{C=2=3N2Gdry^aVqO$<8QdOeXI3e?r5`^^}Z(42qSR{ z0UzZY8>scj$7ip(7LQ+vQ=uIKkHj_~tcpcgSP5 zl5+MbW(cv;e_PPRsa@@MkrcgqMx5Z%N!L9-bn~Ur<+53s7!rjk3?KlB}I?)Qdv;%ICl2PJN$ftp)ow;+k%4wA>Ck$|vtQ zY_;32dscrw)Oop1ekSSV`gS{<%RUw@3VxU0lDzU1SQNO$YkfWP$ke$i6f&=S)<#|) zlsaMpADLw$TU8oa^N=>@h~Cf?=Nn=+j|^}w(vlxqQu54&1r>x{W^6ldqjSsVb<$rwy}rmwYQ01Baz>U?dDE) z6Enk8YWv#EPCC25t@EorUGU5O{POaAz%~D^imu19F!K|CcOQ6u9A(3jzt&6Lx23hJ z_sY^Wy`DrdJCS0duxEW>Bp16>_r;eS+N9O(hQNvjVv4ZBkPTG)KZS(quq)nebe34H)H7M%ti+!MZpA9N4oWcss21+ zAQwnD0vc>}2(d1Q#3z7x%6;?j6E#S26$>I+F1&^X5Yhyy)jZx2)-|Upucn@=gqJ|1 znjL{ulPOb0eXL1wk8Ah>PJa-YixeC}tZx!&A(kWBz|&k)2zfAfgt^NQ;Olk0Vk3P% zSYd$?<92$LGI`4r+F>*)w>2H8@J!QRnSiB-i2PD1f4t*yB0TW=VEPmk1ex?YExNMN zI9GtnDg}xUYG}IWCAHvEm4{~@{-51el6Asc*;aKov?K-kv&2q9S;tVToYnO+c-B=` znQKkgiC7CwY$Fiqj<-%#M!D%}%W?y{P=lzvRFF$pViFDB=NX-O>E6kM3WCB9`o^B* z{MM$j4lm`~NPO5-ia@%@awPiq@h@2GFf=ysU@*00s(yk}5oIaOg0TGff)nIUWYyxN zcEn}cZ}y^F)#s&R>KDsgsBwSUKb9_R?p87K-R`$x3itD)iTviK$x&+bcHFT*Q!eFg zNcceU!8YQz_sVsSd;ERa>;c4~o)C6(H5wX?RrI-;Mgfj(au5r*P)ju{uKG+ds!M@l zW?klvU;Oq*8pDCohHSQ24f7DeFk&%(PZcU>rFa>O6fcD4U}U3XS#+b?NZOc2maoDf zS5>B4E6*}7JnfMM)^Z2!u|FFCSETDqB*+}eo{nd-W7`sNQ!;2e+6~Ni)KbM22iZWB z%yRrZnm~6U0RBToY0kZLy)+s{VKacat74^qa)$4)&Ph1*?@Ov-g?MMEm?8Zb;eqt! zLvhaQgRdzKuk?`*jXV%Juuj*{CsQsj!V&}8J|X^iw$%6jIW)vwOI{HkFX{!z0lWlKgw@5_{( zOMVy%4F^Dsc0R@>XubIc?i6ec|UaBw?M>gea5yPFzj5S zT>m(ee^IdLw=-~?{o7xKpf^)qkrM(2p!((az6XGrED0(FM33D<0}i-zg79zA=DNXS zEsb+Zs~m#O<|j?o&r=|HRfL83{B0M~P{4zigdGU_Y0sk`&i#!eN@q9FI$Eh0D@$c= zHCwJI_FH!WbsFo5orbP4n^#UY>8;Ped9MS08=u=>R+PXtTkh6>nUbtX-mk~TlT<&} zv`4nQ78`LiHas=DuR9r3LjJaDID5~MGzV7ac6>D$N#lJ)K*b$#vtKZ<$~-Garg^@I zP>8fe%19Y_zr@ojHZ~{hg_(b+=~elZnQQ=ZFK<0h^nP0I2;dD#pcOcEKg%FDH|FA= zgCO~T$_6o8I$2SShA9w6s>(w(SXOn4pJ?h|oFzAC(qSCg$%!_$fG;Qnflw=yLUdWW zA)3k1AMBe)===HMKi6Z+RK3K-|6!Nf$WbMb-SFwgWqST%&t-)@hRVSed2jSKYbX^_BIu^IWwbNF9 zpJnu1Rn|Wqa>o_q$=jWj4UQukG7HKuhoijLbIp1FaSe$CRlFxs!%%g2>DL85wjvj( zy86kPCL7BS#|tDau=B}#QE|ffG7?kw$s+S;oe~>*PDr08^U!7HjxX!ohnTQt-D1S< zv>{kD2r9{5>ItH#v8$A+WSK86m8%+ql61HsP9hz+9q#mvT0C!ly1bL)-)G``ieJy& zd%tNl6e$!ua=U}>dM}XA>NTG{gA*PE_J3EIFWC8k4~p(C2wkZV>yfP7W~hmm#ntLo z8zO~R9Z9@lS@sMv$@L065Op;&QPR1FUw{cSF>(@B%9&rewXJ#8_cAc=o6*#1DT$xOzeycmC9E)Kw;29{@u_qV|P2(ZS zxS}xa+vYYvo$*1@$w1$QXeJ2ZsA|VX769oq82C&5=~|MRo4VlmF*%RSB7`4{P#pDd zHVO!rfZDXw4$Zpt!Il+oD?D$1+{uEk#nJjBK(eeJY%HhD`*}7)n_Btv{`Im!O4a(D z%EQ}+PvTbP=WADI;~|5XOqn2(kOqamX)kKHqw#y&_tnem731aRZGz5@?m$TdETNl9 zYS>UXk-v4THB7I;csa~%`a0{~6#Le+(mw=byX1PI&dDx!XDsGYB|_m zcnJe4os^9}S8d;{%WfLBg;;#j0-p7l;vBtSuFqcnEiu4ur+K*sVg3u1YtU+w(t}S* znYH047Q2SAnx}fb`rn$h^+M=ct#RG8&mx;^A;cRG6M`R-O{L-D%KMi~ug2yjTfo~> zH4VQ8Mvs>gE0<^aSeNJZh7>i+(1$u(`q{(nwWQK^YY{7>(QcDGjqqfWJw2Vyf}@0< z*0q@`%Zi=ABF2bB1I%U^tnxIB&zV$RNhKpCH@w6qHX=p|SL^r?GC$PTAhC+K`1sxu z=1&f_c)8l2Cc3u2W@J%(6;VRUbf0Btl2F`Y)VYf`m|vxeoTi>`gW96 zdvwr9$IR>Y)MUHq$%$rM=IkMf`b<@d5=nY#^q%C`fbwITF7v&Kd~K}4z;F$*^rQ0@ z4Sj#ac5hQzCLMN`*^3>aRyVd2a?)5z3k(T7strykphhh$nsZ>Qc7_&FaAzY51H=Kq zn4HbEn!l9dl5~X1xNQFng5l~P)~B!E-}j`fMweF^Ns421yno{$UANe9e-h$_dT3dQTzRcqepkzHk^z|s)HyzqDH#~EbY*nE z!3acTnuFHKm4Be2=5dmGaC(Z~Y(EH2Sh?kod(}((&UA6`XTR-YOn2Lq=K8Ed9J;;w zkQ210aTLZ=kK-~tSZUlpgbb=&zrtSoh^z`D-34aSz#KFN6OkBL#w9Qm3&c|6wm}xW zpST@|N0Y+_&$;v!^lp@ufMv?cYmi{r4I{lR1#NwKkwjJrH|5aRv8PE^P+iKQnnsxV zp9t{@(G&~gYy7pdSBcci0$eh7${KG?ZP|P5B!Hh!V~Ydjpyepjlz9e_y56W~f?UN1 zT}>?Ii^u;+sVa<|K{^5K$KG$V_fNK*c-!7`SKC-ilQU~8d^Yh?4bl^Be3ZK^lT{8= zS8p}8Foc24u}xec3~k@==9w{AJZg;u$Bsi94Ws6U%vuicdGkP86 zxPP_v64Oubdj3pnSIZt6EKDi*gaANFtS^9aDeN6?*l&Po^l(+nHNdVjB*mkA<#9R( zcBb{DRXMY=mRP1rN=ufcI?i2TqDX}okf?on<4}r zl;fjdikvb6STV!q@K~{=8VjL*l6Q)k40Kr!tD_9n-j}cIQH4J3L)rJNMja`rb^JJA zOox=e;F?5I3T&fsrC0_^(Yus3APsM;-FFE!Cx%+-tsa;5@zPj%AVh-)t$ zF+X@&4pt>X7%PsBv14&KggqdqHG1W^!jSt~HJUay?gXlvWsLkQPE0grR#Im*_Tl>X z$Zi}x0nE$Bk%)~}`lYFe!RX7JuD=ox%p`whlQ6|bqgsXfHaF81jT$YIL9{f(HSak? zpn0T?m@}WjLFh8hI=OyV6rERA*m#w}U1h2qzjXGbsml6#Jw&N*zdT-dd=15Ie+EtT z*#yE+H{;eR8(c31v!LGR%vg8(nR?iWQ!X zgB&?&SyDYVk5FD=GAgy6YMPzYc)U?f6w91AysneldB*ZfNwqr7o)r^k6yycj+5=oG zIsm{uOIXjQV$7>=Gfq1Zc(Qc~$x7f?D4xDB3DhOeHps*Sz*-D^I+uTCI|L@ z!^~0YFTBJ!r7pCmhdi8L0w%yf7id5|2Cex45Bt0=AS`Qc>_st%GM2eiFurXA8)&vn z(v1_c41I0zS)vsNNO%C$bu$RG48L{WZ2&C)?)C# z>17e@z3yu@{by7YpJ=5K$JiT#A#la2nF;S3f; zDSR=#+R(v$PoqqAEtF7EmCxP>bl;Bz4el=aO=r4jf0+oz{lpsf`JTJPo^$7U#Lirz z*rL0Ew*_?NZcc0iwo4?}+q1LDEVUGyv&xom@Y2<247cIV0>W%XhlS_CXn+GXfhKB1 zlkLEMF9fYoKw9yoIFBEbwmtAoO2?fPtK2%89$@3BqiiYqJ(gJ#O3CSZtS5)QCq#Td zD;_7RGd7geKFUW=+l}kCIyx@xSzhNHB=BU*rOC2NCU#BeGr7%XUc3KTRu(22MeP|OfeK}h6Sw$9 znybF@fKbPT$!GsTdDghElPCbj>FE=w$Ot1AM3OO`xCeU~O~LnREf(PRSZF*d#^Q?o z>;6J)+eJi7qg3szm{M%>vS1BMpTSV>egNC$?5H3hAr1~m4Pbo}?=89Nzi~9tHbPTP z;2V^AM16l1wX0b{vq4OIUpnQ|fwiRQ8kTb|JSWSTROq@C$lwruW0aX#qk-YnxK8H> zHw!#`jFjBf=_XQx5f~Oa{a_)-ei$&AuTgrk;Fu{BoqrAlS)sby2vM(P>jNt|rNgh>#=@{8vwQ;2CN+C+RNN7dj;t?ykeFtlMtesE?J!WjV9* z3rus4%J)WW(aIZ8p^48E4n3tHQ9k8b_cpaLHU+paT&KQ&zhG@L^d~+YM|w33YEs); zo?4rq3NcCzHtF8B$38y_U>LwR7r2++O5|Bv z#$sZ13Jk+K41jjkomNzn@>A+j*ifN0KeIZ^$OW<*yfL`NGz?~QZUTT{3buT*ARp{p{y4spA`#PCdq%(!t zgVbI=WSZrJZYhdd&(h!^D?ghV6EWy@F=6~$$K`8cR2A~~Yg!i~=>Q|o`GeD>@AK1s z*Uv*oP}N%In7?%8Abm7D=%i3{BPIHITKaU$uuS!$8KP0af*C~(-(~u;_{URw3*`*_ zdq{v!3xx93adJg%>3)ftaFArB(~d`3U&FxMhmx>t4)wF+v~l@12ZgHeOpelk^&}8 z>}dr$wl6ypRB);DsHO8~b^1t@aoA=_md7tRbz;K2)jSa&9J7=@>-9u+J;6&>r7Fe} z1Q+j@6rI;ze+5kFhp}4Uw>xg0GSfUi8Zhbz}Y@6}@->kHZ+jo_eNB zh(V%q_s&vwdO2BFfGpWxY$G-%v(_2hc5_AcDm2Jepu?qKUkzVEKPk4WM>j+2dM@ow z8vq`m^&8RJX*`fav$SU)?UJt_67BmEgZxsQOvV2JJV3+0J-Z{8?Apzzotf{|zIMm{ zv!jhM>cxsvuURNkE@|ysfs8o<_zT7QN@VBJQPZ3}3lcCuLXJ*(Vf-n-Y6LJ=XrD6d ztc1sN0qxRH0G(w}9yLBmu9JSRk?N^2Appkvq5mzs20=JsXT)mCPH|p0tTyVyWvdgg zFNy5FhuyPMb=0E4S|_06JTmFIA{Aep?DP~m+37hq-Z^Hn+1lxt zjM>@#ipY5E0K9@)7GY0>x+%?jWiTetLN0y zEVe7E>1ZOYDLtsHRm(ok5FV|sc~;NMl_AU6R$a+j>o`YW3Kwcu3mdMoaHyt8>hvJi ztWh>ls2=G!J$JBCIlEm~jLh;lFuvFj6jER{Lt;v4rIl!cMM*%Xx!m-4piw}Fxh>dAv%`Oh{%GoMl%m&=Avcrz zha=aWj=EV2(W6)pt)ZS4nWhCY?9WY&>4|QM(#Dh+q|(i4CW0erg?KVggqHH&GZrj>>FO8onE`P~>Jp5+Qe*(xghpone*3 zu1DM1jR5gVrXYiMOB;=6>H$|z)2x)cOke3Fn~-#fv72Fx=vyIaCjK5x7wtYu7UH2y zLT24kfdm$wx}YVs4BMkNA>nVV1`C;nts)i#B-$)Wy&Zc9@e*t@B2jO_27`#O6(d3f zQ70iH5)l(4vDyrxo=5_+I*Bd`ZwZPf{sW51Mjs9JdX%( zA>}GQiTJA7Gl{)M} zh#*o$5avbfvtlA(tb<&{U~yv6rqjDcLB!Z>auT6hXE50Xt6vJsSTIUh@ClI6sk78M z1cEWI$09;bEVuyMDLC~9Yl2At^On5i86XGx%Y{aA|c5HRqkDqve$iyKc zNpBn+=_%prn2e*^$A7B%LVg zWb8%&7H(uS14v;QdcBtj&=W}%3^t`B-iD(fdyIE)BbuN+J z1Hjl=s|20iY}O0NVkM%7POR0$TLmwSrGY9}IG_Rm2jl^`t3p2+aIGK&TbgU&-=>v>s+%nlBRP1Tm*_D-F+c#|3O2I|S|Agvju6c28f}K4-G;3MQTwF;jYKaR z&B!iPI|xqze2HK&#K2`YN;M;x*q2|8Z3>7gbgv0;-zr;{WR!>9^6WaP0KdH^d8 zVS^|P-yVJh>H%cIL|dzaX{L}ypaNJ{SQG$?t3+72Myw~i4LU;%adVx$%IfB&Y8}&# zaGi09w=$Z^MKvKyD89a^kxS)QYXQue!~|#K*taO0lHl@apQF%FEBv{_QmUi6UQzI| z=)?FePs_XaXv#qCyC&Fd>TkX!Jb07dYA@b}{2r1=Hc~BCd~D6bXn%C-9nWb@rC_bG z-gs|kjzX! z{0(PIY%gm5;t%KYP}*An+WRJfV{)o)schzsDjc(KMa6}i>~*TltlOR8WL2ggffBez z{#Ok(s$B3f!*-nPLw`W;*ECS2V!nLOO_Z@re6@? z_~N%!=oLKu5cbuSvwSa@ilceTLf3Y;3y*eQdwYlAQZRPiL&yIL~}Uiw~k zk*Ck;F=Z3DM!pQBXD3jJ@sy@YK~m`>Mw-nmD+EQg@t_%5tU%N!(B=0-r%N9Ux?g=l zed2yPK*f&%-H$GZ0NH0U#poRxOM@mT4EL^ow@$B$T*xrLR{r(-BNu zi3t!xUR+Fp7e0N}9g8;KEcWf_nA$7wxdS&2AG+~?jy~~bP52Q56fT^HE^BP^L~8CXSa#ff_m0%s zZC6}6HP)1Bg1^|*ORw0rR){m%Lba~=sqDg2^A_GDY`eQA;%RC`>se$;Pwjqjv+yAo ziw2^{|F1O6x^s;(QIsPOiO ziw`Wm=*Nq9+_ZH0awvJUw`k)s$839Z8eDMHKnpdgNI!_BUBgPXNXota)ag8Im-lYP zXu`=S5$c#Ru>MfPZO^0JQ*Xl_y5~1(zx5=V@WQ>_ht~J?)cyqMjq72}nVEilkXn6b zP?ymp`-_q`P4pNDqG-w$F1Vlb33>@xcyw&=D&a#f06BR3^}(H zmpa4Q6HG9d$!ONIZ^*FgXohW5A>rbrQ|4ltnc-&SL?TYQnaLn1i~6Xw6)1#RaYqv5 ziXxZ9jQN8*Lu(}(;|y&?r~O2z&6#a>OJUwMIv#N1HH-H=aM#imMrqBWJqH#~)0=nh zH0!4=KCoxe8cAqqx@hkMdls*eAf@ga{AG*XX3o_L#D98Kb9~{dE9OMCSM$Pnb9BxX ztF#xg3wCJlJjwJ9RBSVgs}Y{d)jsv+BYv13Jv}Hr}V^v*_?X!fW?1+PP83)pHRp zLBA|9>K>+eLYA~uT=sNALP0$W%JdK^exfs(E_=km(v47Ih<*_Q(N989y8_cXbL!7g zQ-M9di#kxZRP5S**amTB`oZKQK!7WL!IZ zmDlV1z-YA3)M{L-%V2h6l@rl*#YLhM*Bk)7r3FnQrOd zxmsB9{jh6qm1n_Ui5W^N*NwjuIh zDv_kvrYJ=-3Ht>H;g(Gc*Y{4IG`XhfYM*XWShh{Etw(b&O>|=Qkl51O+fq~29J&RV-l}mAJ*F{yQYFKdO6j$mz5UH5H9OeJR^BrqBbCImq)JXt=8jaZOE($K+EIK zc*=uC)4OH&$jE7TSg_$lm9cgWTO&GRuI^0ksb9KiYi(OC!kyVp*^H1yoEYj_e(}0x zZB4EAu-zqDf##O$o360nC9n7I09t=ybhcawZ^`QQRhApfQSlx1PdCr&2)6hg!LYxrefHz?*Bo5hG1V19m@G9A zGgi!!*My9s)hES_vU=xtHuX18X`dVjHn;TkZ(r~Pn)`B9_|)yCxp8oup)A8O_L~Ct zaZhO$BP#oDALAc8HviN9vGtApMkxJGdBrE{E8L@FRPNkypFCxyo07Xs7D1pQab=r^ z=-#qZ9dQ!Nc%c_eP*E6~SNVlex(`>Md8}xULT37sP1M2%5WXnP6tILut>#!upXKY!LZ!58LIB^o^PRM0)Iu4MVKth5Dp^$Ke0O2O) zD$tNZxp@h#+5)BA;e}FKXiZCb3oS?6mjbc1`OnO*4j&=B@BjNgh_$o3v%531vop^# z&-46#c%*0p;51w2hak8?{yi)cPo5NG;)|lla(H|4m6aKt6SG&l{pcpHlmZ}-lVPS&85{;Y5Mk9GhZqr%A{xj4Dn9cH)-#oi+0E$s3k{i#|D_Sb=hN>&lb+Gqn>Haxk@WWbpmY z%4P7Tl=$Iv`Fw}A!nVHoiN8$V^<-b~6T8nUpEbj1V{|NMseR-A8}GlouNha)9<6Da z?_BA$Je40~ymOKN;cz_&|7qSG7j`!E?7D2?+S|RXPN=Xrq}D};-?{se2mZdW*}r{Z zam|FybEnqGD_7r|4Mfh_w%kNs!`O*FTSQRd1Zo{|Txv5Gbb^s+Ac|xhTf`O_DWTFg za`NH#X!rQ}u~k=HwQ6Zg?>RU24-E9*_X=2i?z!io|A3e;!@?b|&^~8fEO5)?qix0UoTI_``5>_HnA!vfJrG-6}# z__6%cH*b``e16-u=Yjb~;Cby=+aKO_V&~2iyXIbbR(mmr^s2`V^r{nYojCCp-1w&a z>{B=+CNHoB>wK0 z);6*cMUUX2|$Yqei7s%w7PUQH4LMqk(gY+B9 zn2C}hcm}8#3?<14jMkZu2w4(+7D-DWCDmnc9+28d(Fx^RQUw(O0RxZ>5zK)U#vDii z;wvF34*ANp2`ULOLVz*LtgAvBV9h@FASRK2A1TA9oP-G`ugnUNpaZ}JDYNn{9Db82 zd`Nxn@YtFnii-G%Z)6bjL5`kV`(aNyDY56Kldwmj&d$zvOmeW_D0!Kl!KB2zmd`_i z`)7(#u;<((TU8v|y8dfXY`-LM;}*V2?)#xuM-dgOC+@x(5S zMw0vP?GDD_flZLuzJoCg9Y*m2Qw~XBK?$+qsx(o`LU~04=)1gO%J~rhBIi$O_z{@e zP`s>^o$ zAq*DGIv9}$6MS`1i71v7Rr86@oMqRy&Fo!H-uWYFJUfTP{gtcu7Iwu|7kd+u6@7)G z-e&QM=4#-x1xSb`SSCLSR)BT$;GEU#ez=;sR(@*sg0}fKz5Ems`#~qPmQ7jLcJxj9 z+94nPM^M|ja%JbVv(Fy-ApH^)*YB7V@kG+^f@{H-a=m#o>i z^L13l(o;6>Z|rZePn&NTXe|y-^>8@emsO9oG9(NI)f*T0$?v0`HQ`8=zRDd?d%xLIB+O2nqE@Nq-+*_#C+VvjV6VjP2Ityoof&i9| zl@;7PM%F!mD#xo-8-mf`Il&;nma%exo+UslhccOUA#{P>uGNy2G9$W`-i>amK{vNS z^ceK4(OFTc#>l$o6jhGu63$_GDE`Ely%k$Frsra-v%;Jds{%NRo%nlTF5!|9IWit` zz|1RlA4`V$9V7`0GSDlVuh($y+A4lc^K!Gb`_=r^H@@gq?@&^Iw zYK&$D&H-ItUIWOP=}@IdJ_7c*Dh0Po-pkHto^hbGdq(pXLCNt7*=$$xrR2ds6cv2{ zxF_*VuK7}aJTopRm|J!{|4~R#L$VKsq~~J_8huI39Aa`{To`^}I2soLiSCkn~*E4ZCWUitU^n_ih#+p}bL+c_al zbLHQG`1fDsfV*s#F>t$n48li`=GGu^>_#KCI=>d#I@E>mTlfwX1@PVY2}t~-7t629 z|GuNI=j?#Lup&Bh`Yk|r#~tZAF>b=~GoUN5jo%AZ;Tk5{`{>#^H`mwCvr5G}q4&{O zAN}k8zn=kWVep$Xqb%&Y-~<{Uz$uEp2#sMr#SW_&AmS3M7$;O`cr;4TK^*Y1UDT&P zG8Qp9i-mbX?qf8fQDlG3IL% zSqbyGKjsf#4@F83l21pHBaeBE7;Xc(30}eTvH4UKL7u8FRYD4TWQwfFj=9%W2bFyi zcv#v4F>+sNeSSD%DwWAS#$H`lDswG9n(C@c)#qfB6w+pAQHxc%DC6*sk#j7uT4j|H zt4&40@vkDydUo{!gz0#)12MAWfB3lwsfB=hMe~ zZ@#$~i!ik_XV$_FeaI;3s;Z_n>qkNRp}%n3!eg(E4r`$^8pCoS_$Dw zER-@?yNU*B#BQvCus+3>;v2PC;>*Txw+tsmA*=T^l5Fw1yPU-AjA^o(2~(&J6eyS9 zfmF`eQeVoTl+A?af+Swb2mQdC#fnXzi}KG;lXu>)EYoAtiqVATgPyEhNw{FlR4KKT z*d|F>xvDdv=2xQ{tO`?hBu4bzxD|W2WuY;!W=I0I$eYXjVR!Nmy9I4#t+{P;P1n}i!dTGl z4%QVpoK>|Ib#)cBRZd4y9X=K-tlipGv-!4FM>kKHu=yw%{}t?67l}b3%hWmBkisKL z+$GF;xRjw>pt=HQW<1$184U*c=UOdD5UR)?Oom8MCQtSgl;0i&MH2L&TA+VAln*m5 zCNM&z1brE>NV2q?g@nvt1QKqdD2V|s&sl&nwk%8#$bN@inWaQwfZTWhlTr3yGRhS? zn6Wlrbw0K>-wx=eDJ%L8kK21c>=8uJL+m{LgaNZ3RcnReZDNDo`+nSGd>d5!_+abd zzOL5d6Qj!*CXUMrK1J3KH=-g!oVJYkF{l;p(&ZKQJIdHE;F_TP27@5Vq>Vw3B!70A zLT38A8vnJ3>d9Gj*sQMx9Y#z@|hsip2 zD5hQ}q_}P9gN?l%_QuJZ`ZrB!DA)%k?{M>e)xX^R;-NiUAnAB&aomSDmXm12~beaIJq-laFD z_~Mf_A?5AiaABKrhDZ{%*|3Ev4GMhpz3+!yoX*l5z;5rp;^RPbyx51+fo6-2bA{f& z7awYvf?9`GoDLGLD{b=jBOiWvWS{l72MMHxrvyoHqI@1%y*nhLoe~ek{9p%vYu!f< zUTIs|ike2{`c&+ySep$hzENxr9v$gUk*q6}ilH9Kctpwl1l5u0AEJ_q3lyaGElr?< zOcH~}?ORHt^dOSA6wjxDq14iSEVU1{X)Z=AG9p6k`$vV*iSHQ*_PqkX6xlGL%JzQp zrb%UiPwDii!92B z#X^zeXqY&@54+m2sdN&37DHd*kAT*r4+Sdlusy^XuYY9vTf&(E(dbQk_Z?U4zDoRx zgk}Q;19vWAG_Z{{vhx-n=0pYR3~$K+}5} z|Nr{>GvyyyUyKND$#`3i!eYX_(pfPrhu2Nz(x>v$^l6TtF8zNaKRnIx;bq47skm+g z7>mkhe;>%!^k1VZo_8$$uQ3jemHI!GQ6B4H?&sw77<6<%5#aLNf$<9DcYHHXQNO3Y z`hWkG{BL?`)-NNkzZQTD-#{Qb+}o%HL~Nt+?IXUd2J?TVcYojBcM5C5XdJ|8r5BP@ zdF4r}_sjH6kU*m(=D|t)AM2xM=ut!0Gf6KVu)Tvx(y!>0QqZ2BtYejuuFQQtfLtLD zgpkmY$nuzD+iNpM2Fka-5(w9fI46!In^P>%&wH`W8EtD9STd{d-A;M0*;e zifKh!OcLpbNe!m@bJC(09R&Sj*XHx@6e2VD90V60TPips-~);XUQS0NmH;0JW2;~^ z9F1c`W;7mgprg?ysQCJVh=WDiI-dmchjRZwLjL_E-26TLi9~;@$Lmd|Qc173Cx!Qk zFf<7S69b?pc~AorUi3dw!vw7t^bdGbUX3&9)S&GE==W-|BADjV~aZN6xnv}ZW(i~Eq6gz>hgM;SCRB$G!zOnAY7mri*TINstE6`d|8QmNF3M?fNx zOs2d;1H(8|G4n}|E_H<8qXG{?@DE4f01-bvnac6j!VGh2zU?-p*sd@IM#hGP2Lu^= z0nq<3!Z&e5xxNpV>saNIQ%c!V%CnSGB}SG^A#+VAr5k<$Y#d%Nh~(@U^uL%0lH$f; zjdmm#F0Td5SO?)&U9HZgldE((@D@tc>U8oBupb;4^YAf}B1h1Vl4XayLpSzeQZ6GZ z*MDZpMdf^3a-6!%SO?);{BY&I`_U7~O~G5JTw@)EGnBHDz5QUnTH-3**oSesW>8l% z5oYeN_8QI)A&zyBiJYm{!w!Eos;Kz+;QTQUQ%bpxp>l1_Z?6#?6XIA0QMpcA-7yZs zW20X#%7F_u#$h}bq5cK8lJ|&9r3EADmQhDia}Vn`^k-u?78&1A-+*(o_x#?S;B;@B z+;avnG7);Na?k(43k2t$?w#O!R-$`u&6V?eHa=Z>n&wpP(2Cqxt>C5Rqx2}Ye5)s` zk=M0?Xxg4n85#2U!4zHy z?N?x%`sqz(bHCXPC z_aNf{KQ}za}--K*7MVC)=<*B%t6N9($#_rVs$xPB$sFlj;+&^LXkdHKHO%l9!~s-|}Z z&}{F%rI__`>Aqj~O~)DK|5BuN#gLx92H$Y{bow9o(&g!Ul#@zGg1kk!G9$-k`z)1@ zbis{8B~g7F^E%@&{#szAF{FYDVv7C2+4AB3S2jz;E1}WxV%lWj4Q7*tWdp4%H{WvG zN=#ZSQxeu8(FYHIeRmY}|4{xj?{{e}R+Bcsb;Q^7Z=WA4HsF|Dk`4c06j%A&A7rs) zDe~RbP>b+PAOL?As3R*|A8y| ze63fwBj?<^;rhF8*th=P4H5ShptpNoN5{P3KNnr_fK9KrJ#fLIOQ%-~Lgn;Jf#!{i zW^8H>XgO(I>*@)+-u&#yoJHH#&YBnS&Y8J(+rruX!@nyBehccjhrgQd9DNnGB&3R` z6FKuUCXF3Mpfmu> zxte_XGQMnW?lx$+9`W6dT{k;{@l)*m*y93!F8_nNX`Hp=)ml{-xSSeXS2_Mat6QX? z+MKDD2Hgf#6>9&tb<-2y{c>#O&-fwYF82MalnlAjMBju-mmK<^)kHB0f+zk*g;(V~ zv{7c6_V2es!i@0mDlt<5e>lJ?5D>mvIw1-vQAi4+67i5p!h~8GbtAw1cIwdkhf;6L zZ-a`r>EzoWHR>9iTt}*-dUz3>@?;WJfCm6(F*jw`MetaR{iyL=IhR^NZJ>5gmy(s& zd#J~V6(7|J4F{+m@w{|6FOBk`_lDA_7Qxf!IpguurP=(nC7X`oeTlG>jkF1vd(7xx z(mY^B|I|H(G7lkvk?t|4v**bMjJ=!L%9OgF+oIcU!WVptrq$`uZwYoLM$iPCNRBV_ ze$!u$IwX&=qi%q*QUA&PB%c|_pAIGQAAS&xe-)8Bp{~{0sWNH-mew-9LA-_Vgb-{1 zFv4u8S_d=HaoEw6$)ZQZiQ8)?Vhj!L$p`n(XhCY(`;B|nQZ~V=P6v&sMSb8_;J8$D{l$4 z#-&XL)+}0a>`$idEb75!R4p}`+Je7Bj<>}m@{7{pC>koYs5xw;QVtuc7dnaRYP0|U zY8E>2#4E2o_R!n!(x3e8Mytfu8*8O1S4E)0?r=$KpV%N-%W5t-_Tc_X-wlHg{jb^z zI#cE~&-8#tUeKKX+(x1~w*oR%)+oV>*88HWBtV^qr>w?O{6C7S2Uz~}$FhQw=2 zNG>7k2PFy{=ZN(KyLDvzDeN3;K|#kl&d58OO<*DoWxy)ze z`3)+^=&IGc)4@sdm5jsCYBVxnyOMxck6D5JW3NOp zzLQ^}i!F@9$m*3ux_9i#<$U9xrEC~e2iP+3G`K<-w~_$XVIm5}Pg2D0dLuH~&=Zg- zOAu@nal2?-Sl%j0oY7w%E#x#-jxK=ZHzwY>Yj_@T+wlj%i<2?BiYj|!NAOAV790sM zqw%KQyXy@WpmBkN_f45)92}8PK3VwlV~VT_PaWg-umhBiDn)guL~T!794sBy0*T@4)%W=^;2Th|FW3vyNlPiKv%AwNdq5{zS;}a3izc4AXOId&HeiPdcSWfV zCV5F1m%-Y^vN=SfNj*XE*8-nn0nD2De5x;nqUh#GsN<;j;dMOX^im1urjzLJ7?aGH zDu()pSuW_g|3>{qtNof7c2L&ep}(Fy>jvGEXW{r-t3|p0J#A|1LRVSXLUx_x66R^LnM!_p>J}HsA6^_PFKwOVDp*{H6?b%quFIumldITL5G-q+ zr5;qU?vo^z(}=Y9Ad+;KQoYnRYOl%=tgbxTtq#Q}miV}Y^5jJ}8>0}$;96)0)6zg*EG!EZ2psuQ zo9zo=anEsIUsx!AE(UC%dtUmcFXS&&I2|COWAY;^Vh)&TgV*HUCjC$4*5IaL4+Pp% z6zK_oY$AE#xC11A{{0#OCrkw5>^hKjV{d~$*O z6We-)G>Xc*<$c2*hR1^*^pOmab||9W-f5Tsj=lv&2GD6 zUV)`JC{@nAKHzSwE=v>@oMqPR)_IIT*V=niM%RY;d-h-+t$gGQg{C(%k=gJ!OOKr0 zlFAxz$dyQBsIXBYsc_LKKxA3i3y@R|W9d|gSxXE{O5iJ`R-zwImUm>tLnKWb5Uz5o89GOdB; zwb1H3c|QmM^8+6-A+14cDEsIE`78Oi@c!4`g<_(wy{)R%7pe*C-AjW-6LzesU*6PM z-t6mE<{=jQkkNZl-8#Qt-PqIDjsE_1`+Hhu=;3wiKIgnECaqdMjX87G-h16$2}aj! z;`;W+j&L`r7eKn##jJuiM+LDDyB#mXkRA~t^B7(^O@i(;B|pM_WzrW6B}0vAD%561 zX&R+zlqNWPOw>QUaEPiH=SN!xZI$)D_sLk=t6*di^lXeLYxDD%6ebj{%f%jJVjneb zpc?qY{-_0GWMDxT2QX&>mI*Bqri!uQ=EqnY3IPyO5EjoG*IC&SJkJa4djG|}RW0)Z z;{xZ*o_D?{=&1^JuQ;p?YK;IwSRAAeujmd|q2uSz?>-0Rn%9!}Yc*h5;0#n$+8b)R z%jYZsPtL}tE(+fqW|7#Ti#7y1Dm%x`TD)XVd3Q~Ny|NqsL}HZIjRC-J|FYIZVdtj1Ra>x;1CUFy?oR0eeqb&+2=e% z$~&q)yU&x+xIagyW8NZLd1w0iEzZ_yoa4bRW|Nh>@_e#OrLeVvlUDzJp`GK)pdB;>@7<$p`HuiC$DPtZWNvO@KGlI(6RZ6DEme z6}VQuV!a4^0I$V$D>>!m6uV?)u5Q4JrB@oW@DT(bq-tbSxcu>02{u0U6G0U?Z+dk0 z7Aq9wB(F8-6GnEv{9p3lX-?24EQSG{8SLumJ`UyqRLh$cqmmiEds=*T<@xB* zVHJ?xp;f`(^Pdl2LyuE#hi(fZ@@u3Z^yHDx$ECtWQ;PW-%7?Ew)AK<*mWg&zAn>&# zp3hvJR~so;NiebjfYJgZ3kyaTV2pQ=X?|^{Ax6G~%2D-FUc$(w<p&={&Y211-(yzcTTRn`)<;I4W|;^f2$aBJ}s1dJd5rt`Qknxu^-C+ z9(q4Lc?uX;1bzrU?iiff$UGAooQj6GSLCmN9<09puDifoFz#n+TbX%j92DwK-1#wM8;kZc8hOXTWOdlrk!v(g2;SK#-^cux!keFA4IM5Sc;|DiJ&Mc}6jWbN6Y^+S9;oR__{BE9E~mL0O5f<*Tuox#%@ zr7@25ogU>&ovbe_mhk0T9_E1gk&^W^o|L?To0L7|qZK6_;V~BcuGxCxX>ty!CxO z5RFNr6Q(Vo7)uyI2+byk4`} zVj6{$eA*oOvW%srAmjK=LgF-BiGv^}^XxTk(ofBo)YkiHV_?8ZBLf=sjg zd>Uh|;;ZU#ZhTc8z8+pXv@M7(>feO&Z3xl_g6JZ&vpcw9Si2~?|HzQ#F??AShgo`* zUoG)oRhAfrd#mR7_wxGouoZ?g_;uk0$|17mLn}ybIft%fKJO_U$gbDRwS*Q`$w}|c zr$9yHBq|YolD(KJ#D3Q0AO}{Cy}<)H`d|8_Sen8?S2m5t(62RvM5Ckq~2E?EaN1Epf{! zbW=IyvY5gAqdUm}}cfVfXIXhj^SM|VEr3QlwhK4oQV<1asbP(k8~-7Cvm)go_7q?N7BqPS)$?!|4HXXLz(F@M zMSJsH3`aR2f>bgIW~Kjhib5Ls2gFHH$qiSGn38jNZW!^ZQpM{~J{r^vBS(snt;Ad? zI^>izQIb;*(NYSNr8ld7o<{8RIsDDh%L2u6!tDmB;y@tn9p)4|V*DCWCS|x#2Z=M6 z$x@n5mRdvynk6PmAmP}4`Z9rg0)ap=NV(l|qFDaj_b(IiQ&#N1F$XwfnG*Q^0p(f0 z&$oq+=-hYZHKhf&ZTjyt8Hvdi^y|ZUj$FCrjxFn{oZky-NFdo8;7(Dv8@Eg0 zEEz8q#6KSW!){H1?qWTFTDGucdDpw5aH&y}FMC1(H3n4ODT;mz=?^Ovp7pGViM<%x zFz}OOyaLgS*IVgul?EH?vTIG4rCY6rN+pS*h3L0_bwm^{H%b$Cb$1l77SlT3Y|_Hb zdxOE*yF9_}x>&e!X7$8zRRxyk?~sg_3u42D_GXc@7-nlsf{}K_TNjqCxWG~toL*HO zt?!9X3cA3GTRw0-j9cSjZAE3oiJo=24njR#<<&nx)lnU4ov=uKXM52*Yt6{u0^sc`Q*f9H zXPt-RSpg=Lk;5~g;N`&Xz}A|*qVRy@?H}C_N(7z8_Di!?ejQ_dY}$91U7k!b3mW>GYNjjw8r7aOGob3_51*en?@!+BA%Wv)m- z4UwpU%8R6RUqA)&S7A!B-AxfWYB9nxQeP#KM&oKE)6HzT4rk@yl7~>IATf%-t89NG z|4gINiNBC^?@B@4IR0lE+s`aItw#RUyQI(k0r-_IstTAU3hRv0d{O8%N^qjtY!>B( zp@q&x7I3d*7A)!KBxA22&Xnir!IAbamYEF;_}{$+Dd>_vvI)%BaRj zd;4%yS0C7zeo1}^d`lKAdC7Qx#zdX5TSNCt^tzWWk`v%AdCz~JKhlv69k>ydeY+s$ z@egSz1Cn+M&}e%e>KRf%vRfT>F)8kI_#)u|K7f=U<$$6i(xk`G0a{^_rn9BZjfZsR zz4)YITRTr@7aVwOtB13XOa}mL3&`(#!ChAdCW9k0@1Bj0Z1lf?;3+#Ur*XLp1HF$IGVpgX!?{~3hfpur|&OJ_kB{+8(>)LPD>DVP3ahB`+kD)PR zJ}5`(GlLnv9!e&YX{1Wa@1PxY=vXr8MZGkAv(pKC(XXI`y+qblR+hmclhNRmZw9?i z<=0>|$q%R*uzp*AiemnX+A%^+C745YOnf3Rye$y*hiw6iAALq~Bn4R_p@0QDC^~B6 z(TFXEflxg(U022U2?%LzD~ET`)PQzcIp$jN#_ijTd}QXfi|5?hU3RNDReGs-W39%_ z>5N?)-%j{$ol|=2tew3rCp;BXnitj1(r6k(9W@iGYCO`Ef|BOi&hiO7+vJ~E(G)5X z>Ex4Lg@>=4a?a#xJ9BCf3{j`RQxR|ofZ~pO0T}ukel^4wH=Uinqols1z`#NI$AD%H zW|zMTeB+Dw96AmF`86~>Xaq-bm4b^wuqD)ZNo?eIuu9Be-jvKxb^+Wh2gkVTOWmfREs<6p@(we=^m8 zsqmQempb|9I-@}^r|?Q#iukf%x0jCe(_phfi%HWA;$JU-ars)#q!+ZdZ{CszrdR)~ zdb<4K!>_Q8W5G+u?iE`;K9?lTOBOM{mv=0Zyt}^4zUs=Gaev)+L zB-xQk=L9LTbBZE6=(lIATIWH(|MLtNc5A@? z5p^Ec8o74zW~;Jgtfl~4&fEZ`&$F+qeZC!g1P6(cpIGis-{*r?4DB5bh2x4G8V_Jz zLN)3Me*hT30Lcj0?E>?WuoD+G)wOnZ)J{&{d74Up?yB$JKB=|JDTYnvU})YNGqlaF z==;IJb9deAk<0G~kk^Qx#q1$aOy!qYT=4JK+-Jc#O>q2yHJh8xu%E495x; zL|>Z~lY&7WFE3Fcmpd4AyF&dTmrQKD!0QSz{c#grWwDsT+Q!6XC0&+@w=bNrE8q&1 z6gYcpI((u_tL62DR>@V>S?x1vfh38vpkaV*<`!bLLHC62Yyb!PUC>tH?P{rS06jp$ zzi9|=n$!i0-L7%~f-ZPTK@h?%iG@C~Ian61XtqkW;@Z+?k2BO&;pd!IVT-!vkH-B3 zi7|7lIE>ksH&TNS+HFJ|h7RlmL*R@t`7cyxjMXN=?a@SI4mI+}TTj;z>*HYaO!;q& zMxaH}3bZC)b!U}JvKH!jt=1*_I%;~I1tlR@VAqU=w@GAhvNl(Q%Yx0KZ((8!guw!Mi7N;|xyxM)yC!W4 zHlT*<@?sSF%vy$)*pbSq7StN6sf($rs5_}gsb3IY6YLp}SIHt6S}lkKM)ZG_MSrRh zFQP8rTUgac2xYu`^LYt6sS1AS zCH)ME_k1`&z%XqQOms>-wvf1_EZkur4vSijfLe}G3wSpbSRy%0p4dVj7_I7W{I0HWjX@fgjS7fsmt##Wj^E){pUy?{bo1~jqeueyZ z`Lio3Cg`kI-GuV}FtooMrPIctuN`xPS5<`MT1|LQ4?%<$pS%sTepn9;&mIjVl44-Bns< zds15@*u~P2yXlf9cPLcU&^00A0tTC&uD?AJxxFq;|731O6KgWDO%)4|Ju1Vj_1;^;2^ebV9-R=m3 zIcJ?U)VM)@Y5i*8UA)-i7HP0pW2hP*1IM(MSZ(>@#g*e@7A=^w1PyCdkGaF`9pS>F z@T93oQGx0H1q?V!@$QB~D(c=_`5ufXT>56Wz`7n~zsSmO+~EPtWX zRUdmVy?%T=?w)Im=t?FnTsJEii3DdILz}4Et)+kQ)}%>qO-?WTbX!w5XR~qLO`AT) zY2Iq(QJN9t&GJ8hY1)Bx^W<+QKRg><9qN9#8{cG(Y>c-Coe^+AzRm~jY`uP>(gI? zZoN)t|Dwz(9}^)c2>-)QuMy>GResD{fL@`=R0&p_Z9`{)^etA4sS=*&rLU>XjM2*2 zBxU(U@OlrnAlPWmfxWQefE)pKK=xu`fW&aeDC5f>Tk+GPhS%(VUaQrZpDC8;IB$8@ zBgt!!x^4A7E%F+zJOpmh{C?OXH4Q%S>kXFQ0{Mr6U@W0$8v^MtlzjoDV1xGo{7>^0 zqcLkJ9Zxa;MyXD+hA-7J#Q=leD{S^f08?|CfPnM_U#O%SDl-Y{*)1SM_~u)=NDTf8 zd?Xh>^8je*>;zuH=k$66P70$^0wD1vf*^RjP9GW}2IVW>klz?zQ&JL~;2fPp@Pa{b z^T{+=r)3$M=5%I;Yn1#SF;BXjouuz!v7CAnHK>;x?@TDeRxiKa%Zig=|OqxZ`@T006KsJsT{LMft~U z6__JC>l7)U2!vf_^WZilWz^0DjSle^NVcG0`i z7x%zRPTqCo$QZsCv#51BFP97$Z3gGI#2-R(5tfcW$k&Y#4@G?$AJ8|d$_bN~Mm^>tw{GPWReo8)X^!-VC*mrFr zI3FYZWg^+g*G#kup*m8&G;r%hk6d)oBk&Qj$?zB{U*OOK_?Y@H|2YuNUYG}5^05&u zh{S!vT(ziQ%jdz^aycqTm-j*)7#xX|a7ccA06vzU(GP0IicjulFJbRN`UH-yY{z{8 z*tsx{Gm4>iSB1%P(Mv>cQ$p{#ghjmpJ5D2MQ6ljWNQR`*{M81KxZ?qw#1Y(uAUe$8 zGng|YUczGE54u{jJsK`543%`oHwrJVY@1Fq*DqbN^CRojiW>O?`Lpt>gy>lsZ~o~0 zw&>CY8k4c2WWgIRtgD(bCt)q{a^fFhe89$;pK#4*E6ROC@~z(-GTDqQ548cCOG_8| z>q|VlkAq!c+-=Qf0Pkz-@>=H1v51By%Z4o#g%?g*lGJE!hCAH>t){w$*ZEzA0WDut zsL=$5MAw@3PV4w;+M==gqk*31&DtAo;QaOU)A!3xPhFv9PsqK=P&Ce6r>%Wy*F#fX zl^%~tUnK??R&`lh2@b6Ct~6w{Z$vsdVYdzuD&kn2gtL=SeF?V@9y77>fksuSE*1)- zkH!QDhaqm*80J%8IbLaN4~>p9SXU8835MNsO3Fcbc-}P4qJ4cdj8{&+_DO4dxZ<`4 zD?;ryW0l|Y;#GoYqfHGfmL$yNU>n~ zf;7#C3z)t>&Twn}YAKo4q1 z%tL_cz%gK`S^d}^h=-Lb8cAYN)Sn2#pwH&BSUso(=|{R9k1XyzwrQsCfvHpy zGye@{$d4Mm?c-;@@mZi1!1|>ZT+j%;@46N)+qkfj<>f^~>64zis0YA&JHNsp8%9%G z6^vSZQS8ux20k7Mg!oylV3aL%Q)@+2NnL>sfK$|Q4PXnRYdZFpFT8Elq|3qG`RzCT zDLZhKj&p!(egP)yDi-uED7a5v-mtB20tDlk>fyFf`cwj@QQa|Wk9};F9)4vu%6IFG zf=<4}sL@(gyg;P1ndPKT2a;wvarc>G+beh~VgMy#Iz;`I%89aqcFrrX!VE8ju3Zw># zA2Oi1lzLCaEQPnau&^HR(=e(^ z+gN5N8lS=u3NqZP3elazYG*fx=UtMlS+Zb4%k0^an{T{+^X8*d*Z2A>SFWA1V|iWO ztiXf=@`pv9wpc9KPEViq2%ymnGhz4c=e=H^AMLRJ{OHg@kH_zyP?BhmEZ=<5i_FfJ z>C@X{qMp0)oDJh>GtC&X{`>@sT#*haUSPB0t zeJ+fqcMN^L8{SBtH}o;Q1G{xAxU=jYGT#>>NpuF%fhejrM&>6*-LlForgUxv%8~?B zwqSLaEG~qJjSvS~V()tF$y$uv7;vCCPreNG!>F}`54;YC*A9+*?RKwYXt1ogX+d){ zGb>R!y?H_Nf#&kEW-zTP0e`$9IkYNy&J^BYG?W zDsO5+^C*_Pz9pO+Cdv;qNEHZz2Z0f{=dcESr;P*gENxUn`)gEYzp&14Z zSmQcXDhvO#Dl7$d^9B)U z#}&}PU+6A^Kx^T39HZwg09c(CD*$$_CJco~5-0Yp1rtRS-kd zg1Ml~67u`pb|Zuwr{|4y;jEb5R%WMxr^qNeW@#YcG&U~-IfjL>q>3$NtPg0-bg@TM zCRBwPBL`@!uIhrzDja$PM9<`Gv;#s5w3|vm`^@xRw4T#KT1V4*8r%c57LL`j9HfOZ zQLBGkXP`NTp#??*W2})jX|*g3fetc^M$iDW0OM9WI$?pu?bLIcYHKTZ3smjs-vCpgN>Y0;{? zaC}Flo-2Zs>Jxcg!!kMXdnsA<=A= zboFPIHnns{$LqshpN|%RU~-w=%o-p8&VY7JwBE?cbAZOevKl>VUmdN%FC5CZicV93 z+gzmc^X2UL^Q_jkySJ4>rgCRhxVcy~fYv#l61#1JUqgEUsI3F^!~)60GYQsHYSYr1 zJtm|;@(mLKXec&S6hm6C1x1qG1IkJmlVETF!NqDECOv=_V9;8$0*6XMbH$9rAPJOV zOb!4HX33;ww2);Pj^=^T>@w(Ei?uXg&^ErKh-$YhZMu-{0x8vb51u#yJgky{SX6Xt@Fn=M`wKqHaRi z^3%F$ey!7NFT!-*YhxYOYwI?>c-F3R8z^#@9qCxHWApl^Hy74SDTUAwM?7x5NsW)kvY0@5ksMt`)l#k00_;^34AB8>^v4`y zbSTXD@GR|6=z!5!f(8mN8{+XG2mE}D#q&GbVWdzPUqwcfR#59<9I;^$1Z68BG{8MZf>nuNIEmc*D>?(4-D$J@ZZ1 ztV_2}+Bv1!^bvgsXszwjcTXz7s}LnKCU-PP%RRcCBlNHmd?ja_vGAH1`or-0n$~5! zaM6d07vHwLLofpNH}Bjx;h#5s(Omq+$J75pp9{cs_ewu{+chcHY?J+eeH0i95)GY& z(K6PFx)+VK0~WqC79OM8ey!AUtbbI|)c|uRM`}H^;(LXeh#`)LEe3>J9>>kn89PcV zREW1Y!ZfR(&ta)3h6x!(j6KKP7;aoNqo&tWSSFedmUonvRJf`eHa*nSk=)oGnzo?% z&{=kG_k_sonzGuW+Q@%D*!hEv6TyZLkL>N8(Rr;r_}oTwx4HvZyaV2=og1rg>YY4q zHoGh{oIbxZQ5j!cRou3*vt>zhP$;nr*3xjqTUqICu3UO)aPszpM?UN}Z+s50*LKe6 z-K*@#gLsGN=M_kIc!k8Wv{4--;wobgi4%PCT0&DC%CmCD;+zhK4gR?~c$EF#r49D5swLbYDMy*C(Ztpb2 zyXMdrtVr1JWLjr1Gk@Xm`>lhIp$GK1Ohu->EjDy*Sy9mad8fQv{*}dUtFT*jTG?H| zYwca^-uQ~XzM)SopaEP;jaYY3G?h`FnrFZ`#dc{TGlK!uVw>IT54lbflMIV~Qw*{9 z4pD@d91=?|vFFl4E>kEISBCws1_=M7VucFR0h?qeeoVv2S?c0aG(f9tZ6x*^$?}<) zAC{^wjTHU4@@s9#m6}-9Uo|o13TeNt{Bu#HwB8J;&UGNUt`ksZx#!aVxb)Kh00X7< z(mnWsOO>)RxU50qiK_~` zfzxc2Hp}9(QT5&RiHS=ml0TH*)D4r}o8$pf8ag2>Jb67sn@CCCl*i*OeNZMCf1tm6 z(2Ah)QMOA2w@u<5NcaN5DhCh z&Mh1yG1e?`3l4^`3n!K{<3Zvh%*F}XJi+i`i6gGV&Zd^!_Rgp8+_ps7fQ^hA2(a7=X5$VsO@1*7Q;8+7|rM`s8!Ay49Z#gb#&Hj{N@{js{8$vy_gbF52b>5 zT*Jc}M@GO%ZAp-0)S*s{l@Li8LwsPzVIqk$pU3K-lwW?l_t&S^9{p_ZK{Q{6mdlq7 z+>R+`x4r{|Ty1?8(%9&GL`m-TT?mwYz@#%D;BL4hnC- z1vp;a&B1Zwif6vD^@fv&B4V*ns$iRODb=Q3u6i&MbG~nsAOEP>mP8(!23(u}1*0=3 z$r%pwVEs^m|D%Qo(g(4^f*Ox0%oRI1yNqT`bkMp`PIGj5i zHVSXp%wp8~=PmuXVj<;1x~Aa&WZ&!P|f)F}$^yO}A}WyEI?uczUqORQNyr0TI; z2+fT&8ucAkLV?J(mJPP0zAWrfvr;xZ(ims z&;`!vy}FsB8B-Y$4R)3_Ypiu9b5X3kw9p7SQLAI2z;gx7M$v4K{>PlC)h+N43G|#r z(1`xB)?jlrgG6%3S#`i0uI1=&5+8e`k+KGN84_vXrDw6Gkf(rQtpS9(o9;I1~?Sx!Q-CPV9OwHpeHnitg+vOrVP*xOk;(P;2%p*dJXR7!dM_Fkacr%KcCk9>!A@(~D33l{qFO=^ zPys_@NV`;2${;yL4xtlRWydNyya$_pXWHyy$Lwtytx+iAEgr%1MCG40ZkSzNeWGvU z3Zx_U%cli>FPfWH`aZaaaDPs7^`V7@;|;}yyZ$-kpKKCb zKK~@I`!=JSW%b5lfz>Zx+f(9yX2r6l?xH7}dv2I4I6gb1Y_93J_R`+g_8m{1vlTGO z2Y)avah+g5y#O|~v~4vCdeosB*TWUdch#e(qcXJh7}3+6<5=UYp7d6?ORROzdAws% zROE{5t2x*7eA!|PrKKdy7f<+Yk*4jzYo3tDq|7D2%%g$QVrN9=+@mi%fAqjF{efS~ zx20cw;(k!VM4xyy{TL{@-@knM!fy^9{Dy6j-9z%(tKJ39XThZ3q|4;LzPkz>83KRt z{6>COS?fcx!%ifpZNO_UG!|7kiYF)^Xe<^WHXi`=am8?&#c8$}#G+L!()$?!X*g(j z!fPV}{*XDGWOsTOE$>~md{(pBvROXzrsQ%-$3XeolBvrVtz0nIx8RUA%ot z$BH=%5|!NKi&rjaiTLa+W6-##)Yl22NawlDB`jwZH9S&}gzDI$6_<3taLdg3^SYWW z7Dp}ToZh`-+cn@P-P>BcwBRYw={}Ob1+Gv5c;~nvYK#@r_ROue24;3uT-pz4NLz~P zr)`~FXpzP>wYAll%sV?d>!fL$HecOQ(Aj;~qPde}CKI#N#XH)fjm6M0^Wr%z9ua*$ z^z~Qpj;5**tU+Rn4aqKlV=3ZEZYA+mM8X1!&pxpEEch>I%P=xAf7?2{K^{tfF?%cX zo58Zo-`3gm%-LIkd*b{Z^1py_$NY(4@+s;Rn2LU`YHy#nV@IBxi4n?b)cBw=X-w^> z3GQN&Dv@c1WK$tBeek;iz2G%t@R=U{u7Iy$GO=3L;cTq=WUS(8%ZfQmaRGBwteDBP z|2qpipcWCdVP;f?kySqRouwTmzbk8|xnho#-$z*+sF2HQQNqqFRvbh79RX@7>|13} z!^RAup%=eLJQ$C@{o-64zIYnO0M(vb_FcRIYIHsDekXl^>f^o)$>cUFh9g0VIEJOM zxC76vR0Ip94l)|i3XoWwkc(nVgXFXMaI}|1pIX}}zxnL#^4GVW_>pDjA;3Sg=bi1) z-FS*JnoBKT$feF8-2*kkg4o36y&XYtzr5ZIepPDu2rPT`u|M1fw6{M2%33dt{qeGA zH|Cme$)G41-hGa{u1nugYic%i^xW~M_fHOcpL>7H zY2<%NJq_P+5Z|Rao!031B(oI-bP((?xg7Eib#ojr7YFw-a<9LP%<6pO8eTynea1~H! zjj@kC>McGZ!4Owez{k<#=D?A@K92Vz@e~N49MF+kIv`<)Uf^LOtS=N_hot2e47n?6B961WqG6M}P#$nCuIyP>bjKY< z%X+F7xqz1us%tw-z)M5gZJ3D#B4VQL{7}iJ63_S> z#>>A6m5p~gu~#T~6AXYiv4<#Q^cC2;6YBSYu|(z&|785JVhvHTA|a(Rm&_0}v;jJo z46AOeNW;t}Rd_qp5K=q_f;7v1(K>h8L-qW;rs^4{xcqWlGq1V2%M`z*$ksADUUB>S z+g$}(Kz=?aJ+U^!~?f*yHcfdzgW&gi>-+S|>w>Q0J`lKf_nVIxXfRKa`dT60{2_PL| zXkr5urKl)T5gT?aD7snuT2L3a;Ln1)xVyHs7a()_-}~N72+00)KmY$fFz?;^%6+$- zbI&>769Z*&=?HR_*glK7a&$buXKoKElE}L~AsJqgKU5P(FP2Kt>A9d{{)Kxr*@7n3 z1v(-?mv&@d2GXwVL+Kuy>A-2c3`wM#O$4gJKqV6TgxlkNDK@RXep=ykg~}XxX_&4J zmnO3Ndc&nvfx^c_v_tLSEk=XU!s8GP6uz4CbxqEk0Ec`A(>nj4L0PM^q(LcaA10Id1)q5Mpm{izktGVY2Q2Q*gQ*eJRBACr@puIbLIEL@7DPWm zjku>lcqhI;$s6>={lta0XyS>feU>+wg*6a=TgdV8SP7NI;H4T8kewi2ZsJsyKaS%; z;sXT7P3s%Lq8I`ZsuTP?D{`?0p>G*Nj%v{AB_o@h2R&;uI_84kDJ2!8iU{(6(UE2|vUSj0y=3{EPz<3MEAZkh4?@ z-}u~5geN5)?UET^(Mg$TyH4l@-XwIC1kaixiL}410I|9?8aO_!p4Hbli-VRA!v8_#;~WRI1yY20!=v6?X8MN?3Zmg^1^!cmM}mWf2H#pUM_M2ST>zjS z{Qe8iCfOTAofg0o0R{?YAoqc#xc_go)X4~&` z0@ru0ER4rW%N@18Hu(Ae>YSeNB8%V0-zi?j;{K{A69Jq2>txg#-bq;I|8C!nK(}n zyH_vOCP*VpL^&`hDAAMswTM3r*c@Tg6sIXcfNg>y-b_4v3)rTZo}wjO+R(#{4@@-T zkCk9<&_7_7z_Wvi8LZV-qkmUxwGzFgXw}MMi5?v*X^zF3!S7}-%aE$MaE}!Oy$jsTzR>bSvL0Td++;NVs(S)dH55%@kQ}9 zC6b&R$u4(6flxDj9-LF@ZezX+W#!?k=jO0_^u44tt1`zGQCZEaA9!H3)uJi}Coj&I zxbW;l5SbHc@Ueci6yXI$l@ljmV`)W|D!_$|qywF&CONJ1(w<8lLHq8d9V3?74ZIy( zxr>}SD=)ocDHw4f|8m$~J-mC-aP*16Za1u4-LYhGJHU&ngO7i-dY!@U;Mdq3YucAA z0S{cr)sQ*rPA~X_C50G888F~QV%`c z_X4;U3_0`YBYm4*z$tX;a-trS+WXMYXC4J|bUL@9A{Q>W|J&~mUQvEK`ti{-ryd5% zs&e#gPDMq|Kz@bbeNX}7W?XcSdJ+1V?M>C9tVx?-FE}x2Q|-X-+XGI(-c6HGR;qRr z<2+wsPl|swDaHH)_h=cuk4~_54+yw9WO?vdflmkUNCHFa?10A9=U@nWiX_|&4LD~oIt&J{VgAvV4G-hI#pqgGW-vSqTyMOA{?^xV zXUBdqu|GIqe8~iC)FR?rh!WUtV)HQ|q)h{PbGihv?SMkuCq{n3h?`nsxpqfR4E>M} zz;zE_X5h_o2?ek;|GJo<5eSx{NlTr$pJ9?9>3G4va`nAm>yuP(DYul~0kR zHfJB@;anW`_dSJ!;OFz(S59T0m2q$4`E(<7gnErSO1)40o%$#BDfK1w72!c$G*Qr3 zL#}}J5lvDT=LRMm4T=UNC5dW?rw78K3Ys^JNNkfO5zqSqM{Ukf*ie#2=^%oV5Sc&( z8#!}AO`8)1T&Mu%5Z5c1EOo&eU^HXmPFf@CED?oO%%#!fg7}F9$}VB%fCx+-s)kWK zG)X2O#i=o)2Gl_2&$M4#E4vOtwpB>|Bxz-yq#st5{-?!Q>L@(G*198G`hylksi z?Nj7RIhZ}X?~uAQPefLxcyR$w0~ljS=AUV)}eG5SO1d|eseqLIbM-1TxU zEtAXmIH%|vWy^KP3rg911?^WpQiR^t08XQjav&F~IC!Z+2b8I`BbAb30E8=xJgy#( zv42x$Op{HbHsNJ0nBEN``ms8qxjEnENpAGphYlatomjdb!WL&kQ`xTNtFvrvb%PDQ z!Yqd~w)SoGIeHuY<4?&@MaQs?LSEhMt8)4Cq#Mfe4(1yDqZ>vhLJ?kV@)lzb!ywOc z&@|(*bIQ$yYK>f(XE8`Q15`0`MnXf4TBDONN>FIZ&v%R*1;XX!VE}HK*mRAlM^*GZN`LxS7LC}Tp=s~i2@Nv2#zU{1ib`}XIQdz67W%>n10p53?ab~WbNn>tsHZds}vbw53O<>=-m>M_qWDs~HH zTzh)(KWA;Bv1KNl)nY4XP~wc{IYP$mdz=kVjZrLZ8@&>|)w9P{TVQPJTs3+~w|2~f zb;>=8z?@)!6oh(m$L6`@j`*Le;qX`uey~;3nhk|#c8*>(d9Wj|Q7AGeeM4961EUp7 z8FTBUiqTItq@OpP)sSx+HfxpWw?o9t7(|VuCQwtT+0;DhO6pFspA#$;T-Aj{WzJAq zLopE~)1ky5Dstj~g3&S2y~JaI$b|$QPf=x)78Epnq*OwXh9x4bIRpYa7MSS}o_5WE z)!|P_ZXqDTi2EW!U1GY82N%!@qU=yfNGE8wBy?;f4`&*6a62#?40*X+Bh%0@!os*| zNsDoVTGt4rv!o#xgn+e~EqXZvBmqTv;S4CRSIDdk18J*+wwBZ?FJl?iTQsK(x?DE1 zngO)OP~_)z@VT0+&-@IZNHsIZXFWdSue0)xp#oTiPTv*}Z`@Jt88!Ty8mU~$I6TbI z2L?~MZnVZ7kb|9lr`4$fPQ?<1Xbon63m|56D;NWKjpn2>gOiQH*=@$F~Vxs zSpv|}e>?!{|1Q6)CtR9JGRevH=e#T5>0Lf3Ma|naxn4qrOT+jvy259Y{ndc_VnKA# z)c>Xc*bb=Da1Wx0H*catFQL-1n;L33o&y$9>je*j4^h9P-l9Ijl-OCI0d7zTYA&+l z*Y6}zYof%~zv&oRLGG+Fo_tUy{=zWL7Ioxp)bf0vzI~=G-RIqy= zz2En$pjwwiNkO%)6!=L2$H|kV!Y86`9h>&OO!iZpg4AdPk$;JN52hUnUjjs5F(AE! zvJpm4EGqEq=kwwW;xr~Opfte-2?)MnL~;t#XUgEXs+P5t_}IFp65ThdwPjP2Z~#{= z2l}VHHTAiTU)9v7nxE{x`)x3!YFw~#O)ELB1v6SlHEn7k2PRxOzisK>q2zc=>R9{o zMSGjuS1h`<@CEeg(t;|dqI3L?F~=TUeynYNW%Dgd@p0(hrE^xaH}74vyuJC>Ma2H< zECq=#aHEL1$eYr}?&8DaXNSE@rsPAvt=Hy<`BRpR-gV!u(e&5XzZB?uUC;!J1zx&7 z`Q5Fzes>O2Bx85v##B7ev7vmRA|FviQcYup2%D&wYDvOmDp?DkPBo>P*wcP@s@75O zNY%Ri1wq(r$}_>glfT!XaQQlzB?e2 zCx#EB!DujhD(FGA)>+X^!jqaqyC((UQoWj`+)}@NNvl6 zR^A2V`@5fg_SsYw>hf1>PpH)=ApRp~ZM7ft1Z%ZVgX{3IS1#|>)&^1c)7n~5rh=pt z3-No)aJvVo0;-Pe)*3xDK{gH2n8J%fj~6pPl-MIVkHHl1L}DdAPs~Gjb)P3dJdfcV zp~KQX4_Ar+INR6REdhJ<2WpniW!WVH;E z8#X_3aO2kfzw?H{C96y8fxI=tYjGKz`w&5A?e|(B?7^Bd`ez|RnS%icMF|7t1Hv3q zh{u(nK0|HEVc<@4&PhSvv_e2(q7t8I@wxMP`T1-iB@%(3>|cz_$3Y+ zZkRIXW;qzY>)5efH~tZREaQh&qrZqB=%?+kZre6v<~BOJXYrEZ?TgW?2bPu>84UOu zl`AbC7A_P&=1qepuDoV;-?5#$j=ggudJY6ufOl~^>Y1@^+pF8R5w!8MV> zh*J`DAVCz@*f^%@O?0CMqKSCyD>#kJ3)}Jz-B2^N$W1fP=^!Wd4ZlW`JfbY-^@DGe z{^J;T-`~nop~Cmj3;f51_OPYcS7a%IyWiC-OscTI%G0Fq{u7j~-TpqBwAr76%EMPBf_D|%LupDifIOO`dql`u{(^jd|*IYIx^%=U!>7yBr-47Ol zc@Jn!Ci>ADbj>qLFvIO&puv=9jiZ;)&On>b;5C`#dU^<0@WPiP(ba}A<8PkSpi%+a zuF+J9eWX?@_Ia|e+i(sog7@IoB19zDpEA&J)RQqF%{UUl?MJ$YnW!*;6O%Vjp1gS@ z{quNek)I`m?`CX zY04@_DTGP(Byqi&6pxsmOXAXZPF}x$GMcnWw5yep={8DLU_QQe0I&AHJg|tf>`8mX zGV>X`S#a*%(a_T{GX}gj;}Ozea?>R861C*4G@- zhW-T8O%{g`xo3(k--|pwtyrawaCHlinyNY~P&b4|2Fu!9_TYU?{>(HYQztLlM zXS)^7Ef4Mk`Lm6@GxyC4;pdyO_@!Q1uE8m_&sNyK2phNMsG?S%)U#IQ1G+-<&|!sK zz~#=71{$lB*%K}h1_9BRE&e7vp@xZHHjd^nj~&9H1fTFQ6ne)3%!tj~?n1{vp#^;k z&fqY}XWmIY?M72w=qnc}go9mRp9|<*cJsh1dyk{KIEaWj&(GgPXKMwPM)$JG*_y&p8DY%xvJzCY}QIyR;rbx zo&}!+Ij4|uDzG5AP9|HIlr_Eex=jAsTQWQ{KmXxNh2qN}lx*MkD%JOWD)(nUYGvGy zpGjoM1Q(*sKXMBFk6^7{F&yQ6FIDj0gLipF7Lt5xG=2+C%T%hA4t|Eu zAI5e8fs~@M{0ThOkRAFeVEW%SNqDs_(u55s)(=!sOsnQjFo#fc;#avQa*2G9EjZ;<2+8&q=@BuQPKx z5AmlgC|eT|E)b+;WD{4y8O1$w4hnwzh&?+X)*(i+2TN=YDquvgzsIkQ516u010XTu zNsgGj$MC<9ful*$5V?wk4f@EKEMbp0!ubw!ugd~p9w<25P^VC9T#@@TaTmLwYe7L`ijHUhI!FC)hA$^^2PjE)Wk8#F5X zI08b260F_26PnnTsJ+w$S6D7>DN-}cW?_ph1H&A4G@>hHXet!F4=&~}=FBWy0N z*o2uY0D@tUr2?Jilz@@j!n5;b8VE;sU$L&^mPlA*ER;Z+b*&k+AK5LJhsV*Yb2_;I z9cCDS>zZ(Tq~^x$m?&;oIA&3)!r}mcI9h02<@gk44GmIt~kvezZgb zd?f|MH5&m|C$yapw>TY*{c20kZQ8#t$bU5|I2n5 z`P}r}VY68|i(i_7EJx380lvoG z7aGu~&9fOLje8d(QOs*WA2vSw{BLN6&*sg$o#Um9gyCe&?epdV9k9)xzmMY?8ed1b z54XwJ=#z|&%)s|A6?B1rYYSkGQuNb}DGh?`2z)v+atYYtufKB^7(D69mYjy+%{4_G z=(>r3U9qynU0Ut_Z7+DY#+>XJvC_`ZPyGp4fKu=281L3x?45F`$Zwo^be>qk3>Z;e z%J8eNz$E*qUb6Yo-qVd~(%(FGHR;K{X2~>oK2^jrpAE zv+>v8!AHQwbwIEX7PO$_d@M?wB*HWq4U&S%*M_TPQpf#DaA)DZzv0vwPz_%)+S_Eyj-?UB` zGhQS69XBN61n5y45|PzRS^;$>6d_(g3jj$m2r0kbIWdt#d`BMGL>Plj2ejajo8PcO z8#fqP-HaJJ)~J8hZWudO9}hylq=bjO;kV3A1yWP$1aT#Kx3F(~wr0{Fg%}A( zdI4z`wG90PWU}A1j?u|XU4V}ezke@ze<1G!a@j?`e}WoD@RNSin^hCrQ9!iciG`_P zzTz=)wBWZ05LI_#zKE$@OepYTS&|w0^^e~rwJD+sTKdEjQW^(r(!Z(k%c|9XyD%Ls zS83o?(4?wKpMO(};41|2mA?B9Um=LE1oCqyrUYv^s@O1^zH4o{32a!$+aH?4qWoq zduTWM>gBF`zZ?R>hkJiG*1K;#V3eV(*(1hwPM`4fU(zytPMp^ylpJ$Ydd!(x2{r%^ zbOAOIl7T>G!x{5#IyQi56rCaMRE)4BA`AUjH~~G19{>IC=_n3;haPPOTD*9DeKlxH z-Nn55d-OO^rS77m-o7`DdB(msysRC zbP4)u1AzWRUH}zq*IrX7R1-<5M=*>1mFQ()_G-vQy@r$r4alafZ_DNya&gaR6 zf`p?Vz=P=B>v1L!m}jD`kiiRgvC;G{9+%Mp^La(DTGB;VesMRWq0bBkkiGAVOC~D! zFPqXj41^v#04#Tc({J3f_R87X8f8OkqO~=aH=?d?=!nI2tM0yM&9&1e)wh(iH<#rO zud5&0v8ZPCeXy_KmDT${1@eF1b;;B5Q0~$@%5Oe$JNn{Ii3NSVdi!+4P<35HJl2@g z*wN9LbM1;%+ovw5t&f%s5)-zaZ+{?SZxXAT1mQo66Ce>RNrWU?DhnUI zAx@ta7ktaIW;_9NCIfu!m#Y7;7j3@(`HuTKoFgOy@x^>#j@0j>6WU8IGv@p9InlG8$3E~Z0(A*-Lpql>2xaE>8+2n zH_w{0aWG1u8UMKPXV4+iJwjhoVm>!awNsO*1=K3)O6n%!ZzJd@o)hqY%+zuC7}O@r z5{{@{6Dvk87EgrY33Ht0h#{ARsP33?7fb|0L~EOLOOlI^5qtrB89Y&@i-qETN{f%8 z?j^2}AXS7~q$^MZjA0njIOaSxczWL3=(c&~&b+!C-`CZp{x;HNFPk>4%*A*3SZVn@ zblcmdb-MR&tjk;dsapLncf;Yb&Z3fuB}JWOha24gQma4p)E}-GSCqFPuV`Gw;d+!) zS4xTpeP#1N7o(k4W;c!W`#N}6nW@YdBsVFodk1s@)z*{fMRWkYcyjC3lb{lGg36PR zU1WgFs+YWV&|4fSyC-jq66ze4C7wgz=0l#+Qpb$$h3H@2gKtUdfpSdVJ!KI%p*?3z zPW!~xI~w%g$mQSY8}0x{K)AnXohT$tYPq9P|FvBHwZ8F=78tCDiZMC&mgbat4!)JT zAI&=CDXDbKUf4auQCjK=dT_?QIb#$M-x{x-1&uuKcKakd(*p1gSF_@q9MhRreZi_ph)aweN8Rc zIeJuQG;o>IxnxXaj)vAX#w>JTR(^v|d!(UO&AKglQq3j9Ee;u)YEOVo1!i**S{ae8 zGIo3nmvtB{?!sj>fX4&zil7C)=TF1~{#bnE1sJaqsu9maM+6LPt+0o=fLcMkdicD= zzXDBGBoZJaL-3?7AhWPWt;Z{)A6bUpwwBFrzN?bS9=*`PSneHh_2I(4=kmwH zsgu2)38`DgKk{NIT-i0Q0!(3`IC2e22S2-b7G}cyxrm>U`g`WoIeo75t5y0#=X+ z4#q(u0VCU9K@qu;n4}O3aRD1ffSn}TyCSd<*<=>LkBMRhCPL`uCBrMD)v=%Qf!)aB zVWKt$n;OGagSCr$z`ysR?{2GYFq&D`Z;X~reKgt9l6>@ed@7Nvg4y!gNqhgg{5GIs z3_Xi|4a3nkWHEW5-LUSv-#xyuvU8X(r+sk&9@yXSRkHznXGWE-j!#pU%rS%wYJSc3 z6@T43aW7s6_33qxAT_5IWfKHigjjA%+(c`gjALL-Q&j|o(#H{aO|yvBly)g2DB9xQ zCOVcO`{@Eu3=vg`jTF-YwbY~nI`!epu0FhFOL0eK#OpRFK|)V6tz$!enNep{XaOd& zDuxW5|nhM~>yJ>Fv| z*P5!8SA*Qj`h+oF-qtj|y__A{pe|7YmIX`xupoDd#*k%nL%`fT$Pg&VVJwoVdK1q= z27vr9t+B-e;gA!W0ECcMJX=j0vKtr~h!+4pLw8kUI`eq}C)|T+tF>^Y)+pr{*O zJQ?61L;8a-I73{*Pf$e&vK-M~F^iycT7gnE!Ny2-Zhd`jHf@cD?fLokaP*5}F$Eqh z36Ydg3Hs3;x)+_i)9mxuimL4$veXdt;R~SkrH4V;F}Uc;Wr{0#1IPW0 zydx3~hoWeTBQM|X$j<{`U6^nmb2B=%x2>6`<%|xlfA4kRz85&|-27>(X4#*{KE5!p z?OWjbcH6e^MEnxTS==4ZV`22CoP|Si+|%r&h`yM#s$z=P`gujIVF{9qQ~bPxs2s;U%19f5Mz- z)_HdYnY*U%33$NDz`*;azCnN1JJmAYgu(%u_DPaH^!f*Y9-<#O}NGCH3wut&Th zi$u;iguFbP%MK-S0l&aUkUm8X@H;{@h#RQE znA$OVVu4?13VUL_(HA3U`og>m_sVcN;-(UGp&lr>*Gl8M_4M_eI3b}@StrgV(#dmS zSbO3`Uk}+K9RMO11UL?$cnDcTFH87SgCd#+dzUhfJ1@Rt&+mPVw;h7w-qXE)6 zvv4||omk8Xv2mt%%QMfQAD@9}&%|{&xMkf$Fb5L2Hxfj9AOv$JLW&f5W{c8vXbj03 zbI7C=tKpCZC!RM}15}Kn{GttP9J5TOsJNAkml`hP94{dl#QwsRkEJdfH>&Cz2*0Ts zHSV&@9$p8(sUC>~<3?701J^waE*nTHr5;{azEZ2!t}I{oFfPJrSC(D&@MUEywcNPN z=o16!Ca#}%)ZuSkO|?+ts2P}hpeSM6SJ>ed1QUrkFcX|Tjevk~j**KJT=j?>@WSSC zT5HyXm(GE)xY&1v`7@MOT@j?}BDPD32#scdgA7I11qbrv2CGVuqxWtYWu>1g_`Z?n zYsVAZRP;9j%PPRBK5=_3ALAR($dxMj1er{3lXuGBS6CFCa=FYdn;^^5s|DbbF7<K-!j}4CKp$084w|1zSKMPRxLLb1-CP z0|^P2;E7SNIl=OrDUt~B0XP-7fqNmkmHp)&5VLUStgmY>-}O}teT+VieYI-nBo3Cjq;4%G}^0bPvlf+D(p$Du&<5-GZhJQswu7fnt*?+8K|w8OLiO)Zd2A+!-~ zOd(ygecNL|1*(Da(6;ud?p&Fm9VP9-6a6~y1H6l(B^OKG5wvgEU=ODLiz?tMm3$5a zGvz8>Nz1U-@<5=xby!OY8hft9D11qL;eNSa8W+JJXz!GzalrcLC7vJ}5kX%jK@cTG z%%C6IjqMM?-k>dLLwG_y#aZCL2)wNr#WVRm7Ow9&fjRbVnD97eky2lLhz-r2JYTo;_z96;Tlf$M|wn2O-sAnL|t3fBrn4uh9Snd<}1^KsqJ zz;yvZ_HR9_l>Afh+h?T81+PQ{Q4lWT>(a$y>LxD0d&bQX7p!LSsMm|ucL`b$`=|XS z@PhLN7ci&S0HZDuH_>y~Ke`_O2S2Xs9KU}3_|A17*A72(&&Z1034tw~QUyI59QF>@{g{P2iBwR@(%Enomm}-b2j?>p~b$e z!sueq1fUe42bV+&v;0dA0sHKoff75E)9{HQvt|uRHEZl8q|IjF^>A-mPD}74aL*Fl ziRt(RvB5VcfDU*#B7WuRf{q?CcV?fh!Of(|#TZ=7r$o#!tSWp2blXPuda@ZB^YKbns?YJMo*kSw%50^}xO<}koBF;&HLLR#f#t8aNgb(9wxYZg zT`sj}gVyq}j1IzEXr~6f++YFb0=3HpnlFpU9D$-;lH=>q`>HIdY;umqs8q|FA8Xg}8fj+kZ8je}!+_S{Jt zxlf<^{i`8^yhS60m>?+(gPHf&OL(36gEGOsUzFn{&$E57Q$9?$5}!5r>j_kzPJnrg zo%bU&tguPw(HXe&ARRn0hC)P=pAsxJSPEgH>D&(!dBKvPBzc-ru&-m9uDktIvb`Hn zq|#YT-O-d#kLs7l3%|Zvx>p1eW@^v$dfY+gy)%NYDpQ-pRdXm6_h$ib!Hws(5tuGZ zk6NQ4;l<2K+KMJY^!)@NFaiI{=OxaF1@arOEkZhvDHt41t~ch-7fiNuo5J}%FXg!NTGNPtw*J3{bLG+ zZnyjy$Uqxpo{{fX-C)Sd%gZvXjo`msdX>C&+_+Y`O1}$erE{m}RafWj(ktbgckI|K zSK>sC?ACqzZk3UOPrvcT)1)BLf)ng!gni6`QmGnh7&VfbPR*y*;K6x;PdMtoJQHk4 z5!EgdADA`}>rOjB2YVom3zEZ#UIchuI3e*w4;vV}Xd*qVWljtJk23W$=6EbV3Q4cG zl$;hM=PW+P=83h*fAG3+Laz^uT{JP31m~pp@T{2CE5K5V{06#9NTaFK6e%YmN8%Ch zEX95$A-H;jgnba`@e!Cj0v{k4L6MEg3Lv<@5hf6#WFfkAGWbH638aN4N@O(BF;V)J z-ZU0@^Q=LZNkBGaJ!7=cGN0ZrV}qNv%zmhQR?MORG{X$Psi6JC#aDNB&d|e=K!J{% zob6FYLwKlUJ!rXhumZPj4(&)S~YpNC3?pI@|IgTOR^!;J};%aL=Ij zHG2WrQ538UjcGEOn-^`o6<$-ES6t8(*MQz+o$1F1eebfGo0BaiKMUPSijUA6*e;W2 z$rCFJ{n}>J(4_D{j+D&$fSpyu%{jq_SHZ%<}*f(6);A8OBE z7^9&`G!ZW;1m0X6iADV-{X%_z#O!0lxfsXd>5$j#4S9otGzCwy#gUkx+FEQjnv9%- z_>1>R0#PE#@^Yg0V|>+;Xv7JGlhGU{P)r#%y9VGp2T6uGA@2MN`{rI4lxD2nh00UqpUOeS7$GU<76S0&p7wwf?~!|P9*{bsX& zE76%G<;b2pV4zS5g40J_PHUD%?Y3xKE|1IUaUF0vbvEK?#G!e#P;IuF4N8;8<|T!BDN>wVpsL17T6dGqbgCUp4q}Cg~+)V!_v(n{q%B3=yKIC!oYQ0WxHtTt< z+TidUb-6TlXDH-!sJEDvPA4fQUGH>iN<$%sQ{6^1h9RLyAwx5e#Dpg#Pd$6!0AlVR zjhkvVX_nFRK^3SRIUOBC?@pf%@<9HY`RE1o!aP!9&TL$w?>J5C3@VjDqf((VNXuD3 zT0zC;1ua%RZyB5A76Vqlm7JV_5uO5y?L(Aq$ur=G7>)BR7K3){Fu#8o`876Z4dLpr z!Qz!bMy^p<)E0w>1a)e&&Z4$*rYd`Ow!JE{J?zd3@g|K&nH9qITYQXz!4IfwbF zZXbFP-HQweNj$b--vje@&6~Fi!0QHgjvu`J?Wa~OUAp2au(f?|OLghgIvMb^CVrMC zT3Zv`&xuy}Q`BR7-|kkG%v{nu2|X5!jt8y(3g;Q*dbQSQ&kH2NzHF^ZqBI%odEwfs z?AAbCq^Kd-YM8lWX6i|(36I;c;hLf#e39IAo)nBZaRS{ZEA1?8E<=x9qiriJL62>L z{xizbwzg8{dweA1xW50}K}?aWF(2x{^mq_+qr<5Q)KThhcm`*I4ER9}m_|{2Gz1c4 zGRE^-z#KD|km)xP5KllnvC$B5>dyH>MqkLs`FOm_Ma>CdP&3{jo)AMECiKk-T+Qgy zMUCRc`i;1BcwsaPb3G>e6A`i(m^ea$q*sW{;LxORazRK5@u;*nDbG_@JdYbxm&W z%cgtV#BR7U>Utz$MlZTc-!V6S7LTAi!PrE}F=K`ML8+91x-$1Ym8pD-$*Qljcn8(p zTvU!ew;FA_I)Is0v%abJree&O{PnN9Z@dwGSr31jwQil)TO9G0gg376`-+QwUs-A| zyUb$^)TD}e@`1>mWtQtujE1{DXvgw9T&89%NKVQ%FEH^6&2%E zv!*lBu@=i2b66(xI^+2s<8+{LfqN`C?s3IrK8;DvO#>R>OkIlaT8i%q??vALP3qDy zKe1?IYZcwCO8E}^zi`=|%0!_*(r-l)?1M7T@)IKmMS#D{_D0_X@wO9!65uyq$spF?VB+!0C$w906K~nN=NB=uI{Ym=g6n{Ur7DJ+0L}Jgfs!Ns9sMfl{wE(PO58ST;#f z)Aq(8GY6GBD)o$N5D%W0vaJekULLC(#!5r^phJbD)LF2uwR)dHxJZYR`Q=4ygUChj zdO$AnfvQ;{6s_mssiABRo=KpB5Bs?#=h4;61I1a6K-9A`#|7pq7~{SEh!Edi5#!Mu ziJZSgDyQMpzX4Vv_kBx0{I&ZMSp?GDXB8@9<$!*C<9MiB8fy#eNo@&&kB~;>l->+3ySI*Lhd4Ghg(0S zYeZ2LGh1C7^aZ-=yx`ER!YpMDxKg9aDwNAN?Xs0>3wP~;m*j^B*T$rqclonMMypU> zL483%J^gS|WOCP{n#8=B722}Fxdt=)Gd!P5S~V!(lbvvlnf7T#omFL0+dSP_!BA6q zokeZdx~=-f*@0}}TeQ`(z9Ys}yB}h#Nfw{_^4KvXaum)Eet< zMQI&)k=(fueZIJ+cJq>CWges8 zW0|Znz(in52pU_Q_@}C7h#QH_<`Z7L%tX~*VygPGr3BUPdUq!PlvZ0YI%_r)l>+(C z56kV+Q8@54AL$rZ75eNsX=!_@bnSC7a0kwT2hrYFOIqgb+Bxr`tkD%(?aOLuyci{rJXL)lb-f-WySMLF=gEtWUdIPWDFbT}Z1w?zcbMIlobVM8373zQZs0^fC zGipKq+a)|fI-w`l1HbxWjQA=;Q$NuQa~|I^>88#irZ@AVJK+xpsuop&hEc!zq7SEE z4tx%O9=EJ!+JY!bqFV9AH#`HhQ_)`Lp03~e;{6!MY_ea@l^~i!#CM@Eh3Z7Kr(cT$ z4;~sG3CCvq3W@{7m+=9S5chH1#M29;E)LT)Fq}F8dW$$YdO^<7i}dO)(Sd^?a0Ia? zO&O>8FI-+#M(>3EZt8fMuK~ zXgU&I1OhokiI6U|lTc3Hs)5>48L=AtPdX^fx}i%~mA#3+1lrfVBWHJ%YL{y_4Y}r# zC$~3VBa^I<$oqaxM+F>R7-`GJKP47n%7)2Ou}&zCxkDuV54~zr%z*7rWS1mX&wR`oJS9FUG zPK!bi^F->${qDhAf&7-iwS1{WsbCeUn=O`*4ah=O%iA#ZKQYrp*U6xwSgBOWMs|`* zf>Pi(x*Cn^*V_{I^?YPck1}bAO^`tYh&-Qo1Ytuw@rs!i+7o{lG7thrN#l{pAJ37? z|0uV~=ceuo#9lv3)g}XQ!dx+J&PS8_UV^o~sa^?n1pPGWqd7S7k8+`GvKCOU$Aq#% z+MJIkpRN_k_NMj7kRXT5PW$NKsLWnFhzpJzOq7pk+7eylL^UHB-ZVEK9ojN=)w;(g z!gUpWPlvXS1PuD&FKeD#TFy0=R%^1=*1G0db0pNHrkZi7tJh38ygoS!HpI{T*s{Ph z_)qBjNq4-loQ;IMf%-`me$9FE(ENThJprLQB4B8W5SK72#31Q5f|trPV6hAGMxui$ zV#jgj967v#75T}E@r z;>&e8g6*ARrdNpMr_1CQwELYVQ<#+bWfdV8*XeGrC4Ldaf3@x1XQ&~iv0=Q!>)?Z( z@IOY9M5yDiTkIyambcm*POFvIs!ce-A*2c+P}?i!I&5O@1qE$ZyQ#Om8}y>u%&(i) zwvHSYbLLsH+~vU=TmEB29P@&_iY0Wo$4I{Wi|=p(wHkFosZ1fUOh}*hx5QD*SgMOqk_5My5p{+o zA>v)RAGAcY5y5L06xE@L6BH3`TOxqE5-F$817<>IIbH`pcdu(|{PPwh?$`MP0H63He zHJ2*rhZePsE&@uEi`igvn4626=vs--nQd3eCw#Nx_ksA7_VvRrcZ`@jF1+Z`uAZ-^ z)Wr69{b0{+0PL9i+U|+L>S;4BU%Dgy>eTj}$}G1zzhZ8aR(HvMhBoIY?D_2UVk0ot zpSKo_6=e2A_b^nF*}n3bFex1p@kk5;@-1HYOoHMnOWMe66zBd#KXkD$%(>`AaO(Gb z=JSVT3@rA?b-=(+3duc#qU~#;cIpggIARAQE2cJ?%R+;OCr8eFVjj&*dT`;>lMIT= zoF(Iz?%6-5`_clb&y?*?l(yu|-!tbtKL#fssF$k(4yaN9~_rE4NKcOZPz%b zRO86DvE@zI74Dq1Vn}iKQ!~JVCl+5~w=8TQ^5C+$_sm~moKilatTAN28h&!V!2_L^ z@roFtQR;lpyMD5rz+^wR*QU#%ar zzWw)^)qij1(ev&IQ2Npt8shr%9!8k|iHZk45$j6}rj7_I7yiyQL=+;?lCcqrVlp3i zIFp$XK>3O7f#460&<$C53dtfq$`T>6jFNtXQwYx{xTlTc(H}~O2;f>Y0#Bot!#>NA zx*?m79NE0|;X9w!mx09~3uR58Yh>9Yn=7jx)W}U5qfh_fq$5BID$yyl9i1B9REPHI zJujL2?m3K30q*dUnO6#`l^_Wo8~vfE80j$p#e|uML9!|9jQa@s`N;KOjjp*7Bsb6A z`67@Wv7kP4iCWUL?x6+jm$tN)vGxHhwFeA!tokLikxo@7?#|~kG zE+*&-{?lPdB@GUT0VWOLASs-p@F8iPEqesm!5CnFL^jt96a(bHPzjP|r_+p*u7U!1 zN!Z~CJ5m!;cO_%PhQ*TN5l-k{1YT}iURk-k4VBLl)`cr@-}@P_3k3vQfD(ti@a-@U zE#g>3Jp=_xFeC7Yf-H}TA(Amb7z0s>68C|SIDb?Cf#CEL=pa0ouun$(sd|4T;)l=q zfz;fWL&Eem!nWF`=M5?XLhO@vou zU6Igfkycz+Lab5z;zoswNkjzrBoUGvj}s$K4u&MYwCgoY%(nLudifI0jKD=bvUBNPRjf)O=l{r52=007PrgGJ=BHl23_GYizoTUnu)jJK* z+pHC*ZvFc$d+>KEMSoZtP%3j9$Byf8YB`Hm!#EnNvTDZ%Xy!_p)B{JvJMQ(ANLx#l z&WD`2@g<`tJ62aYv+wL^+w{ByN(!z|E^3pnu%_kTNda?+Jyzm8ye-9Jm$s%Cy)quw|EUkM>eecFQ4nKX(jrXWtXRD%RHF8@# zGzI?osQR8v`WsAjgrvtp#R;&`oiEWi;F#2{scT2GR-Gi@<;s`n&5}H@74UG{Sk|Ir z3tYWFQ&4-`XdWMB+FRXuEra0DT?O3T3|T?m3erAr`acTTcET=Ds_y zi6i@eXNy+77h9HP$+9F@xyX`igJs#6Vr;;eX1eL7n@)g$=p;ZwPk=zU5K;&!dY-#w-%u2RwxZHj3`~Bkw*6!@=?Ci|!%$qlF-upaI z6WM{D(kdBY5lRFpuAIJ3MICZ4hPU2> zqe)9idMC+ZL5CD*tn_WHwpgmy`6>+o#JW#NvKahEOVT97-3JWxpei4{=Bq-%w2D){ zs?}SXI?gw3+0w)oG;N`uTZnVP2iWebEH19}wHu9JFb|rnN z>*+0tz6)tIHDfJ8dkV1Q|B{>R3U|Ygc3%Yn_zD~VUjYHIhMskNX(Y7t`0=Go>(b-k zb=n=d2XX%tD5D?hia(CKgQ*jbaS%0vnnX2IbE$>Ya#Nd_@&<}LQI7%0zZFWEY39u77f}@L$ zsA3L)?f?>N3TWIS9@tGzlqZG()`D$nzZ%@7#dm*ivhgqLk|S=g5gxxA z9tX|Z?8sO^pI5!|vO-Ni0$068XTxvRx%88O4QZ^#2)tAQmZ>Y@2rx(-Y2m;~xRpht zWLF5jd+7AhM_3?!%(@?BefAl9_LPWOrjG8u2>*z_XJ&Ne7VvfU2;lr-0|SiWOPmPGhk8#Rf!?e~VsM;Fl=FeOt7ufWi<8O-lb zKe74XTrluGLwzMT>o%AQPmdmT9!xrWXXTg$(bI6{fH7blUDnYXOr`Zp$IVy{gYaXe zzNm7z=`5(7ckhNLW3)j`vHu{tznGHi1TQ~iha?B+{D{r=du>>`lZnSOc%h3J8NoRn zPrO5!{3d?d!S$=poc?0Zo-a1sZKkT{p)2EIsT=o8v_m7=;hh5$wE*-mP&)8D-+L~FjIvy&mWTJz&Zyy|C za&jGW=A<)Q*?SIFMTU8crqAXCKKdA%o5yzATa5dk%b{<&?gCg%Kw2TR#R|A9R{eOr zl^o!gR{b;_MhAH1)?seTcMo-BJoMe_nbO}Zm_9fUWWTyMvRk?N#4-94gVkz?I&eZ- zhmX-+lMc;x~%Y-3xxx=lMVHj_j=}v42cqZAt1zP$byS z2!7fO#8aD{_-f0e3Mn5|N|jTUR9~tF(dD6tGLNRlBkDYZnoZ587E#Nnm54%bL=<{E zqS1S){nRn)A{r4`^y4H)pWT41*GxTs0TZA2!!C&ue*oix{mKvD_ZkBKt&9Q|&Kog)MWkAKq7!fTs<;DFA zEJEXNJHdO%?y-iwm2qCojVxv~Cf?t6_;4Eo54YWae;a74$h&qauc9IkJeeD!e+uP- zC-W-67JTn8PS~>GFk908N^V6(E?13@zxfS1#`w@oM87Vh^B6?ExH#Mq-?cwa1kD&9 zkQKZ{P>B#pG0g#=u*nfuWfvasbNc|h=Yx+9k2tVmVe^cI%kLd_;J4@RpL%HoXS0Zv zhThZQ&ucb*z8R#PTYmBI&W)RnjhVi2?L_MgjXq8D$NS4>mluguhU8vPO*jSFQs%|? z-q>~M{lK{88#XQ<7kGaEp_gjQ*;JiDndEDnv-rbJXMuXu)`uV2I%?&#iD9QzuN|zv z|GYETX;A4>`qXs1=1f(^cvP}zj}RwyK@ec#G8HR}m*FgS(2J!O#D^~lM86hv$OTpMcWucX-vORWV(!IBB9z%> zbkZl^6T~L!WR;BN0ejNyV!G#o1JOjqa;6nhNls=3pPD397hsG&v(j75G657+Xw!^N z-qnR`kLxYy;|~*hn<}nGPduQRfUzh5{?j^hl&e^`8@+ZnVls7r!qC`MboYN;Yuzs3 z#5dr_yL2e$8@6t>KXXAg{1 zU@y8r&xaSlRWLr-6#W;1BeCFb1~4b}$-*m9#n%(w1o>AvLW8 zVXd7F+Zif4gWeyBFf8%65&4GRPXZu39a7qSO@z|xSxS?yr73L3i7Lr|kLIEp>K?@D zQydn{^KJq~{p*K-U>y5T56;9y8U}BhYrNRar~yNOVjm5RrYrTodL=M8IUk;8cpdu4 z;W5L8Y5m$^!%+C29&n;xyFaWwFCkUv1C8E#GAwKZg-=@bnh$h|IsNMEKnP$HABg&k zkfH9M{eI={ZTN0OgHG2F0!~n7E|->p9Bdp8FP2Hm&G1e5u@>EI_|;5UvjDjnAAelj zmrEaNDMi_Js3mnO0Afxc(__9M1vico?0_0;XE7)s77U|1#~u@KdoiIEh%LrvF%}V! z7C?Ypjl7q)GIXe^2{%Nz2~adG9ocUZZ{a8P8!07vx-#^~$T@{fqctfqJUXdDCYLFs zI!}heq}9k2oSc!7RN#SKw?+2dwo8)g8R{GJp^<+515MuyTds9Z?>W|7TSi~a2e0!f zA2w8s&Q^oga0r`7g~D_ZON(_htrOF%R>JT+YZsfvdS1@5$&U2ojLjN+=}PXO@&^2X|yUgF$EZj$n3aN#@WYpWD|QxjVLR5Jj}C z4son4*xE%&W2*`m*(f0*P)CB`+tq0kZlz6jFP4M`$X+|{?lGYRV%1G}uL*Im0lVNL zorv2rf&V5MyErPZUib2h-+Zr@4;j+GX`VCX2GzGy3|?24wDMVE4i+A~X-aM?O)VPn zsnx}?uB514-*2HVWg5QuUyIi7xci-J7ZyEbf^RzXTFvhK+zqe1!i9nOmF_Zk@b?*~ zw$$;mFOSTBtN-l!FW05GcXjYlM5K2$}DXvGpBKE zuDSp6#Z@ruGKT~cC)9eiJ`ncRHW6P}71PSo(#oe*6b|t_`~(b3w;g@| z6d?F=(V2_@&3PD@R>aHDjDU9&>@kc;+7x840G$GboRnpvJGI5y=nhT|78o5|zt=?R zMnk%2SBaK(&wzK&7dv!$vbDbxIdapv#c=ct*cMznzdj?Qe*W5E8>A_bgkhtPXtneh zTAN}3$P|sjC*H2c18CxXmepq9y(08u!|?Luwl2^ZA-L~vYvr=7pKm-4 zvY&`hLXX3HKTPW<@I};@5|Rq)M6CJ=pgp+h>s>0{F8F7yu$zOQO56vwYW5ra1 zP!e7gFEkU}c@j0MfY?A@D+DjY%O`gps}SileGTH=*6&(##i`{Qov0%EU{@vB-wl9& zc^J3yhJ;5+a6=O4|H;F^FrewAIz>Ng-MU%&6!poDD+yI1{ejFiRn$Pd=Nwabk5>bO z$Nh`?;V$B*FcEO#@g1)eOJSS&_}5r{tNQKz+d8=#*xp@wrIEU^NvVx)PWU#cv!Jg- zy3D2Xx21RXp(e`)Jzd!NL*y%1sW`q(|{rrM)N0OOGHq<_HX+VC<&8gBCf@Y?Nj$kQ1X zEi&lfAENK92Xof1hkM{JrN_Q#d$?3+a>S6csv$#EFalzU4JMVRrAFrr3Z2#e`8Y1%Xp}t**kD27h|~19-I0lJmRk#gaR}*u3=P(WL(*rt6jd+%6IcDfWSn&|f6{ z=`jW<-}Qa688sx+iW(3_z@JbA+mzVXCjJn94o1wWADt4-IQr?b&41pj62@RCG1b6{ zl0_&E9?`p!+aD%}Mj$91xqKJA9^nxegkmgdAHdTn2DPCmwy!Y|wc$9b`B&Ny z^_hQ*FcEhnLQ|5yM_9dpOO1P9XP;A}E*I|6gf{q(XFq#s$<~|3?7{1|o05UzrM8!L zJ@IyIR8nCK6@aREIJW{E3UdKCgbbO=?C7CEJH|pI--`5aLf<{3r7)eS;s_^BRwcm~KY1Abd6!PL>+4Mif%XZt@Y#-y6P|fnr+Zt-XxuS!qa)mX9zrWR zKFqF;*M*><3#CpVmm&)5@d@0P(d6~TH$m-jFsk^s;pggf@FPizBu^@R5q=b-@&BZZ z!1bb3nuij1gu1Fk&qWo69|<>J6sRDYhn@i0o$Vt;z9_sU^8HQoD)}~8J|ysvoj`CD zUJ)Rcx04OP>>?=%dO_^tNBM--B@ANpKB5yo70*<$UJ`w`$2$>$4YL?e7=yRRm{F>; zJ7X;`3SRHzBR6;TR&)Xhb0+QUibp3Z0f#Lk!Pln78^DUM-T+Z0!~nxyO($^NV~(OC z2fXbq>sR^JD=HRkIeO+y)Q;o0aFL_^xTA<3_U)dM67YM;kzJ2{8+{zz80jdYV(;QG zeXGMeVR&7@8i~`;CXNl010GkWDwjQQ-!-+R%90uy+u7;&2 zW>jxVm1fAS#_S@eQliQk!`qtc%c~p5gaQ*P3R4sxKXnHFJvlYmYNS=(Avs3ou{o#i zYA)Ugk2Jk-eC?o6iFl$?f|B2IcJZQNI2jJ2|P*sh_$s`g;Tu%eO8OJ?Rjei}yK z%55mfkyyqss)pHf<8tX0sO>hP^+XUOmQVsR3DG?#>+FEwj?7535doEh46RpbqecJ z<6oG7(%egKu(o)J7E(rSSYSv~UB}LSM}ozjgDqz$n@f#x1wo93P0%8V&ja?j_6Tus zZiow$IB$FfgEdmIXS|8<_0KUnKOF*13Y|^?kLVPw3LQLxFF+Hyh}!Ck0aZN%i-vfE z&EIcYxlTXio~Q2_qStL0@mX;l9gYF~!~1W3TF5urT3q)-(Ve&XrY)H|u}`L^9R1TY z)fLBeqWOQ2`gy653H8H0Q3V9F3;_$!S6o4c7)DzqG97%x{gvYh+(KeSjW$wE!hChr z^V#bX$rg!1DY<@KqEw(D4)lnL8lH7JhZ#)WDtrJ8JfPQEQY~g@XMLle{qsz^VxD#S zea>M_SLIi%(1=nzcE2-0FIG#L3H>6hlAxy_`-JhXXYbUc0h9>M?>DG+M97H{hz{+$ zuy5Z5Zsh0pM?>fmBcX)=Ci4XA3>xv>eWCk5N8xZ6mM*4aMxy1ycnx;mZm>&mUw7Mm zUWTZ==+Laz+6sRNfEqXr9z_4AftmpPp|urIpbuC9`ao*VB@qQft>M;4D}zs}WHp)fb=XKz!Mc z#EBEi8PWQeH%7wiUf|wQWoD}0;a*tBgg3t2-b#Enf%6#NsS|H5;oUicG~(9prxV^! z{mZg^A^0o}McWuCxHJu6E0kLnOK|lHUdP3XCSJt%YVJgIXesf(Vj-9}8Ztq|+<9Xm ziP0pXu@8B-6VKHWAVkt5l9M!Qm~Tkc>y%b-g9*{b=%3lymI4#(PbWujj z`092|PfYc8st1xfdtA_dOQMF~5Q!h;Zp7@A^QmfT5ETI;pam(wiRgT9&>sv16Tlp> z4Ez^(9b5)i0i+e^^I@bk7r{w0a#-4pJu$moq5ugKr)DA{4OT$#8-X{SkAdsBW80a< zF0|C*gR~U@BjTNnLXNDHIH|_i?Raq!I~EJ;Tazy~?cu#p#Kz&NE(oyr$6Xxo#GXT| zKE0JOVSptUPcW7|tUCk4ECswl23vQT1d%G>4Oj~ml^7@T27#5_AtGWz7+KJz1SaA05QSa*6k-yL1a8WK%4A}Ri+T}x#$hOO;%f1Jp8%JK zeL$kDIKO}ms~3t1J{7yP$vzr1q@YR_^DbSo575I>jK)&MsPw#nn+r1Y+ZQTE3PBJ3 zHpp_Mr2AdP7OrJTeM?K*l)tS?nScAzq4ZB;9S_Ea{RNH2=+NlzOrr`%z6@wiCl)0u zQ+SEYl4@0$EDp0)FXMfUGKoYrm`-a(9$faN@c1B!37qZL975qK)JsjXewhE zn&r8a!h)jA75U}Uciy4TF182d^f2I?+GTk#L@aOgNqL~xnjIFC(r!+XNyQe03H~f;u(Bx@y=|}~S<%O;;FuDxYM@n_ zEi)L^*6XiX8zgp}B_%VpT9NExUUgQfO3N@(uJ7xNa|19vbOIO-+8ID=s#N9@ zZyLw)Qd%V8vfWY?4w37?mnpDM_Q%^7sDhO}dF| zT%PUft6`)gz5aDu)lOcLtTR?|tk;kbZcM3^C>(arT#g%&o)BiMRN}l8M^TPRH*n_6 zJu^R=o7bmzjVN<&`xRN5NmH_*A5G_HCnskW(9FSMMs1o*Dlw*}N~B7?GF2?Mpiic% zp{0F&uAHD<yL>9Tk zqSh)TQj66fW}Zw`SmwNg{LYCenFa`bG*?b@!>@?!n^-ZZ`b*y1I}jxAXXU8p0bEJcG##ti8565H5_ znq5DE2f=N*0tCZ<)kOfQZ)WOfrRRSfBK> z2E*<`hmm0nmfm5I@2_&%!JsbgbM)%N@x{Lm!w=p?SN_vl)0 zrb)?3O}6}!0Yj(FsXR2syLjUCq4mAJX=;X6TZ_E|dkqf^jq4o5{BorcRM1*#2KMGc zb@x<+5goh1H0z2GD}wlTG|zikvRLFh#R*vXhPJWVxXrW9An4o)AlHcNk6*cLqMlfY zY!-Y1zW3RN4WEHx&;W{YC_49Mr00cdwN0%CD`(X@QpplO)iG4CY>t~se?X$wzqFp5 z&%rC_m?oDw5{?6^bFCXbgYWft+wX3H3mqM-hWK4=>QJrEQKngl9^e7@K4n?=t`g#;0+SI*_!1jMp9tJIK z|9>hEjX2W(v+~fLgOybeR74!UV zV&@X~AM4(h>XS|;7syV*Gdi*&RNw&8I;}O)&|Z{OAr7g00~&2!%rM$CeiOV<-ed;V^7P zXLU;pP=~m18*B<(&q8E{zVq6%ah@`!HEh&G+I$9i9g+#!8$$@`*njDjaV4&pdfZ`8|Em0v3jvcMTCAG!Wp92 z2uj6-v2)ZY>cKZqdh82Wc#5S!+&^wR7W$(I!RG@GMJdvQ!Zhwh_yJ15&OsGJbxP}$ z5qV=iEJk&&Rrk7S9Pt{0#9BHGUZ=gQs@Qw59sN*0^Vwrrq1CugLh6cZg8qb}Ggx$l zHJ(tdqg1#ZMRMrZfo`BG2!1JWMEntkz!(e9;vY@UFyM}FU5HF}+-rH3iZo#W6fTrmLR=Js+f_v`6g2=FY!YHiG9yhT0~%1I zib}M#5fQ)26m|kv0sPLm^aImw>~OK0rO@(gsqz=)@F!sFKpndToXNDjU}?&XQ1Mp- z>Y5a#IK-e10c@Ei%n@|22_?#m6$1BDQ38He68ff<)NpDlvAXO8B=mQNjb0;1oTZ>K zX~5tRHm48ceHWAUB6fG>B9_bnV!GxNJZ@t@q#FCprcV6*X(q9B|9+|1q_CP8`PQwB z4467*ep%ON&TYOeS=nF!{mztWb5^XFGi^#iv&FLJ`N_Gtlb>HRjj0(~RT^rjLhK|g z1%DYhu{%Ujaj}!5x6#~_Md>V93)nVL4BsoO>D8iA17KfJ%!?<#G+E4hTjVO57G>5q zEpDpM6tQ>t`*Mu9k0(&Ypmlc*>j2_2-A0 z9)KUd^cej3__RmAV?^C?u$XSV8saUv9<==?{Ah!t%Ye;DaQnKjslqx%M=O?YvLS^o zJfW(Cka`wP2WafX?;SZ3k8HxpV$tlNuEY~S@W_$)op3BJ=I>REX*bqo^-<;22x=~t z#b7BN#*x=_%6~hhzG(T~c|lOd<4M@KOiS2tA&Q0mB9oQndPay^5$&X|V+u-vXO$J1 zG~vS9$?QfqWmYJmfy`ikF-%@H*#Q1Rwht?+^7E_m*&XBW+Pz`-UE}*LoZ8H4>$Gh1 z)P?;zs9VLdA?$r28e+mI%l4nU;E6aHdMOE&_U~Ux0_uF6ePmM2;wrnnYH^Kh+xySG z#M|xsOV7Q(O?J!JL>XruH3;=uHO(8fag~QI7hGy>z(s2kHu1@A5M+FIG^R~fY;mV# z40hDD-5!*L3tv2PVev5Vt(wR&;e8tAExG?O1^JmS1 z^I=By3lO3B* z({2Z<-@mL@TZED@KS-(;8IjO;T`r8v-s?Xr zJA-<=1C4`!r|2V?kt0g|&(HXJ#`FGvzvSnhembJu{&sfu+uOVMr~d!D{v_h^*&Mi4 z9M+YIKa`+5L7`cE7Wyt^w>RceUE>x4sMIFBPef=uDtbWYj{%MeY2ArIcMcg`MaGG?PAv8eV8gY(@c4p0RUSCZdIF!@@*VJ!y87;8^o;sgl!5xb9h{p zt!iA=0awUZi&b$$^i%16zK*LB;%(1tS(K(TP1!#49&w%W_My@G-g7fx*t>7m;G*qQ zOu95KT;++j&}wWR8vXGGb=F(!%SnfnH#Z&ZwWWZch~4Oq@dWe^&+Glm+3iy_qHQyw zGBXFx8PXicr>W|Zv-YKfr>AUZ%j5e%f)20?&7uRT$=HuEhu2qvm?dBrRK`1zrn#89 z63>Yk%zp~-MR-GobQzu_7`-?u2pDG^mYOrfFh>G-dy*k{1si`p=DVUCc!_Bw7W8mz z;mM;FreF;RJ7(?MH)}!ez_I&gdGhGRXaMhN?(Ty}tr=AwvmP`QR)7!=!A~vP z9JRWlNUsG=){JkXOOuSg+B_$%jFJ^8ZMy22Kc}Gv49oGOCFpxwGH|<>7WehI;5*^% zg+9)@q_0c5@4`NfWqtjueVV`Sn-!hfxYaPiM8DO4pfX_hR7np=>x*tsD6l~xHXEGA zqLAc>GQeoAiEDkCRmwA=+F7-;-mJ)(9-(w2WPNk#`+T*l?S=4?C)m$({(Qe&@lap( z0L}K!zDL%B83Z2>^(4^g#IGDUJDC;y5!^x;Xo^wSA}klin8o0R273%O$!jNC6|q$T z9@emk55x5>@QdiD^(~Js0}p0L8>a3SSGLrPTE|C!>kdUK z%`Qf*k$TgZP^1-w#RKx_@Yu`}E+j2VgMF(eps`%2R)F%PRIF5Pc8REx!pPt5KLZb8 zk1r?hZmG8|do;Xx%8(hh`j+dhV9KF2jH1|OwmCfdG?&d~&Q<1?m1L?^t*OolRW`GW zKdkViyg>w50wx~j?TV5oA!MlTQ(@j%wi}_XKHS0$WTc;m3L%(j==#9#8 z%lVbkfUzLGFnQ*_(jv%Jk0^ANOCDUaQ&R3K2r(PXQzSuGeigHrXT?*+#di9+>~zpk zQd^9M>e$8V92m@{K2d=Q)%I%Cl&>7C<~ z9FXF3)K-~n&&*(p3vTd=!UeAANP3K`pekRbh<*a@b$Y8jN;yooEVjb=wk$JPnbW7Z z#{Bi4SReoVa)XcGC#M*2d`6S^NH~**B|xy+wlvRf?hSl9%iO<-q=d zqIyJ|s-84D4Q8=ogS5(nqK`;I9hKs1({n1`L{zCZbVgZ~>8oWexqW3LblWupvVB9v zx&6+c_w);T;H5(Q>RKOjo2laH$qD1&<0I$nL%b5bIL|X{-`Ih<3os#u9b8Qy!+P{! zMImU=n>|&V)#@Cr1%8Ud8CKAw)fZKO8OEgO(!TROS7{TbyU{SMbmrBz|HYpJhSfBT zh3~jLeTz%+te3F`zUQm$#DU?TVJRw^@Q;RDYwi>oIh~Owv2Gd0^-4!4;@HRS^63QN zP#xKn)(My}qjd`Sp;ob3p@V-^=(I{ES)pTC)WInq`TjE-Fmg(I)!HBTWOK4YZwxpV3F?Bhe;w4cegX zG_W_pFx`fQocIPwhNIJPqF6Hg*yl|kOm&kR;diTXfV=ddwK<0+H`KNv=jRDn0q zqyLSvJB6}C4>p49x9F5uR((Z6aT%zbI?59Bve}m!hI(kYyH|ktt|}K(FY^;8!o*h! zNrkC?Ml9qN)a;dj0I&fJ%~fQj4aGq^uF0#jD~WnKmIh*t4zx5U@Wr%`sLj}k^K*J@ zz~v4E+^zt-E-*L{7#wjgII;l!v1=F94_Ub2NTl!4MT?I<`1MhC-OJ;k5(vB*9!TcQ3f_i#Bj4og%zGK;yUjC*XH3SO7>FTFHx#0`&X(D9i+_foj#o z_KT}n+5CB94_sKX=>2;qM0p&IJ_C9!%X-&%?|JDycx`{nl#-Rk+niGt><8leUb+Xx zPhHT0`ponj6nlWsMIF``CSZ-|V9<9d=Kw3f9?5xAO!*zHK4Z$|0jzc8VFW!SD~o6; zRxGjtrZ?OIe*sdk97y557uK(TVLixIu!_t)_o6d3KxVbd(?+KCIRk%A8;OExKsMmr zh3>pelth|Q5VCXnssSyfV;^$5?4g1TdI^xe{0hqHmsef}2iK1uw|@P&@zIA<@-njQ z$u))nBo~F%T73ro-HHMuaejuHWP4UdUW(qT)S6kP!)){>C!4iOYXW{4Px+}J(N>M` z+IxVASJLUOd=kQ%M<%Q!gq>ue85LckqrW(x#{4g>cG*N~qwOZ~@%`gBj32)Nc%>P= z(xk3c>z1aZr1i>>8Z-M0yW4wLq0uNYmK#qk9E6S%qw!Sn_Thap`@aVN{@QCmPOnIW zI%OcvX?*k-eG-=}PRh*CYLmGneO|9zpR)L_f>;KN>Vzy`D^~h)djTzwzlL)I-*(40 z6=V=Epn7Wszjb(#Lo}fgIfywg@8rlOppz99rB;sF@)bP&l!G3+Vptp~Y%5xIHiJBctxaRM$}&^zLJ@ z&#}#`NUEL)LKk=If(z{z6<_h-MP>h9X7C;WTZ7S`>@(=+3!^tS0su}k`ge*JjpSV7 zBHB{s=oQ&9wHzGGc7rc{ed!{QPkTK5{#yOv-asMEXNUkOq=QAUpFIjS%yn0x5+JIQ z%Wm%o)h6I+OQ|GkA>wLxB~U!P@>H@s2(nH+kFl{)`=eTtRY4lrZpDB&1Tq`ZE3#fv zVLm^AF$vK{KJn~_Io*7+E)Ws-ZC30L7!BnLG%y7XkHi_f+ibu*Yfm=2(u+{G6C_JE zZJo%#qx|v>+a}O=HZzuFR?%zVC+pRSArJxefPrs44w7^VG)U+Lhtv8>Wn8s#E^SX? z70G)2ptcPvT7lB3`d7U7q+2d?&flL_B9*bF$`NZmgqPq;@Y08C)_e#uK|hfB;b*s) zVCeN`7cP!{7~NMqch$PFqUbC9yp`+6_I~>~tyL+c=`DwBeNdLws+qLY$|_PbncB}c zs2DkZ?SMY#9tTFXT%?oBTMk%JI<87Fw?v`{)qc88PU9*l27E(az9z9i^xA*MM}gSf zYNXOJIu5`)YfcyXT>cCRFtP#0g=P}9)2O8p#c%>Y?asjXB#5vuxBvKuZtM|lAPek+r{E{iVH=h7{Pmz>spuqr2#+fo_b={kvYTL|+%6g| zteGGdQ3UW9Vu;Qs&70gJD>ekeSQ|vy{$AD*?-FhF`(HbIP>+ z?wui%EmUNGzu3Q?Pp>J19yU0V-^gT5eVJp4w+mA zxGX1z;~xEQ@`6)mQKU|pLVc6MT=(_@qid%F{lV9d-3HG-nyP#f{_e|7xNkhiJOT>Ag9o-WFTG>wfw$f~ux#_P*_-d- zEc14)8Q;D=dwcu%HM{1`Sq{W|egM@cpTj)~EQ?%gg^#VS7+wMKxBSc z!4=raq81Uwjrz!^N51l zY5ismpR?<>cl&y;zd32-qI*_6@0kp)(U-VOcklQkJ*uQ&*Bj%9-~acG!xjU6(UIPd zg63a_!0*w7GZ8E?2PRi7KK>kdYS`p{`H#-u+_7rp_+bM+-E@{7c-L#M#pP^aUhp%5 zaRF|*t7*7tztESsF-_?d*U65hNZ8Gc+5p*zh>(p4&=j@d4NFm|Y67q^Bw+;aXEJ9a zg8oZwF$1T(Wr8| z?tG(PNrp$sBx!Xl?X{Lpgg+KkSF_)OVst8a`hptf(E98_ft7W(?DBMnL8{e{=$$vH z)a%fI3)NgWG@@kb#@UA^j@C(j82earbpe-zA8h}&p!x$aWm?|AeuZ*#RZ8`1M~|Kv z?8*u$67u!unQugW_%@@{)ekW7HdHR^3k<$~1;&hUU&q4Arc{MSMD?ybVMW%r`?6KgBNfSeF6E4vj61P_DGwQMB zTMQ=#mw_?rJBx}_6U}xq5K)a5>^gAt*u8t^F9>GK*ij%6;v{qbIrM7AnBEGUxYfS-fdGdzVfB4gf^$j^HASo`AI(q|V z%FI2x&%eK`%x_Vt(Q3~nYu+)SfAj4Ap?Mpcp59cmecM}Sw)v81vD9ufq!~2KT&p#5 z5oE6N%w2KYhxJ4AJZTb{%&d^`v!;djY+Re7MWj!$?$HPDy+bBi5DbMXT3U9^7-?Bht`i9SKrWV z=TkIl%am#`jNZ~Tc z3kY8x4HPFaK(sOjpeM!%{&JvXL@Je0r3kLw|Jl-IKRk16YPy&eNflh{9Iz1_cn#bu z)9BN^8m+{Tui*@KbFMB2h?HUpC&K!_qFF_rRd7R!)1_4WDRZz+CsVqXZP~HDIatzo z`|@p5iVW$aM26nQy|wV8+%c<9PM`X~q{`%IQ@^U3;Z|j@=DC%Px+V{k+WF|ia* zHxeB%C4|{!nPZhpptDzWhB%Vea z{eY!fZ>qBp9(?PDs_Wh-+=z1_eZtuVapodaxzqPh%nsdT)c>Eg!zgTJ{>m$Yjrpsu z3RdUw>sMZpL~Q?A)7*3G>^iSu+yAb;^k^NGNtIx%Scw3d6lZ)%K=05UblPYKcq&}w$kNg7l9 z=rUg?dh#O5WsYnFk1JhfD4aTkcytuximb5qAznwQqClsdJPv-~Bs(RYA|pR|Z9|Zl zeGUhYfLwS1Ho^-ug)6h`oYta!6tt?M3-BxGyV*kFHpm5!)S-LlcHv~p9u;JoPV}8W zCUcaN=-?0$RF}A=>tkW0rg*WssA&wi0ke??(fd;Ac1vbEu{Whdf>kP&X^Ff71QS(; z;H0&;W?HtBlr(Bv_K)bRZ?|ATNP-0BGKVZ3SBQ?knQ0XO!ccOYrnOa&w~HyRgXk6G zu}lej$vhCbom^aF+8;pN7w7bI8cyRx{{cGlUs{aXXgDb;dT;bzsZyswmo&Pho9Sj- zM-muvlEN+$c|7fz>DTNpiVo>z_Luf3`^)7H zX`*acgG%L#&o_9Zmb4@)kNp-g@r`gitZ=buN}e>;L&HxnP5YHapud(rXm}C1I6NMFGdw5id zp9Sqsw}=xFQ_Mh+4`3w;tm;V%j#I$9-A_Nlsehk0?Qz&%oG#ZhY!c^G+Er$yire+@ zkKjJ=Ex3=aO@Q?j{(uKQ2roaTeY`}<0HsW2~THYO4)HHTz#T=JNy!AVv{SIz@0yT#C$v#RkqBE?TRUx)e>@$^k24s!~ zqJ8VWKQV3EiSNmGl&}={57Yxil$26nDy>0(AQ_M|HsgipKTUpUz>Nm(=t+2qSr$DB zGTFm8Ob>yVaV(J=Hr!|xJ918d&pbCiUCL8X_ zyi+V$yA^&u^7?OnGh(Y5+#wTpu46?4E`yXHYuf>%v!f0yqS`68{F6_jn?Csjl%t7( z0>|iOAPfF6dIvlo@7M8XwNxcFBKAB_Ft-ElfEzp7=FmzvfYp>^pdi==3$39Hb{|@G zVvQYdz>$tQ>Ea*_d_+mlr?I1zTr3?f2eVCHo0dF#c5+&+e4@|hgZpgB;0Z_7fWnO% zn(FjYMGa`(E8=JXPPx7ju`DA`p_lr3j)vcxhMDBbez^E-t9{tQ8F)OCd%sqQ%pUydK`Al+coq zLfxkl8ie1L4o zaoLDri`yRF%pFF9oVM)ckQd*)=GeezuD3?*efiP2YPx%t~4S7i;Y?4`JQfYQ(X0}u+ zO_SvmNhC$r@XJQ6B7M5=4O;XvYL@~meF!pm8wzVW*sToe)Ebc-v3?koD4+zq-S1)Z z(F&?BP>w-4zlRTOfAwdY`SK41z18$eu`M{Hq1tHN zeErP>^jE9Dd3W!~KfL+!jaTL$ZLpd9c;V*2K-ymentt~a7(Ti8`U!(p4=ORM0N{qK zyC>dXiEh1sMxR1asHeqP3fv*F5lJVr~ojb1Wn)lYu5x32`{n6Id7vM*TdY~*mr2D}mQTS08t%N^c zg^P~>VorkE$%g9D7Q@qx;SmJvz^wskh|bY=!0nD67{`oifA$6Te*Ny~cVHZpM;--J znOYQe`N>8rB@1T2BwDhGC> z$;uJFJ`VCGtRzuCy-sS}9lT( zC%4Qt+b}tZD;=C{n60s)d^Bp0lO1DI(;tgn;#Q88YQtr-of$z}hPo-9xmMYvPw~6z z+*!WTn)Kmw_FdRFXLx!|sV~c2=kllMOZ%g*(!W%lVGCwBXP1SwdRcef03MBEJK;%) z@(ZQLHb7ny>Y>!KdPqq$S_0_j*TW&tMAy-qZ>6mgY#9s`@E?GEArb}(F!L6hCzys@ zM&HGaxZyHt5H*STAa;x5_)T~pOORC?O_ohuCjK0(amf7rZ{OAN=SP1$ zvo{EWzx@jsYg)X&eUd3FNoSU8`}fz%iz~E~0JX`KWzv}y+BtKy3bQ$=1<&=GXvoV? zvM|z8YySZ&-(RuoHp^gBDA!oK_rl)!gYP=?*GKn%X?)>J_}g!iU%u_h9d?DL!rTn# zW^*t@VZN&xCcTxe&<4#9zW&<>%oQ4~JO%L-88;~I3fYIBhuBCm>*28~;4)$l2pl$l z!Gbibo|^`UPg2&6x8Hqn5gWnya%2M!ODw*KS5qrvvWmGYtDjl3=9$%37ag?kx;poT zm6QDrxx|t;Y*s^Vir8eCPuWEEUtEXg3UDc~c)!jb6rXXD>r4^&stQkFK&6-oHCzlQk4bJW}a(IJRsmrhQ zW;pVDxs~bpDOMUxZ!qWOx{C7B6?|aK!aF7m-m!jCX>r4>nO;v#PO4O@b@@m6)j9xz zgPln(e?hO*8~=(u8s5~B-CUT55_15pzt&bawGY#y zeg0|d1QKmE|5a#EQHpb2{FM>(l-#B1n?K{J6@2Z(_uTHJyXeCN5yh=oIfCp^+d zLfCIJiav2LI$i4ZaH>wnI7H(|ULQV^$w&qiSv27Tm7D?ByNX?iMx!H!;|jyKEJlOD zXaS{6|HyTQPqHU^+_eAZ1||5Oz!WMTzW?*jV|I4_2BzcCLO zXzp?|9>ft5HEUIMa_wI$u4@Eac|-^CZ3Tn8V2hM0yO@K zwIv#)1Z9({*|T@=p7r27JO_$k!Hw}C1Y5^bH|XDo<{v-(%jx6uL-7Fk)1JM|w!M2I zlfZdUg#Mq89-?lHho|5v^Z;l|<+7!F<9!^)skmPkREe`D0s@JxoPHxs~IdpnC7ERM1wbJtPyQl+-9AV_Ar70GnWV^lS|vXXoTK-^=b}Hp35(to z7jXsCc%?RSACp8b#Y`|Fp_eLh44^n75si)BM^80HH^TP}Ig03=%s?FXJL&|G@t2-CND>*niCpz+$CwJ?)l z8-%BfhS3*RoGa7S>B`QncmYO7Px%oX0$+neKhmvj(F@};XfUz1seTdwx3{&vd~Euf zL!ZuU1fX%|r-#-|Klbwb!ekJ~ZivfIgmspV%0&EtVDoKo_;kb*nZ4^rME$_c6XTQE z6o*!39Qx~_w?{LPNQC(bJ_bf$wcKbETrOrWiP4hnML3Jz`UyIG zF*4YZ85}t>$X*JLq!)z4)QvT3AVxo+gmC0R{KO6FvB%Ju6nA8zJlF~Q_U+SmJvOqN z&Pp1dl|XF6UX%u~wvNfl;(b#bLjw;-yKQn5kHOgtzyXxBhi1afC0oy@XN;D*-N9*% zzFY~LTfcbG?%MqT6!|QJ-h&Nw3x@S7^VGW0FgguOqM8f)ndOUTjLk2 zbCr^0qf}xsr_gg>H^b+NfRo-j|5fzl7qH{i`SV`|9IyiJRagtpz%S3OSaA+mKnbvr z(3xAUe?}Cih=M^;N^zdZBR~A<=>CS}0x6rN-@1JHR(%#LEl4)>AN}cJxkq%Ah*KBz zcoPoIS#b`2+2e(<;8tpAsMl8``u%dOjR&9@BQb{|s~;VKwRgufI8l3|ZZGlxqLYge z8qwtDqy?pEJtzv0RRy*!#Cn28ZdEmx%a&(}nA}pvad%+P9b?b#+%)};KN zWt{D==4vbWHbbt-ISUqL?P+e_Gc)qhtT9`6y}GAk*W#_c&(gp2%a2~pE&)uRT=2Mf z!J13=-7#&`&U54LT$loKNBzdiRW+twH1S&al_9@R(YJc=Xfw{H{k8I~i+8o}d1cSm z#<@GsQayeA4ko_fdieOoC;_~Z7B;&{bddRf)qM$k8^zi8&g`Z8T4`n7vQEo~WJ|K- z+luWti5(}7bH|C}-1iANNr)lj;D!WJAmnO*aJD7Ta1|P$C6pFOxf@!V1m3ok5-60m zkZAMG%*u}Kgwnq6_x^t0msmSHv$M0av(L;t&&=~Y|1|MyL12rBHcM1iGJ#$lG`OL+ z4kDJbKYvRv&p{OL$8LGtwM8MX%SvJvN5bPOFP@mJ2)hzWgIcjz#qjGtyz2ck(z#C` znmhNQPXR+haO+^ExV^VT6F41juX0;VW~ZL)<2CuK1Ac?n7Vs2SJIwVOu7kI$jy?t& zQE~l?m7W;HN~87&pQqW$L_VxTTuV2$k?md0K`ju%2w|vid4NC@T@4})JFs>S>2pX( zqy^b0rw8!Z2criQ1SXHLAN%qlfO=S^1Bh5Ps2u#DXX@0RPH;m_qfWY&*D*A&UJnj5 z+Vt9Zxywew7uoTCMrAVdyx=jandqC=DXm^`KhGm(N?KCXnU@#f)G>cu0rs`Ff!^t% zm1;A$Qu-yWplLPpi_RgL&d$t`tUvA-t>B1;hqOX_y|hcpbuJ@(3Z>UwNVoN-AIasf7?=*A8z}FaxKP@# z61PV39-vIg`@r2@c!eWKTl}GF(mqY565$tQ=$q#4edL7X#g07oGs+KYdq*qUh;4 zJzV-crO4*=Eap)^BK&;L@||$IDeQqOMyzXc;EH(m(Gk;cJ}#@o;ueh)&3rW9g~CA@ z>JOu23Mo@M<;JE-d@6^Dht7z{{2+16M{}|^J6;7(_kJsKF7t?WM9m=W>${N1C09ey z%HlzpQB>QEb;0u1fXY`ItTWo+WxZ$Bxhv8H<4Awq@I)!CrKj#GFggMzi^UXh7z_4H zW8(%ldUOjZ25j`8#Q&pmhn_4$WM{y46tKHIPvqis0&H+jT zeK`W(QuY9wV}WWyJnU4w-%YfmLf$?-Da4!-Yzh)1JrRj^xqiwK^?$ja(s+*qaq+!& zcNlMn4u!F*8{@?tMEdP(D7fayYv$uFgbAKNn*_oIzCgmdYayoLeW&yxm&YGST03`V zUpSq8R^!v$uhDQBbokgltl_H8*R?))G)L|`a^w#_#Be+~BKMQ@jAS%iI(|mwLb9y6 zFVavK@<(EmW>ur!lf3~Ki%RurI1U}PAKQlAxuElPP5(7~Gc}2zE@21{+0S@xj|Xq@ z=U9O-X5}$U0Ez9stcC9P;k^ztKjI#hb9z!oe2M22#uFENN26zI5krW$LbJLm+1%u` zI*s5DqqG)n=Qc=}eUVq(b$iQ!oi@OTy4I3Hi_0zYc|$$^O541N9XlplIDw_rtCy6H z1~jXDa)5DO*3lS$Ij*JwoRyjMa7dRgRqC!_6>U&FJ>+A~cUnNsAZmXcs4o8m`6!lu$p=Ob>CXLBvCyV9!%F#HUikUmcQYAO>bZ4TP<9 zOfvdvSiVA9k@oxgVA9Q)fN;~$X+&&=vPu_0(M))aX2{E~f!qN8iP5^O;qZdR#=y`R z~Cl}lmm+I+Zs+rIF`ROlX%AB}qRy(R7CMIy_qR4VY{ zH$$&@c4;yNR*z)qIR__*9$`K6dY;Rpw^m92xVCugs2BjOM%4z&+d8v{crBm}%4rHA zaJ{GV(L1^hZ7=Ux(C7r#aC~?uzo35F>h3}%q`_CG7oUFNMnNgvF;n_}fUd05@;^m1 z1kn7qi9JizQXPnop)hJHUPi!DFe*7mNZ4l!_E1s++*?&ah99J1sfm70fP$|cy{G1LP{S9D%Rd0UUud_KUPoH1| zX8;ZI)Lu`E<0i-fuZg}_&*)1v>4h+|qdfD0uP_n(#HRD*x8(tq^o_+5^tYP-x?OMa z1xFd5pQCW+0S&B(ge&OjrrQcCAB@&Wv%E!2g}0(0m}0#(k#G`Z*i6Jv<3tiByJigOz~oF zBt@Ss7`B4ZkeP6ArG;TsypA)$CxK?E@p6qxwPEUPpaQS&G@Come-9<81=WU()Wlas z=zpG3YO5=0sUlpI2R5j6*D?!F7W<%={}G)m1I9-mmp*PB-X$${nkTGx7B~-IX$Boi z{&86Oqp9w&(rhqmM1_?;yYeNipvoBjOOQVOlV_yorr&2?(wdbhVGW(+^Q^3tl7`br z=H=-T&Vr(BBcm$jeh&7Om(#@>=_%FR&Sk&^EXy+wOkMaatS)e_pI~-6%~u{aGJLNd z+4mTUU4Xd!7{SZMqp7T3N(KQd$LG{>y;yQerNyur>VYqeVV=Tb*b)l6kzj=v-LP7b zJpAH;R0dXJ>^pD!!=HBS-2TPR?g?JLq3zIzr$EO^Z$o9|SNrzqT=`=+4KLBt>GX&# zla^%1ww)L*z`_?7`F-~2vg$5JOP+TH_`$pT4jkC`?#_Sg@YH3Tf4~31Pd|Nda+@|V zv-PO-+HAmjZ@mAFA9fD)?f*V}=XCXX>8aMWn}R~ut+rHkaGbr^Z5Us*;I<{TZHs#S zW0ASTPDQ9Fnoq|O4<1B)jLW$Tz&IHMCE1&z3E&kkR)drg&lX{kO%ja*0& zN)IPvdExaS?3oG@g&!Oc-6}G54&3fNFE-9~@!?oFXx0>{83k($Y#o1Wq>*J*ngW%@ zkFM~Ut>U#%p*Ls}I)A2kSfprpQO2)JXbn0AycU4Lt6|rOtbS5P;Pj%#B?>kJoGy&^ zkD7R|f3z?i>hsJNmqyfc!gVfIjEZcbpmh7)=ucrTU`23t@H!Zv^r#(HpmxBmkdkr0 zWJM-|J4hUGS#$7UP}Xb8*)z$_BsZH(>R5vU%8n)y@f>(L-M;nhN{3RXGc}l8sruG> zO>pyQXVUpTuP|H9+qP}nwkDp~wrx8T+sP9@v8|nV zYv1>++O68%`{DGdb8mm?TXpa0?thK(sW3*xydMYL%wnEf8l88wnXm4nLs1$VF1F5C=m< z^0OsOTsTCI{6`A{st_D%kTm&^5=GJIW^Y9UkVbiu{i@sYG83~Ws2;<>qZe*P#G8E- znL~<9SX5X;dKeQTtz6N(br))Mh6VdCMgMcO#W zmlgCpAM%=GCZR~HrO(EF7dpp1UIy|O*d`jiF?{_kL z1iLIm-L>4YyV1XBb&_g~0#eCdAnMD8i*VTrp|`PkKI|1gfG%-7F4~ly&yMp6J@*j^ zgf%n|udr@K609@35ia==-(d&*d}L_dE}ZIJ4*uIfC2j>*fw}99)|254Hj4T&b3Rv# z0$21kaI*T-bA#ZnQ`R-QX|8A3&U@YXWKfAy0>@^B*~B#zv2wIgjsurBM#+4jTPdC_ z2>zH!lg84RpfJejhbqpwUihLt$mrnM#k!Zwb9I)v9bL!X8q?eJcfyu>K&S8F+K3wz z&9wRHP<(CyMfQ7L{*N7ws%>_QU${8E9;Y1_51SC~FOwW|5AY0mFUQdvx0B*=RFe@5 z8`tuwWr;T)>lFQ%7KD;nSlchSy0N`u<@yHKTzdR0DGDiyDVD6d(lsUa1z(;68z8@> z3bLPtSQquUnQ!nMxj5FXSXI-#d;V&v^wf&W8PO&0s}Oh?TMy`5Ow!K#9=gNsf>B1mqqc`#*k+b^Ux~g)Sd(nm z$5~c5?)IWe*|rJdwI;g^4V#6z`I*J)kXp@d*1Ee)XS0j_>tP_1(oAz4)XHck^{Fg{ zie54eQLKMM6jii_f()4k++#RJ8v)%kOA4IUmLeUDx@D=_6YtP)UE4eUGU}LmBMu!& zT7r>6(6m8f?%+oSHAYpGAB%lSSNV9)f}ZZhSDM95%IDZIpR4m_F|>g1^ZSC13-!Ta z-q;F6=$JOw-XwGt$9C(v$8^b!qwfRI)A+&i)b!aeI;-lLE~8HoK%MCBvKUR1CY8r( z`m{Fiw=l*xz{E<02Z?w4-{XIyUQC*D)}wPoQ$Go1EL*$TMoB6D5=ANd~KUtR;v!IxSJN+jziV| zmS!+_d%q7SKA*o(Wc3?OsotPuLo|Q3lkd7rk56#)xw<@NuWR=0$Fj*tjV_0DfbnvG zyBwIM=Pwyqi-q7hJm3~_Q3PQPi0d=`%7TrQ<*K}ZdX7op#|xOXc|VtU!aK#*`rgWE zGC$RqZIx3tuxO3II@?ky=`?k#cmQ)xwDVH2P*AW~bkDdjC6o@PHM(I8eC5 z8I&o#Ev{7R3FC&q{x{q#q1_uPteoE)z%kk|3)1)+%QR81$CeQ#vJyHUzr9c(yH*S; zXHLZdSwyZ2FY-5u!p3V)G=fi)m>%RoZb#D%+YQ&%(PgdS4gXT#p({qULZMb`r%^z-PN@ZHb(2E7iv4!K0)6>CNc(zsDhH6!AvTZT6rmJPP_DWbA z<{-5uZf0^$XDPj8qJcJ-r1G=wU7Mmj%QoY9+Cm zchaL}2pl7Ue5Miam&AHWELLunG}Nr4fjwI+!$>&!F36<1!w`^^vBS#M7O*wtpkhb~ zEvWUsQ{$fY?5Z6jlTxrWIZ*40yeg~qvSdZlw3RHZ?DYe#mEFCqeAIk=soNfQ9;c^M zxx={MY5G0Nt;8gaG`^j$24K&1CQYUVIAFsI4tYsRF@FEPdGmIC~zQRn?X4RF=L} zl@4f-N7CE;^LI?Jm*dDB6YfEailXZa(=H}RB7Oo(tBBQu5Q|j`4MiDnWA=4TtMFR} zMt*{0eRU)3hU&l-s(TSv=c|cD)S3>473l@#AB`e`g_X_5Y#im(eBKSc#gnwTp&~ zlF!RU3z|d$#`ZKws~>EdQ0&?#A_%mdDaM355}(EG)PU;IQD=d;9m%u2vb%`y+?bO5_m`8 zIV$y4{W($SWX(qM%LY!3X6gqGKBN#%7!zxm^O`try(?0&7mbvBgjZq2pOqoTcsVT- z&7z#6kAgeLNQ7mu3sVjL(hw&a8f|c6pk0G8A+D9}WR#wrp%BJ4oVNaL50q?waq3Ru zjIZV!x-p53+rR10fh#AXu=$cFzYbzK`KgI{?H3}W4@@;m@x+7P@!|~z!W~E_Aq(sf z+EkvGKl!ZWHH+dca#Faj9VQk6x}J_9hib5d7S58hx&31bZCBjU==_BZ-a9(jqxo?e zp63aJgUoMKgC5w{Uik1&YM(d!xravA`p>3$!Mft4X}qm>=9kA`7KHEje0f9Y41r|` zxjx4SSs1bwYiue4z*ovXTXY$Lp+*zL`iDGXa0ABvah3sSy!4qSvL zi4oE93d9LC*i5>_a_+(tc$zzf@x10>&N0em3BhB#c6tT=^LWnn*6%L>WKwNc)t+rQ zkvX0nkc1p}+fPDKlgnqO9))~2p-lM*`z|BV$i-YEE}aSNO5b-3KN@q}DT4K_e8v@J zcLrrGHc51`i^5~-k|M!FRatDw)EcxQZ_+9#A36He4}Vxf4U7Y~&V>G!-fxDO-rHqT z49hO&!@6W1nW-*_a65r-gHijG7F%WJ&PnDs4N6qIG_BK1dj2Ij$ls2GK=nD86DlE} z)ch#Ma*jpZxhi_$I$FNdDtsm{(_*Kc?$L#rFgvNyqE_m8fvOEKtffn6<|f~ZUFvqm z)b^(V^&w#d3JKzS(pSqET;bRPbt9iW%8Mcp$(^51!Dc4_W$#ZX+`eD*3W!IIiy+2l zD?Td@N0H288#Eot5>7@&Mh!*DRkrcz+R6#ivDOeX$ z)r)yslFRGsKoOETT0CzL#$Jp0YU$Am4w@A6o}`NGmU0W;>aj3~KVNevfj`oz9VcEu zmN1ni_8b=S$d9fU$xOiXxBPV?NrQfa>+JujpvU(BTkFc>9Ve7{^%xEVZFYmkgiY&j zF)B|@7A?`Hw_iK|4j~sqdvFsUeY?8O0~PTv$~ZcgHMsBHX89__fSgS@o_2p`JIv@^ z`K)BP)XgRa|6S1?fC@WRh3PH4+TVd?V~LjU6~amUI6>4ADv_EatsJgD8`DD_XAqUO z%F6$^p%QDu9t|r5+m6z#o3+RuUS|I$>;3Wj7Z@63K<~Sn$mCiBUATtF_1hleo)I?u z2b!c*o0P!UInl@<>?5-xXl44EbtHN8Yj7r+J6whffhCiU9Q1rvT!eE6qqxD&WC{NmYTtXg0En8yr=}tO&trS7RpmF} zm4iOSkheF&p*0^;{Kzkz%|K8Q{Z5Ub0pn818f8dO2Z(;g6L=R>%s*bN?Ecy!x04*X zJ~yLj(YU3t@v#Ih+f8G6|K>o6oThpgg;KcB7u{-|Z!0-I?DD~R=h7DTUM}}~*L?x2 z#~f`_w99r|T!csB9MikdVOx{FE@#Ibd7vzPR;Uc0M@=0Z&#zhLW&yD5f8!s$-yg}D z`15IuLN;VTcpeL^5P&cy)Em1tby%qDy_X$!o4H_6GX?W0sU5{Gp(~6Tgd-2JlHS6z zq0oHM78NAiE$jba(d6!?1zqlIe{F6@c)m?u52=}_ihpo4lLROP&QO;Sy^|q?rb-fC3u?Hum6}s)Tmt{n3h{6Sd{7)xQHHS!S%gy8ZU&)D*t)a|wNOZ$`f=!i|Ni>o z!3?37a%L9klEJSXt3OyDo8)`&^$AeAA6X_>bdmEw?6{i}Yo5Di2$~{3=t~y}yxZp4 zxoj2h!xhm=u&n(4v;?VJRf(n+^c1LimCvDbfEe!M*<4ZLuIQS(aD_^ClPjaT0y2u{p+(<*hh?%h%(_ zK#dOnhyax5Z8}}xp2j=G*;58Nz;x)LbTgGUW>?McY-p>E25LQQBjC%U> zM%^=QTm=pXCbK=zY1vHA*;G3|)tJCu9-V8Dr{89Jn`!D*yp+F`t|$BthDSB>Rs2s+ zZPgOX!V$mKC-+a(zw>0(LJ;D=ruj%HIB|Rsy+T_+hf_6Qjdn-4M(g+BX!QLU&dYob zTY(fG%8A@n(HO;B4(^NR6WB5S^L;1hZ~gO@f7(dGGtW<2Ykj(DLA1sfQ%L&WP`<%{ z0Yc0O)&&#mvRFbG95)zsGQIadoZmYjTYgj_KWb;&l2R{7DSjeQr!0QTl*B?8;c7BP z720x2N={`-XZ_B*VPy(!#u6j8@Cpe)il?1c<5QdFlVbxmm!4whdzVV6-<=bm@JUPv z*na4&(xb8K}*;B3G0 z%6Yo^-@om)2Obx`rMD+hQ@DkCi#iSk>NwusJ*@e>N22Dx zonqnruw*?;pna+wO2w5>%jvD@TavZq^rY-c>HB6k+N8O+$ApOAu5)oZd-O*-2pwt^oc0$s$ehCgF^23VTTP8AltR8*&y@ zX{3Sf@nyAAuLnCzB98C!h)-v0ObGJrxV|e`eXmX}?F@SmP`Pkq)tk}a4{#7otu~VQ+i4YY*KcJ@` zf=7@mnTkFSK1|$ss=)5_=PlK_x8`Huw8yDd!aYt?fK&#)0<(F|iDfE1n>?v01h44d z2Wq#&*Oc4T9$$*Q3xl2jJBJW?`AoP)+xs`TvEV5j`ClET-h+hXJDtW*g>m$_rKTtyg+W9LQRHvN%fB< zwg}ZRZ_z`aN8%2ugfmIWXlrk?}X-m{v@I0SmU z?iT@oLMxczO-(N~wV}#1bz81VH8upLTQ6Ex%2I~l2R1@ozexcHh$M1aACKc?DwbV6 z?puFBKYF`#L7U_f@;ZH~c+gu4LMXE5s+W=Y52u5qh4Uh-5;6tsMM^f=?L6NdpqBO*+v+=?4;;Qq< zO5d?>(xm&yk4(g$neRl&W~{Q=V!I+cu?a`!Z~|M~2Ku1RTp*it${|M_{{1}^6aP|l zqsXiKYe5wp))f_G!x%wU?|-rYF0@+M<qQ{w`ezR;XuXcRGlEj- zJrJhYv9mija`6^MNF&d{{o`tFl^$KT>>nNyfjEyKRK%14g@VrweM}>od3JkU`wdw154l}2Th+A32y-zT&N$i4k5(th4d*~>pKcBZ#rz!x)e$@xayog3zro17Sh z4_m2sCTc}db1WZ}+>C^~bgj^j@#$yP3Z~^!XR%ObVf`HpgoE0R&nHeFd-44E0C)B< zjVM_AP8$n)6f>P&1`?WA(BeGpbf2V74}Y!Uf?|PUQ4lD?oU0NcUpT*pv2jcr5rgVW7ji>ZjPw{= z09}|c@xBHM&xf|1h__r<;lbOq+6kp6z!Rh zak@|q(|V<7k>YuHHcGvBDwHp&CV!jj&QYy!+`+-0x3f`5kH5Jm@?lXu)|*E87xMO% z>FoZr@B^JP8~GuGhZte780f!AgQHB6E|7KC&ecmY$HJ=?OPON5Sa@+OxDNJpI!mhe8s!VE8o>vVW zDLkZzK&(EdtJ0jn5oAfUS{utL;JK0sQ9pnt@r9g)paR(*m;RNw3oHo>scyh;qdi&Ueddl z6GS9FX$2Zt9Q#Ft!&^9nF`~z6N&}1Y7ll7eF@OLJAM;m#1#b5V5wHn!P~I~ zp&O_>{Rt=6$rYknGe4aEnVE3~wisT{wlYUs4@%kAf}h6UL2F>AF>eSn7yL2`k>lP~ z%H?`FodpY9Am%XZ!pTal5IgAe9$SakZJWAS=1>70+bL@;zRTdLKh!h!728;-pHM)K z60cIB$O#o2j?VvrHYY?L*fGV;J-r?TNu-{{A;NM?EXr;Qf(tPM`~g)%tT~3{>%}b= z)?h%!QB*V!WnrT?M6PO=WwHSLR98s(rD%XQ#bUEeT~G4*VNlFa?7$!3O91;&iIkN7 z4S@yKIgtF1iZ#i!8Q}au@sDxy#CzfiWoQ1VQ6D%sT)gYUK2RL1}Qe!8lCUuDg@ z(Dkhz*?kX6*3Sk=%0&W8qjfiitY7# zS|aE%cYJtU`_jp(igde#%Q0SLQgHV6Kgo4@x4)PiBZc>|)gs{YO~G9@{A!&?KkZR!982U0^cF{&Z~jzY+)mifl<-j` z3We66@JaEvr^H1E^Q}NE;&IrVrn;#A(Hev$iT;;B456MqC0l;q(JnHxKqV!o2im)A z2@3>zB-7iKj^xjBf{+1#SYN=i?KcPZ2Ns6FMfH!ee44xf3CeS%(YX(HNWUx{#yYCa zz0rDBbeKho@BIyFSo(sxqv}@??{kUsl5f^7tzPz_U z?(cqu9~GEdb`U4#LBWre^vx_IMB6MX=p1m@ti1h`5b0?Fe^C8^dxa@-eZlGi!!%Wh z>TnMHLOBBY%y-6fA3afIUZ4SAWIm!+-54175ZeevSF_&xQWQo9AMubGn@NY^3m#m$ zM_7UIEgLIF;teZh$-lEdt;wfG-snS0F_*K%JaU=W48o|g5E37Fl zexM%cm+P?W*e@%rt&(-egFq1_9CjEq)o>TL6j#~txmn$UL`Zl#-5UR z*Z~btbX}lpktV87Kn2416yyrcm7^=zmeiI+mQerEZL5}imL!(2AL7;^%Me1%B#m%% z_Vc}PqOqDUu3@tHTtq{Ol!MihHOQ1rnFetv?)h@vlw&9v43&Ix8ndQrASFZYsLvQa=k&x5{9vkjk<6^pWHP87tNU<<#jYv znbf(9aSU~ix?wq%gfg$xG5)z_n3hZzD7^msX3Hfi57UBWBt(qgCYjsFr~$B(UaklT zGvK;~>r*jyCsP=hU>vuZo*4}lZ2tB?E#}T`S?wGLf8*?6&X>;<+dwZBNo|=5OQa&R zqKgRQM7WHziA-WDXc_lfJJdiHfY^0~_ymDBepGuYnQZ$AU;_cmAMqMRnoqn|IN za~5cmttM`bMh{(>n++McGkmb4wQi_r&0YN68-%W1mvG?TRPjH;nShV&IOWU&^E6^i zN9yQlA(pw=hwCN^d^ovaLCC^_V3`F4scH>)@R}j$Krd1guI5t9g8NbUw!nfWY|Giz zU^SSQxYY<*gGv!08%d{c{u0CEmC zqok%mO-#iVmW;4C=~~2oe2uyG*T##|jMb)Jk@DM7S%|93wgz14Twi~sZ8ioGGkWbp z3yORQbnWRE3);vfRE5%n84FjZFsWX_(j~acSh&Lb9Um+ zT(o7eA1e2gH68;%RAKj8K|nw}vrP<54Gj&Ac=`5x#Y}norZph#-64_MjeS>sihqB9 z=LIGGfge6HG&BY|0|7Dp1-ts6eN0|v`}_MRZU}#JVq*uAj0alLfcU^b%>26_t1e@M zCWKV$^}rjGMH`OJ2Cgn8n@k&34ir1CC+LYJfQuyA7b6L#aIyZt{z4om>XYuSQDaf# z+igy&mf^4L>g?QEPMTV@*f)4fqu{ah)-Rb*R5{YA;H^=x4L}?7bWTJM#gafp<|CtL8URQHJHfb(q8bfIkzRjPi8E zbMR8VCO%i53l-dWqL7W)!85X@iGZepxh#AXr{ft}G->vWSuNRN5^Sw(N`&AoGqn9r zW?ij-z1>BhXKWad5}>P%oBA zee$ustjIrTy}3#J#9{C~Y)5W=Y{|Lsq2}=SZQL~v=p;qh+u$8)mV&;8?DObZjaP?d zlSB6~;@#)mi!BFgbrwVU_U8reVvKW{6N?`>pSwu^2S(U{NFC~>B%(N9H}Y74d)g)3 zZJyx0)xE9r9{sy>F>AL-$z3zT{X(7kOKIbUt*QE8b(Ac`mrjq_)4BW?`0gpA#!?^R zkwYi?Y|@*RgA1-ktcN#ujrZ5qnNnSaRw&rL)@L3|>%ge;r`OcE3{eEXz}`L0uWR9$ zs+ecrFX_+T8gJ`TsFpW^kRx`87d^oqHBq`g#R&IletSSyj9WiXNXv@G^Ckpvi9n&I z4$vcKCa%>x*Oa_^sk>$?m=jV1}dKxp*&ViPG*)QjrQ0uzjuF1Jv zXGJC_;B;)tT=x;mtF7=;xK9G%(raUopur&}_j*-Cr>VT}>l7Yvy|L{Je$yw0GAkws z({puNd#LNzjcUrfjpn^`&F~20d+V89lIo*6Yk@bmJ9{8c-w}?4V>K=O$21DbnD_uG zx`U<3DoZZ>w^kZ?h1vH@zsRmWeMk51_3XW$ z{6b#f#CIbAjt z6P>vW21pQAs1%~f%33&g=J&z!b^+caq?CVV3j*9fQAU+`x8@}IG0l)>+R6Fti~k1A0lx}g3RIM5(;_7glACnP7_}~@6adqq0^mZA6_}&IxmpA;=6qmVEhr4nnmS-`F-5tm1q#+j|T$?PMrAf4f?AwxMiXNosq8}vUMXb zO`+a0>pD>$lj&N#?|pz-XI2J@AsF-4AGtIctJG(tjw|X1J|rzDx6bg_HqON@584r< zZc|Lq_EOpBkDkrB*Ct?F95?v3fxF_~cBU9v>67Lk8?xJUOB=z2I$RMtdpWW@?E7s4 zRz7b!7l9HmnI44>nA{#J4u~vU5rpqI)&d{OrzugpP&YRq+=%-DI2Ppa{1HI6NbZOV z7w~^1K$(ciykWeO6D3!?kO0V*xT0^)d!C>bR9=OJ1JZMfd0!X>`KADzz8Szf_T3C~ znXIct;U1pN3BZlOVRmTmN3U+a1V(og!1vEuG_X4~b@D>*III1~NmaGMP};d=`%K4p z_yPRB1M`8-@OGgG!g<>(#&uv95$5idQ|kA=?2g4XXfLnm;xA{ydwjlu2#OnDX@CBm z6P0spi+!#h{kf(v3&y2fMW^`Xc_EpyySuzem+avva!P373*kzO% zl_qADVt-W;Q=It8RE7v|s-@)V&Q^_Q!@4(ySBYEcx6a~{oy=xa2p%K;wjYhRLrr=r z77@>iBZKV3){V2?f=e;$Lo@GGbC8v0RKa-^SP_sOL=)`tW?($rhr}C{%F=MY@l1lx zHMwQV;v%(cmeSo`3ck-X3-R*wmleSZnow{;6?L)nx(bQ>1kkf=1LpV?$&=d&9N#JN zkT#PDdb&ZFdgd2!uipR;g!@BtTbKl&Yq0T2rwVmnRLo$2S7@2RsvD@tE+Kwr2f|e81 zE+oC^^0xGLvMDEMoV3PPxY<;up%>MRqbW0p9*sgXbiaTc%6nWs6u>0DDT?#%zDM^< zh)WBOgN6$R%B>l^?#f*+M$b90FYcN2Lvr5_mcU-jgn7qtHvRI#VQd#aI|3gl6Qly; z=ds|hid)~BrR{SQz<~EW=pexLp5a05jgbFJ^ock~2EP;0Z}f&|#DG67vF97}hW)@h zW2^9wR74!uvp97M*E8dsI;kB;w{2;6uscO&$Bo==Vl=lyuYwL=8lCv-==e5ZFR zy!huiUgZs5Qt=-RU1QtKdIbboKn$bhhxrV3AJTRgj%B^?yMef*`D&QH_A62X}V0M)&MAU{=7&Be%INeD`-&=u28+3{x3agKlm6|5oa`0x?IBu!8}8&wv||)m$zgk@UH3RJ<@01ORv*&UQkbKZ zZfy{tOt4F&Jx3=#pY~UA&gvR}OT30%#Xtzm^tUHcX(ijzM!xP7WCy{w+cyKNn2&qT zcNFx8dVwhWAp8I`>&bKdul$mGigY4>2IPmV;MC7hI5-4DelQSxN>I6fxnfGvt~II< z+GyW)v7Ak@;kwz^R<2@y`;CGj<-SRPrt(_rwGn1Hl`JVH!fg zZp`inHE_ZK2MQC^24OkLV-AbskJp)Xi26(3u#nfWG2BUnzb~fiV$i#^n2v}7beKx+ z1lsxor7CUR((g;o&WoEq=slB!NlQ#ikGxR3$aC@ytiRrm4@;Gf`0*F6 z2Rn6_6BSmEXX&E2NVFqL?KGOhnypc<6EAf|rP`0X;wmy!tPo7orDiHVlDfB8)wZs14g`Y`>YFE8D+t!j+#PKjUg{YS{_IVdIx7*Li&5~fuqR0}m zzAGQmTp66he@C8Tn*nY3D&PF|^*Q6OM^3**Z@4PFG*A}3z6qH=LB+^39&TZ0qt}o< zv;8z6To1+@-PAISDX=w5+oqD&QnP6l3^Ou%8n;{7Qt4ue7$>LxUGW)DOnrV+Q}yu~ zmBml8#~&{K@(ZNfz1w~c8dOxWpM3%^IG728XeIX2dU>7nZYF1`OEnd^%55d~kl?|r zrbMt@<3mVj`9Fske-zcjr4GSpLgNmM)xpM!UhllAr@tXx~~U`uE&^(fCUJ*|D+F>0Vub_ z(MQk#q}yR?!)*ZC?Fh9IxB&5XX!~#-fOaQlMw zLhlAU40!;$ZunmKKS2C{3Ir1lDFDiDSYEh3e)vQ81se=G0NQRKKM?#80|EsG^8m9q zm@hOR@LveufdPYkfZZFy7lu+Kq(6+Y*i*&`_Z9e#KVdb8jqnDPbi*f|AZmwW9Zj~t zIYy=(UABI-4c9o@Y(egZZtlCc^IZkaTm^US+qd&v1^Mjjw{u*DyzgVhnLtl! z3W3R0?}N+l`?m`a1VZf#c`_0NS2@CzIYC<7D)Pc1j{Ulkb9hyV;bA#OM^}k_s)b)6cL5H!@E`bJ1pi*tu)tp4EyIh(2ksaCchL86z+T_2z>9%2G7^eXCUbHL-jP)# zjB2qFPJxp4zZG|gn&MbXlZ{aJl4(nqjo{Ye8cUmv@Ey_31@~sYOF^Cm`DT_&;jRVy zW}ZtSp9TG9j!TjE1*}+=-+xt!Lu4x#z~vVFn+5O%p%#Q(8S#ayETc-T!p%<=xnmH@ zegP%9qvA?UfSTNKab>7LQSRUJr7A#G?pXOU7N9J5^h~J>P`7g4%Ty@`XNgpd&RQkH z_Marcxm?1}d7_BzP(_efj8)>kSunaeb*2m!DBKxIUn&Ds?u?-?qX9~HM%9+u0JS^g zYRhne;+?4oAQcgO!-c<^e;jOAp@-*WH(wHowq-r4&E}|dwA5}^t$+IJb}32PSEayTxbHfb z@3pcNI6&mMj$Kyp&X!uIqLzwul`Ztzutj8D`R?w8!<|6o*d9uyG`zcc6acwajBAYE z;U$>L%BmSps#5EM<@Hlh6oBoq_MJzXmp>dzPu;e9VPITpQ6E)fS5=neh_Mzf|DBY) z#kE&CI#btGv20oVz$`wm-JF)0Z~Cwwy}$HNx6|Z1(m74tM11X7oZ2WjT8lL<#~9R> zSih9ljNH6;XSqOo(dsgAQKi9?&xBt_Ofit%fO6p*q$JkM887nJ=fm-`sDDg`61e8k{}G z`>9v^#``})6gz_nC!#`fF-pL7zinD_@~BO&Hr&-;HY6hwgPf=E>z}Dv{lVdNssh0F zy~uE~+JE(Y7O0nMzVfYJdwB@!iqcsR)DDx}4^K}Te(nE4A-r||;ZsxDLNbQEa+zmm924D!y}qE`j0(cw%8g>VjGXG;^1eHX19qvnK|DWGdK8c;mYF~m^km2)N0G# z+acU}PYg(|{q}wgT&0F;lYKVrSRjl7lNxi@9^vdHWg?@vcaFqzy6{h%&cHL9i4I0^ zunBdDzvHr9I&{JlzVJ_-=$SEYuwxP7yA?vg4<$dSM|^QS>cupPrVuR(napy9y@iF& z*m3l)U$td+VLy|BqiP&^Sr`Z9m_Yn-#`>yUkNa}-cG~HjZ7dSkG6IELDI8(8bQPDi z->SP6)om(@U@EphzTquVyJbk4Yq$<6@~4ehvUCsYYDLX`=Y(f>B2;}2z7bE!i$%n3 zSG^`2y*!wcqk|%&^;%qCdxm+4;CJSFXCtSu;x8C2>3D^aJLB&)eeU{WRiT+Ob&DeR zb*I`{|G{yg)xF5QO+9pX&p~$!%Ki4k`{t-sMGw{RX&VmCDT&xCq{;E~y>p(jCZx9f;keo|<~ zil$7BWv7x}^->yY{Ab&MC zA-*>H_b7*h`X`Tzw!zGC_{SwFmVX8BH?Qx_6Fpe6KXXQc5g>dSC)2|FIpOG_Llzjy zAr$P53h7~iWY=cF1Pr8$`&G+jxo3wPc;~!T87GXG?<5SnD0jz}TahBLT^$)GEXNmS zTvo5fSW%e6bzGAxBRu$loav+!B)xs7kP;2VL6V&p()C6fr8XsJrcP4kRFKHKlD)mH zW36##Qqcxkl!!j_8!gW6t=5$C`OF1)2f#OTy04qFwZB$z2qO;t&twuT~;5c*ENEE=ZfA)zq*8CZ8#0$}| zor^Y6snM;KG=gJrW{*Ad{?(bJZ6$y=Y{*8|KT-!_@pPpp&x8KY|ZxgYgGfzq(Ts9l~Usv*3=Q|~qX4|Ok4XkqnWEbrn~>>AO|v9ZsgUe*QZ5OCj3PM> z-8;ci^6--vmFzz01Gd}o;Wf#`_5Gks8WA$8zsiy7sNra(XlhjC#pzRGe(!U)Y9_ub zE1dDNFqVz9dZ2PJmdb)jKQhtg4oy4Nv7?dQtWt_8Wt61MvvAVlsKnHwpsB!F`N_k0 z@iFJx14n6;v6O!r>mnTlW3Ad`5iGU7pG)U0YM`u37CmX*QjNW-B- z!1H4e7ZZ^~5SNzA!WcIu+NT&}ucK{65&jgGHL9m-$4VtL|5vc?zk|>Q;#x>%Ldg)s1dM-!%YPPQiF<5k9X{l5jPOl+jaRu*E8bLP8QGBqUD665Mi zu%~&7yewF+|5wyQ{C>uAM{Am=%FBZ7y81Y0xw|RTL;ZdxN`;*5w3<9;xwt9QRXu6O SdSQM28?+M|D(2r_;{O0|uQ74} literal 0 HcmV?d00001 diff --git a/ABC_Score/assets/fonts/fontawesome-webfont.woff2 b/ABC_Score/assets/fonts/fontawesome-webfont.woff2 new file mode 100755 index 0000000000000000000000000000000000000000..4d13fc60404b91e398a37200c4a77b645cfd9586 GIT binary patch literal 77160 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 literal 0 HcmV?d00001 diff --git a/ABC_Score/assets/fonts/glyphicons-halflings-regular.eot b/ABC_Score/assets/fonts/glyphicons-halflings-regular.eot new file mode 100755 index 0000000000000000000000000000000000000000..b93a4953fff68df523aa7656497ee339d6026d64 GIT binary patch literal 20127 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ABC_Score/assets/fonts/glyphicons-halflings-regular.ttf b/ABC_Score/assets/fonts/glyphicons-halflings-regular.ttf new file mode 100755 index 0000000000000000000000000000000000000000..1413fc609ab6f21774de0cb7e01360095584f65b GIT binary patch literal 45404 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 G`u_lkUM?>H literal 0 HcmV?d00001 diff --git a/ABC_Score/assets/fonts/glyphicons-halflings-regular.woff2 b/ABC_Score/assets/fonts/glyphicons-halflings-regular.woff2 new file mode 100755 index 0000000000000000000000000000000000000000..64539b54c3751a6d9adb44c8e3a45ba5a73b77f0 GIT binary patch literal 18028 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 literal 0 HcmV?d00001 diff --git a/ABC_Score/assets/images/logo.png b/ABC_Score/assets/images/logo.png new file mode 100755 index 0000000000000000000000000000000000000000..ef2bb78dc964d10a524e81c2d5f66b18972a4c6b GIT binary patch literal 5100 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 O0000{point.key}
              ", + pointFormat: "Committed {point.x} times, with Flog score of {point.y}" + } + } + }, + series: [{ + showInLegend: false, + color: "steelblue", + data: getMappedTurbulenceData() + }] +}); + +function getMappedTurbulenceData(){ + var dataWithColorInformation = turbulenceData.map(function(data){ + data.color = COLOR[data.rating]; + return data; + }); + return dataWithColorInformation; +}; + +$(function() { + $("#gpa-chart").highcharts( + { + chart: { + type: 'pie', + events: { + load: addTitle, + redraw: addTitle, + }, + }, + title: { + text: "", + useHTML: true + }, + plotOptions: { + pie: { + shadow: false + } + }, + tooltip: { + formatter: function() { + return ''+ this.point.name +': '+ this.y +' %'; + } + }, + series: [{ + name: 'Browsers', + data: getGpaData(), + size: '90%', + innerSize: '65%', + showInLegend:true, + dataLabels: { + enabled: false + } + }] + }); +}); + +function addTitle() { + if (this.title) { + this.title.destroy(); + } + var r = this.renderer, + x = this.series[0].center[0] + this.plotLeft, + y = this.series[0].center[1] + this.plotTop; + this.title = r.label(''+score.toFixed(2)+'/100', 0, 0, "", 0, 0, true) + .css({ + color: 'black' + }).hide().add(); + var bbox = this.title.getBBox(); + this.title.attr({ + x: x - (bbox.width / 2), + y: y + }).show(); + this.title.useHTML = true; +}; + +function getGpaData(){ + var ratingACount = getRatingWiseCount("A"); + var ratingBCount = getRatingWiseCount("B"); + var ratingCCount = getRatingWiseCount("C"); + var ratingDCount = getRatingWiseCount("D"); + var ratingFCount = getRatingWiseCount("F"); + var total = ratingACount + ratingBCount + ratingCCount + ratingDCount + ratingFCount; + return [ + {name: 'A', y: parseFloat(calculatePercentage(ratingACount, total).toFixed(2)), color: COLOR['A']}, + {name: 'B', y: parseFloat(calculatePercentage(ratingBCount, total).toFixed(2)), color: COLOR['B']}, + {name: 'C', y: parseFloat(calculatePercentage(ratingCCount, total).toFixed(2)), color: COLOR['C']}, + {name: 'D', y: parseFloat(calculatePercentage(ratingDCount, total).toFixed(2)), color: COLOR['D']}, + {name: 'F', y: parseFloat(calculatePercentage(ratingFCount, total).toFixed(2)), color: COLOR['F']}, + ]; +}; + +function calculatePercentage(gradeCount, total){ + return (gradeCount/total)*100; +}; + +function getRatingWiseCount(rating){ + var count = 0; + turbulenceData.forEach(function(data, index){ + if(data.rating === rating){ + count++; + } + }); + return count; +}; + +function emphasizeLineFromFragment() { + emphasizeLine(window.location.hash) +} + +$(".js-file-code").on("click", ".js-smell-location", emphasizeLineFromHref); + +function emphasizeLineFromHref(event) { + if (hrefTargetIsOnCurrentPage(this) && !event.ctrlKey) { + $(".js-file-code li").removeClass("highlight"); + var lineId = "#" + this.href.split("#")[1]; + emphasizeLine(lineId); + return false; + } +} + +function hrefTargetIsOnCurrentPage(aTag) { + return (window.location.pathname === aTag.pathname); +} + +function emphasizeLine(lineReference) { + scrollToTarget(lineReference); + highlightLine(lineReference); +} + +function scrollToTarget(lineReference) { + window.location.hash = lineReference; + $.scrollTo(lineReference, { + duration: 300, + easing: "linear", + offset: {top: -87}, + axis: 'y' + }); +} + +function highlightLine(lineReference) { + $(lineReference).addClass("highlight"); +} + +$("#toggle-code").on("click", showCode); +$("#toggle-smells").on("click", showSmells); +$("#toggle-coverage").on("click", showCoverage); + +function showCode() { + $('#toggle-code').parent('li').addClass('active'); + $('#toggle-smells').parent('li').removeClass('active'); + $('#toggle-coverage').parent('li').removeClass('active'); + $(".smells").hide(); +} + +function showSmells() { + $('#toggle-code').parent('li').removeClass('active'); + $('#toggle-coverage').parent('li').removeClass('active'); + $('#toggle-smells').parent('li').addClass('active'); + $(".smells").show(); +} + +function showCoverage() { + $('#toggle-code').parent('li').removeClass('active'); + $('#toggle-smells').parent('li').removeClass('active'); + $('#toggle-coverage').parent('li').addClass('active'); + $(".coverage").show(); +} + +$("#codeTable") + .tablesorter({ // Sort the table + sortList: [[0,1]] + }); + +$("#js-index-table") + .tablesorter({ // Sort the table + sortList: [[0,0]] + }); + +$(".js-timeago").timeago(); + +$(function(){ + $('.table-header').click(function(){ + $('.table-header').not(this).each(function(){ + $(this).removeClass('active'); + $(this).find('.sort-type').removeClass('table-header-asc'); + $(this).find('.sort-type').removeClass('table-header-desc'); + }); + if($(this).hasClass('active')){ + $(this).find('.sort-type').toggleClass('table-header-asc table-header-desc'); + } + else{ + $(this).addClass('active'); + $(this).find('.sort-type').addClass('table-header-asc'); + } + }); +}); + +function assignIdsToCodeLines(){ + $($('.linenums')[1]).children().each(function(index){ + $(this).attr('id', "L" + index) + }); +}; + +$(document).ready(function(){ + assignIdsToCodeLines(); + emphasizeLineFromFragment(); + initTableFilters(); +}); + +var initTableFilters = function() { + $("#codeTable").filterTable({ignoreColumns: [2], placeholder: 'Filter by Name'}); + $("#js-index-table").filterTable({ignoreColumns: [2, 3, 4, 5], placeholder: 'Filter by Smell or Location', inputSelector: 'form-control'}); +} diff --git a/ABC_Score/assets/javascripts/bootstrap.min.js b/ABC_Score/assets/javascripts/bootstrap.min.js new file mode 100755 index 00000000..9bcd2fcc --- /dev/null +++ b/ABC_Score/assets/javascripts/bootstrap.min.js @@ -0,0 +1,7 @@ +/*! + * Bootstrap v3.3.7 (http://getbootstrap.com) + * Copyright 2011-2016 Twitter, Inc. + * Licensed under the MIT license + */ +if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){"use strict";var b=a.fn.jquery.split(" ")[0].split(".");if(b[0]<2&&b[1]<9||1==b[0]&&9==b[1]&&b[2]<1||b[0]>3)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4")}(jQuery),+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one("bsTransitionEnd",function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b(),a.support.transition&&(a.event.special.bsTransitionEnd={bindType:a.support.transition.end,delegateType:a.support.transition.end,handle:function(b){if(a(b.target).is(this))return b.handleObj.handler.apply(this,arguments)}})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var c=a(this),e=c.data("bs.alert");e||c.data("bs.alert",e=new d(this)),"string"==typeof b&&e[b].call(c)})}var c='[data-dismiss="alert"]',d=function(b){a(b).on("click",c,this.close)};d.VERSION="3.3.7",d.TRANSITION_DURATION=150,d.prototype.close=function(b){function c(){g.detach().trigger("closed.bs.alert").remove()}var e=a(this),f=e.attr("data-target");f||(f=e.attr("href"),f=f&&f.replace(/.*(?=#[^\s]*$)/,""));var g=a("#"===f?[]:f);b&&b.preventDefault(),g.length||(g=e.closest(".alert")),g.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(g.removeClass("in"),a.support.transition&&g.hasClass("fade")?g.one("bsTransitionEnd",c).emulateTransitionEnd(d.TRANSITION_DURATION):c())};var e=a.fn.alert;a.fn.alert=b,a.fn.alert.Constructor=d,a.fn.alert.noConflict=function(){return a.fn.alert=e,this},a(document).on("click.bs.alert.data-api",c,d.prototype.close)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof b&&b;e||d.data("bs.button",e=new c(this,f)),"toggle"==b?e.toggle():b&&e.setState(b)})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.isLoading=!1};c.VERSION="3.3.7",c.DEFAULTS={loadingText:"loading..."},c.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",null==f.resetText&&d.data("resetText",d[e]()),setTimeout(a.proxy(function(){d[e](null==f[b]?this.options[b]:f[b]),"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c).prop(c,!0)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c).prop(c,!1))},this),0)},c.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")?(c.prop("checked")&&(a=!1),b.find(".active").removeClass("active"),this.$element.addClass("active")):"checkbox"==c.prop("type")&&(c.prop("checked")!==this.$element.hasClass("active")&&(a=!1),this.$element.toggleClass("active")),c.prop("checked",this.$element.hasClass("active")),a&&c.trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active")),this.$element.toggleClass("active")};var d=a.fn.button;a.fn.button=b,a.fn.button.Constructor=c,a.fn.button.noConflict=function(){return a.fn.button=d,this},a(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(c){var d=a(c.target).closest(".btn");b.call(d,"toggle"),a(c.target).is('input[type="radio"], input[type="checkbox"]')||(c.preventDefault(),d.is("input,button")?d.trigger("focus"):d.find("input:visible,button:visible").first().trigger("focus"))}).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',function(b){a(b.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(b.type))})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b),g="string"==typeof b?b:f.slide;e||d.data("bs.carousel",e=new c(this,f)),"number"==typeof b?e.to(b):g?e[g]():f.interval&&e.pause().cycle()})}var c=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=null,this.sliding=null,this.interval=null,this.$active=null,this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",a.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.carousel",a.proxy(this.pause,this)).on("mouseleave.bs.carousel",a.proxy(this.cycle,this))};c.VERSION="3.3.7",c.TRANSITION_DURATION=600,c.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},c.prototype.keydown=function(a){if(!/input|textarea/i.test(a.target.tagName)){switch(a.which){case 37:this.prev();break;case 39:this.next();break;default:return}a.preventDefault()}},c.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},c.prototype.getItemIndex=function(a){return this.$items=a.parent().children(".item"),this.$items.index(a||this.$active)},c.prototype.getItemForDirection=function(a,b){var c=this.getItemIndex(b),d="prev"==a&&0===c||"next"==a&&c==this.$items.length-1;if(d&&!this.options.wrap)return b;var e="prev"==a?-1:1,f=(c+e)%this.$items.length;return this.$items.eq(f)},c.prototype.to=function(a){var b=this,c=this.getItemIndex(this.$active=this.$element.find(".item.active"));if(!(a>this.$items.length-1||a<0))return this.sliding?this.$element.one("slid.bs.carousel",function(){b.to(a)}):c==a?this.pause().cycle():this.slide(a>c?"next":"prev",this.$items.eq(a))},c.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){if(!this.sliding)return this.slide("next")},c.prototype.prev=function(){if(!this.sliding)return this.slide("prev")},c.prototype.slide=function(b,d){var e=this.$element.find(".item.active"),f=d||this.getItemForDirection(b,e),g=this.interval,h="next"==b?"left":"right",i=this;if(f.hasClass("active"))return this.sliding=!1;var j=f[0],k=a.Event("slide.bs.carousel",{relatedTarget:j,direction:h});if(this.$element.trigger(k),!k.isDefaultPrevented()){if(this.sliding=!0,g&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var l=a(this.$indicators.children()[this.getItemIndex(f)]);l&&l.addClass("active")}var m=a.Event("slid.bs.carousel",{relatedTarget:j,direction:h});return a.support.transition&&this.$element.hasClass("slide")?(f.addClass(b),f[0].offsetWidth,e.addClass(h),f.addClass(h),e.one("bsTransitionEnd",function(){f.removeClass([b,h].join(" ")).addClass("active"),e.removeClass(["active",h].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger(m)},0)}).emulateTransitionEnd(c.TRANSITION_DURATION)):(e.removeClass("active"),f.addClass("active"),this.sliding=!1,this.$element.trigger(m)),g&&this.cycle(),this}};var d=a.fn.carousel;a.fn.carousel=b,a.fn.carousel.Constructor=c,a.fn.carousel.noConflict=function(){return a.fn.carousel=d,this};var e=function(c){var d,e=a(this),f=a(e.attr("data-target")||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""));if(f.hasClass("carousel")){var g=a.extend({},f.data(),e.data()),h=e.attr("data-slide-to");h&&(g.interval=!1),b.call(f,g),h&&f.data("bs.carousel").to(h),c.preventDefault()}};a(document).on("click.bs.carousel.data-api","[data-slide]",e).on("click.bs.carousel.data-api","[data-slide-to]",e),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var c=a(this);b.call(c,c.data())})})}(jQuery),+function(a){"use strict";function b(b){var c,d=b.attr("data-target")||(c=b.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,"");return a(d)}function c(b){return this.each(function(){var c=a(this),e=c.data("bs.collapse"),f=a.extend({},d.DEFAULTS,c.data(),"object"==typeof b&&b);!e&&f.toggle&&/show|hide/.test(b)&&(f.toggle=!1),e||c.data("bs.collapse",e=new d(this,f)),"string"==typeof b&&e[b]()})}var d=function(b,c){this.$element=a(b),this.options=a.extend({},d.DEFAULTS,c),this.$trigger=a('[data-toggle="collapse"][href="#'+b.id+'"],[data-toggle="collapse"][data-target="#'+b.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};d.VERSION="3.3.7",d.TRANSITION_DURATION=350,d.DEFAULTS={toggle:!0},d.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},d.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var b,e=this.$parent&&this.$parent.children(".panel").children(".in, .collapsing");if(!(e&&e.length&&(b=e.data("bs.collapse"),b&&b.transitioning))){var f=a.Event("show.bs.collapse");if(this.$element.trigger(f),!f.isDefaultPrevented()){e&&e.length&&(c.call(e,"hide"),b||e.data("bs.collapse",null));var g=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[g](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var h=function(){this.$element.removeClass("collapsing").addClass("collapse in")[g](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return h.call(this);var i=a.camelCase(["scroll",g].join("-"));this.$element.one("bsTransitionEnd",a.proxy(h,this)).emulateTransitionEnd(d.TRANSITION_DURATION)[g](this.$element[0][i])}}}},d.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var e=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};return a.support.transition?void this.$element[c](0).one("bsTransitionEnd",a.proxy(e,this)).emulateTransitionEnd(d.TRANSITION_DURATION):e.call(this)}}},d.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},d.prototype.getParent=function(){return a(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(a.proxy(function(c,d){var e=a(d);this.addAriaAndCollapsedClass(b(e),e)},this)).end()},d.prototype.addAriaAndCollapsedClass=function(a,b){var c=a.hasClass("in");a.attr("aria-expanded",c),b.toggleClass("collapsed",!c).attr("aria-expanded",c)};var e=a.fn.collapse;a.fn.collapse=c,a.fn.collapse.Constructor=d,a.fn.collapse.noConflict=function(){return a.fn.collapse=e,this},a(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(d){var e=a(this);e.attr("data-target")||d.preventDefault();var f=b(e),g=f.data("bs.collapse"),h=g?"toggle":e.data();c.call(f,h)})}(jQuery),+function(a){"use strict";function b(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}function c(c){c&&3===c.which||(a(e).remove(),a(f).each(function(){var d=a(this),e=b(d),f={relatedTarget:this};e.hasClass("open")&&(c&&"click"==c.type&&/input|textarea/i.test(c.target.tagName)&&a.contains(e[0],c.target)||(e.trigger(c=a.Event("hide.bs.dropdown",f)),c.isDefaultPrevented()||(d.attr("aria-expanded","false"),e.removeClass("open").trigger(a.Event("hidden.bs.dropdown",f)))))}))}function d(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new g(this)),"string"==typeof b&&d[b].call(c)})}var e=".dropdown-backdrop",f='[data-toggle="dropdown"]',g=function(b){a(b).on("click.bs.dropdown",this.toggle)};g.VERSION="3.3.7",g.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=b(e),g=f.hasClass("open");if(c(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a(document.createElement("div")).addClass("dropdown-backdrop").insertAfter(a(this)).on("click",c);var h={relatedTarget:this};if(f.trigger(d=a.Event("show.bs.dropdown",h)),d.isDefaultPrevented())return;e.trigger("focus").attr("aria-expanded","true"),f.toggleClass("open").trigger(a.Event("shown.bs.dropdown",h))}return!1}},g.prototype.keydown=function(c){if(/(38|40|27|32)/.test(c.which)&&!/input|textarea/i.test(c.target.tagName)){var d=a(this);if(c.preventDefault(),c.stopPropagation(),!d.is(".disabled, :disabled")){var e=b(d),g=e.hasClass("open");if(!g&&27!=c.which||g&&27==c.which)return 27==c.which&&e.find(f).trigger("focus"),d.trigger("click");var h=" li:not(.disabled):visible a",i=e.find(".dropdown-menu"+h);if(i.length){var j=i.index(c.target);38==c.which&&j>0&&j--,40==c.which&&jdocument.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&a?this.scrollbarWidth:"",paddingRight:this.bodyIsOverflowing&&!a?this.scrollbarWidth:""})},c.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:"",paddingRight:""})},c.prototype.checkScrollbar=function(){var a=window.innerWidth;if(!a){var b=document.documentElement.getBoundingClientRect();a=b.right-Math.abs(b.left)}this.bodyIsOverflowing=document.body.clientWidth

            • ',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},c.prototype.init=function(b,c,d){if(this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.$viewport=this.options.viewport&&a(a.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):this.options.viewport.selector||this.options.viewport),this.inState={click:!1,hover:!1,focus:!1},this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error("`selector` option must be specified when initializing "+this.type+" on the window.document object!");for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focusin",i="hover"==g?"mouseleave":"focusout";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},c.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},c.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),b instanceof a.Event&&(c.inState["focusin"==b.type?"focus":"hover"]=!0),c.tip().hasClass("in")||"in"==c.hoverState?void(c.hoverState="in"):(clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show)):c.show())},c.prototype.isInStateTrue=function(){for(var a in this.inState)if(this.inState[a])return!0;return!1},c.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);if(c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),b instanceof a.Event&&(c.inState["focusout"==b.type?"focus":"hover"]=!1),!c.isInStateTrue())return clearTimeout(c.timeout),c.hoverState="out",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide()},c.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(b);var d=a.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(b.isDefaultPrevented()||!d)return;var e=this,f=this.tip(),g=this.getUID(this.type);this.setContent(),f.attr("id",g),this.$element.attr("aria-describedby",g),this.options.animation&&f.addClass("fade");var h="function"==typeof this.options.placement?this.options.placement.call(this,f[0],this.$element[0]):this.options.placement,i=/\s?auto?\s?/i,j=i.test(h);j&&(h=h.replace(i,"")||"top"),f.detach().css({top:0,left:0,display:"block"}).addClass(h).data("bs."+this.type,this),this.options.container?f.appendTo(this.options.container):f.insertAfter(this.$element),this.$element.trigger("inserted.bs."+this.type);var k=this.getPosition(),l=f[0].offsetWidth,m=f[0].offsetHeight;if(j){var n=h,o=this.getPosition(this.$viewport);h="bottom"==h&&k.bottom+m>o.bottom?"top":"top"==h&&k.top-mo.width?"left":"left"==h&&k.left-lg.top+g.height&&(e.top=g.top+g.height-i)}else{var j=b.left-f,k=b.left+f+c;jg.right&&(e.left=g.left+g.width-k)}return e},c.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[0]):c.title)},c.prototype.getUID=function(a){do a+=~~(1e6*Math.random());while(document.getElementById(a));return a},c.prototype.tip=function(){if(!this.$tip&&(this.$tip=a(this.options.template),1!=this.$tip.length))throw new Error(this.type+" `template` option must consist of exactly 1 top-level element!");return this.$tip},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},c.prototype.enable=function(){this.enabled=!0},c.prototype.disable=function(){this.enabled=!1},c.prototype.toggleEnabled=function(){this.enabled=!this.enabled},c.prototype.toggle=function(b){var c=this;b&&(c=a(b.currentTarget).data("bs."+this.type),c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c))),b?(c.inState.click=!c.inState.click,c.isInStateTrue()?c.enter(c):c.leave(c)):c.tip().hasClass("in")?c.leave(c):c.enter(c)},c.prototype.destroy=function(){var a=this;clearTimeout(this.timeout),this.hide(function(){a.$element.off("."+a.type).removeData("bs."+a.type),a.$tip&&a.$tip.detach(),a.$tip=null,a.$arrow=null,a.$viewport=null,a.$element=null})};var d=a.fn.tooltip;a.fn.tooltip=b,a.fn.tooltip.Constructor=c,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=d,this}}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof b&&b;!e&&/destroy|hide/.test(b)||(e||d.data("bs.popover",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");c.VERSION="3.3.7",c.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:''}),c.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),c.prototype.constructor=c,c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content").children().detach().end()[this.options.html?"string"==typeof c?"html":"append":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},c.prototype.hasContent=function(){return this.getTitle()||this.getContent()},c.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")};var d=a.fn.popover;a.fn.popover=b,a.fn.popover.Constructor=c,a.fn.popover.noConflict=function(){return a.fn.popover=d,this}}(jQuery),+function(a){"use strict";function b(c,d){this.$body=a(document.body),this.$scrollElement=a(a(c).is(document.body)?window:c),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",a.proxy(this.process,this)),this.refresh(),this.process()}function c(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})}b.VERSION="3.3.7",b.DEFAULTS={offset:10},b.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},b.prototype.refresh=function(){var b=this,c="offset",d=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),a.isWindow(this.$scrollElement[0])||(c="position",d=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var b=a(this),e=b.data("target")||b.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[c]().top+d,e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){b.offsets.push(this[0]),b.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.getScrollHeight(),d=this.options.offset+c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(this.scrollHeight!=c&&this.refresh(),b>=d)return g!=(a=f[f.length-1])&&this.activate(a);if(g&&b=e[a]&&(void 0===e[a+1]||b .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),b.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),h?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu").length&&b.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),e&&e()}var g=d.find("> .active"),h=e&&a.support.transition&&(g.length&&g.hasClass("fade")||!!d.find("> .fade").length);g.length&&h?g.one("bsTransitionEnd",f).emulateTransitionEnd(c.TRANSITION_DURATION):f(),g.removeClass("in")};var d=a.fn.tab;a.fn.tab=b,a.fn.tab.Constructor=c,a.fn.tab.noConflict=function(){return a.fn.tab=d,this};var e=function(c){c.preventDefault(),b.call(a(this),"show")};a(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',e).on("click.bs.tab.data-api",'[data-toggle="pill"]',e)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof b&&b;e||d.data("bs.affix",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.options=a.extend({},c.DEFAULTS,d),this.$target=a(this.options.target).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(b),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};c.VERSION="3.3.7",c.RESET="affix affix-top affix-bottom",c.DEFAULTS={offset:0,target:window},c.prototype.getState=function(a,b,c,d){var e=this.$target.scrollTop(),f=this.$element.offset(),g=this.$target.height();if(null!=c&&"top"==this.affixed)return e=a-d&&"bottom"},c.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(c.RESET).addClass("affix");var a=this.$target.scrollTop(),b=this.$element.offset();return this.pinnedOffset=b.top-a},c.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},c.prototype.checkPosition=function(){if(this.$element.is(":visible")){var b=this.$element.height(),d=this.options.offset,e=d.top,f=d.bottom,g=Math.max(a(document).height(),a(document.body).height());"object"!=typeof d&&(f=e=d),"function"==typeof e&&(e=d.top(this.$element)),"function"==typeof f&&(f=d.bottom(this.$element));var h=this.getState(g,b,e,f);if(this.affixed!=h){null!=this.unpin&&this.$element.css("top","");var i="affix"+(h?"-"+h:""),j=a.Event(i+".bs.affix");if(this.$element.trigger(j),j.isDefaultPrevented())return;this.affixed=h,this.unpin="bottom"==h?this.getPinnedOffset():null,this.$element.removeClass(c.RESET).addClass(i).trigger(i.replace("affix","affixed")+".bs.affix")}"bottom"==h&&this.$element.offset({top:g-b-f})}};var d=a.fn.affix;a.fn.affix=b,a.fn.affix.Constructor=c,a.fn.affix.noConflict=function(){return a.fn.affix=d,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var c=a(this),d=c.data();d.offset=d.offset||{},null!=d.offsetBottom&&(d.offset.bottom=d.offsetBottom),null!=d.offsetTop&&(d.offset.top=d.offsetTop),b.call(c,d)})})}(jQuery); \ No newline at end of file diff --git a/ABC_Score/assets/javascripts/highcharts.src-4.0.1.js b/ABC_Score/assets/javascripts/highcharts.src-4.0.1.js new file mode 100644 index 00000000..9e063bd7 --- /dev/null +++ b/ABC_Score/assets/javascripts/highcharts.src-4.0.1.js @@ -0,0 +1,17672 @@ +// ==ClosureCompiler== +// @compilation_level SIMPLE_OPTIMIZATIONS + +/** + * @license Highcharts JS v4.0.1 (2014-04-24) + * + * (c) 2009-2014 Torstein Honsi + * + * License: www.highcharts.com/license + */ + +// JSLint options: +/*global Highcharts, document, window, navigator, setInterval, clearInterval, clearTimeout, setTimeout, location, jQuery, $, console, each, grep */ + +(function () { +// encapsulated variables +var UNDEFINED, + doc = document, + win = window, + math = Math, + mathRound = math.round, + mathFloor = math.floor, + mathCeil = math.ceil, + mathMax = math.max, + mathMin = math.min, + mathAbs = math.abs, + mathCos = math.cos, + mathSin = math.sin, + mathPI = math.PI, + deg2rad = mathPI * 2 / 360, + + + // some variables + userAgent = navigator.userAgent, + isOpera = win.opera, + isIE = /msie/i.test(userAgent) && !isOpera, + docMode8 = doc.documentMode === 8, + isWebKit = /AppleWebKit/.test(userAgent), + isFirefox = /Firefox/.test(userAgent), + isTouchDevice = /(Mobile|Android|Windows Phone)/.test(userAgent), + SVG_NS = 'http://www.w3.org/2000/svg', + hasSVG = !!doc.createElementNS && !!doc.createElementNS(SVG_NS, 'svg').createSVGRect, + hasBidiBug = isFirefox && parseInt(userAgent.split('Firefox/')[1], 10) < 4, // issue #38 + useCanVG = !hasSVG && !isIE && !!doc.createElement('canvas').getContext, + Renderer, + hasTouch, + symbolSizes = {}, + idCounter = 0, + garbageBin, + defaultOptions, + dateFormat, // function + globalAnimation, + pathAnim, + timeUnits, + noop = function () {}, + charts = [], + chartCount = 0, + PRODUCT = 'Highcharts', + VERSION = '4.0.1', + + // some constants for frequently used strings + DIV = 'div', + ABSOLUTE = 'absolute', + RELATIVE = 'relative', + HIDDEN = 'hidden', + PREFIX = 'highcharts-', + VISIBLE = 'visible', + PX = 'px', + NONE = 'none', + M = 'M', + L = 'L', + numRegex = /^[0-9]+$/, + NORMAL_STATE = '', + HOVER_STATE = 'hover', + SELECT_STATE = 'select', + MILLISECOND = 'millisecond', + SECOND = 'second', + MINUTE = 'minute', + HOUR = 'hour', + DAY = 'day', + WEEK = 'week', + MONTH = 'month', + YEAR = 'year', + + // Object for extending Axis + AxisPlotLineOrBandExtension, + + // constants for attributes + STROKE_WIDTH = 'stroke-width', + + // time methods, changed based on whether or not UTC is used + makeTime, + timezoneOffset, + getMinutes, + getHours, + getDay, + getDate, + getMonth, + getFullYear, + setMinutes, + setHours, + setDate, + setMonth, + setFullYear, + + + // lookup over the types and the associated classes + seriesTypes = {}; + +// The Highcharts namespace +var Highcharts = win.Highcharts = win.Highcharts ? error(16, true) : {}; + +/** + * Extend an object with the members of another + * @param {Object} a The object to be extended + * @param {Object} b The object to add to the first one + */ +function extend(a, b) { + var n; + if (!a) { + a = {}; + } + for (n in b) { + a[n] = b[n]; + } + return a; +} + +/** + * Deep merge two or more objects and return a third object. If the first argument is + * true, the contents of the second object is copied into the first object. + * Previously this function redirected to jQuery.extend(true), but this had two limitations. + * First, it deep merged arrays, which lead to workarounds in Highcharts. Second, + * it copied properties from extended prototypes. + */ +function merge() { + var i, + args = arguments, + len, + ret = {}, + doCopy = function (copy, original) { + var value, key; + + // An object is replacing a primitive + if (typeof copy !== 'object') { + copy = {}; + } + + for (key in original) { + if (original.hasOwnProperty(key)) { + value = original[key]; + + // Copy the contents of objects, but not arrays or DOM nodes + if (value && typeof value === 'object' && Object.prototype.toString.call(value) !== '[object Array]' + && key !== 'renderTo' && typeof value.nodeType !== 'number') { + copy[key] = doCopy(copy[key] || {}, value); + + // Primitives and arrays are copied over directly + } else { + copy[key] = original[key]; + } + } + } + return copy; + }; + + // If first argument is true, copy into the existing object. Used in setOptions. + if (args[0] === true) { + ret = args[1]; + args = Array.prototype.slice.call(args, 2); + } + + // For each argument, extend the return + len = args.length; + for (i = 0; i < len; i++) { + ret = doCopy(ret, args[i]); + } + + return ret; +} + +/** + * Take an array and turn into a hash with even number arguments as keys and odd numbers as + * values. Allows creating constants for commonly used style properties, attributes etc. + * Avoid it in performance critical situations like looping + */ +function hash() { + var i = 0, + args = arguments, + length = args.length, + obj = {}; + for (; i < length; i++) { + obj[args[i++]] = args[i]; + } + return obj; +} + +/** + * Shortcut for parseInt + * @param {Object} s + * @param {Number} mag Magnitude + */ +function pInt(s, mag) { + return parseInt(s, mag || 10); +} + +/** + * Check for string + * @param {Object} s + */ +function isString(s) { + return typeof s === 'string'; +} + +/** + * Check for object + * @param {Object} obj + */ +function isObject(obj) { + return typeof obj === 'object'; +} + +/** + * Check for array + * @param {Object} obj + */ +function isArray(obj) { + return Object.prototype.toString.call(obj) === '[object Array]'; +} + +/** + * Check for number + * @param {Object} n + */ +function isNumber(n) { + return typeof n === 'number'; +} + +function log2lin(num) { + return math.log(num) / math.LN10; +} +function lin2log(num) { + return math.pow(10, num); +} + +/** + * Remove last occurence of an item from an array + * @param {Array} arr + * @param {Mixed} item + */ +function erase(arr, item) { + var i = arr.length; + while (i--) { + if (arr[i] === item) { + arr.splice(i, 1); + break; + } + } + //return arr; +} + +/** + * Returns true if the object is not null or undefined. Like MooTools' $.defined. + * @param {Object} obj + */ +function defined(obj) { + return obj !== UNDEFINED && obj !== null; +} + +/** + * Set or get an attribute or an object of attributes. Can't use jQuery attr because + * it attempts to set expando properties on the SVG element, which is not allowed. + * + * @param {Object} elem The DOM element to receive the attribute(s) + * @param {String|Object} prop The property or an abject of key-value pairs + * @param {String} value The value if a single property is set + */ +function attr(elem, prop, value) { + var key, + ret; + + // if the prop is a string + if (isString(prop)) { + // set the value + if (defined(value)) { + elem.setAttribute(prop, value); + + // get the value + } else if (elem && elem.getAttribute) { // elem not defined when printing pie demo... + ret = elem.getAttribute(prop); + } + + // else if prop is defined, it is a hash of key/value pairs + } else if (defined(prop) && isObject(prop)) { + for (key in prop) { + elem.setAttribute(key, prop[key]); + } + } + return ret; +} +/** + * Check if an element is an array, and if not, make it into an array. Like + * MooTools' $.splat. + */ +function splat(obj) { + return isArray(obj) ? obj : [obj]; +} + + +/** + * Return the first value that is defined. Like MooTools' $.pick. + */ +function pick() { + var args = arguments, + i, + arg, + length = args.length; + for (i = 0; i < length; i++) { + arg = args[i]; + if (typeof arg !== 'undefined' && arg !== null) { + return arg; + } + } +} + +/** + * Set CSS on a given element + * @param {Object} el + * @param {Object} styles Style object with camel case property names + */ +function css(el, styles) { + if (isIE && !hasSVG) { // #2686 + if (styles && styles.opacity !== UNDEFINED) { + styles.filter = 'alpha(opacity=' + (styles.opacity * 100) + ')'; + } + } + extend(el.style, styles); +} + +/** + * Utility function to create element with attributes and styles + * @param {Object} tag + * @param {Object} attribs + * @param {Object} styles + * @param {Object} parent + * @param {Object} nopad + */ +function createElement(tag, attribs, styles, parent, nopad) { + var el = doc.createElement(tag); + if (attribs) { + extend(el, attribs); + } + if (nopad) { + css(el, {padding: 0, border: NONE, margin: 0}); + } + if (styles) { + css(el, styles); + } + if (parent) { + parent.appendChild(el); + } + return el; +} + +/** + * Extend a prototyped class by new members + * @param {Object} parent + * @param {Object} members + */ +function extendClass(parent, members) { + var object = function () {}; + object.prototype = new parent(); + extend(object.prototype, members); + return object; +} + +/** + * Format a number and return a string based on input settings + * @param {Number} number The input number to format + * @param {Number} decimals The amount of decimals + * @param {String} decPoint The decimal point, defaults to the one given in the lang options + * @param {String} thousandsSep The thousands separator, defaults to the one given in the lang options + */ +function numberFormat(number, decimals, decPoint, thousandsSep) { + var lang = defaultOptions.lang, + // http://kevin.vanzonneveld.net/techblog/article/javascript_equivalent_for_phps_number_format/ + n = +number || 0, + c = decimals === -1 ? + (n.toString().split('.')[1] || '').length : // preserve decimals + (isNaN(decimals = mathAbs(decimals)) ? 2 : decimals), + d = decPoint === undefined ? lang.decimalPoint : decPoint, + t = thousandsSep === undefined ? lang.thousandsSep : thousandsSep, + s = n < 0 ? "-" : "", + i = String(pInt(n = mathAbs(n).toFixed(c))), + j = i.length > 3 ? i.length % 3 : 0; + + return s + (j ? i.substr(0, j) + t : "") + i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + t) + + (c ? d + mathAbs(n - i).toFixed(c).slice(2) : ""); +} + +/** + * Pad a string to a given length by adding 0 to the beginning + * @param {Number} number + * @param {Number} length + */ +function pad(number, length) { + // Create an array of the remaining length +1 and join it with 0's + return new Array((length || 2) + 1 - String(number).length).join(0) + number; +} + +/** + * Wrap a method with extended functionality, preserving the original function + * @param {Object} obj The context object that the method belongs to + * @param {String} method The name of the method to extend + * @param {Function} func A wrapper function callback. This function is called with the same arguments + * as the original function, except that the original function is unshifted and passed as the first + * argument. + */ +function wrap(obj, method, func) { + var proceed = obj[method]; + obj[method] = function () { + var args = Array.prototype.slice.call(arguments); + args.unshift(proceed); + return func.apply(this, args); + }; +} + +/** + * Based on http://www.php.net/manual/en/function.strftime.php + * @param {String} format + * @param {Number} timestamp + * @param {Boolean} capitalize + */ +dateFormat = function (format, timestamp, capitalize) { + if (!defined(timestamp) || isNaN(timestamp)) { + return 'Invalid date'; + } + format = pick(format, '%Y-%m-%d %H:%M:%S'); + + var date = new Date(timestamp - timezoneOffset), + key, // used in for constuct below + // get the basic time values + hours = date[getHours](), + day = date[getDay](), + dayOfMonth = date[getDate](), + month = date[getMonth](), + fullYear = date[getFullYear](), + lang = defaultOptions.lang, + langWeekdays = lang.weekdays, + + // List all format keys. Custom formats can be added from the outside. + replacements = extend({ + + // Day + 'a': langWeekdays[day].substr(0, 3), // Short weekday, like 'Mon' + 'A': langWeekdays[day], // Long weekday, like 'Monday' + 'd': pad(dayOfMonth), // Two digit day of the month, 01 to 31 + 'e': dayOfMonth, // Day of the month, 1 through 31 + + // Week (none implemented) + //'W': weekNumber(), + + // Month + 'b': lang.shortMonths[month], // Short month, like 'Jan' + 'B': lang.months[month], // Long month, like 'January' + 'm': pad(month + 1), // Two digit month number, 01 through 12 + + // Year + 'y': fullYear.toString().substr(2, 2), // Two digits year, like 09 for 2009 + 'Y': fullYear, // Four digits year, like 2009 + + // Time + 'H': pad(hours), // Two digits hours in 24h format, 00 through 23 + 'I': pad((hours % 12) || 12), // Two digits hours in 12h format, 00 through 11 + 'l': (hours % 12) || 12, // Hours in 12h format, 1 through 12 + 'M': pad(date[getMinutes]()), // Two digits minutes, 00 through 59 + 'p': hours < 12 ? 'AM' : 'PM', // Upper case AM or PM + 'P': hours < 12 ? 'am' : 'pm', // Lower case AM or PM + 'S': pad(date.getSeconds()), // Two digits seconds, 00 through 59 + 'L': pad(mathRound(timestamp % 1000), 3) // Milliseconds (naming from Ruby) + }, Highcharts.dateFormats); + + + // do the replaces + for (key in replacements) { + while (format.indexOf('%' + key) !== -1) { // regex would do it in one line, but this is faster + format = format.replace('%' + key, typeof replacements[key] === 'function' ? replacements[key](timestamp) : replacements[key]); + } + } + + // Optionally capitalize the string and return + return capitalize ? format.substr(0, 1).toUpperCase() + format.substr(1) : format; +}; + +/** + * Format a single variable. Similar to sprintf, without the % prefix. + */ +function formatSingle(format, val) { + var floatRegex = /f$/, + decRegex = /\.([0-9])/, + lang = defaultOptions.lang, + decimals; + + if (floatRegex.test(format)) { // float + decimals = format.match(decRegex); + decimals = decimals ? decimals[1] : -1; + if (val !== null) { + val = numberFormat( + val, + decimals, + lang.decimalPoint, + format.indexOf(',') > -1 ? lang.thousandsSep : '' + ); + } + } else { + val = dateFormat(format, val); + } + return val; +} + +/** + * Format a string according to a subset of the rules of Python's String.format method. + */ +function format(str, ctx) { + var splitter = '{', + isInside = false, + segment, + valueAndFormat, + path, + i, + len, + ret = [], + val, + index; + + while ((index = str.indexOf(splitter)) !== -1) { + + segment = str.slice(0, index); + if (isInside) { // we're on the closing bracket looking back + + valueAndFormat = segment.split(':'); + path = valueAndFormat.shift().split('.'); // get first and leave format + len = path.length; + val = ctx; + + // Assign deeper paths + for (i = 0; i < len; i++) { + val = val[path[i]]; + } + + // Format the replacement + if (valueAndFormat.length) { + val = formatSingle(valueAndFormat.join(':'), val); + } + + // Push the result and advance the cursor + ret.push(val); + + } else { + ret.push(segment); + + } + str = str.slice(index + 1); // the rest + isInside = !isInside; // toggle + splitter = isInside ? '}' : '{'; // now look for next matching bracket + } + ret.push(str); + return ret.join(''); +} + +/** + * Get the magnitude of a number + */ +function getMagnitude(num) { + return math.pow(10, mathFloor(math.log(num) / math.LN10)); +} + +/** + * Take an interval and normalize it to multiples of 1, 2, 2.5 and 5 + * @param {Number} interval + * @param {Array} multiples + * @param {Number} magnitude + * @param {Object} options + */ +function normalizeTickInterval(interval, multiples, magnitude, options) { + var normalized, i; + + // round to a tenfold of 1, 2, 2.5 or 5 + magnitude = pick(magnitude, 1); + normalized = interval / magnitude; + + // multiples for a linear scale + if (!multiples) { + multiples = [1, 2, 2.5, 5, 10]; + + // the allowDecimals option + if (options && options.allowDecimals === false) { + if (magnitude === 1) { + multiples = [1, 2, 5, 10]; + } else if (magnitude <= 0.1) { + multiples = [1 / magnitude]; + } + } + } + + // normalize the interval to the nearest multiple + for (i = 0; i < multiples.length; i++) { + interval = multiples[i]; + if (normalized <= (multiples[i] + (multiples[i + 1] || multiples[i])) / 2) { + break; + } + } + + // multiply back to the correct magnitude + interval *= magnitude; + + return interval; +} + + +/** + * Helper class that contains variuos counters that are local to the chart. + */ +function ChartCounters() { + this.color = 0; + this.symbol = 0; +} + +ChartCounters.prototype = { + /** + * Wraps the color counter if it reaches the specified length. + */ + wrapColor: function (length) { + if (this.color >= length) { + this.color = 0; + } + }, + + /** + * Wraps the symbol counter if it reaches the specified length. + */ + wrapSymbol: function (length) { + if (this.symbol >= length) { + this.symbol = 0; + } + } +}; + + +/** + * Utility method that sorts an object array and keeping the order of equal items. + * ECMA script standard does not specify the behaviour when items are equal. + */ +function stableSort(arr, sortFunction) { + var length = arr.length, + sortValue, + i; + + // Add index to each item + for (i = 0; i < length; i++) { + arr[i].ss_i = i; // stable sort index + } + + arr.sort(function (a, b) { + sortValue = sortFunction(a, b); + return sortValue === 0 ? a.ss_i - b.ss_i : sortValue; + }); + + // Remove index from items + for (i = 0; i < length; i++) { + delete arr[i].ss_i; // stable sort index + } +} + +/** + * Non-recursive method to find the lowest member of an array. Math.min raises a maximum + * call stack size exceeded error in Chrome when trying to apply more than 150.000 points. This + * method is slightly slower, but safe. + */ +function arrayMin(data) { + var i = data.length, + min = data[0]; + + while (i--) { + if (data[i] < min) { + min = data[i]; + } + } + return min; +} + +/** + * Non-recursive method to find the lowest member of an array. Math.min raises a maximum + * call stack size exceeded error in Chrome when trying to apply more than 150.000 points. This + * method is slightly slower, but safe. + */ +function arrayMax(data) { + var i = data.length, + max = data[0]; + + while (i--) { + if (data[i] > max) { + max = data[i]; + } + } + return max; +} + +/** + * Utility method that destroys any SVGElement or VMLElement that are properties on the given object. + * It loops all properties and invokes destroy if there is a destroy method. The property is + * then delete'ed. + * @param {Object} The object to destroy properties on + * @param {Object} Exception, do not destroy this property, only delete it. + */ +function destroyObjectProperties(obj, except) { + var n; + for (n in obj) { + // If the object is non-null and destroy is defined + if (obj[n] && obj[n] !== except && obj[n].destroy) { + // Invoke the destroy + obj[n].destroy(); + } + + // Delete the property from the object. + delete obj[n]; + } +} + + +/** + * Discard an element by moving it to the bin and delete + * @param {Object} The HTML node to discard + */ +function discardElement(element) { + // create a garbage bin element, not part of the DOM + if (!garbageBin) { + garbageBin = createElement(DIV); + } + + // move the node and empty bin + if (element) { + garbageBin.appendChild(element); + } + garbageBin.innerHTML = ''; +} + +/** + * Provide error messages for debugging, with links to online explanation + */ +function error(code, stop) { + var msg = 'Highcharts error #' + code + ': www.highcharts.com/errors/' + code; + if (stop) { + throw msg; + } else if (win.console) { + console.log(msg); + } +} + +/** + * Fix JS round off float errors + * @param {Number} num + */ +function correctFloat(num) { + return parseFloat( + num.toPrecision(14) + ); +} + +/** + * Set the global animation to either a given value, or fall back to the + * given chart's animation option + * @param {Object} animation + * @param {Object} chart + */ +function setAnimation(animation, chart) { + globalAnimation = pick(animation, chart.animation); +} + +/** + * The time unit lookup + */ +/*jslint white: true*/ +timeUnits = hash( + MILLISECOND, 1, + SECOND, 1000, + MINUTE, 60000, + HOUR, 3600000, + DAY, 24 * 3600000, + WEEK, 7 * 24 * 3600000, + MONTH, 31 * 24 * 3600000, + YEAR, 31556952000 +); +/*jslint white: false*/ +/** + * Path interpolation algorithm used across adapters + */ +pathAnim = { + /** + * Prepare start and end values so that the path can be animated one to one + */ + init: function (elem, fromD, toD) { + fromD = fromD || ''; + var shift = elem.shift, + bezier = fromD.indexOf('C') > -1, + numParams = bezier ? 7 : 3, + endLength, + slice, + i, + start = fromD.split(' '), + end = [].concat(toD), // copy + startBaseLine, + endBaseLine, + sixify = function (arr) { // in splines make move points have six parameters like bezier curves + i = arr.length; + while (i--) { + if (arr[i] === M) { + arr.splice(i + 1, 0, arr[i + 1], arr[i + 2], arr[i + 1], arr[i + 2]); + } + } + }; + + if (bezier) { + sixify(start); + sixify(end); + } + + // pull out the base lines before padding + if (elem.isArea) { + startBaseLine = start.splice(start.length - 6, 6); + endBaseLine = end.splice(end.length - 6, 6); + } + + // if shifting points, prepend a dummy point to the end path + if (shift <= end.length / numParams && start.length === end.length) { + while (shift--) { + end = [].concat(end).splice(0, numParams).concat(end); + } + } + elem.shift = 0; // reset for following animations + + // copy and append last point until the length matches the end length + if (start.length) { + endLength = end.length; + while (start.length < endLength) { + + //bezier && sixify(start); + slice = [].concat(start).splice(start.length - numParams, numParams); + if (bezier) { // disable first control point + slice[numParams - 6] = slice[numParams - 2]; + slice[numParams - 5] = slice[numParams - 1]; + } + start = start.concat(slice); + } + } + + if (startBaseLine) { // append the base lines for areas + start = start.concat(startBaseLine); + end = end.concat(endBaseLine); + } + return [start, end]; + }, + + /** + * Interpolate each value of the path and return the array + */ + step: function (start, end, pos, complete) { + var ret = [], + i = start.length, + startVal; + + if (pos === 1) { // land on the final path without adjustment points appended in the ends + ret = complete; + + } else if (i === end.length && pos < 1) { + while (i--) { + startVal = parseFloat(start[i]); + ret[i] = + isNaN(startVal) ? // a letter instruction like M or L + start[i] : + pos * (parseFloat(end[i] - startVal)) + startVal; + + } + } else { // if animation is finished or length not matching, land on right value + ret = end; + } + return ret; + } +}; + +(function ($) { + /** + * The default HighchartsAdapter for jQuery + */ + win.HighchartsAdapter = win.HighchartsAdapter || ($ && { + + /** + * Initialize the adapter by applying some extensions to jQuery + */ + init: function (pathAnim) { + + // extend the animate function to allow SVG animations + var Fx = $.fx, + Step = Fx.step, + dSetter, + Tween = $.Tween, + propHooks = Tween && Tween.propHooks, + opacityHook = $.cssHooks.opacity; + + /*jslint unparam: true*//* allow unused param x in this function */ + $.extend($.easing, { + easeOutQuad: function (x, t, b, c, d) { + return -c * (t /= d) * (t - 2) + b; + } + }); + /*jslint unparam: false*/ + + // extend some methods to check for elem.attr, which means it is a Highcharts SVG object + $.each(['cur', '_default', 'width', 'height', 'opacity'], function (i, fn) { + var obj = Step, + base; + + // Handle different parent objects + if (fn === 'cur') { + obj = Fx.prototype; // 'cur', the getter, relates to Fx.prototype + + } else if (fn === '_default' && Tween) { // jQuery 1.8 model + obj = propHooks[fn]; + fn = 'set'; + } + + // Overwrite the method + base = obj[fn]; + if (base) { // step.width and step.height don't exist in jQuery < 1.7 + + // create the extended function replacement + obj[fn] = function (fx) { + + var elem; + + // Fx.prototype.cur does not use fx argument + fx = i ? fx : this; + + // Don't run animations on textual properties like align (#1821) + if (fx.prop === 'align') { + return; + } + + // shortcut + elem = fx.elem; + + // Fx.prototype.cur returns the current value. The other ones are setters + // and returning a value has no effect. + return elem.attr ? // is SVG element wrapper + elem.attr(fx.prop, fn === 'cur' ? UNDEFINED : fx.now) : // apply the SVG wrapper's method + base.apply(this, arguments); // use jQuery's built-in method + }; + } + }); + + // Extend the opacity getter, needed for fading opacity with IE9 and jQuery 1.10+ + wrap(opacityHook, 'get', function (proceed, elem, computed) { + return elem.attr ? (elem.opacity || 0) : proceed.call(this, elem, computed); + }); + + + // Define the setter function for d (path definitions) + dSetter = function (fx) { + var elem = fx.elem, + ends; + + // Normally start and end should be set in state == 0, but sometimes, + // for reasons unknown, this doesn't happen. Perhaps state == 0 is skipped + // in these cases + if (!fx.started) { + ends = pathAnim.init(elem, elem.d, elem.toD); + fx.start = ends[0]; + fx.end = ends[1]; + fx.started = true; + } + + + // interpolate each value of the path + elem.attr('d', pathAnim.step(fx.start, fx.end, fx.pos, elem.toD)); + }; + + // jQuery 1.8 style + if (Tween) { + propHooks.d = { + set: dSetter + }; + // pre 1.8 + } else { + // animate paths + Step.d = dSetter; + } + + /** + * Utility for iterating over an array. Parameters are reversed compared to jQuery. + * @param {Array} arr + * @param {Function} fn + */ + this.each = Array.prototype.forEach ? + function (arr, fn) { // modern browsers + return Array.prototype.forEach.call(arr, fn); + + } : + function (arr, fn) { // legacy + var i = 0, + len = arr.length; + for (; i < len; i++) { + if (fn.call(arr[i], arr[i], i, arr) === false) { + return i; + } + } + }; + + /** + * Register Highcharts as a plugin in the respective framework + */ + $.fn.highcharts = function () { + var constr = 'Chart', // default constructor + args = arguments, + options, + ret, + chart; + + if (this[0]) { + + if (isString(args[0])) { + constr = args[0]; + args = Array.prototype.slice.call(args, 1); + } + options = args[0]; + + // Create the chart + if (options !== UNDEFINED) { + /*jslint unused:false*/ + options.chart = options.chart || {}; + options.chart.renderTo = this[0]; + chart = new Highcharts[constr](options, args[1]); + ret = this; + /*jslint unused:true*/ + } + + // When called without parameters or with the return argument, get a predefined chart + if (options === UNDEFINED) { + ret = charts[attr(this[0], 'data-highcharts-chart')]; + } + } + + return ret; + }; + + }, + + + /** + * Downloads a script and executes a callback when done. + * @param {String} scriptLocation + * @param {Function} callback + */ + getScript: $.getScript, + + /** + * Return the index of an item in an array, or -1 if not found + */ + inArray: $.inArray, + + /** + * A direct link to jQuery methods. MooTools and Prototype adapters must be implemented for each case of method. + * @param {Object} elem The HTML element + * @param {String} method Which method to run on the wrapped element + */ + adapterRun: function (elem, method) { + return $(elem)[method](); + }, + + /** + * Filter an array + */ + grep: $.grep, + + /** + * Map an array + * @param {Array} arr + * @param {Function} fn + */ + map: function (arr, fn) { + //return jQuery.map(arr, fn); + var results = [], + i = 0, + len = arr.length; + for (; i < len; i++) { + results[i] = fn.call(arr[i], arr[i], i, arr); + } + return results; + + }, + + /** + * Get the position of an element relative to the top left of the page + */ + offset: function (el) { + return $(el).offset(); + }, + + /** + * Add an event listener + * @param {Object} el A HTML element or custom object + * @param {String} event The event type + * @param {Function} fn The event handler + */ + addEvent: function (el, event, fn) { + $(el).bind(event, fn); + }, + + /** + * Remove event added with addEvent + * @param {Object} el The object + * @param {String} eventType The event type. Leave blank to remove all events. + * @param {Function} handler The function to remove + */ + removeEvent: function (el, eventType, handler) { + // workaround for jQuery issue with unbinding custom events: + // http://forum.jQuery.com/topic/javascript-error-when-unbinding-a-custom-event-using-jQuery-1-4-2 + var func = doc.removeEventListener ? 'removeEventListener' : 'detachEvent'; + if (doc[func] && el && !el[func]) { + el[func] = function () {}; + } + + $(el).unbind(eventType, handler); + }, + + /** + * Fire an event on a custom object + * @param {Object} el + * @param {String} type + * @param {Object} eventArguments + * @param {Function} defaultFunction + */ + fireEvent: function (el, type, eventArguments, defaultFunction) { + var event = $.Event(type), + detachedType = 'detached' + type, + defaultPrevented; + + // Remove warnings in Chrome when accessing returnValue (#2790), layerX and layerY. Although Highcharts + // never uses these properties, Chrome includes them in the default click event and + // raises the warning when they are copied over in the extend statement below. + // + // To avoid problems in IE (see #1010) where we cannot delete the properties and avoid + // testing if they are there (warning in chrome) the only option is to test if running IE. + if (!isIE && eventArguments) { + delete eventArguments.layerX; + delete eventArguments.layerY; + delete eventArguments.returnValue; + } + + extend(event, eventArguments); + + // Prevent jQuery from triggering the object method that is named the + // same as the event. For example, if the event is 'select', jQuery + // attempts calling el.select and it goes into a loop. + if (el[type]) { + el[detachedType] = el[type]; + el[type] = null; + } + + // Wrap preventDefault and stopPropagation in try/catch blocks in + // order to prevent JS errors when cancelling events on non-DOM + // objects. #615. + /*jslint unparam: true*/ + $.each(['preventDefault', 'stopPropagation'], function (i, fn) { + var base = event[fn]; + event[fn] = function () { + try { + base.call(event); + } catch (e) { + if (fn === 'preventDefault') { + defaultPrevented = true; + } + } + }; + }); + /*jslint unparam: false*/ + + // trigger it + $(el).trigger(event); + + // attach the method + if (el[detachedType]) { + el[type] = el[detachedType]; + el[detachedType] = null; + } + + if (defaultFunction && !event.isDefaultPrevented() && !defaultPrevented) { + defaultFunction(event); + } + }, + + /** + * Extension method needed for MooTools + */ + washMouseEvent: function (e) { + var ret = e.originalEvent || e; + + // computed by jQuery, needed by IE8 + if (ret.pageX === UNDEFINED) { // #1236 + ret.pageX = e.pageX; + ret.pageY = e.pageY; + } + + return ret; + }, + + /** + * Animate a HTML element or SVG element wrapper + * @param {Object} el + * @param {Object} params + * @param {Object} options jQuery-like animation options: duration, easing, callback + */ + animate: function (el, params, options) { + var $el = $(el); + if (!el.style) { + el.style = {}; // #1881 + } + if (params.d) { + el.toD = params.d; // keep the array form for paths, used in $.fx.step.d + params.d = 1; // because in jQuery, animating to an array has a different meaning + } + + $el.stop(); + if (params.opacity !== UNDEFINED && el.attr) { + params.opacity += 'px'; // force jQuery to use same logic as width and height (#2161) + } + $el.animate(params, options); + + }, + /** + * Stop running animation + */ + stop: function (el) { + $(el).stop(); + } + }); +}(win.jQuery)); + + +// check for a custom HighchartsAdapter defined prior to this file +var globalAdapter = win.HighchartsAdapter, + adapter = globalAdapter || {}; + +// Initialize the adapter +if (globalAdapter) { + globalAdapter.init.call(globalAdapter, pathAnim); +} + + +// Utility functions. If the HighchartsAdapter is not defined, adapter is an empty object +// and all the utility functions will be null. In that case they are populated by the +// default adapters below. +var adapterRun = adapter.adapterRun, + getScript = adapter.getScript, + inArray = adapter.inArray, + each = adapter.each, + grep = adapter.grep, + offset = adapter.offset, + map = adapter.map, + addEvent = adapter.addEvent, + removeEvent = adapter.removeEvent, + fireEvent = adapter.fireEvent, + washMouseEvent = adapter.washMouseEvent, + animate = adapter.animate, + stop = adapter.stop; + + + +/* **************************************************************************** + * Handle the options * + *****************************************************************************/ +var + +defaultLabelOptions = { + enabled: true, + // rotation: 0, + // align: 'center', + x: 0, + y: 15, + /*formatter: function () { + return this.value; + },*/ + style: { + color: '#606060', + cursor: 'default', + fontSize: '11px' + } +}; + +defaultOptions = { + colors: ['#7cb5ec', '#434348', '#90ed7d', '#f7a35c', + '#8085e9', '#f15c80', '#e4d354', '#8085e8', '#8d4653', '#91e8e1'], // docs + symbols: ['circle', 'diamond', 'square', 'triangle', 'triangle-down'], + lang: { + loading: 'Loading...', + months: ['January', 'February', 'March', 'April', 'May', 'June', 'July', + 'August', 'September', 'October', 'November', 'December'], + shortMonths: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], + weekdays: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], + decimalPoint: '.', + numericSymbols: ['k', 'M', 'G', 'T', 'P', 'E'], // SI prefixes used in axis labels + resetZoom: 'Reset zoom', + resetZoomTitle: 'Reset zoom level 1:1', + thousandsSep: ',' + }, + global: { + useUTC: true, + //timezoneOffset: 0, + canvasToolsURL: 'http://code.highcharts.com/4.0.1/modules/canvas-tools.js', + VMLRadialGradientURL: 'http://code.highcharts.com/4.0.1/gfx/vml-radial-gradient.png' + }, + chart: { + //animation: true, + //alignTicks: false, + //reflow: true, + //className: null, + //events: { load, selection }, + //margin: [null], + //marginTop: null, + //marginRight: null, + //marginBottom: null, + //marginLeft: null, + borderColor: '#4572A7', + //borderWidth: 0, + borderRadius: 0, + defaultSeriesType: 'line', + ignoreHiddenSeries: true, + //inverted: false, + //shadow: false, + spacing: [10, 10, 15, 10], + //spacingTop: 10, + //spacingRight: 10, + //spacingBottom: 15, + //spacingLeft: 10, + //style: { + // fontFamily: '"Lucida Grande", "Lucida Sans Unicode", Verdana, Arial, Helvetica, sans-serif', // default font + // fontSize: '12px' + //}, + backgroundColor: '#FFFFFF', + //plotBackgroundColor: null, + plotBorderColor: '#C0C0C0', + //plotBorderWidth: 0, + //plotShadow: false, + //zoomType: '' + resetZoomButton: { + theme: { + zIndex: 20 + }, + position: { + align: 'right', + x: -10, + //verticalAlign: 'top', + y: 10 + } + // relativeTo: 'plot' + } + }, + title: { + text: 'Chart title', + align: 'center', + // floating: false, + margin: 15, + // x: 0, + // verticalAlign: 'top', + // y: null, + style: { + color: '#333333', // docs + fontSize: '18px' + } + + }, + subtitle: { + text: '', + align: 'center', + // floating: false + // x: 0, + // verticalAlign: 'top', + // y: null, + style: { + color: '#555555' // docs + } + }, + + plotOptions: { + line: { // base series options + allowPointSelect: false, + showCheckbox: false, + animation: { + duration: 1000 + }, + //connectNulls: false, + //cursor: 'default', + //clip: true, + //dashStyle: null, + //enableMouseTracking: true, + events: {}, + //legendIndex: 0, + //linecap: 'round', + lineWidth: 2, + //shadow: false, + // stacking: null, + marker: { + //enabled: true, + //symbol: null, + lineWidth: 0, + radius: 4, + lineColor: '#FFFFFF', + //fillColor: null, + states: { // states for a single point + hover: { + enabled: true + //radius: base + 2 + }, + select: { + fillColor: '#FFFFFF', + lineColor: '#000000', + lineWidth: 2 + } + } + }, + point: { + events: {} + }, + dataLabels: merge(defaultLabelOptions, { + align: 'center', + //defer: true, + enabled: false, + formatter: function () { + return this.y === null ? '' : numberFormat(this.y, -1); + }, + verticalAlign: 'bottom', // above singular point + y: 0 + // backgroundColor: undefined, + // borderColor: undefined, + // borderRadius: undefined, + // borderWidth: undefined, + // padding: 3, + // shadow: false + }), + cropThreshold: 300, // draw points outside the plot area when the number of points is less than this + pointRange: 0, + //pointStart: 0, + //pointInterval: 1, + //showInLegend: null, // auto: true for standalone series, false for linked series + states: { // states for the entire series + hover: { + //enabled: false, + //lineWidth: base + 1, + marker: { + // lineWidth: base + 1, + // radius: base + 1 + }, + halo: { + size: 10, + opacity: 0.25 + } + }, + select: { + marker: {} + } + }, + stickyTracking: true, + //tooltip: { + //pointFormat: '\u25CF {series.name}: {point.y}' + //valueDecimals: null, + //xDateFormat: '%A, %b %e, %Y', + //valuePrefix: '', + //ySuffix: '' + //} + turboThreshold: 1000 + // zIndex: null + } + }, + labels: { + //items: [], + style: { + //font: defaultFont, + position: ABSOLUTE, + color: '#3E576F' + } + }, + legend: { + enabled: true, + align: 'center', + //floating: false, + layout: 'horizontal', + labelFormatter: function () { + return this.name; + }, + //borderWidth: 0, + borderColor: '#909090', + borderRadius: 0, // docs + navigation: { + // animation: true, + activeColor: '#274b6d', + // arrowSize: 12 + inactiveColor: '#CCC' + // style: {} // text styles + }, + // margin: 20, + // reversed: false, + shadow: false, + // backgroundColor: null, + /*style: { + padding: '5px' + },*/ + itemStyle: { + color: '#333333', // docs + fontSize: '12px', + fontWeight: 'bold' // docs + }, + itemHoverStyle: { + //cursor: 'pointer', removed as of #601 + color: '#000' + }, + itemHiddenStyle: { + color: '#CCC' + }, + itemCheckboxStyle: { + position: ABSOLUTE, + width: '13px', // for IE precision + height: '13px' + }, + // itemWidth: undefined, + // symbolRadius: 0, + // symbolWidth: 16, + symbolPadding: 5, + verticalAlign: 'bottom', + // width: undefined, + x: 0, + y: 0, + title: { + //text: null, + style: { + fontWeight: 'bold' + } + } + }, + + loading: { + // hideDuration: 100, + labelStyle: { + fontWeight: 'bold', + position: RELATIVE, + top: '1em' + }, + // showDuration: 0, + style: { + position: ABSOLUTE, + backgroundColor: 'white', + opacity: 0.5, + textAlign: 'center' + } + }, + + tooltip: { + enabled: true, + animation: hasSVG, + //crosshairs: null, + backgroundColor: 'rgba(249, 249, 249, .85)', + borderWidth: 1, + borderRadius: 3, + dateTimeLabelFormats: { + millisecond: '%A, %b %e, %H:%M:%S.%L', + second: '%A, %b %e, %H:%M:%S', + minute: '%A, %b %e, %H:%M', + hour: '%A, %b %e, %H:%M', + day: '%A, %b %e, %Y', + week: 'Week from %A, %b %e, %Y', + month: '%B %Y', + year: '%Y' + }, + //formatter: defaultFormatter, + headerFormat: '{point.key}
              ', + pointFormat: '\u25CF {series.name}: {point.y}
              ', // docs + shadow: true, + //shape: 'calout', + //shared: false, + snap: isTouchDevice ? 25 : 10, + style: { + color: '#333333', + cursor: 'default', + fontSize: '12px', + padding: '8px', + whiteSpace: 'nowrap' + } + //xDateFormat: '%A, %b %e, %Y', + //valueDecimals: null, + //valuePrefix: '', + //valueSuffix: '' + }, + + credits: { + enabled: true, + text: 'Highcharts.com', + href: 'http://www.highcharts.com', + position: { + align: 'right', + x: -10, + verticalAlign: 'bottom', + y: -5 + }, + style: { + cursor: 'pointer', + color: '#909090', + fontSize: '9px' + } + } +}; + + + + +// Series defaults +var defaultPlotOptions = defaultOptions.plotOptions, + defaultSeriesOptions = defaultPlotOptions.line; + +// set the default time methods +setTimeMethods(); + + + +/** + * Set the time methods globally based on the useUTC option. Time method can be either + * local time or UTC (default). + */ +function setTimeMethods() { + var useUTC = defaultOptions.global.useUTC, + GET = useUTC ? 'getUTC' : 'get', + SET = useUTC ? 'setUTC' : 'set'; + + + timezoneOffset = ((useUTC && defaultOptions.global.timezoneOffset) || 0) * 60000; + makeTime = useUTC ? Date.UTC : function (year, month, date, hours, minutes, seconds) { + return new Date( + year, + month, + pick(date, 1), + pick(hours, 0), + pick(minutes, 0), + pick(seconds, 0) + ).getTime(); + }; + getMinutes = GET + 'Minutes'; + getHours = GET + 'Hours'; + getDay = GET + 'Day'; + getDate = GET + 'Date'; + getMonth = GET + 'Month'; + getFullYear = GET + 'FullYear'; + setMinutes = SET + 'Minutes'; + setHours = SET + 'Hours'; + setDate = SET + 'Date'; + setMonth = SET + 'Month'; + setFullYear = SET + 'FullYear'; + +} + +/** + * Merge the default options with custom options and return the new options structure + * @param {Object} options The new custom options + */ +function setOptions(options) { + + // Copy in the default options + defaultOptions = merge(true, defaultOptions, options); + + // Apply UTC + setTimeMethods(); + + return defaultOptions; +} + +/** + * Get the updated default options. Until 3.0.7, merely exposing defaultOptions for outside modules + * wasn't enough because the setOptions method created a new object. + */ +function getOptions() { + return defaultOptions; +} + + +/** + * Handle color operations. The object methods are chainable. + * @param {String} input The input color in either rbga or hex format + */ +var rgbaRegEx = /rgba\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]?(?:\.[0-9]+)?)\s*\)/, + hexRegEx = /#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/, + rgbRegEx = /rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/; + +var Color = function (input) { + // declare variables + var rgba = [], result, stops; + + /** + * Parse the input color to rgba array + * @param {String} input + */ + function init(input) { + + // Gradients + if (input && input.stops) { + stops = map(input.stops, function (stop) { + return Color(stop[1]); + }); + + // Solid colors + } else { + // rgba + result = rgbaRegEx.exec(input); + if (result) { + rgba = [pInt(result[1]), pInt(result[2]), pInt(result[3]), parseFloat(result[4], 10)]; + } else { + // hex + result = hexRegEx.exec(input); + if (result) { + rgba = [pInt(result[1], 16), pInt(result[2], 16), pInt(result[3], 16), 1]; + } else { + // rgb + result = rgbRegEx.exec(input); + if (result) { + rgba = [pInt(result[1]), pInt(result[2]), pInt(result[3]), 1]; + } + } + } + } + + } + /** + * Return the color a specified format + * @param {String} format + */ + function get(format) { + var ret; + + if (stops) { + ret = merge(input); + ret.stops = [].concat(ret.stops); + each(stops, function (stop, i) { + ret.stops[i] = [ret.stops[i][0], stop.get(format)]; + }); + + // it's NaN if gradient colors on a column chart + } else if (rgba && !isNaN(rgba[0])) { + if (format === 'rgb') { + ret = 'rgb(' + rgba[0] + ',' + rgba[1] + ',' + rgba[2] + ')'; + } else if (format === 'a') { + ret = rgba[3]; + } else { + ret = 'rgba(' + rgba.join(',') + ')'; + } + } else { + ret = input; + } + return ret; + } + + /** + * Brighten the color + * @param {Number} alpha + */ + function brighten(alpha) { + if (stops) { + each(stops, function (stop) { + stop.brighten(alpha); + }); + + } else if (isNumber(alpha) && alpha !== 0) { + var i; + for (i = 0; i < 3; i++) { + rgba[i] += pInt(alpha * 255); + + if (rgba[i] < 0) { + rgba[i] = 0; + } + if (rgba[i] > 255) { + rgba[i] = 255; + } + } + } + return this; + } + /** + * Set the color's opacity to a given alpha value + * @param {Number} alpha + */ + function setOpacity(alpha) { + rgba[3] = alpha; + return this; + } + + // initialize: parse the input + init(input); + + // public methods + return { + get: get, + brighten: brighten, + rgba: rgba, + setOpacity: setOpacity + }; +}; + + +/** + * A wrapper object for SVG elements + */ +function SVGElement() {} + +SVGElement.prototype = { + /** + * Initialize the SVG renderer + * @param {Object} renderer + * @param {String} nodeName + */ + init: function (renderer, nodeName) { + var wrapper = this; + wrapper.element = nodeName === 'span' ? + createElement(nodeName) : + doc.createElementNS(SVG_NS, nodeName); + wrapper.renderer = renderer; + }, + /** + * Default base for animation + */ + opacity: 1, + /** + * Animate a given attribute + * @param {Object} params + * @param {Number} options The same options as in jQuery animation + * @param {Function} complete Function to perform at the end of animation + */ + animate: function (params, options, complete) { + var animOptions = pick(options, globalAnimation, true); + stop(this); // stop regardless of animation actually running, or reverting to .attr (#607) + if (animOptions) { + animOptions = merge(animOptions, {}); //#2625 + if (complete) { // allows using a callback with the global animation without overwriting it + animOptions.complete = complete; + } + animate(this, params, animOptions); + } else { + this.attr(params); + if (complete) { + complete(); + } + } + }, + + /** + * Build an SVG gradient out of a common JavaScript configuration object + */ + colorGradient: function (color, prop, elem) { + var renderer = this.renderer, + colorObject, + gradName, + gradAttr, + gradients, + gradientObject, + stops, + stopColor, + stopOpacity, + radialReference, + n, + id, + key = []; + + // Apply linear or radial gradients + if (color.linearGradient) { + gradName = 'linearGradient'; + } else if (color.radialGradient) { + gradName = 'radialGradient'; + } + + if (gradName) { + gradAttr = color[gradName]; + gradients = renderer.gradients; + stops = color.stops; + radialReference = elem.radialReference; + + // Keep < 2.2 kompatibility + if (isArray(gradAttr)) { + color[gradName] = gradAttr = { + x1: gradAttr[0], + y1: gradAttr[1], + x2: gradAttr[2], + y2: gradAttr[3], + gradientUnits: 'userSpaceOnUse' + }; + } + + // Correct the radial gradient for the radial reference system + if (gradName === 'radialGradient' && radialReference && !defined(gradAttr.gradientUnits)) { + gradAttr = merge(gradAttr, { + cx: (radialReference[0] - radialReference[2] / 2) + gradAttr.cx * radialReference[2], + cy: (radialReference[1] - radialReference[2] / 2) + gradAttr.cy * radialReference[2], + r: gradAttr.r * radialReference[2], + gradientUnits: 'userSpaceOnUse' + }); + } + + // Build the unique key to detect whether we need to create a new element (#1282) + for (n in gradAttr) { + if (n !== 'id') { + key.push(n, gradAttr[n]); + } + } + for (n in stops) { + key.push(stops[n]); + } + key = key.join(','); + + // Check if a gradient object with the same config object is created within this renderer + if (gradients[key]) { + id = gradients[key].attr('id'); + + } else { + + // Set the id and create the element + gradAttr.id = id = PREFIX + idCounter++; + gradients[key] = gradientObject = renderer.createElement(gradName) + .attr(gradAttr) + .add(renderer.defs); + + + // The gradient needs to keep a list of stops to be able to destroy them + gradientObject.stops = []; + each(stops, function (stop) { + var stopObject; + if (stop[1].indexOf('rgba') === 0) { + colorObject = Color(stop[1]); + stopColor = colorObject.get('rgb'); + stopOpacity = colorObject.get('a'); + } else { + stopColor = stop[1]; + stopOpacity = 1; + } + stopObject = renderer.createElement('stop').attr({ + offset: stop[0], + 'stop-color': stopColor, + 'stop-opacity': stopOpacity + }).add(gradientObject); + + // Add the stop element to the gradient + gradientObject.stops.push(stopObject); + }); + } + + // Set the reference to the gradient object + elem.setAttribute(prop, 'url(' + renderer.url + '#' + id + ')'); + } + }, + + /** + * Set or get a given attribute + * @param {Object|String} hash + * @param {Mixed|Undefined} val + */ + attr: function (hash, val) { + var key, + value, + element = this.element, + hasSetSymbolSize, + ret = this, + skipAttr; + + // single key-value pair + if (typeof hash === 'string' && val !== UNDEFINED) { + key = hash; + hash = {}; + hash[key] = val; + } + + // used as a getter: first argument is a string, second is undefined + if (typeof hash === 'string') { + ret = (this[hash + 'Getter'] || this._defaultGetter).call(this, hash, element); + + // setter + } else { + + for (key in hash) { + value = hash[key]; + skipAttr = false; + + + + if (this.symbolName && /^(x|y|width|height|r|start|end|innerR|anchorX|anchorY)/.test(key)) { + if (!hasSetSymbolSize) { + this.symbolAttr(hash); + hasSetSymbolSize = true; + } + skipAttr = true; + } + + if (this.rotation && (key === 'x' || key === 'y')) { + this.doTransform = true; + } + + if (!skipAttr) { + (this[key + 'Setter'] || this._defaultSetter).call(this, value, key, element); + } + + // Let the shadow follow the main element + if (this.shadows && /^(width|height|visibility|x|y|d|transform|cx|cy|r)$/.test(key)) { + this.updateShadows(key, value); + } + } + + // Update transform. Do this outside the loop to prevent redundant updating for batch setting + // of attributes. + if (this.doTransform) { + this.updateTransform(); + this.doTransform = false; + } + + } + + return ret; + }, + + updateShadows: function (key, value) { + var shadows = this.shadows, + i = shadows.length; + while (i--) { + shadows[i].setAttribute( + key, + key === 'height' ? + mathMax(value - (shadows[i].cutHeight || 0), 0) : + key === 'd' ? this.d : value + ); + } + }, + + /** + * Add a class name to an element + */ + addClass: function (className) { + var element = this.element, + currentClassName = attr(element, 'class') || ''; + + if (currentClassName.indexOf(className) === -1) { + attr(element, 'class', currentClassName + ' ' + className); + } + return this; + }, + /* hasClass and removeClass are not (yet) needed + hasClass: function (className) { + return attr(this.element, 'class').indexOf(className) !== -1; + }, + removeClass: function (className) { + attr(this.element, 'class', attr(this.element, 'class').replace(className, '')); + return this; + }, + */ + + /** + * If one of the symbol size affecting parameters are changed, + * check all the others only once for each call to an element's + * .attr() method + * @param {Object} hash + */ + symbolAttr: function (hash) { + var wrapper = this; + + each(['x', 'y', 'r', 'start', 'end', 'width', 'height', 'innerR', 'anchorX', 'anchorY'], function (key) { + wrapper[key] = pick(hash[key], wrapper[key]); + }); + + wrapper.attr({ + d: wrapper.renderer.symbols[wrapper.symbolName]( + wrapper.x, + wrapper.y, + wrapper.width, + wrapper.height, + wrapper + ) + }); + }, + + /** + * Apply a clipping path to this object + * @param {String} id + */ + clip: function (clipRect) { + return this.attr('clip-path', clipRect ? 'url(' + this.renderer.url + '#' + clipRect.id + ')' : NONE); + }, + + /** + * Calculate the coordinates needed for drawing a rectangle crisply and return the + * calculated attributes + * @param {Number} strokeWidth + * @param {Number} x + * @param {Number} y + * @param {Number} width + * @param {Number} height + */ + crisp: function (rect) { + + var wrapper = this, + key, + attribs = {}, + normalizer, + strokeWidth = rect.strokeWidth || wrapper.strokeWidth || (wrapper.attr && wrapper.attr('stroke-width')) || 0; + + normalizer = mathRound(strokeWidth) % 2 / 2; // mathRound because strokeWidth can sometimes have roundoff errors + + // normalize for crisp edges + rect.x = mathFloor(rect.x || wrapper.x || 0) + normalizer; + rect.y = mathFloor(rect.y || wrapper.y || 0) + normalizer; + rect.width = mathFloor((rect.width || wrapper.width || 0) - 2 * normalizer); + rect.height = mathFloor((rect.height || wrapper.height || 0) - 2 * normalizer); + rect.strokeWidth = strokeWidth; + + for (key in rect) { + if (wrapper[key] !== rect[key]) { // only set attribute if changed + wrapper[key] = attribs[key] = rect[key]; + } + } + + return attribs; + }, + + /** + * Set styles for the element + * @param {Object} styles + */ + css: function (styles) { + var elemWrapper = this, + oldStyles = elemWrapper.styles, + newStyles = {}, + elem = elemWrapper.element, + textWidth, + n, + serializedCss = '', + hyphenate, + hasNew = !oldStyles; + + // convert legacy + if (styles && styles.color) { + styles.fill = styles.color; + } + + // Filter out existing styles to increase performance (#2640) + if (oldStyles) { + for (n in styles) { + if (styles[n] !== oldStyles[n]) { + newStyles[n] = styles[n]; + hasNew = true; + } + } + } + if (hasNew) { + textWidth = elemWrapper.textWidth = styles && styles.width && elem.nodeName.toLowerCase() === 'text' && pInt(styles.width); + + // Merge the new styles with the old ones + if (oldStyles) { + styles = extend( + oldStyles, + newStyles + ); + } + + // store object + elemWrapper.styles = styles; + + if (textWidth && (useCanVG || (!hasSVG && elemWrapper.renderer.forExport))) { + delete styles.width; + } + + // serialize and set style attribute + if (isIE && !hasSVG) { + css(elemWrapper.element, styles); + } else { + /*jslint unparam: true*/ + hyphenate = function (a, b) { return '-' + b.toLowerCase(); }; + /*jslint unparam: false*/ + for (n in styles) { + serializedCss += n.replace(/([A-Z])/g, hyphenate) + ':' + styles[n] + ';'; + } + attr(elem, 'style', serializedCss); // #1881 + } + + + // re-build text + if (textWidth && elemWrapper.added) { + elemWrapper.renderer.buildText(elemWrapper); + } + } + + return elemWrapper; + }, + + /** + * Add an event listener + * @param {String} eventType + * @param {Function} handler + */ + on: function (eventType, handler) { + var svgElement = this, + element = svgElement.element; + + // touch + if (hasTouch && eventType === 'click') { + element.ontouchstart = function (e) { + svgElement.touchEventFired = Date.now(); + e.preventDefault(); + handler.call(element, e); + }; + element.onclick = function (e) { + if (userAgent.indexOf('Android') === -1 || Date.now() - (svgElement.touchEventFired || 0) > 1100) { // #2269 + handler.call(element, e); + } + }; + } else { + // simplest possible event model for internal use + element['on' + eventType] = handler; + } + return this; + }, + + /** + * Set the coordinates needed to draw a consistent radial gradient across + * pie slices regardless of positioning inside the chart. The format is + * [centerX, centerY, diameter] in pixels. + */ + setRadialReference: function (coordinates) { + this.element.radialReference = coordinates; + return this; + }, + + /** + * Move an object and its children by x and y values + * @param {Number} x + * @param {Number} y + */ + translate: function (x, y) { + return this.attr({ + translateX: x, + translateY: y + }); + }, + + /** + * Invert a group, rotate and flip + */ + invert: function () { + var wrapper = this; + wrapper.inverted = true; + wrapper.updateTransform(); + return wrapper; + }, + + /** + * Private method to update the transform attribute based on internal + * properties + */ + updateTransform: function () { + var wrapper = this, + translateX = wrapper.translateX || 0, + translateY = wrapper.translateY || 0, + scaleX = wrapper.scaleX, + scaleY = wrapper.scaleY, + inverted = wrapper.inverted, + rotation = wrapper.rotation, + element = wrapper.element, + transform; + + // flipping affects translate as adjustment for flipping around the group's axis + if (inverted) { + translateX += wrapper.attr('width'); + translateY += wrapper.attr('height'); + } + + // Apply translate. Nearly all transformed elements have translation, so instead + // of checking for translate = 0, do it always (#1767, #1846). + transform = ['translate(' + translateX + ',' + translateY + ')']; + + // apply rotation + if (inverted) { + transform.push('rotate(90) scale(-1,1)'); + } else if (rotation) { // text rotation + transform.push('rotate(' + rotation + ' ' + (element.getAttribute('x') || 0) + ' ' + (element.getAttribute('y') || 0) + ')'); + } + + // apply scale + if (defined(scaleX) || defined(scaleY)) { + transform.push('scale(' + pick(scaleX, 1) + ' ' + pick(scaleY, 1) + ')'); + } + + if (transform.length) { + element.setAttribute('transform', transform.join(' ')); + } + }, + /** + * Bring the element to the front + */ + toFront: function () { + var element = this.element; + element.parentNode.appendChild(element); + return this; + }, + + + /** + * Break down alignment options like align, verticalAlign, x and y + * to x and y relative to the chart. + * + * @param {Object} alignOptions + * @param {Boolean} alignByTranslate + * @param {String[Object} box The box to align to, needs a width and height. When the + * box is a string, it refers to an object in the Renderer. For example, when + * box is 'spacingBox', it refers to Renderer.spacingBox which holds width, height + * x and y properties. + * + */ + align: function (alignOptions, alignByTranslate, box) { + var align, + vAlign, + x, + y, + attribs = {}, + alignTo, + renderer = this.renderer, + alignedObjects = renderer.alignedObjects; + + // First call on instanciate + if (alignOptions) { + this.alignOptions = alignOptions; + this.alignByTranslate = alignByTranslate; + if (!box || isString(box)) { // boxes other than renderer handle this internally + this.alignTo = alignTo = box || 'renderer'; + erase(alignedObjects, this); // prevent duplicates, like legendGroup after resize + alignedObjects.push(this); + box = null; // reassign it below + } + + // When called on resize, no arguments are supplied + } else { + alignOptions = this.alignOptions; + alignByTranslate = this.alignByTranslate; + alignTo = this.alignTo; + } + + box = pick(box, renderer[alignTo], renderer); + + // Assign variables + align = alignOptions.align; + vAlign = alignOptions.verticalAlign; + x = (box.x || 0) + (alignOptions.x || 0); // default: left align + y = (box.y || 0) + (alignOptions.y || 0); // default: top align + + // Align + if (align === 'right' || align === 'center') { + x += (box.width - (alignOptions.width || 0)) / + { right: 1, center: 2 }[align]; + } + attribs[alignByTranslate ? 'translateX' : 'x'] = mathRound(x); + + + // Vertical align + if (vAlign === 'bottom' || vAlign === 'middle') { + y += (box.height - (alignOptions.height || 0)) / + ({ bottom: 1, middle: 2 }[vAlign] || 1); + + } + attribs[alignByTranslate ? 'translateY' : 'y'] = mathRound(y); + + // Animate only if already placed + this[this.placed ? 'animate' : 'attr'](attribs); + this.placed = true; + this.alignAttr = attribs; + + return this; + }, + + /** + * Get the bounding box (width, height, x and y) for the element + */ + getBBox: function () { + var wrapper = this, + bBox = wrapper.bBox, + renderer = wrapper.renderer, + width, + height, + rotation = wrapper.rotation, + element = wrapper.element, + styles = wrapper.styles, + rad = rotation * deg2rad, + textStr = wrapper.textStr, + cacheKey; + + // Since numbers are monospaced, and numerical labels appear a lot in a chart, + // we assume that a label of n characters has the same bounding box as others + // of the same length. + if (textStr === '' || numRegex.test(textStr)) { + cacheKey = 'num.' + textStr.toString().length + (styles ? ('|' + styles.fontSize + '|' + styles.fontFamily) : ''); + + } //else { // This code block made demo/waterfall fail, related to buildText + // Caching all strings reduces rendering time by 4-5%. + // TODO: Check how this affects places where bBox is found on the element + //cacheKey = textStr + (styles ? ('|' + styles.fontSize + '|' + styles.fontFamily) : ''); + //} + if (cacheKey) { + bBox = renderer.cache[cacheKey]; + } + + // No cache found + if (!bBox) { + + // SVG elements + if (element.namespaceURI === SVG_NS || renderer.forExport) { + try { // Fails in Firefox if the container has display: none. + + bBox = element.getBBox ? + // SVG: use extend because IE9 is not allowed to change width and height in case + // of rotation (below) + extend({}, element.getBBox()) : + // Canvas renderer and legacy IE in export mode + { + width: element.offsetWidth, + height: element.offsetHeight + }; + } catch (e) {} + + // If the bBox is not set, the try-catch block above failed. The other condition + // is for Opera that returns a width of -Infinity on hidden elements. + if (!bBox || bBox.width < 0) { + bBox = { width: 0, height: 0 }; + } + + + // VML Renderer or useHTML within SVG + } else { + + bBox = wrapper.htmlGetBBox(); + + } + + // True SVG elements as well as HTML elements in modern browsers using the .useHTML option + // need to compensated for rotation + if (renderer.isSVG) { + width = bBox.width; + height = bBox.height; + + // Workaround for wrong bounding box in IE9 and IE10 (#1101, #1505, #1669, #2568) + if (isIE && styles && styles.fontSize === '11px' && height.toPrecision(3) === '16.9') { + bBox.height = height = 14; + } + + // Adjust for rotated text + if (rotation) { + bBox.width = mathAbs(height * mathSin(rad)) + mathAbs(width * mathCos(rad)); + bBox.height = mathAbs(height * mathCos(rad)) + mathAbs(width * mathSin(rad)); + } + } + + // Cache it + wrapper.bBox = bBox; + if (cacheKey) { + renderer.cache[cacheKey] = bBox; + } + } + return bBox; + }, + + /** + * Show the element + */ + show: function (inherit) { + // IE9-11 doesn't handle visibilty:inherit well, so we remove the attribute instead (#2881) + if (inherit && this.element.namespaceURI === SVG_NS) { + this.element.removeAttribute('visibility'); + return this; + } else { + return this.attr({ visibility: inherit ? 'inherit' : VISIBLE }); + } + }, + + /** + * Hide the element + */ + hide: function () { + return this.attr({ visibility: HIDDEN }); + }, + + fadeOut: function (duration) { + var elemWrapper = this; + elemWrapper.animate({ + opacity: 0 + }, { + duration: duration || 150, + complete: function () { + elemWrapper.hide(); + } + }); + }, + + /** + * Add the element + * @param {Object|Undefined} parent Can be an element, an element wrapper or undefined + * to append the element to the renderer.box. + */ + add: function (parent) { + + var renderer = this.renderer, + parentWrapper = parent || renderer, + parentNode = parentWrapper.element || renderer.box, + childNodes, + element = this.element, + zIndex = this.zIndex, + otherElement, + otherZIndex, + i, + inserted; + + if (parent) { + this.parentGroup = parent; + } + + // mark as inverted + this.parentInverted = parent && parent.inverted; + + // build formatted text + if (this.textStr !== undefined) { + renderer.buildText(this); + } + + // mark the container as having z indexed children + if (zIndex) { + parentWrapper.handleZ = true; + zIndex = pInt(zIndex); + } + + // insert according to this and other elements' zIndex + if (parentWrapper.handleZ) { // this element or any of its siblings has a z index + childNodes = parentNode.childNodes; + for (i = 0; i < childNodes.length; i++) { + otherElement = childNodes[i]; + otherZIndex = attr(otherElement, 'zIndex'); + if (otherElement !== element && ( + // insert before the first element with a higher zIndex + pInt(otherZIndex) > zIndex || + // if no zIndex given, insert before the first element with a zIndex + (!defined(zIndex) && defined(otherZIndex)) + + )) { + parentNode.insertBefore(element, otherElement); + inserted = true; + break; + } + } + } + + // default: append at the end + if (!inserted) { + parentNode.appendChild(element); + } + + // mark as added + this.added = true; + + // fire an event for internal hooks + if (this.onAdd) { + this.onAdd(); + } + + return this; + }, + + /** + * Removes a child either by removeChild or move to garbageBin. + * Issue 490; in VML removeChild results in Orphaned nodes according to sIEve, discardElement does not. + */ + safeRemoveChild: function (element) { + var parentNode = element.parentNode; + if (parentNode) { + parentNode.removeChild(element); + } + }, + + /** + * Destroy the element and element wrapper + */ + destroy: function () { + var wrapper = this, + element = wrapper.element || {}, + shadows = wrapper.shadows, + parentToClean = wrapper.renderer.isSVG && element.nodeName === 'SPAN' && wrapper.parentGroup, + grandParent, + key, + i; + + // remove events + element.onclick = element.onmouseout = element.onmouseover = element.onmousemove = element.point = null; + stop(wrapper); // stop running animations + + if (wrapper.clipPath) { + wrapper.clipPath = wrapper.clipPath.destroy(); + } + + // Destroy stops in case this is a gradient object + if (wrapper.stops) { + for (i = 0; i < wrapper.stops.length; i++) { + wrapper.stops[i] = wrapper.stops[i].destroy(); + } + wrapper.stops = null; + } + + // remove element + wrapper.safeRemoveChild(element); + + // destroy shadows + if (shadows) { + each(shadows, function (shadow) { + wrapper.safeRemoveChild(shadow); + }); + } + + // In case of useHTML, clean up empty containers emulating SVG groups (#1960, #2393). + while (parentToClean && parentToClean.div.childNodes.length === 0) { + grandParent = parentToClean.parentGroup; + wrapper.safeRemoveChild(parentToClean.div); + delete parentToClean.div; + parentToClean = grandParent; + } + + // remove from alignObjects + if (wrapper.alignTo) { + erase(wrapper.renderer.alignedObjects, wrapper); + } + + for (key in wrapper) { + delete wrapper[key]; + } + + return null; + }, + + /** + * Add a shadow to the element. Must be done after the element is added to the DOM + * @param {Boolean|Object} shadowOptions + */ + shadow: function (shadowOptions, group, cutOff) { + var shadows = [], + i, + shadow, + element = this.element, + strokeWidth, + shadowWidth, + shadowElementOpacity, + + // compensate for inverted plot area + transform; + + + if (shadowOptions) { + shadowWidth = pick(shadowOptions.width, 3); + shadowElementOpacity = (shadowOptions.opacity || 0.15) / shadowWidth; + transform = this.parentInverted ? + '(-1,-1)' : + '(' + pick(shadowOptions.offsetX, 1) + ', ' + pick(shadowOptions.offsetY, 1) + ')'; + for (i = 1; i <= shadowWidth; i++) { + shadow = element.cloneNode(0); + strokeWidth = (shadowWidth * 2) + 1 - (2 * i); + attr(shadow, { + 'isShadow': 'true', + 'stroke': shadowOptions.color || 'black', + 'stroke-opacity': shadowElementOpacity * i, + 'stroke-width': strokeWidth, + 'transform': 'translate' + transform, + 'fill': NONE + }); + if (cutOff) { + attr(shadow, 'height', mathMax(attr(shadow, 'height') - strokeWidth, 0)); + shadow.cutHeight = strokeWidth; + } + + if (group) { + group.element.appendChild(shadow); + } else { + element.parentNode.insertBefore(shadow, element); + } + + shadows.push(shadow); + } + + this.shadows = shadows; + } + return this; + + }, + + xGetter: function (key) { + if (this.element.nodeName === 'circle') { + key = { x: 'cx', y: 'cy' }[key] || key; + } + return this._defaultGetter(key); + }, + + /** + * Get the current value of an attribute or pseudo attribute, used mainly + * for animation. + */ + _defaultGetter: function (key) { + var ret = pick(this[key], this.element ? this.element.getAttribute(key) : null, 0); + + if (/^[0-9\.]+$/.test(ret)) { // is numerical + ret = parseFloat(ret); + } + return ret; + }, + + + dSetter: function (value, key, element) { + if (value && value.join) { // join path + value = value.join(' '); + } + if (/(NaN| {2}|^$)/.test(value)) { + value = 'M 0 0'; + } + element.setAttribute(key, value); + + this[key] = value; + }, + dashstyleSetter: function (value) { + var i; + value = value && value.toLowerCase(); + if (value) { + value = value + .replace('shortdashdotdot', '3,1,1,1,1,1,') + .replace('shortdashdot', '3,1,1,1') + .replace('shortdot', '1,1,') + .replace('shortdash', '3,1,') + .replace('longdash', '8,3,') + .replace(/dot/g, '1,3,') + .replace('dash', '4,3,') + .replace(/,$/, '') + .split(','); // ending comma + + i = value.length; + while (i--) { + value[i] = pInt(value[i]) * this.element.getAttribute('stroke-width'); + } + value = value.join(','); + this.element.setAttribute('stroke-dasharray', value); + } + }, + alignSetter: function (value) { + this.element.setAttribute('text-anchor', { left: 'start', center: 'middle', right: 'end' }[value]); + }, + opacitySetter: function (value, key, element) { + this[key] = value; + element.setAttribute(key, value); + }, + // In Chrome/Win < 6 as well as Batik and PhantomJS as of 1.9.7, the stroke attribute can't be set when the stroke- + // width is 0. #1369 + 'stroke-widthSetter': function (value, key, element) { + if (value === 0) { + value = 0.00001; + } + this.strokeWidth = value; // read in symbol paths like 'callout' + element.setAttribute(key, value); + }, + titleSetter: function (value) { + var titleNode = this.element.getElementsByTagName('title')[0]; + if (!titleNode) { + titleNode = doc.createElementNS(SVG_NS, 'title'); + this.element.appendChild(titleNode); + } + titleNode.textContent = value; + }, + textSetter: function (value) { + if (value !== this.textStr) { + // Delete bBox memo when the text changes + delete this.bBox; + + this.textStr = value; + if (this.added) { + this.renderer.buildText(this); + } + } + }, + fillSetter: function (value, key, element) { + + if (typeof value === 'string') { + element.setAttribute(key, value); + } else if (value) { + this.colorGradient(value, key, element); + } + }, + zIndexSetter: function (value, key, element) { + element.setAttribute(key, value); + this[key] = value; + }, + _defaultSetter: function (value, key, element) { + element.setAttribute(key, value); + } +}; + +// Some shared setters and getters +SVGElement.prototype.yGetter = SVGElement.prototype.xGetter; +SVGElement.prototype.translateXSetter = SVGElement.prototype.translateYSetter = + SVGElement.prototype.rotationSetter = SVGElement.prototype.verticalAlignSetter = + SVGElement.prototype.scaleXSetter = SVGElement.prototype.scaleYSetter = function (value, key) { + this[key] = value; + this.doTransform = true; +}; +SVGElement.prototype.strokeSetter = SVGElement.prototype.fillSetter; + + + +// In Chrome/Win < 6 as well as Batik, the stroke attribute can't be set when the stroke- +// width is 0. #1369 +/*SVGElement.prototype['stroke-widthSetter'] = SVGElement.prototype.strokeSetter = function (value, key) { + this[key] = value; + // Only apply the stroke attribute if the stroke width is defined and larger than 0 + if (this.stroke && this['stroke-width']) { + this.element.setAttribute('stroke', this.stroke); + this.element.setAttribute('stroke-width', this['stroke-width']); + this.hasStroke = true; + } else if (key === 'stroke-width' && value === 0 && this.hasStroke) { + this.element.removeAttribute('stroke'); + this.hasStroke = false; + } +};*/ + + +/** + * The default SVG renderer + */ +var SVGRenderer = function () { + this.init.apply(this, arguments); +}; +SVGRenderer.prototype = { + Element: SVGElement, + + /** + * Initialize the SVGRenderer + * @param {Object} container + * @param {Number} width + * @param {Number} height + * @param {Boolean} forExport + */ + init: function (container, width, height, style, forExport) { + var renderer = this, + loc = location, + boxWrapper, + element, + desc; + + boxWrapper = renderer.createElement('svg') + .attr({ + version: '1.1' + }) + .css(this.getStyle(style)); + element = boxWrapper.element; + container.appendChild(element); + + // For browsers other than IE, add the namespace attribute (#1978) + if (container.innerHTML.indexOf('xmlns') === -1) { + attr(element, 'xmlns', SVG_NS); + } + + // object properties + renderer.isSVG = true; + renderer.box = element; + renderer.boxWrapper = boxWrapper; + renderer.alignedObjects = []; + + // Page url used for internal references. #24, #672, #1070 + renderer.url = (isFirefox || isWebKit) && doc.getElementsByTagName('base').length ? + loc.href + .replace(/#.*?$/, '') // remove the hash + .replace(/([\('\)])/g, '\\$1') // escape parantheses and quotes + .replace(/ /g, '%20') : // replace spaces (needed for Safari only) + ''; + + // Add description + desc = this.createElement('desc').add(); + desc.element.appendChild(doc.createTextNode('Created with ' + PRODUCT + ' ' + VERSION)); + + + renderer.defs = this.createElement('defs').add(); + renderer.forExport = forExport; + renderer.gradients = {}; // Object where gradient SvgElements are stored + renderer.cache = {}; // Cache for numerical bounding boxes + + renderer.setSize(width, height, false); + + + + // Issue 110 workaround: + // In Firefox, if a div is positioned by percentage, its pixel position may land + // between pixels. The container itself doesn't display this, but an SVG element + // inside this container will be drawn at subpixel precision. In order to draw + // sharp lines, this must be compensated for. This doesn't seem to work inside + // iframes though (like in jsFiddle). + var subPixelFix, rect; + if (isFirefox && container.getBoundingClientRect) { + renderer.subPixelFix = subPixelFix = function () { + css(container, { left: 0, top: 0 }); + rect = container.getBoundingClientRect(); + css(container, { + left: (mathCeil(rect.left) - rect.left) + PX, + top: (mathCeil(rect.top) - rect.top) + PX + }); + }; + + // run the fix now + subPixelFix(); + + // run it on resize + addEvent(win, 'resize', subPixelFix); + } + }, + + getStyle: function (style) { + return (this.style = extend({ + fontFamily: '"Lucida Grande", "Lucida Sans Unicode", Arial, Helvetica, sans-serif', // default font + fontSize: '12px' + }, style)); + }, + + /** + * Detect whether the renderer is hidden. This happens when one of the parent elements + * has display: none. #608. + */ + isHidden: function () { + return !this.boxWrapper.getBBox().width; + }, + + /** + * Destroys the renderer and its allocated members. + */ + destroy: function () { + var renderer = this, + rendererDefs = renderer.defs; + renderer.box = null; + renderer.boxWrapper = renderer.boxWrapper.destroy(); + + // Call destroy on all gradient elements + destroyObjectProperties(renderer.gradients || {}); + renderer.gradients = null; + + // Defs are null in VMLRenderer + // Otherwise, destroy them here. + if (rendererDefs) { + renderer.defs = rendererDefs.destroy(); + } + + // Remove sub pixel fix handler + // We need to check that there is a handler, otherwise all functions that are registered for event 'resize' are removed + // See issue #982 + if (renderer.subPixelFix) { + removeEvent(win, 'resize', renderer.subPixelFix); + } + + renderer.alignedObjects = null; + + return null; + }, + + /** + * Create a wrapper for an SVG element + * @param {Object} nodeName + */ + createElement: function (nodeName) { + var wrapper = new this.Element(); + wrapper.init(this, nodeName); + return wrapper; + }, + + /** + * Dummy function for use in canvas renderer + */ + draw: function () {}, + + /** + * Parse a simple HTML string into SVG tspans + * + * @param {Object} textNode The parent text SVG node + */ + buildText: function (wrapper) { + var textNode = wrapper.element, + renderer = this, + forExport = renderer.forExport, + textStr = pick(wrapper.textStr, '').toString(), + hasMarkup = textStr.indexOf('<') !== -1, + lines, + childNodes = textNode.childNodes, + styleRegex, + hrefRegex, + parentX = attr(textNode, 'x'), + textStyles = wrapper.styles, + width = wrapper.textWidth, + textLineHeight = textStyles && textStyles.lineHeight, + i = childNodes.length, + getLineHeight = function (tspan) { + return textLineHeight ? + pInt(textLineHeight) : + renderer.fontMetrics( + /(px|em)$/.test(tspan && tspan.style.fontSize) ? + tspan.style.fontSize : + ((textStyles && textStyles.fontSize) || renderer.style.fontSize || 12) + ).h; + }; + + /// remove old text + while (i--) { + textNode.removeChild(childNodes[i]); + } + + // Skip tspans, add text directly to text node + if (!hasMarkup && textStr.indexOf(' ') === -1) { + textNode.appendChild(doc.createTextNode(textStr)); + return; + + // Complex strings, add more logic + } else { + + styleRegex = /<.*style="([^"]+)".*>/; + hrefRegex = /<.*href="(http[^"]+)".*>/; + + if (width && !wrapper.added) { + this.box.appendChild(textNode); // attach it to the DOM to read offset width + } + + if (hasMarkup) { + lines = textStr + .replace(/<(b|strong)>/g, '') + .replace(/<(i|em)>/g, '') + .replace(/
              /g, '') + .split(//g); + + } else { + lines = [textStr]; + } + + + // remove empty line at end + if (lines[lines.length - 1] === '') { + lines.pop(); + } + + + // build the lines + each(lines, function (line, lineNo) { + var spans, spanNo = 0; + + line = line.replace(//g, '|||'); + spans = line.split('|||'); + + each(spans, function (span) { + if (span !== '' || spans.length === 1) { + var attributes = {}, + tspan = doc.createElementNS(SVG_NS, 'tspan'), + spanStyle; // #390 + if (styleRegex.test(span)) { + spanStyle = span.match(styleRegex)[1].replace(/(;| |^)color([ :])/, '$1fill$2'); + attr(tspan, 'style', spanStyle); + } + if (hrefRegex.test(span) && !forExport) { // Not for export - #1529 + attr(tspan, 'onclick', 'location.href=\"' + span.match(hrefRegex)[1] + '\"'); + css(tspan, { cursor: 'pointer' }); + } + + span = (span.replace(/<(.|\n)*?>/g, '') || ' ') + .replace(/</g, '<') + .replace(/>/g, '>'); + + // Nested tags aren't supported, and cause crash in Safari (#1596) + if (span !== ' ') { + + // add the text node + tspan.appendChild(doc.createTextNode(span)); + + if (!spanNo) { // first span in a line, align it to the left + if (lineNo && parentX !== null) { + attributes.x = parentX; + } + } else { + attributes.dx = 0; // #16 + } + + // add attributes + attr(tspan, attributes); + + // first span on subsequent line, add the line height + if (!spanNo && lineNo) { + + // allow getting the right offset height in exporting in IE + if (!hasSVG && forExport) { + css(tspan, { display: 'block' }); + } + + // Set the line height based on the font size of either + // the text element or the tspan element + attr( + tspan, + 'dy', + getLineHeight(tspan), + // Safari 6.0.2 - too optimized for its own good (#1539) + // TODO: revisit this with future versions of Safari + isWebKit && tspan.offsetHeight + ); + } + + // Append it + textNode.appendChild(tspan); + + spanNo++; + + // check width and apply soft breaks + if (width) { + var words = span.replace(/([^\^])-/g, '$1- ').split(' '), // #1273 + hasWhiteSpace = words.length > 1 && textStyles.whiteSpace !== 'nowrap', + tooLong, + actualWidth, + clipHeight = wrapper._clipHeight, + rest = [], + dy = getLineHeight(), + softLineNo = 1, + bBox; + + while (hasWhiteSpace && (words.length || rest.length)) { + delete wrapper.bBox; // delete cache + bBox = wrapper.getBBox(); + actualWidth = bBox.width; + + // Old IE cannot measure the actualWidth for SVG elements (#2314) + if (!hasSVG && renderer.forExport) { + actualWidth = renderer.measureSpanWidth(tspan.firstChild.data, wrapper.styles); + } + + tooLong = actualWidth > width; + if (!tooLong || words.length === 1) { // new line needed + words = rest; + rest = []; + if (words.length) { + softLineNo++; + + if (clipHeight && softLineNo * dy > clipHeight) { + words = ['...']; + wrapper.attr('title', wrapper.textStr); + } else { + + tspan = doc.createElementNS(SVG_NS, 'tspan'); + attr(tspan, { + dy: dy, + x: parentX + }); + if (spanStyle) { // #390 + attr(tspan, 'style', spanStyle); + } + textNode.appendChild(tspan); + + if (actualWidth > width) { // a single word is pressing it out + width = actualWidth; + } + } + } + } else { // append to existing line tspan + tspan.removeChild(tspan.firstChild); + rest.unshift(words.pop()); + } + if (words.length) { + tspan.appendChild(doc.createTextNode(words.join(' ').replace(/- /g, '-'))); + } + } + } + } + } + }); + }); + } + }, + + /** + * Create a button with preset states + * @param {String} text + * @param {Number} x + * @param {Number} y + * @param {Function} callback + * @param {Object} normalState + * @param {Object} hoverState + * @param {Object} pressedState + */ + button: function (text, x, y, callback, normalState, hoverState, pressedState, disabledState, shape) { + var label = this.label(text, x, y, shape, null, null, null, null, 'button'), + curState = 0, + stateOptions, + stateStyle, + normalStyle, + hoverStyle, + pressedStyle, + disabledStyle, + verticalGradient = { x1: 0, y1: 0, x2: 0, y2: 1 }; + + // Normal state - prepare the attributes + normalState = merge({ + 'stroke-width': 1, + stroke: '#CCCCCC', + fill: { + linearGradient: verticalGradient, + stops: [ + [0, '#FEFEFE'], + [1, '#F6F6F6'] + ] + }, + r: 2, + padding: 5, + style: { + color: 'black' + } + }, normalState); + normalStyle = normalState.style; + delete normalState.style; + + // Hover state + hoverState = merge(normalState, { + stroke: '#68A', + fill: { + linearGradient: verticalGradient, + stops: [ + [0, '#FFF'], + [1, '#ACF'] + ] + } + }, hoverState); + hoverStyle = hoverState.style; + delete hoverState.style; + + // Pressed state + pressedState = merge(normalState, { + stroke: '#68A', + fill: { + linearGradient: verticalGradient, + stops: [ + [0, '#9BD'], + [1, '#CDF'] + ] + } + }, pressedState); + pressedStyle = pressedState.style; + delete pressedState.style; + + // Disabled state + disabledState = merge(normalState, { + style: { + color: '#CCC' + } + }, disabledState); + disabledStyle = disabledState.style; + delete disabledState.style; + + // Add the events. IE9 and IE10 need mouseover and mouseout to funciton (#667). + addEvent(label.element, isIE ? 'mouseover' : 'mouseenter', function () { + if (curState !== 3) { + label.attr(hoverState) + .css(hoverStyle); + } + }); + addEvent(label.element, isIE ? 'mouseout' : 'mouseleave', function () { + if (curState !== 3) { + stateOptions = [normalState, hoverState, pressedState][curState]; + stateStyle = [normalStyle, hoverStyle, pressedStyle][curState]; + label.attr(stateOptions) + .css(stateStyle); + } + }); + + label.setState = function (state) { + label.state = curState = state; + if (!state) { + label.attr(normalState) + .css(normalStyle); + } else if (state === 2) { + label.attr(pressedState) + .css(pressedStyle); + } else if (state === 3) { + label.attr(disabledState) + .css(disabledStyle); + } + }; + + return label + .on('click', function () { + if (curState !== 3) { + callback.call(label); + } + }) + .attr(normalState) + .css(extend({ cursor: 'default' }, normalStyle)); + }, + + /** + * Make a straight line crisper by not spilling out to neighbour pixels + * @param {Array} points + * @param {Number} width + */ + crispLine: function (points, width) { + // points format: [M, 0, 0, L, 100, 0] + // normalize to a crisp line + if (points[1] === points[4]) { + // Substract due to #1129. Now bottom and left axis gridlines behave the same. + points[1] = points[4] = mathRound(points[1]) - (width % 2 / 2); + } + if (points[2] === points[5]) { + points[2] = points[5] = mathRound(points[2]) + (width % 2 / 2); + } + return points; + }, + + + /** + * Draw a path + * @param {Array} path An SVG path in array form + */ + path: function (path) { + var attr = { + fill: NONE + }; + if (isArray(path)) { + attr.d = path; + } else if (isObject(path)) { // attributes + extend(attr, path); + } + return this.createElement('path').attr(attr); + }, + + /** + * Draw and return an SVG circle + * @param {Number} x The x position + * @param {Number} y The y position + * @param {Number} r The radius + */ + circle: function (x, y, r) { + var attr = isObject(x) ? + x : + { + x: x, + y: y, + r: r + }, + wrapper = this.createElement('circle'); + + wrapper.xSetter = function (value) { + this.element.setAttribute('cx', value); + }; + wrapper.ySetter = function (value) { + this.element.setAttribute('cy', value); + }; + return wrapper.attr(attr); + }, + + /** + * Draw and return an arc + * @param {Number} x X position + * @param {Number} y Y position + * @param {Number} r Radius + * @param {Number} innerR Inner radius like used in donut charts + * @param {Number} start Starting angle + * @param {Number} end Ending angle + */ + arc: function (x, y, r, innerR, start, end) { + var arc; + + if (isObject(x)) { + y = x.y; + r = x.r; + innerR = x.innerR; + start = x.start; + end = x.end; + x = x.x; + } + + // Arcs are defined as symbols for the ability to set + // attributes in attr and animate + arc = this.symbol('arc', x || 0, y || 0, r || 0, r || 0, { + innerR: innerR || 0, + start: start || 0, + end: end || 0 + }); + arc.r = r; // #959 + return arc; + }, + + /** + * Draw and return a rectangle + * @param {Number} x Left position + * @param {Number} y Top position + * @param {Number} width + * @param {Number} height + * @param {Number} r Border corner radius + * @param {Number} strokeWidth A stroke width can be supplied to allow crisp drawing + */ + rect: function (x, y, width, height, r, strokeWidth) { + + r = isObject(x) ? x.r : r; + + var wrapper = this.createElement('rect'), + attribs = isObject(x) ? x : x === UNDEFINED ? {} : { + x: x, + y: y, + width: mathMax(width, 0), + height: mathMax(height, 0) + }; + + if (strokeWidth !== UNDEFINED) { + attribs.strokeWidth = strokeWidth; + attribs = wrapper.crisp(attribs); + } + + if (r) { + attribs.r = r; + } + + wrapper.rSetter = function (value) { + attr(this.element, { + rx: value, + ry: value + }); + }; + + return wrapper.attr(attribs); + }, + + /** + * Resize the box and re-align all aligned elements + * @param {Object} width + * @param {Object} height + * @param {Boolean} animate + * + */ + setSize: function (width, height, animate) { + var renderer = this, + alignedObjects = renderer.alignedObjects, + i = alignedObjects.length; + + renderer.width = width; + renderer.height = height; + + renderer.boxWrapper[pick(animate, true) ? 'animate' : 'attr']({ + width: width, + height: height + }); + + while (i--) { + alignedObjects[i].align(); + } + }, + + /** + * Create a group + * @param {String} name The group will be given a class name of 'highcharts-{name}'. + * This can be used for styling and scripting. + */ + g: function (name) { + var elem = this.createElement('g'); + return defined(name) ? elem.attr({ 'class': PREFIX + name }) : elem; + }, + + /** + * Display an image + * @param {String} src + * @param {Number} x + * @param {Number} y + * @param {Number} width + * @param {Number} height + */ + image: function (src, x, y, width, height) { + var attribs = { + preserveAspectRatio: NONE + }, + elemWrapper; + + // optional properties + if (arguments.length > 1) { + extend(attribs, { + x: x, + y: y, + width: width, + height: height + }); + } + + elemWrapper = this.createElement('image').attr(attribs); + + // set the href in the xlink namespace + if (elemWrapper.element.setAttributeNS) { + elemWrapper.element.setAttributeNS('http://www.w3.org/1999/xlink', + 'href', src); + } else { + // could be exporting in IE + // using href throws "not supported" in ie7 and under, requries regex shim to fix later + elemWrapper.element.setAttribute('hc-svg-href', src); + } + + return elemWrapper; + }, + + /** + * Draw a symbol out of pre-defined shape paths from the namespace 'symbol' object. + * + * @param {Object} symbol + * @param {Object} x + * @param {Object} y + * @param {Object} radius + * @param {Object} options + */ + symbol: function (symbol, x, y, width, height, options) { + + var obj, + + // get the symbol definition function + symbolFn = this.symbols[symbol], + + // check if there's a path defined for this symbol + path = symbolFn && symbolFn( + mathRound(x), + mathRound(y), + width, + height, + options + ), + + imageElement, + imageRegex = /^url\((.*?)\)$/, + imageSrc, + imageSize, + centerImage; + + if (path) { + + obj = this.path(path); + // expando properties for use in animate and attr + extend(obj, { + symbolName: symbol, + x: x, + y: y, + width: width, + height: height + }); + if (options) { + extend(obj, options); + } + + + // image symbols + } else if (imageRegex.test(symbol)) { + + // On image load, set the size and position + centerImage = function (img, size) { + if (img.element) { // it may be destroyed in the meantime (#1390) + img.attr({ + width: size[0], + height: size[1] + }); + + if (!img.alignByTranslate) { // #185 + img.translate( + mathRound((width - size[0]) / 2), // #1378 + mathRound((height - size[1]) / 2) + ); + } + } + }; + + imageSrc = symbol.match(imageRegex)[1]; + imageSize = symbolSizes[imageSrc]; + + // Ireate the image synchronously, add attribs async + obj = this.image(imageSrc) + .attr({ + x: x, + y: y + }); + obj.isImg = true; + + if (imageSize) { + centerImage(obj, imageSize); + } else { + // Initialize image to be 0 size so export will still function if there's no cached sizes. + // + obj.attr({ width: 0, height: 0 }); + + // Create a dummy JavaScript image to get the width and height. Due to a bug in IE < 8, + // the created element must be assigned to a variable in order to load (#292). + imageElement = createElement('img', { + onload: function () { + centerImage(obj, symbolSizes[imageSrc] = [this.width, this.height]); + }, + src: imageSrc + }); + } + } + + return obj; + }, + + /** + * An extendable collection of functions for defining symbol paths. + */ + symbols: { + 'circle': function (x, y, w, h) { + var cpw = 0.166 * w; + return [ + M, x + w / 2, y, + 'C', x + w + cpw, y, x + w + cpw, y + h, x + w / 2, y + h, + 'C', x - cpw, y + h, x - cpw, y, x + w / 2, y, + 'Z' + ]; + }, + + 'square': function (x, y, w, h) { + return [ + M, x, y, + L, x + w, y, + x + w, y + h, + x, y + h, + 'Z' + ]; + }, + + 'triangle': function (x, y, w, h) { + return [ + M, x + w / 2, y, + L, x + w, y + h, + x, y + h, + 'Z' + ]; + }, + + 'triangle-down': function (x, y, w, h) { + return [ + M, x, y, + L, x + w, y, + x + w / 2, y + h, + 'Z' + ]; + }, + 'diamond': function (x, y, w, h) { + return [ + M, x + w / 2, y, + L, x + w, y + h / 2, + x + w / 2, y + h, + x, y + h / 2, + 'Z' + ]; + }, + 'arc': function (x, y, w, h, options) { + var start = options.start, + radius = options.r || w || h, + end = options.end - 0.001, // to prevent cos and sin of start and end from becoming equal on 360 arcs (related: #1561) + innerRadius = options.innerR, + open = options.open, + cosStart = mathCos(start), + sinStart = mathSin(start), + cosEnd = mathCos(end), + sinEnd = mathSin(end), + longArc = options.end - start < mathPI ? 0 : 1; + + return [ + M, + x + radius * cosStart, + y + radius * sinStart, + 'A', // arcTo + radius, // x radius + radius, // y radius + 0, // slanting + longArc, // long or short arc + 1, // clockwise + x + radius * cosEnd, + y + radius * sinEnd, + open ? M : L, + x + innerRadius * cosEnd, + y + innerRadius * sinEnd, + 'A', // arcTo + innerRadius, // x radius + innerRadius, // y radius + 0, // slanting + longArc, // long or short arc + 0, // clockwise + x + innerRadius * cosStart, + y + innerRadius * sinStart, + + open ? '' : 'Z' // close + ]; + }, + + /** + * Callout shape used for default tooltips, also used for rounded rectangles in VML + */ + callout: function (x, y, w, h, options) { + var arrowLength = 6, + halfDistance = 6, + r = mathMin((options && options.r) || 0, w, h), + safeDistance = r + halfDistance, + anchorX = options && options.anchorX, + anchorY = options && options.anchorY, + path, + normalizer = mathRound(options.strokeWidth || 0) % 2 / 2; // mathRound because strokeWidth can sometimes have roundoff errors; + + x += normalizer; + y += normalizer; + path = [ + 'M', x + r, y, + 'L', x + w - r, y, // top side + 'C', x + w, y, x + w, y, x + w, y + r, // top-right corner + 'L', x + w, y + h - r, // right side + 'C', x + w, y + h, x + w, y + h, x + w - r, y + h, // bottom-right corner + 'L', x + r, y + h, // bottom side + 'C', x, y + h, x, y + h, x, y + h - r, // bottom-left corner + 'L', x, y + r, // left side + 'C', x, y, x, y, x + r, y // top-right corner + ]; + + if (anchorX && anchorX > w && anchorY > y + safeDistance && anchorY < y + h - safeDistance) { // replace right side + path.splice(13, 3, + 'L', x + w, anchorY - halfDistance, + x + w + arrowLength, anchorY, + x + w, anchorY + halfDistance, + x + w, y + h - r + ); + } else if (anchorX && anchorX < 0 && anchorY > y + safeDistance && anchorY < y + h - safeDistance) { // replace left side + path.splice(33, 3, + 'L', x, anchorY + halfDistance, + x - arrowLength, anchorY, + x, anchorY - halfDistance, + x, y + r + ); + } else if (anchorY && anchorY > h && anchorX > x + safeDistance && anchorX < x + w - safeDistance) { // replace bottom + path.splice(23, 3, + 'L', anchorX + halfDistance, y + h, + anchorX, y + h + arrowLength, + anchorX - halfDistance, y + h, + x + r, y + h + ); + } else if (anchorY && anchorY < 0 && anchorX > x + safeDistance && anchorX < x + w - safeDistance) { // replace top + path.splice(3, 3, + 'L', anchorX - halfDistance, y, + anchorX, y - arrowLength, + anchorX + halfDistance, y, + w - r, y + ); + } + return path; + } + }, + + /** + * Define a clipping rectangle + * @param {String} id + * @param {Number} x + * @param {Number} y + * @param {Number} width + * @param {Number} height + */ + clipRect: function (x, y, width, height) { + var wrapper, + id = PREFIX + idCounter++, + + clipPath = this.createElement('clipPath').attr({ + id: id + }).add(this.defs); + + wrapper = this.rect(x, y, width, height, 0).add(clipPath); + wrapper.id = id; + wrapper.clipPath = clipPath; + + return wrapper; + }, + + + + + + /** + * Add text to the SVG object + * @param {String} str + * @param {Number} x Left position + * @param {Number} y Top position + * @param {Boolean} useHTML Use HTML to render the text + */ + text: function (str, x, y, useHTML) { + + // declare variables + var renderer = this, + fakeSVG = useCanVG || (!hasSVG && renderer.forExport), + wrapper, + attr = {}; + + if (useHTML && !renderer.forExport) { + return renderer.html(str, x, y); + } + + attr.x = Math.round(x || 0); // X is always needed for line-wrap logic + if (y) { + attr.y = Math.round(y); + } + if (str || str === 0) { + attr.text = str; + } + + wrapper = renderer.createElement('text') + .attr(attr); + + // Prevent wrapping from creating false offsetWidths in export in legacy IE (#1079, #1063) + if (fakeSVG) { + wrapper.css({ + position: ABSOLUTE + }); + } + + if (!useHTML) { + wrapper.xSetter = function (value, key, element) { + var childNodes = element.childNodes, + child, + i; + for (i = 1; i < childNodes.length; i++) { + child = childNodes[i]; + // if the x values are equal, the tspan represents a linebreak + if (child.getAttribute('x') === element.getAttribute('x')) { + child.setAttribute('x', value); + } + } + element.setAttribute(key, value); + }; + } + + return wrapper; + }, + + /** + * Utility to return the baseline offset and total line height from the font size + */ + fontMetrics: function (fontSize) { + fontSize = fontSize || this.style.fontSize; + fontSize = /px/.test(fontSize) ? pInt(fontSize) : /em/.test(fontSize) ? parseFloat(fontSize) * 12 : 12; + + // Empirical values found by comparing font size and bounding box height. + // Applies to the default font family. http://jsfiddle.net/highcharts/7xvn7/ + var lineHeight = fontSize < 24 ? fontSize + 4 : mathRound(fontSize * 1.2), + baseline = mathRound(lineHeight * 0.8); + + return { + h: lineHeight, + b: baseline + }; + }, + + /** + * Add a label, a text item that can hold a colored or gradient background + * as well as a border and shadow. + * @param {string} str + * @param {Number} x + * @param {Number} y + * @param {String} shape + * @param {Number} anchorX In case the shape has a pointer, like a flag, this is the + * coordinates it should be pinned to + * @param {Number} anchorY + * @param {Boolean} baseline Whether to position the label relative to the text baseline, + * like renderer.text, or to the upper border of the rectangle. + * @param {String} className Class name for the group + */ + label: function (str, x, y, shape, anchorX, anchorY, useHTML, baseline, className) { + + var renderer = this, + wrapper = renderer.g(className), + text = renderer.text('', 0, 0, useHTML) + .attr({ + zIndex: 1 + }), + //.add(wrapper), + box, + bBox, + alignFactor = 0, + padding = 3, + paddingLeft = 0, + width, + height, + wrapperX, + wrapperY, + crispAdjust = 0, + deferredAttr = {}, + baselineOffset, + needsBox; + + /** + * This function runs after the label is added to the DOM (when the bounding box is + * available), and after the text of the label is updated to detect the new bounding + * box and reflect it in the border box. + */ + function updateBoxSize() { + var boxX, + boxY, + style = text.element.style; + + bBox = (width === undefined || height === undefined || wrapper.styles.textAlign) && text.textStr && + text.getBBox(); + wrapper.width = (width || bBox.width || 0) + 2 * padding + paddingLeft; + wrapper.height = (height || bBox.height || 0) + 2 * padding; + + // update the label-scoped y offset + baselineOffset = padding + renderer.fontMetrics(style && style.fontSize).b; + + + if (needsBox) { + + // create the border box if it is not already present + if (!box) { + boxX = mathRound(-alignFactor * padding); + boxY = baseline ? -baselineOffset : 0; + + wrapper.box = box = shape ? + renderer.symbol(shape, boxX, boxY, wrapper.width, wrapper.height, deferredAttr) : + renderer.rect(boxX, boxY, wrapper.width, wrapper.height, 0, deferredAttr[STROKE_WIDTH]); + box.attr('fill', NONE).add(wrapper); + } + + // apply the box attributes + if (!box.isImg) { // #1630 + box.attr(extend({ + width: mathRound(wrapper.width), + height: mathRound(wrapper.height) + }, deferredAttr)); + } + deferredAttr = null; + } + } + + /** + * This function runs after setting text or padding, but only if padding is changed + */ + function updateTextPadding() { + var styles = wrapper.styles, + textAlign = styles && styles.textAlign, + x = paddingLeft + padding * (1 - alignFactor), + y; + + // determin y based on the baseline + y = baseline ? 0 : baselineOffset; + + // compensate for alignment + if (defined(width) && bBox && (textAlign === 'center' || textAlign === 'right')) { + x += { center: 0.5, right: 1 }[textAlign] * (width - bBox.width); + } + + // update if anything changed + if (x !== text.x || y !== text.y) { + text.attr('x', x); + if (y !== UNDEFINED) { + text.attr('y', y); + } + } + + // record current values + text.x = x; + text.y = y; + } + + /** + * Set a box attribute, or defer it if the box is not yet created + * @param {Object} key + * @param {Object} value + */ + function boxAttr(key, value) { + if (box) { + box.attr(key, value); + } else { + deferredAttr[key] = value; + } + } + + /** + * After the text element is added, get the desired size of the border box + * and add it before the text in the DOM. + */ + wrapper.onAdd = function () { + text.add(wrapper); + wrapper.attr({ + text: str || '', // alignment is available now + x: x, + y: y + }); + + if (box && defined(anchorX)) { + wrapper.attr({ + anchorX: anchorX, + anchorY: anchorY + }); + } + }; + + /* + * Add specific attribute setters. + */ + + // only change local variables + wrapper.widthSetter = function (value) { + width = value; + }; + wrapper.heightSetter = function (value) { + height = value; + }; + wrapper.paddingSetter = function (value) { + if (defined(value) && value !== padding) { + padding = value; + updateTextPadding(); + } + }; + wrapper.paddingLeftSetter = function (value) { + if (defined(value) && value !== paddingLeft) { + paddingLeft = value; + updateTextPadding(); + } + }; + + + // change local variable and prevent setting attribute on the group + wrapper.alignSetter = function (value) { + alignFactor = { left: 0, center: 0.5, right: 1 }[value]; + }; + + // apply these to the box and the text alike + wrapper.textSetter = function (value) { + if (value !== UNDEFINED) { + text.textSetter(value); + } + updateBoxSize(); + updateTextPadding(); + }; + + // apply these to the box but not to the text + wrapper['stroke-widthSetter'] = function (value, key) { + if (value) { + needsBox = true; + } + crispAdjust = value % 2 / 2; + boxAttr(key, value); + }; + wrapper.strokeSetter = wrapper.fillSetter = wrapper.rSetter = function (value, key) { + if (key === 'fill' && value) { + needsBox = true; + } + boxAttr(key, value); + }; + wrapper.anchorXSetter = function (value, key) { + anchorX = value; + boxAttr(key, value + crispAdjust - wrapperX); + }; + wrapper.anchorYSetter = function (value, key) { + anchorY = value; + boxAttr(key, value - wrapperY); + }; + + // rename attributes + wrapper.xSetter = function (value) { + wrapper.x = value; // for animation getter + if (alignFactor) { + value -= alignFactor * ((width || bBox.width) + padding); + } + wrapperX = mathRound(value); + wrapper.attr('translateX', wrapperX); + }; + wrapper.ySetter = function (value) { + wrapperY = wrapper.y = mathRound(value); + wrapper.attr('translateY', wrapperY); + }; + + // Redirect certain methods to either the box or the text + var baseCss = wrapper.css; + return extend(wrapper, { + /** + * Pick up some properties and apply them to the text instead of the wrapper + */ + css: function (styles) { + if (styles) { + var textStyles = {}; + styles = merge(styles); // create a copy to avoid altering the original object (#537) + each(['fontSize', 'fontWeight', 'fontFamily', 'color', 'lineHeight', 'width', 'textDecoration', 'textShadow'], function (prop) { + if (styles[prop] !== UNDEFINED) { + textStyles[prop] = styles[prop]; + delete styles[prop]; + } + }); + text.css(textStyles); + } + return baseCss.call(wrapper, styles); + }, + /** + * Return the bounding box of the box, not the group + */ + getBBox: function () { + return { + width: bBox.width + 2 * padding, + height: bBox.height + 2 * padding, + x: bBox.x - padding, + y: bBox.y - padding + }; + }, + /** + * Apply the shadow to the box + */ + shadow: function (b) { + if (box) { + box.shadow(b); + } + return wrapper; + }, + /** + * Destroy and release memory. + */ + destroy: function () { + + // Added by button implementation + removeEvent(wrapper.element, 'mouseenter'); + removeEvent(wrapper.element, 'mouseleave'); + + if (text) { + text = text.destroy(); + } + if (box) { + box = box.destroy(); + } + // Call base implementation to destroy the rest + SVGElement.prototype.destroy.call(wrapper); + + // Release local pointers (#1298) + wrapper = renderer = updateBoxSize = updateTextPadding = boxAttr = null; + } + }); + } +}; // end SVGRenderer + + +// general renderer +Renderer = SVGRenderer; +// extend SvgElement for useHTML option +extend(SVGElement.prototype, { + /** + * Apply CSS to HTML elements. This is used in text within SVG rendering and + * by the VML renderer + */ + htmlCss: function (styles) { + var wrapper = this, + element = wrapper.element, + textWidth = styles && element.tagName === 'SPAN' && styles.width; + + if (textWidth) { + delete styles.width; + wrapper.textWidth = textWidth; + wrapper.updateTransform(); + } + + wrapper.styles = extend(wrapper.styles, styles); + css(wrapper.element, styles); + + return wrapper; + }, + + /** + * VML and useHTML method for calculating the bounding box based on offsets + * @param {Boolean} refresh Whether to force a fresh value from the DOM or to + * use the cached value + * + * @return {Object} A hash containing values for x, y, width and height + */ + + htmlGetBBox: function () { + var wrapper = this, + element = wrapper.element, + bBox = wrapper.bBox; + + // faking getBBox in exported SVG in legacy IE + if (!bBox) { + // faking getBBox in exported SVG in legacy IE (is this a duplicate of the fix for #1079?) + if (element.nodeName === 'text') { + element.style.position = ABSOLUTE; + } + + bBox = wrapper.bBox = { + x: element.offsetLeft, + y: element.offsetTop, + width: element.offsetWidth, + height: element.offsetHeight + }; + } + + return bBox; + }, + + /** + * VML override private method to update elements based on internal + * properties based on SVG transform + */ + htmlUpdateTransform: function () { + // aligning non added elements is expensive + if (!this.added) { + this.alignOnAdd = true; + return; + } + + var wrapper = this, + renderer = wrapper.renderer, + elem = wrapper.element, + translateX = wrapper.translateX || 0, + translateY = wrapper.translateY || 0, + x = wrapper.x || 0, + y = wrapper.y || 0, + align = wrapper.textAlign || 'left', + alignCorrection = { left: 0, center: 0.5, right: 1 }[align], + shadows = wrapper.shadows; + + // apply translate + css(elem, { + marginLeft: translateX, + marginTop: translateY + }); + if (shadows) { // used in labels/tooltip + each(shadows, function (shadow) { + css(shadow, { + marginLeft: translateX + 1, + marginTop: translateY + 1 + }); + }); + } + + // apply inversion + if (wrapper.inverted) { // wrapper is a group + each(elem.childNodes, function (child) { + renderer.invertChild(child, elem); + }); + } + + if (elem.tagName === 'SPAN') { + + var width, + rotation = wrapper.rotation, + baseline, + textWidth = pInt(wrapper.textWidth), + currentTextTransform = [rotation, align, elem.innerHTML, wrapper.textWidth].join(','); + + if (currentTextTransform !== wrapper.cTT) { // do the calculations and DOM access only if properties changed + + + baseline = renderer.fontMetrics(elem.style.fontSize).b; + + // Renderer specific handling of span rotation + if (defined(rotation)) { + wrapper.setSpanRotation(rotation, alignCorrection, baseline); + } + + width = pick(wrapper.elemWidth, elem.offsetWidth); + + // Update textWidth + if (width > textWidth && /[ \-]/.test(elem.textContent || elem.innerText)) { // #983, #1254 + css(elem, { + width: textWidth + PX, + display: 'block', + whiteSpace: 'normal' + }); + width = textWidth; + } + + wrapper.getSpanCorrection(width, baseline, alignCorrection, rotation, align); + } + + // apply position with correction + css(elem, { + left: (x + (wrapper.xCorr || 0)) + PX, + top: (y + (wrapper.yCorr || 0)) + PX + }); + + // force reflow in webkit to apply the left and top on useHTML element (#1249) + if (isWebKit) { + baseline = elem.offsetHeight; // assigned to baseline for JSLint purpose + } + + // record current text transform + wrapper.cTT = currentTextTransform; + } + }, + + /** + * Set the rotation of an individual HTML span + */ + setSpanRotation: function (rotation, alignCorrection, baseline) { + var rotationStyle = {}, + cssTransformKey = isIE ? '-ms-transform' : isWebKit ? '-webkit-transform' : isFirefox ? 'MozTransform' : isOpera ? '-o-transform' : ''; + + rotationStyle[cssTransformKey] = rotationStyle.transform = 'rotate(' + rotation + 'deg)'; + rotationStyle[cssTransformKey + (isFirefox ? 'Origin' : '-origin')] = rotationStyle.transformOrigin = (alignCorrection * 100) + '% ' + baseline + 'px'; + css(this.element, rotationStyle); + }, + + /** + * Get the correction in X and Y positioning as the element is rotated. + */ + getSpanCorrection: function (width, baseline, alignCorrection) { + this.xCorr = -width * alignCorrection; + this.yCorr = -baseline; + } +}); + +// Extend SvgRenderer for useHTML option. +extend(SVGRenderer.prototype, { + /** + * Create HTML text node. This is used by the VML renderer as well as the SVG + * renderer through the useHTML option. + * + * @param {String} str + * @param {Number} x + * @param {Number} y + */ + html: function (str, x, y) { + var wrapper = this.createElement('span'), + element = wrapper.element, + renderer = wrapper.renderer; + + // Text setter + wrapper.textSetter = function (value) { + if (value !== element.innerHTML) { + delete this.bBox; + } + element.innerHTML = this.textStr = value; + }; + + // Various setters which rely on update transform + wrapper.xSetter = wrapper.ySetter = wrapper.alignSetter = wrapper.rotationSetter = function (value, key) { + if (key === 'align') { + key = 'textAlign'; // Do not overwrite the SVGElement.align method. Same as VML. + } + wrapper[key] = value; + wrapper.htmlUpdateTransform(); + }; + + // Set the default attributes + wrapper.attr({ + text: str, + x: mathRound(x), + y: mathRound(y) + }) + .css({ + position: ABSOLUTE, + whiteSpace: 'nowrap', + fontFamily: this.style.fontFamily, + fontSize: this.style.fontSize + }); + + // Use the HTML specific .css method + wrapper.css = wrapper.htmlCss; + + // This is specific for HTML within SVG + if (renderer.isSVG) { + wrapper.add = function (svgGroupWrapper) { + + var htmlGroup, + container = renderer.box.parentNode, + parentGroup, + parents = []; + + this.parentGroup = svgGroupWrapper; + + // Create a mock group to hold the HTML elements + if (svgGroupWrapper) { + htmlGroup = svgGroupWrapper.div; + if (!htmlGroup) { + + // Read the parent chain into an array and read from top down + parentGroup = svgGroupWrapper; + while (parentGroup) { + + parents.push(parentGroup); + + // Move up to the next parent group + parentGroup = parentGroup.parentGroup; + } + + // Ensure dynamically updating position when any parent is translated + each(parents.reverse(), function (parentGroup) { + var htmlGroupStyle; + + // Create a HTML div and append it to the parent div to emulate + // the SVG group structure + htmlGroup = parentGroup.div = parentGroup.div || createElement(DIV, { + className: attr(parentGroup.element, 'class') + }, { + position: ABSOLUTE, + left: (parentGroup.translateX || 0) + PX, + top: (parentGroup.translateY || 0) + PX + }, htmlGroup || container); // the top group is appended to container + + // Shortcut + htmlGroupStyle = htmlGroup.style; + + // Set listeners to update the HTML div's position whenever the SVG group + // position is changed + extend(parentGroup, { + translateXSetter: function (value, key) { + htmlGroupStyle.left = value + PX; + parentGroup[key] = value; + parentGroup.doTransform = true; + }, + translateYSetter: function (value, key) { + htmlGroupStyle.top = value + PX; + parentGroup[key] = value; + parentGroup.doTransform = true; + }, + visibilitySetter: function (value, key) { + htmlGroupStyle[key] = value; + } + }); + }); + + } + } else { + htmlGroup = container; + } + + htmlGroup.appendChild(element); + + // Shared with VML: + wrapper.added = true; + if (wrapper.alignOnAdd) { + wrapper.htmlUpdateTransform(); + } + + return wrapper; + }; + } + return wrapper; + } +}); + +/* **************************************************************************** + * * + * START OF INTERNET EXPLORER <= 8 SPECIFIC CODE * + * * + * For applications and websites that don't need IE support, like platform * + * targeted mobile apps and web apps, this code can be removed. * + * * + *****************************************************************************/ + +/** + * @constructor + */ +var VMLRenderer, VMLElement; +if (!hasSVG && !useCanVG) { + +/** + * The VML element wrapper. + */ +Highcharts.VMLElement = VMLElement = { + + /** + * Initialize a new VML element wrapper. It builds the markup as a string + * to minimize DOM traffic. + * @param {Object} renderer + * @param {Object} nodeName + */ + init: function (renderer, nodeName) { + var wrapper = this, + markup = ['<', nodeName, ' filled="f" stroked="f"'], + style = ['position: ', ABSOLUTE, ';'], + isDiv = nodeName === DIV; + + // divs and shapes need size + if (nodeName === 'shape' || isDiv) { + style.push('left:0;top:0;width:1px;height:1px;'); + } + style.push('visibility: ', isDiv ? HIDDEN : VISIBLE); + + markup.push(' style="', style.join(''), '"/>'); + + // create element with default attributes and style + if (nodeName) { + markup = isDiv || nodeName === 'span' || nodeName === 'img' ? + markup.join('') + : renderer.prepVML(markup); + wrapper.element = createElement(markup); + } + + wrapper.renderer = renderer; + }, + + /** + * Add the node to the given parent + * @param {Object} parent + */ + add: function (parent) { + var wrapper = this, + renderer = wrapper.renderer, + element = wrapper.element, + box = renderer.box, + inverted = parent && parent.inverted, + + // get the parent node + parentNode = parent ? + parent.element || parent : + box; + + + // if the parent group is inverted, apply inversion on all children + if (inverted) { // only on groups + renderer.invertChild(element, parentNode); + } + + // append it + parentNode.appendChild(element); + + // align text after adding to be able to read offset + wrapper.added = true; + if (wrapper.alignOnAdd && !wrapper.deferUpdateTransform) { + wrapper.updateTransform(); + } + + // fire an event for internal hooks + if (wrapper.onAdd) { + wrapper.onAdd(); + } + + return wrapper; + }, + + /** + * VML always uses htmlUpdateTransform + */ + updateTransform: SVGElement.prototype.htmlUpdateTransform, + + /** + * Set the rotation of a span with oldIE's filter + */ + setSpanRotation: function () { + // Adjust for alignment and rotation. Rotation of useHTML content is not yet implemented + // but it can probably be implemented for Firefox 3.5+ on user request. FF3.5+ + // has support for CSS3 transform. The getBBox method also needs to be updated + // to compensate for the rotation, like it currently does for SVG. + // Test case: http://jsfiddle.net/highcharts/Ybt44/ + + var rotation = this.rotation, + costheta = mathCos(rotation * deg2rad), + sintheta = mathSin(rotation * deg2rad); + + css(this.element, { + filter: rotation ? ['progid:DXImageTransform.Microsoft.Matrix(M11=', costheta, + ', M12=', -sintheta, ', M21=', sintheta, ', M22=', costheta, + ', sizingMethod=\'auto expand\')'].join('') : NONE + }); + }, + + /** + * Get the positioning correction for the span after rotating. + */ + getSpanCorrection: function (width, baseline, alignCorrection, rotation, align) { + + var costheta = rotation ? mathCos(rotation * deg2rad) : 1, + sintheta = rotation ? mathSin(rotation * deg2rad) : 0, + height = pick(this.elemHeight, this.element.offsetHeight), + quad, + nonLeft = align && align !== 'left'; + + // correct x and y + this.xCorr = costheta < 0 && -width; + this.yCorr = sintheta < 0 && -height; + + // correct for baseline and corners spilling out after rotation + quad = costheta * sintheta < 0; + this.xCorr += sintheta * baseline * (quad ? 1 - alignCorrection : alignCorrection); + this.yCorr -= costheta * baseline * (rotation ? (quad ? alignCorrection : 1 - alignCorrection) : 1); + // correct for the length/height of the text + if (nonLeft) { + this.xCorr -= width * alignCorrection * (costheta < 0 ? -1 : 1); + if (rotation) { + this.yCorr -= height * alignCorrection * (sintheta < 0 ? -1 : 1); + } + css(this.element, { + textAlign: align + }); + } + }, + + /** + * Converts a subset of an SVG path definition to its VML counterpart. Takes an array + * as the parameter and returns a string. + */ + pathToVML: function (value) { + // convert paths + var i = value.length, + path = []; + + while (i--) { + + // Multiply by 10 to allow subpixel precision. + // Substracting half a pixel seems to make the coordinates + // align with SVG, but this hasn't been tested thoroughly + if (isNumber(value[i])) { + path[i] = mathRound(value[i] * 10) - 5; + } else if (value[i] === 'Z') { // close the path + path[i] = 'x'; + } else { + path[i] = value[i]; + + // When the start X and end X coordinates of an arc are too close, + // they are rounded to the same value above. In this case, substract or + // add 1 from the end X and Y positions. #186, #760, #1371, #1410. + if (value.isArc && (value[i] === 'wa' || value[i] === 'at')) { + // Start and end X + if (path[i + 5] === path[i + 7]) { + path[i + 7] += value[i + 7] > value[i + 5] ? 1 : -1; + } + // Start and end Y + if (path[i + 6] === path[i + 8]) { + path[i + 8] += value[i + 8] > value[i + 6] ? 1 : -1; + } + } + } + } + + + // Loop up again to handle path shortcuts (#2132) + /*while (i++ < path.length) { + if (path[i] === 'H') { // horizontal line to + path[i] = 'L'; + path.splice(i + 2, 0, path[i - 1]); + } else if (path[i] === 'V') { // vertical line to + path[i] = 'L'; + path.splice(i + 1, 0, path[i - 2]); + } + }*/ + return path.join(' ') || 'x'; + }, + + /** + * Set the element's clipping to a predefined rectangle + * + * @param {String} id The id of the clip rectangle + */ + clip: function (clipRect) { + var wrapper = this, + clipMembers, + cssRet; + + if (clipRect) { + clipMembers = clipRect.members; + erase(clipMembers, wrapper); // Ensure unique list of elements (#1258) + clipMembers.push(wrapper); + wrapper.destroyClip = function () { + erase(clipMembers, wrapper); + }; + cssRet = clipRect.getCSS(wrapper); + + } else { + if (wrapper.destroyClip) { + wrapper.destroyClip(); + } + cssRet = { clip: docMode8 ? 'inherit' : 'rect(auto)' }; // #1214 + } + + return wrapper.css(cssRet); + + }, + + /** + * Set styles for the element + * @param {Object} styles + */ + css: SVGElement.prototype.htmlCss, + + /** + * Removes a child either by removeChild or move to garbageBin. + * Issue 490; in VML removeChild results in Orphaned nodes according to sIEve, discardElement does not. + */ + safeRemoveChild: function (element) { + // discardElement will detach the node from its parent before attaching it + // to the garbage bin. Therefore it is important that the node is attached and have parent. + if (element.parentNode) { + discardElement(element); + } + }, + + /** + * Extend element.destroy by removing it from the clip members array + */ + destroy: function () { + if (this.destroyClip) { + this.destroyClip(); + } + + return SVGElement.prototype.destroy.apply(this); + }, + + /** + * Add an event listener. VML override for normalizing event parameters. + * @param {String} eventType + * @param {Function} handler + */ + on: function (eventType, handler) { + // simplest possible event model for internal use + this.element['on' + eventType] = function () { + var evt = win.event; + evt.target = evt.srcElement; + handler(evt); + }; + return this; + }, + + /** + * In stacked columns, cut off the shadows so that they don't overlap + */ + cutOffPath: function (path, length) { + + var len; + + path = path.split(/[ ,]/); + len = path.length; + + if (len === 9 || len === 11) { + path[len - 4] = path[len - 2] = pInt(path[len - 2]) - 10 * length; + } + return path.join(' '); + }, + + /** + * Apply a drop shadow by copying elements and giving them different strokes + * @param {Boolean|Object} shadowOptions + */ + shadow: function (shadowOptions, group, cutOff) { + var shadows = [], + i, + element = this.element, + renderer = this.renderer, + shadow, + elemStyle = element.style, + markup, + path = element.path, + strokeWidth, + modifiedPath, + shadowWidth, + shadowElementOpacity; + + // some times empty paths are not strings + if (path && typeof path.value !== 'string') { + path = 'x'; + } + modifiedPath = path; + + if (shadowOptions) { + shadowWidth = pick(shadowOptions.width, 3); + shadowElementOpacity = (shadowOptions.opacity || 0.15) / shadowWidth; + for (i = 1; i <= 3; i++) { + + strokeWidth = (shadowWidth * 2) + 1 - (2 * i); + + // Cut off shadows for stacked column items + if (cutOff) { + modifiedPath = this.cutOffPath(path.value, strokeWidth + 0.5); + } + + markup = ['']; + + shadow = createElement(renderer.prepVML(markup), + null, { + left: pInt(elemStyle.left) + pick(shadowOptions.offsetX, 1), + top: pInt(elemStyle.top) + pick(shadowOptions.offsetY, 1) + } + ); + if (cutOff) { + shadow.cutOff = strokeWidth + 1; + } + + // apply the opacity + markup = ['']; + createElement(renderer.prepVML(markup), null, null, shadow); + + + // insert it + if (group) { + group.element.appendChild(shadow); + } else { + element.parentNode.insertBefore(shadow, element); + } + + // record it + shadows.push(shadow); + + } + + this.shadows = shadows; + } + return this; + }, + updateShadows: noop, // Used in SVG only + + setAttr: function (key, value) { + if (docMode8) { // IE8 setAttribute bug + this.element[key] = value; + } else { + this.element.setAttribute(key, value); + } + }, + classSetter: function (value) { + // IE8 Standards mode has problems retrieving the className unless set like this + this.element.className = value; + }, + dashstyleSetter: function (value, key, element) { + var strokeElem = element.getElementsByTagName('stroke')[0] || + createElement(this.renderer.prepVML(['']), null, null, element); + strokeElem[key] = value || 'solid'; + this[key] = value; /* because changing stroke-width will change the dash length + and cause an epileptic effect */ + }, + dSetter: function (value, key, element) { + var i, + shadows = this.shadows; + value = value || []; + this.d = value.join(' '); // used in getter for animation + + element.path = value = this.pathToVML(value); + + // update shadows + if (shadows) { + i = shadows.length; + while (i--) { + shadows[i].path = shadows[i].cutOff ? this.cutOffPath(value, shadows[i].cutOff) : value; + } + } + this.setAttr(key, value); + }, + fillSetter: function (value, key, element) { + var nodeName = element.nodeName; + if (nodeName === 'SPAN') { // text color + element.style.color = value; + } else if (nodeName !== 'IMG') { // #1336 + element.filled = value !== NONE; + this.setAttr('fillcolor', this.renderer.color(value, element, key, this)); + } + }, + opacitySetter: noop, // Don't bother - animation is too slow and filters introduce artifacts + rotationSetter: function (value, key, element) { + var style = element.style; + this[key] = style[key] = value; // style is for #1873 + + // Correction for the 1x1 size of the shape container. Used in gauge needles. + style.left = -mathRound(mathSin(value * deg2rad) + 1) + PX; + style.top = mathRound(mathCos(value * deg2rad)) + PX; + }, + strokeSetter: function (value, key, element) { + this.setAttr('strokecolor', this.renderer.color(value, element, key)); + }, + 'stroke-widthSetter': function (value, key, element) { + element.stroked = !!value; // VML "stroked" attribute + this[key] = value; // used in getter, issue #113 + if (isNumber(value)) { + value += PX; + } + this.setAttr('strokeweight', value); + }, + titleSetter: function (value, key) { + this.setAttr(key, value); + }, + visibilitySetter: function (value, key, element) { + + // Handle inherited visibility + if (value === 'inherit') { + value = VISIBLE; + } + + // Let the shadow follow the main element + if (this.shadows) { + each(this.shadows, function (shadow) { + shadow.style[key] = value; + }); + } + + // Instead of toggling the visibility CSS property, move the div out of the viewport. + // This works around #61 and #586 + if (element.nodeName === 'DIV') { + value = value === HIDDEN ? '-999em' : 0; + + // In order to redraw, IE7 needs the div to be visible when tucked away + // outside the viewport. So the visibility is actually opposite of + // the expected value. This applies to the tooltip only. + if (!docMode8) { + element.style[key] = value ? VISIBLE : HIDDEN; + } + key = 'top'; + } + element.style[key] = value; + }, + xSetter: function (value, key, element) { + this[key] = value; // used in getter + + if (key === 'x') { + key = 'left'; + } else if (key === 'y') { + key = 'top'; + }/* else { + value = mathMax(0, value); // don't set width or height below zero (#311) + }*/ + + // clipping rectangle special + if (this.updateClipping) { + this[key] = value; // the key is now 'left' or 'top' for 'x' and 'y' + this.updateClipping(); + } else { + // normal + element.style[key] = value; + } + }, + zIndexSetter: function (value, key, element) { + element.style[key] = value; + } +}; +VMLElement = extendClass(SVGElement, VMLElement); + +// Some shared setters +VMLElement.prototype.ySetter = + VMLElement.prototype.widthSetter = + VMLElement.prototype.heightSetter = + VMLElement.prototype.xSetter; + + +/** + * The VML renderer + */ +var VMLRendererExtension = { // inherit SVGRenderer + + Element: VMLElement, + isIE8: userAgent.indexOf('MSIE 8.0') > -1, + + + /** + * Initialize the VMLRenderer + * @param {Object} container + * @param {Number} width + * @param {Number} height + */ + init: function (container, width, height, style) { + var renderer = this, + boxWrapper, + box, + css; + + renderer.alignedObjects = []; + + boxWrapper = renderer.createElement(DIV) + .css(extend(this.getStyle(style), { position: RELATIVE})); + box = boxWrapper.element; + container.appendChild(boxWrapper.element); + + + // generate the containing box + renderer.isVML = true; + renderer.box = box; + renderer.boxWrapper = boxWrapper; + renderer.cache = {}; + + + renderer.setSize(width, height, false); + + // The only way to make IE6 and IE7 print is to use a global namespace. However, + // with IE8 the only way to make the dynamic shapes visible in screen and print mode + // seems to be to add the xmlns attribute and the behaviour style inline. + if (!doc.namespaces.hcv) { + + doc.namespaces.add('hcv', 'urn:schemas-microsoft-com:vml'); + + // Setup default CSS (#2153, #2368, #2384) + css = 'hcv\\:fill, hcv\\:path, hcv\\:shape, hcv\\:stroke' + + '{ behavior:url(#default#VML); display: inline-block; } '; + try { + doc.createStyleSheet().cssText = css; + } catch (e) { + doc.styleSheets[0].cssText += css; + } + + } + }, + + + /** + * Detect whether the renderer is hidden. This happens when one of the parent elements + * has display: none + */ + isHidden: function () { + return !this.box.offsetWidth; + }, + + /** + * Define a clipping rectangle. In VML it is accomplished by storing the values + * for setting the CSS style to all associated members. + * + * @param {Number} x + * @param {Number} y + * @param {Number} width + * @param {Number} height + */ + clipRect: function (x, y, width, height) { + + // create a dummy element + var clipRect = this.createElement(), + isObj = isObject(x); + + // mimic a rectangle with its style object for automatic updating in attr + return extend(clipRect, { + members: [], + left: (isObj ? x.x : x) + 1, + top: (isObj ? x.y : y) + 1, + width: (isObj ? x.width : width) - 1, + height: (isObj ? x.height : height) - 1, + getCSS: function (wrapper) { + var element = wrapper.element, + nodeName = element.nodeName, + isShape = nodeName === 'shape', + inverted = wrapper.inverted, + rect = this, + top = rect.top - (isShape ? element.offsetTop : 0), + left = rect.left, + right = left + rect.width, + bottom = top + rect.height, + ret = { + clip: 'rect(' + + mathRound(inverted ? left : top) + 'px,' + + mathRound(inverted ? bottom : right) + 'px,' + + mathRound(inverted ? right : bottom) + 'px,' + + mathRound(inverted ? top : left) + 'px)' + }; + + // issue 74 workaround + if (!inverted && docMode8 && nodeName === 'DIV') { + extend(ret, { + width: right + PX, + height: bottom + PX + }); + } + return ret; + }, + + // used in attr and animation to update the clipping of all members + updateClipping: function () { + each(clipRect.members, function (member) { + if (member.element) { // Deleted series, like in stock/members/series-remove demo. Should be removed from members, but this will do. + member.css(clipRect.getCSS(member)); + } + }); + } + }); + + }, + + + /** + * Take a color and return it if it's a string, make it a gradient if it's a + * gradient configuration object, and apply opacity. + * + * @param {Object} color The color or config object + */ + color: function (color, elem, prop, wrapper) { + var renderer = this, + colorObject, + regexRgba = /^rgba/, + markup, + fillType, + ret = NONE; + + // Check for linear or radial gradient + if (color && color.linearGradient) { + fillType = 'gradient'; + } else if (color && color.radialGradient) { + fillType = 'pattern'; + } + + + if (fillType) { + + var stopColor, + stopOpacity, + gradient = color.linearGradient || color.radialGradient, + x1, + y1, + x2, + y2, + opacity1, + opacity2, + color1, + color2, + fillAttr = '', + stops = color.stops, + firstStop, + lastStop, + colors = [], + addFillNode = function () { + // Add the fill subnode. When colors attribute is used, the meanings of opacity and o:opacity2 + // are reversed. + markup = ['']; + createElement(renderer.prepVML(markup), null, null, elem); + }; + + // Extend from 0 to 1 + firstStop = stops[0]; + lastStop = stops[stops.length - 1]; + if (firstStop[0] > 0) { + stops.unshift([ + 0, + firstStop[1] + ]); + } + if (lastStop[0] < 1) { + stops.push([ + 1, + lastStop[1] + ]); + } + + // Compute the stops + each(stops, function (stop, i) { + if (regexRgba.test(stop[1])) { + colorObject = Color(stop[1]); + stopColor = colorObject.get('rgb'); + stopOpacity = colorObject.get('a'); + } else { + stopColor = stop[1]; + stopOpacity = 1; + } + + // Build the color attribute + colors.push((stop[0] * 100) + '% ' + stopColor); + + // Only start and end opacities are allowed, so we use the first and the last + if (!i) { + opacity1 = stopOpacity; + color2 = stopColor; + } else { + opacity2 = stopOpacity; + color1 = stopColor; + } + }); + + // Apply the gradient to fills only. + if (prop === 'fill') { + + // Handle linear gradient angle + if (fillType === 'gradient') { + x1 = gradient.x1 || gradient[0] || 0; + y1 = gradient.y1 || gradient[1] || 0; + x2 = gradient.x2 || gradient[2] || 0; + y2 = gradient.y2 || gradient[3] || 0; + fillAttr = 'angle="' + (90 - math.atan( + (y2 - y1) / // y vector + (x2 - x1) // x vector + ) * 180 / mathPI) + '"'; + + addFillNode(); + + // Radial (circular) gradient + } else { + + var r = gradient.r, + sizex = r * 2, + sizey = r * 2, + cx = gradient.cx, + cy = gradient.cy, + radialReference = elem.radialReference, + bBox, + applyRadialGradient = function () { + if (radialReference) { + bBox = wrapper.getBBox(); + cx += (radialReference[0] - bBox.x) / bBox.width - 0.5; + cy += (radialReference[1] - bBox.y) / bBox.height - 0.5; + sizex *= radialReference[2] / bBox.width; + sizey *= radialReference[2] / bBox.height; + } + fillAttr = 'src="' + defaultOptions.global.VMLRadialGradientURL + '" ' + + 'size="' + sizex + ',' + sizey + '" ' + + 'origin="0.5,0.5" ' + + 'position="' + cx + ',' + cy + '" ' + + 'color2="' + color2 + '" '; + + addFillNode(); + }; + + // Apply radial gradient + if (wrapper.added) { + applyRadialGradient(); + } else { + // We need to know the bounding box to get the size and position right + wrapper.onAdd = applyRadialGradient; + } + + // The fill element's color attribute is broken in IE8 standards mode, so we + // need to set the parent shape's fillcolor attribute instead. + ret = color1; + } + + // Gradients are not supported for VML stroke, return the first color. #722. + } else { + ret = stopColor; + } + + // if the color is an rgba color, split it and add a fill node + // to hold the opacity component + } else if (regexRgba.test(color) && elem.tagName !== 'IMG') { + + colorObject = Color(color); + + markup = ['<', prop, ' opacity="', colorObject.get('a'), '"/>']; + createElement(this.prepVML(markup), null, null, elem); + + ret = colorObject.get('rgb'); + + + } else { + var propNodes = elem.getElementsByTagName(prop); // 'stroke' or 'fill' node + if (propNodes.length) { + propNodes[0].opacity = 1; + propNodes[0].type = 'solid'; + } + ret = color; + } + + return ret; + }, + + /** + * Take a VML string and prepare it for either IE8 or IE6/IE7. + * @param {Array} markup A string array of the VML markup to prepare + */ + prepVML: function (markup) { + var vmlStyle = 'display:inline-block;behavior:url(#default#VML);', + isIE8 = this.isIE8; + + markup = markup.join(''); + + if (isIE8) { // add xmlns and style inline + markup = markup.replace('/>', ' xmlns="urn:schemas-microsoft-com:vml" />'); + if (markup.indexOf('style="') === -1) { + markup = markup.replace('/>', ' style="' + vmlStyle + '" />'); + } else { + markup = markup.replace('style="', 'style="' + vmlStyle); + } + + } else { // add namespace + markup = markup.replace('<', ' 1) { + obj.attr({ + x: x, + y: y, + width: width, + height: height + }); + } + return obj; + }, + + /** + * For rectangles, VML uses a shape for rect to overcome bugs and rotation problems + */ + createElement: function (nodeName) { + return nodeName === 'rect' ? this.symbol(nodeName) : SVGRenderer.prototype.createElement.call(this, nodeName); + }, + + /** + * In the VML renderer, each child of an inverted div (group) is inverted + * @param {Object} element + * @param {Object} parentNode + */ + invertChild: function (element, parentNode) { + var ren = this, + parentStyle = parentNode.style, + imgStyle = element.tagName === 'IMG' && element.style; // #1111 + + css(element, { + flip: 'x', + left: pInt(parentStyle.width) - (imgStyle ? pInt(imgStyle.top) : 1), + top: pInt(parentStyle.height) - (imgStyle ? pInt(imgStyle.left) : 1), + rotation: -90 + }); + + // Recursively invert child elements, needed for nested composite shapes like box plots and error bars. #1680, #1806. + each(element.childNodes, function (child) { + ren.invertChild(child, element); + }); + }, + + /** + * Symbol definitions that override the parent SVG renderer's symbols + * + */ + symbols: { + // VML specific arc function + arc: function (x, y, w, h, options) { + var start = options.start, + end = options.end, + radius = options.r || w || h, + innerRadius = options.innerR, + cosStart = mathCos(start), + sinStart = mathSin(start), + cosEnd = mathCos(end), + sinEnd = mathSin(end), + ret; + + if (end - start === 0) { // no angle, don't show it. + return ['x']; + } + + ret = [ + 'wa', // clockwise arc to + x - radius, // left + y - radius, // top + x + radius, // right + y + radius, // bottom + x + radius * cosStart, // start x + y + radius * sinStart, // start y + x + radius * cosEnd, // end x + y + radius * sinEnd // end y + ]; + + if (options.open && !innerRadius) { + ret.push( + 'e', + M, + x,// - innerRadius, + y// - innerRadius + ); + } + + ret.push( + 'at', // anti clockwise arc to + x - innerRadius, // left + y - innerRadius, // top + x + innerRadius, // right + y + innerRadius, // bottom + x + innerRadius * cosEnd, // start x + y + innerRadius * sinEnd, // start y + x + innerRadius * cosStart, // end x + y + innerRadius * sinStart, // end y + 'x', // finish path + 'e' // close + ); + + ret.isArc = true; + return ret; + + }, + // Add circle symbol path. This performs significantly faster than v:oval. + circle: function (x, y, w, h, wrapper) { + + if (wrapper) { + w = h = 2 * wrapper.r; + } + + // Center correction, #1682 + if (wrapper && wrapper.isCircle) { + x -= w / 2; + y -= h / 2; + } + + // Return the path + return [ + 'wa', // clockwisearcto + x, // left + y, // top + x + w, // right + y + h, // bottom + x + w, // start x + y + h / 2, // start y + x + w, // end x + y + h / 2, // end y + //'x', // finish path + 'e' // close + ]; + }, + /** + * Add rectangle symbol path which eases rotation and omits arcsize problems + * compared to the built-in VML roundrect shape. When borders are not rounded, + * use the simpler square path, else use the callout path without the arrow. + */ + rect: function (x, y, w, h, options) { + return SVGRenderer.prototype.symbols[ + !defined(options) || !options.r ? 'square' : 'callout' + ].call(0, x, y, w, h, options); + } + } +}; +Highcharts.VMLRenderer = VMLRenderer = function () { + this.init.apply(this, arguments); +}; +VMLRenderer.prototype = merge(SVGRenderer.prototype, VMLRendererExtension); + + // general renderer + Renderer = VMLRenderer; +} + +// This method is used with exporting in old IE, when emulating SVG (see #2314) +SVGRenderer.prototype.measureSpanWidth = function (text, styles) { + var measuringSpan = doc.createElement('span'), + offsetWidth, + textNode = doc.createTextNode(text); + + measuringSpan.appendChild(textNode); + css(measuringSpan, styles); + this.box.appendChild(measuringSpan); + offsetWidth = measuringSpan.offsetWidth; + discardElement(measuringSpan); // #2463 + return offsetWidth; +}; + + +/* **************************************************************************** + * * + * END OF INTERNET EXPLORER <= 8 SPECIFIC CODE * + * * + *****************************************************************************/ +/* **************************************************************************** + * * + * START OF ANDROID < 3 SPECIFIC CODE. THIS CAN BE REMOVED IF YOU'RE NOT * + * TARGETING THAT SYSTEM. * + * * + *****************************************************************************/ +var CanVGRenderer, + CanVGController; + +if (useCanVG) { + /** + * The CanVGRenderer is empty from start to keep the source footprint small. + * When requested, the CanVGController downloads the rest of the source packaged + * together with the canvg library. + */ + Highcharts.CanVGRenderer = CanVGRenderer = function () { + // Override the global SVG namespace to fake SVG/HTML that accepts CSS + SVG_NS = 'http://www.w3.org/1999/xhtml'; + }; + + /** + * Start with an empty symbols object. This is needed when exporting is used (exporting.src.js will add a few symbols), but + * the implementation from SvgRenderer will not be merged in until first render. + */ + CanVGRenderer.prototype.symbols = {}; + + /** + * Handles on demand download of canvg rendering support. + */ + CanVGController = (function () { + // List of renderering calls + var deferredRenderCalls = []; + + /** + * When downloaded, we are ready to draw deferred charts. + */ + function drawDeferred() { + var callLength = deferredRenderCalls.length, + callIndex; + + // Draw all pending render calls + for (callIndex = 0; callIndex < callLength; callIndex++) { + deferredRenderCalls[callIndex](); + } + // Clear the list + deferredRenderCalls = []; + } + + return { + push: function (func, scriptLocation) { + // Only get the script once + if (deferredRenderCalls.length === 0) { + getScript(scriptLocation, drawDeferred); + } + // Register render call + deferredRenderCalls.push(func); + } + }; + }()); + + Renderer = CanVGRenderer; +} // end CanVGRenderer + +/* **************************************************************************** + * * + * END OF ANDROID < 3 SPECIFIC CODE * + * * + *****************************************************************************/ + +/** + * The Tick class + */ +function Tick(axis, pos, type, noLabel) { + this.axis = axis; + this.pos = pos; + this.type = type || ''; + this.isNew = true; + + if (!type && !noLabel) { + this.addLabel(); + } +} + +Tick.prototype = { + /** + * Write the tick label + */ + addLabel: function () { + var tick = this, + axis = tick.axis, + options = axis.options, + chart = axis.chart, + horiz = axis.horiz, + categories = axis.categories, + names = axis.names, + pos = tick.pos, + labelOptions = options.labels, + str, + tickPositions = axis.tickPositions, + width = (horiz && categories && + !labelOptions.step && !labelOptions.staggerLines && + !labelOptions.rotation && + chart.plotWidth / tickPositions.length) || + (!horiz && (chart.margin[3] || chart.chartWidth * 0.33)), // #1580, #1931 + isFirst = pos === tickPositions[0], + isLast = pos === tickPositions[tickPositions.length - 1], + css, + attr, + value = categories ? + pick(categories[pos], names[pos], pos) : + pos, + label = tick.label, + tickPositionInfo = tickPositions.info, + dateTimeLabelFormat; + + // Set the datetime label format. If a higher rank is set for this position, use that. If not, + // use the general format. + if (axis.isDatetimeAxis && tickPositionInfo) { + dateTimeLabelFormat = options.dateTimeLabelFormats[tickPositionInfo.higherRanks[pos] || tickPositionInfo.unitName]; + } + // set properties for access in render method + tick.isFirst = isFirst; + tick.isLast = isLast; + + // get the string + str = axis.labelFormatter.call({ + axis: axis, + chart: chart, + isFirst: isFirst, + isLast: isLast, + dateTimeLabelFormat: dateTimeLabelFormat, + value: axis.isLog ? correctFloat(lin2log(value)) : value + }); + + // prepare CSS + css = width && { width: mathMax(1, mathRound(width - 2 * (labelOptions.padding || 10))) + PX }; + css = extend(css, labelOptions.style); + + // first call + if (!defined(label)) { + attr = { + align: axis.labelAlign + }; + if (isNumber(labelOptions.rotation)) { + attr.rotation = labelOptions.rotation; + } + if (width && labelOptions.ellipsis) { + attr._clipHeight = axis.len / tickPositions.length; + } + + tick.label = + defined(str) && labelOptions.enabled ? + chart.renderer.text( + str, + 0, + 0, + labelOptions.useHTML + ) + .attr(attr) + // without position absolute, IE export sometimes is wrong + .css(css) + .add(axis.labelGroup) : + null; + + // update + } else if (label) { + label.attr({ + text: str + }) + .css(css); + } + }, + + /** + * Get the offset height or width of the label + */ + getLabelSize: function () { + var label = this.label, + axis = this.axis; + return label ? + label.getBBox()[axis.horiz ? 'height' : 'width'] : + 0; + }, + + /** + * Find how far the labels extend to the right and left of the tick's x position. Used for anti-collision + * detection with overflow logic. + */ + getLabelSides: function () { + var bBox = this.label.getBBox(), + axis = this.axis, + horiz = axis.horiz, + options = axis.options, + labelOptions = options.labels, + size = horiz ? bBox.width : bBox.height, + leftSide = horiz ? + labelOptions.x - size * { left: 0, center: 0.5, right: 1 }[axis.labelAlign] : + 0, + rightSide = horiz ? + size + leftSide : + size; + + return [leftSide, rightSide]; + }, + + /** + * Handle the label overflow by adjusting the labels to the left and right edge, or + * hide them if they collide into the neighbour label. + */ + handleOverflow: function (index, xy) { + var show = true, + axis = this.axis, + isFirst = this.isFirst, + isLast = this.isLast, + horiz = axis.horiz, + pxPos = horiz ? xy.x : xy.y, + reversed = axis.reversed, + tickPositions = axis.tickPositions, + sides = this.getLabelSides(), + leftSide = sides[0], + rightSide = sides[1], + axisLeft, + axisRight, + neighbour, + neighbourEdge, + line = this.label.line || 0, + labelEdge = axis.labelEdge, + justifyLabel = axis.justifyLabels && (isFirst || isLast), + justifyToPlot; + + // Hide it if it now overlaps the neighbour label + if (labelEdge[line] === UNDEFINED || pxPos + leftSide > labelEdge[line]) { + labelEdge[line] = pxPos + rightSide; + + } else if (!justifyLabel) { + show = false; + } + + if (justifyLabel) { + justifyToPlot = axis.justifyToPlot; + axisLeft = justifyToPlot ? axis.pos : 0; + axisRight = justifyToPlot ? axisLeft + axis.len : axis.chart.chartWidth; + + // Find the firsth neighbour on the same line + do { + index += (isFirst ? 1 : -1); + neighbour = axis.ticks[tickPositions[index]]; + } while (tickPositions[index] && (!neighbour || neighbour.label.line !== line)); + + neighbourEdge = neighbour && neighbour.label.xy && neighbour.label.xy.x + neighbour.getLabelSides()[isFirst ? 0 : 1]; + + if ((isFirst && !reversed) || (isLast && reversed)) { + // Is the label spilling out to the left of the plot area? + if (pxPos + leftSide < axisLeft) { + + // Align it to plot left + pxPos = axisLeft - leftSide; + + // Hide it if it now overlaps the neighbour label + if (neighbour && pxPos + rightSide > neighbourEdge) { + show = false; + } + } + + } else { + // Is the label spilling out to the right of the plot area? + if (pxPos + rightSide > axisRight) { + + // Align it to plot right + pxPos = axisRight - rightSide; + + // Hide it if it now overlaps the neighbour label + if (neighbour && pxPos + leftSide < neighbourEdge) { + show = false; + } + + } + } + + // Set the modified x position of the label + xy.x = pxPos; + } + return show; + }, + + /** + * Get the x and y position for ticks and labels + */ + getPosition: function (horiz, pos, tickmarkOffset, old) { + var axis = this.axis, + chart = axis.chart, + cHeight = (old && chart.oldChartHeight) || chart.chartHeight; + + return { + x: horiz ? + axis.translate(pos + tickmarkOffset, null, null, old) + axis.transB : + axis.left + axis.offset + (axis.opposite ? ((old && chart.oldChartWidth) || chart.chartWidth) - axis.right - axis.left : 0), + + y: horiz ? + cHeight - axis.bottom + axis.offset - (axis.opposite ? axis.height : 0) : + cHeight - axis.translate(pos + tickmarkOffset, null, null, old) - axis.transB + }; + + }, + + /** + * Get the x, y position of the tick label + */ + getLabelPosition: function (x, y, label, horiz, labelOptions, tickmarkOffset, index, step) { + var axis = this.axis, + transA = axis.transA, + reversed = axis.reversed, + staggerLines = axis.staggerLines, + baseline = axis.chart.renderer.fontMetrics(labelOptions.style.fontSize).b, + rotation = labelOptions.rotation; + + x = x + labelOptions.x - (tickmarkOffset && horiz ? + tickmarkOffset * transA * (reversed ? -1 : 1) : 0); + y = y + labelOptions.y - (tickmarkOffset && !horiz ? + tickmarkOffset * transA * (reversed ? 1 : -1) : 0); + + // Correct for rotation (#1764) + if (rotation && axis.side === 2) { + y -= baseline - baseline * mathCos(rotation * deg2rad); + } + + // Vertically centered + if (!defined(labelOptions.y) && !rotation) { // #1951 + y += baseline - label.getBBox().height / 2; + } + + // Correct for staggered labels + if (staggerLines) { + label.line = (index / (step || 1) % staggerLines); + y += label.line * (axis.labelOffset / staggerLines); + } + + return { + x: x, + y: y + }; + }, + + /** + * Extendible method to return the path of the marker + */ + getMarkPath: function (x, y, tickLength, tickWidth, horiz, renderer) { + return renderer.crispLine([ + M, + x, + y, + L, + x + (horiz ? 0 : -tickLength), + y + (horiz ? tickLength : 0) + ], tickWidth); + }, + + /** + * Put everything in place + * + * @param index {Number} + * @param old {Boolean} Use old coordinates to prepare an animation into new position + */ + render: function (index, old, opacity) { + var tick = this, + axis = tick.axis, + options = axis.options, + chart = axis.chart, + renderer = chart.renderer, + horiz = axis.horiz, + type = tick.type, + label = tick.label, + pos = tick.pos, + labelOptions = options.labels, + gridLine = tick.gridLine, + gridPrefix = type ? type + 'Grid' : 'grid', + tickPrefix = type ? type + 'Tick' : 'tick', + gridLineWidth = options[gridPrefix + 'LineWidth'], + gridLineColor = options[gridPrefix + 'LineColor'], + dashStyle = options[gridPrefix + 'LineDashStyle'], + tickLength = options[tickPrefix + 'Length'], + tickWidth = options[tickPrefix + 'Width'] || 0, + tickColor = options[tickPrefix + 'Color'], + tickPosition = options[tickPrefix + 'Position'], + gridLinePath, + mark = tick.mark, + markPath, + step = labelOptions.step, + attribs, + show = true, + tickmarkOffset = axis.tickmarkOffset, + xy = tick.getPosition(horiz, pos, tickmarkOffset, old), + x = xy.x, + y = xy.y, + reverseCrisp = ((horiz && x === axis.pos + axis.len) || (!horiz && y === axis.pos)) ? -1 : 1; // #1480, #1687 + + this.isActive = true; + + // create the grid line + if (gridLineWidth) { + gridLinePath = axis.getPlotLinePath(pos + tickmarkOffset, gridLineWidth * reverseCrisp, old, true); + + if (gridLine === UNDEFINED) { + attribs = { + stroke: gridLineColor, + 'stroke-width': gridLineWidth + }; + if (dashStyle) { + attribs.dashstyle = dashStyle; + } + if (!type) { + attribs.zIndex = 1; + } + if (old) { + attribs.opacity = 0; + } + tick.gridLine = gridLine = + gridLineWidth ? + renderer.path(gridLinePath) + .attr(attribs).add(axis.gridGroup) : + null; + } + + // If the parameter 'old' is set, the current call will be followed + // by another call, therefore do not do any animations this time + if (!old && gridLine && gridLinePath) { + gridLine[tick.isNew ? 'attr' : 'animate']({ + d: gridLinePath, + opacity: opacity + }); + } + } + + // create the tick mark + if (tickWidth && tickLength) { + + // negate the length + if (tickPosition === 'inside') { + tickLength = -tickLength; + } + if (axis.opposite) { + tickLength = -tickLength; + } + + markPath = tick.getMarkPath(x, y, tickLength, tickWidth * reverseCrisp, horiz, renderer); + if (mark) { // updating + mark.animate({ + d: markPath, + opacity: opacity + }); + } else { // first time + tick.mark = renderer.path( + markPath + ).attr({ + stroke: tickColor, + 'stroke-width': tickWidth, + opacity: opacity + }).add(axis.axisGroup); + } + } + + // the label is created on init - now move it into place + if (label && !isNaN(x)) { + label.xy = xy = tick.getLabelPosition(x, y, label, horiz, labelOptions, tickmarkOffset, index, step); + + // Apply show first and show last. If the tick is both first and last, it is + // a single centered tick, in which case we show the label anyway (#2100). + if ((tick.isFirst && !tick.isLast && !pick(options.showFirstLabel, 1)) || + (tick.isLast && !tick.isFirst && !pick(options.showLastLabel, 1))) { + show = false; + + // Handle label overflow and show or hide accordingly + } else if (!axis.isRadial && !labelOptions.step && !labelOptions.rotation && !old && opacity !== 0) { + show = tick.handleOverflow(index, xy); + } + + // apply step + if (step && index % step) { + // show those indices dividable by step + show = false; + } + + // Set the new position, and show or hide + if (show && !isNaN(xy.y)) { + xy.opacity = opacity; + label[tick.isNew ? 'attr' : 'animate'](xy); + tick.isNew = false; + } else { + label.attr('y', -9999); // #1338 + } + } + }, + + /** + * Destructor for the tick prototype + */ + destroy: function () { + destroyObjectProperties(this, this.axis); + } +}; + +/** + * The object wrapper for plot lines and plot bands + * @param {Object} options + */ +Highcharts.PlotLineOrBand = function (axis, options) { + this.axis = axis; + + if (options) { + this.options = options; + this.id = options.id; + } +}; + +Highcharts.PlotLineOrBand.prototype = { + + /** + * Render the plot line or plot band. If it is already existing, + * move it. + */ + render: function () { + var plotLine = this, + axis = plotLine.axis, + horiz = axis.horiz, + halfPointRange = (axis.pointRange || 0) / 2, + options = plotLine.options, + optionsLabel = options.label, + label = plotLine.label, + width = options.width, + to = options.to, + from = options.from, + isBand = defined(from) && defined(to), + value = options.value, + dashStyle = options.dashStyle, + svgElem = plotLine.svgElem, + path = [], + addEvent, + eventType, + xs, + ys, + x, + y, + color = options.color, + zIndex = options.zIndex, + events = options.events, + attribs = {}, + renderer = axis.chart.renderer; + + // logarithmic conversion + if (axis.isLog) { + from = log2lin(from); + to = log2lin(to); + value = log2lin(value); + } + + // plot line + if (width) { + path = axis.getPlotLinePath(value, width); + attribs = { + stroke: color, + 'stroke-width': width + }; + if (dashStyle) { + attribs.dashstyle = dashStyle; + } + } else if (isBand) { // plot band + + // keep within plot area + from = mathMax(from, axis.min - halfPointRange); + to = mathMin(to, axis.max + halfPointRange); + + path = axis.getPlotBandPath(from, to, options); + if (color) { + attribs.fill = color; + } + if (options.borderWidth) { + attribs.stroke = options.borderColor; + attribs['stroke-width'] = options.borderWidth; + } + } else { + return; + } + // zIndex + if (defined(zIndex)) { + attribs.zIndex = zIndex; + } + + // common for lines and bands + if (svgElem) { + if (path) { + svgElem.animate({ + d: path + }, null, svgElem.onGetPath); + } else { + svgElem.hide(); + svgElem.onGetPath = function () { + svgElem.show(); + }; + if (label) { + plotLine.label = label = label.destroy(); + } + } + } else if (path && path.length) { + plotLine.svgElem = svgElem = renderer.path(path) + .attr(attribs).add(); + + // events + if (events) { + addEvent = function (eventType) { + svgElem.on(eventType, function (e) { + events[eventType].apply(plotLine, [e]); + }); + }; + for (eventType in events) { + addEvent(eventType); + } + } + } + + // the plot band/line label + if (optionsLabel && defined(optionsLabel.text) && path && path.length && axis.width > 0 && axis.height > 0) { + // apply defaults + optionsLabel = merge({ + align: horiz && isBand && 'center', + x: horiz ? !isBand && 4 : 10, + verticalAlign : !horiz && isBand && 'middle', + y: horiz ? isBand ? 16 : 10 : isBand ? 6 : -4, + rotation: horiz && !isBand && 90 + }, optionsLabel); + + // add the SVG element + if (!label) { + attribs = { + align: optionsLabel.textAlign || optionsLabel.align, + rotation: optionsLabel.rotation + }; + if (defined(zIndex)) { + attribs.zIndex = zIndex; + } + plotLine.label = label = renderer.text( + optionsLabel.text, + 0, + 0, + optionsLabel.useHTML + ) + .attr(attribs) + .css(optionsLabel.style) + .add(); + } + + // get the bounding box and align the label + xs = [path[1], path[4], pick(path[6], path[1])]; + ys = [path[2], path[5], pick(path[7], path[2])]; + x = arrayMin(xs); + y = arrayMin(ys); + + label.align(optionsLabel, false, { + x: x, + y: y, + width: arrayMax(xs) - x, + height: arrayMax(ys) - y + }); + label.show(); + + } else if (label) { // move out of sight + label.hide(); + } + + // chainable + return plotLine; + }, + + /** + * Remove the plot line or band + */ + destroy: function () { + // remove it from the lookup + erase(this.axis.plotLinesAndBands, this); + + delete this.axis; + destroyObjectProperties(this); + } +}; + +/** + * Object with members for extending the Axis prototype + */ + +AxisPlotLineOrBandExtension = { + + /** + * Create the path for a plot band + */ + getPlotBandPath: function (from, to) { + var toPath = this.getPlotLinePath(to), + path = this.getPlotLinePath(from); + + if (path && toPath) { + path.push( + toPath[4], + toPath[5], + toPath[1], + toPath[2] + ); + } else { // outside the axis area + path = null; + } + + return path; + }, + + addPlotBand: function (options) { + this.addPlotBandOrLine(options, 'plotBands'); + }, + + addPlotLine: function (options) { + this.addPlotBandOrLine(options, 'plotLines'); + }, + + /** + * Add a plot band or plot line after render time + * + * @param options {Object} The plotBand or plotLine configuration object + */ + addPlotBandOrLine: function (options, coll) { + var obj = new Highcharts.PlotLineOrBand(this, options).render(), + userOptions = this.userOptions; + + if (obj) { // #2189 + // Add it to the user options for exporting and Axis.update + if (coll) { + userOptions[coll] = userOptions[coll] || []; + userOptions[coll].push(options); + } + this.plotLinesAndBands.push(obj); + } + + return obj; + }, + + /** + * Remove a plot band or plot line from the chart by id + * @param {Object} id + */ + removePlotBandOrLine: function (id) { + var plotLinesAndBands = this.plotLinesAndBands, + options = this.options, + userOptions = this.userOptions, + i = plotLinesAndBands.length; + while (i--) { + if (plotLinesAndBands[i].id === id) { + plotLinesAndBands[i].destroy(); + } + } + each([options.plotLines || [], userOptions.plotLines || [], options.plotBands || [], userOptions.plotBands || []], function (arr) { + i = arr.length; + while (i--) { + if (arr[i].id === id) { + erase(arr, arr[i]); + } + } + }); + } +}; + +/** + * Create a new axis object + * @param {Object} chart + * @param {Object} options + */ +function Axis() { + this.init.apply(this, arguments); +} + +Axis.prototype = { + + /** + * Default options for the X axis - the Y axis has extended defaults + */ + defaultOptions: { + // allowDecimals: null, + // alternateGridColor: null, + // categories: [], + dateTimeLabelFormats: { + millisecond: '%H:%M:%S.%L', + second: '%H:%M:%S', + minute: '%H:%M', + hour: '%H:%M', + day: '%e. %b', + week: '%e. %b', + month: '%b \'%y', + year: '%Y' + }, + endOnTick: false, + gridLineColor: '#C0C0C0', + // gridLineDashStyle: 'solid', + // gridLineWidth: 0, + // reversed: false, + + labels: defaultLabelOptions, + // { step: null }, + lineColor: '#C0D0E0', + lineWidth: 1, + //linkedTo: null, + //max: undefined, + //min: undefined, + minPadding: 0.01, + maxPadding: 0.01, + //minRange: null, + minorGridLineColor: '#E0E0E0', + // minorGridLineDashStyle: null, + minorGridLineWidth: 1, + minorTickColor: '#A0A0A0', + //minorTickInterval: null, + minorTickLength: 2, + minorTickPosition: 'outside', // inside or outside + //minorTickWidth: 0, + //opposite: false, + //offset: 0, + //plotBands: [{ + // events: {}, + // zIndex: 1, + // labels: { align, x, verticalAlign, y, style, rotation, textAlign } + //}], + //plotLines: [{ + // events: {} + // dashStyle: {} + // zIndex: + // labels: { align, x, verticalAlign, y, style, rotation, textAlign } + //}], + //reversed: false, + // showFirstLabel: true, + // showLastLabel: true, + startOfWeek: 1, + startOnTick: false, + tickColor: '#C0D0E0', + //tickInterval: null, + tickLength: 10, + tickmarkPlacement: 'between', // on or between + tickPixelInterval: 100, + tickPosition: 'outside', + tickWidth: 1, + title: { + //text: null, + align: 'middle', // low, middle or high + //margin: 0 for horizontal, 10 for vertical axes, + //rotation: 0, + //side: 'outside', + style: { + color: '#707070' + } + //x: 0, + //y: 0 + }, + type: 'linear' // linear, logarithmic or datetime + }, + + /** + * This options set extends the defaultOptions for Y axes + */ + defaultYAxisOptions: { + endOnTick: true, + gridLineWidth: 1, + tickPixelInterval: 72, + showLastLabel: true, + labels: { + x: -8, + y: 3 + }, + lineWidth: 0, + maxPadding: 0.05, + minPadding: 0.05, + startOnTick: true, + tickWidth: 0, + title: { + rotation: 270, + text: 'Values' + }, + stackLabels: { + enabled: false, + //align: dynamic, + //y: dynamic, + //x: dynamic, + //verticalAlign: dynamic, + //textAlign: dynamic, + //rotation: 0, + formatter: function () { + return numberFormat(this.total, -1); + }, + style: defaultLabelOptions.style + } + }, + + /** + * These options extend the defaultOptions for left axes + */ + defaultLeftAxisOptions: { + labels: { + x: -15, + y: null + }, + title: { + rotation: 270 + } + }, + + /** + * These options extend the defaultOptions for right axes + */ + defaultRightAxisOptions: { + labels: { + x: 15, + y: null + }, + title: { + rotation: 90 + } + }, + + /** + * These options extend the defaultOptions for bottom axes + */ + defaultBottomAxisOptions: { + labels: { + x: 0, + y: 20 + // overflow: undefined, + // staggerLines: null + }, + title: { + rotation: 0 + } + }, + /** + * These options extend the defaultOptions for left axes + */ + defaultTopAxisOptions: { + labels: { + x: 0, + y: -15 + // overflow: undefined + // staggerLines: null + }, + title: { + rotation: 0 + } + }, + + /** + * Initialize the axis + */ + init: function (chart, userOptions) { + + + var isXAxis = userOptions.isX, + axis = this; + + // Flag, is the axis horizontal + axis.horiz = chart.inverted ? !isXAxis : isXAxis; + + // Flag, isXAxis + axis.isXAxis = isXAxis; + axis.coll = isXAxis ? 'xAxis' : 'yAxis'; + + axis.opposite = userOptions.opposite; // needed in setOptions + axis.side = userOptions.side || (axis.horiz ? + (axis.opposite ? 0 : 2) : // top : bottom + (axis.opposite ? 1 : 3)); // right : left + + axis.setOptions(userOptions); + + + var options = this.options, + type = options.type, + isDatetimeAxis = type === 'datetime'; + + axis.labelFormatter = options.labels.formatter || axis.defaultLabelFormatter; // can be overwritten by dynamic format + + + // Flag, stagger lines or not + axis.userOptions = userOptions; + + //axis.axisTitleMargin = UNDEFINED,// = options.title.margin, + axis.minPixelPadding = 0; + //axis.ignoreMinPadding = UNDEFINED; // can be set to true by a column or bar series + //axis.ignoreMaxPadding = UNDEFINED; + + axis.chart = chart; + axis.reversed = options.reversed; + axis.zoomEnabled = options.zoomEnabled !== false; + + // Initial categories + axis.categories = options.categories || type === 'category'; + axis.names = []; + + // Elements + //axis.axisGroup = UNDEFINED; + //axis.gridGroup = UNDEFINED; + //axis.axisTitle = UNDEFINED; + //axis.axisLine = UNDEFINED; + + // Shorthand types + axis.isLog = type === 'logarithmic'; + axis.isDatetimeAxis = isDatetimeAxis; + + // Flag, if axis is linked to another axis + axis.isLinked = defined(options.linkedTo); + // Linked axis. + //axis.linkedParent = UNDEFINED; + + // Tick positions + //axis.tickPositions = UNDEFINED; // array containing predefined positions + // Tick intervals + //axis.tickInterval = UNDEFINED; + //axis.minorTickInterval = UNDEFINED; + + axis.tickmarkOffset = (axis.categories && options.tickmarkPlacement === 'between') ? 0.5 : 0; + + // Major ticks + axis.ticks = {}; + axis.labelEdge = []; + // Minor ticks + axis.minorTicks = {}; + //axis.tickAmount = UNDEFINED; + + // List of plotLines/Bands + axis.plotLinesAndBands = []; + + // Alternate bands + axis.alternateBands = {}; + + // Axis metrics + //axis.left = UNDEFINED; + //axis.top = UNDEFINED; + //axis.width = UNDEFINED; + //axis.height = UNDEFINED; + //axis.bottom = UNDEFINED; + //axis.right = UNDEFINED; + //axis.transA = UNDEFINED; + //axis.transB = UNDEFINED; + //axis.oldTransA = UNDEFINED; + axis.len = 0; + //axis.oldMin = UNDEFINED; + //axis.oldMax = UNDEFINED; + //axis.oldUserMin = UNDEFINED; + //axis.oldUserMax = UNDEFINED; + //axis.oldAxisLength = UNDEFINED; + axis.minRange = axis.userMinRange = options.minRange || options.maxZoom; + axis.range = options.range; + axis.offset = options.offset || 0; + + + // Dictionary for stacks + axis.stacks = {}; + axis.oldStacks = {}; + + // Min and max in the data + //axis.dataMin = UNDEFINED, + //axis.dataMax = UNDEFINED, + + // The axis range + axis.max = null; + axis.min = null; + + // User set min and max + //axis.userMin = UNDEFINED, + //axis.userMax = UNDEFINED, + + // Crosshair options + axis.crosshair = pick(options.crosshair, splat(chart.options.tooltip.crosshairs)[isXAxis ? 0 : 1], false); + // Run Axis + + var eventType, + events = axis.options.events; + + // Register + if (inArray(axis, chart.axes) === -1) { // don't add it again on Axis.update() + if (isXAxis && !this.isColorAxis) { // #2713 + chart.axes.splice(chart.xAxis.length, 0, axis); + } else { + chart.axes.push(axis); + } + + chart[axis.coll].push(axis); + } + + axis.series = axis.series || []; // populated by Series + + // inverted charts have reversed xAxes as default + if (chart.inverted && isXAxis && axis.reversed === UNDEFINED) { + axis.reversed = true; + } + + axis.removePlotBand = axis.removePlotBandOrLine; + axis.removePlotLine = axis.removePlotBandOrLine; + + + // register event listeners + for (eventType in events) { + addEvent(axis, eventType, events[eventType]); + } + + // extend logarithmic axis + if (axis.isLog) { + axis.val2lin = log2lin; + axis.lin2val = lin2log; + } + }, + + /** + * Merge and set options + */ + setOptions: function (userOptions) { + this.options = merge( + this.defaultOptions, + this.isXAxis ? {} : this.defaultYAxisOptions, + [this.defaultTopAxisOptions, this.defaultRightAxisOptions, + this.defaultBottomAxisOptions, this.defaultLeftAxisOptions][this.side], + merge( + defaultOptions[this.coll], // if set in setOptions (#1053) + userOptions + ) + ); + }, + + /** + * The default label formatter. The context is a special config object for the label. + */ + defaultLabelFormatter: function () { + var axis = this.axis, + value = this.value, + categories = axis.categories, + dateTimeLabelFormat = this.dateTimeLabelFormat, + numericSymbols = defaultOptions.lang.numericSymbols, + i = numericSymbols && numericSymbols.length, + multi, + ret, + formatOption = axis.options.labels.format, + + // make sure the same symbol is added for all labels on a linear axis + numericSymbolDetector = axis.isLog ? value : axis.tickInterval; + + if (formatOption) { + ret = format(formatOption, this); + + } else if (categories) { + ret = value; + + } else if (dateTimeLabelFormat) { // datetime axis + ret = dateFormat(dateTimeLabelFormat, value); + + } else if (i && numericSymbolDetector >= 1000) { + // Decide whether we should add a numeric symbol like k (thousands) or M (millions). + // If we are to enable this in tooltip or other places as well, we can move this + // logic to the numberFormatter and enable it by a parameter. + while (i-- && ret === UNDEFINED) { + multi = Math.pow(1000, i + 1); + if (numericSymbolDetector >= multi && numericSymbols[i] !== null) { + ret = numberFormat(value / multi, -1) + numericSymbols[i]; + } + } + } + + if (ret === UNDEFINED) { + if (mathAbs(value) >= 10000) { // add thousands separators + ret = numberFormat(value, 0); + + } else { // small numbers + ret = numberFormat(value, -1, UNDEFINED, ''); // #2466 + } + } + + return ret; + }, + + /** + * Get the minimum and maximum for the series of each axis + */ + getSeriesExtremes: function () { + var axis = this, + chart = axis.chart; + + axis.hasVisibleSeries = false; + + // reset dataMin and dataMax in case we're redrawing + axis.dataMin = axis.dataMax = null; + + if (axis.buildStacks) { + axis.buildStacks(); + } + + // loop through this axis' series + each(axis.series, function (series) { + + if (series.visible || !chart.options.chart.ignoreHiddenSeries) { + + var seriesOptions = series.options, + xData, + threshold = seriesOptions.threshold, + seriesDataMin, + seriesDataMax; + + axis.hasVisibleSeries = true; + + // Validate threshold in logarithmic axes + if (axis.isLog && threshold <= 0) { + threshold = null; + } + + // Get dataMin and dataMax for X axes + if (axis.isXAxis) { + xData = series.xData; + if (xData.length) { + axis.dataMin = mathMin(pick(axis.dataMin, xData[0]), arrayMin(xData)); + axis.dataMax = mathMax(pick(axis.dataMax, xData[0]), arrayMax(xData)); + } + + // Get dataMin and dataMax for Y axes, as well as handle stacking and processed data + } else { + + // Get this particular series extremes + series.getExtremes(); + seriesDataMax = series.dataMax; + seriesDataMin = series.dataMin; + + // Get the dataMin and dataMax so far. If percentage is used, the min and max are + // always 0 and 100. If seriesDataMin and seriesDataMax is null, then series + // doesn't have active y data, we continue with nulls + if (defined(seriesDataMin) && defined(seriesDataMax)) { + axis.dataMin = mathMin(pick(axis.dataMin, seriesDataMin), seriesDataMin); + axis.dataMax = mathMax(pick(axis.dataMax, seriesDataMax), seriesDataMax); + } + + // Adjust to threshold + if (defined(threshold)) { + if (axis.dataMin >= threshold) { + axis.dataMin = threshold; + axis.ignoreMinPadding = true; + } else if (axis.dataMax < threshold) { + axis.dataMax = threshold; + axis.ignoreMaxPadding = true; + } + } + } + } + }); + }, + + /** + * Translate from axis value to pixel position on the chart, or back + * + */ + translate: function (val, backwards, cvsCoord, old, handleLog, pointPlacement) { + var axis = this, + sign = 1, + cvsOffset = 0, + localA = old ? axis.oldTransA : axis.transA, + localMin = old ? axis.oldMin : axis.min, + returnValue, + minPixelPadding = axis.minPixelPadding, + postTranslate = (axis.options.ordinal || (axis.isLog && handleLog)) && axis.lin2val; + + if (!localA) { + localA = axis.transA; + } + + // In vertical axes, the canvas coordinates start from 0 at the top like in + // SVG. + if (cvsCoord) { + sign *= -1; // canvas coordinates inverts the value + cvsOffset = axis.len; + } + + // Handle reversed axis + if (axis.reversed) { + sign *= -1; + cvsOffset -= sign * (axis.sector || axis.len); + } + + // From pixels to value + if (backwards) { // reverse translation + + val = val * sign + cvsOffset; + val -= minPixelPadding; + returnValue = val / localA + localMin; // from chart pixel to value + if (postTranslate) { // log and ordinal axes + returnValue = axis.lin2val(returnValue); + } + + // From value to pixels + } else { + if (postTranslate) { // log and ordinal axes + val = axis.val2lin(val); + } + if (pointPlacement === 'between') { + pointPlacement = 0.5; + } + returnValue = sign * (val - localMin) * localA + cvsOffset + (sign * minPixelPadding) + + (isNumber(pointPlacement) ? localA * pointPlacement * axis.pointRange : 0); + } + + return returnValue; + }, + + /** + * Utility method to translate an axis value to pixel position. + * @param {Number} value A value in terms of axis units + * @param {Boolean} paneCoordinates Whether to return the pixel coordinate relative to the chart + * or just the axis/pane itself. + */ + toPixels: function (value, paneCoordinates) { + return this.translate(value, false, !this.horiz, null, true) + (paneCoordinates ? 0 : this.pos); + }, + + /* + * Utility method to translate a pixel position in to an axis value + * @param {Number} pixel The pixel value coordinate + * @param {Boolean} paneCoordiantes Whether the input pixel is relative to the chart or just the + * axis/pane itself. + */ + toValue: function (pixel, paneCoordinates) { + return this.translate(pixel - (paneCoordinates ? 0 : this.pos), true, !this.horiz, null, true); + }, + + /** + * Create the path for a plot line that goes from the given value on + * this axis, across the plot to the opposite side + * @param {Number} value + * @param {Number} lineWidth Used for calculation crisp line + * @param {Number] old Use old coordinates (for resizing and rescaling) + */ + getPlotLinePath: function (value, lineWidth, old, force, translatedValue) { + var axis = this, + chart = axis.chart, + axisLeft = axis.left, + axisTop = axis.top, + x1, + y1, + x2, + y2, + cHeight = (old && chart.oldChartHeight) || chart.chartHeight, + cWidth = (old && chart.oldChartWidth) || chart.chartWidth, + skip, + transB = axis.transB; + + translatedValue = pick(translatedValue, axis.translate(value, null, null, old)); + x1 = x2 = mathRound(translatedValue + transB); + y1 = y2 = mathRound(cHeight - translatedValue - transB); + + if (isNaN(translatedValue)) { // no min or max + skip = true; + + } else if (axis.horiz) { + y1 = axisTop; + y2 = cHeight - axis.bottom; + if (x1 < axisLeft || x1 > axisLeft + axis.width) { + skip = true; + } + } else { + x1 = axisLeft; + x2 = cWidth - axis.right; + + if (y1 < axisTop || y1 > axisTop + axis.height) { + skip = true; + } + } + return skip && !force ? + null : + chart.renderer.crispLine([M, x1, y1, L, x2, y2], lineWidth || 1); + }, + + /** + * Set the tick positions of a linear axis to round values like whole tens or every five. + */ + getLinearTickPositions: function (tickInterval, min, max) { + var pos, + lastPos, + roundedMin = correctFloat(mathFloor(min / tickInterval) * tickInterval), + roundedMax = correctFloat(mathCeil(max / tickInterval) * tickInterval), + tickPositions = []; + + // For single points, add a tick regardless of the relative position (#2662) + if (min === max && isNumber(min)) { + return [min]; + } + + // Populate the intermediate values + pos = roundedMin; + while (pos <= roundedMax) { + + // Place the tick on the rounded value + tickPositions.push(pos); + + // Always add the raw tickInterval, not the corrected one. + pos = correctFloat(pos + tickInterval); + + // If the interval is not big enough in the current min - max range to actually increase + // the loop variable, we need to break out to prevent endless loop. Issue #619 + if (pos === lastPos) { + break; + } + + // Record the last value + lastPos = pos; + } + return tickPositions; + }, + + /** + * Return the minor tick positions. For logarithmic axes, reuse the same logic + * as for major ticks. + */ + getMinorTickPositions: function () { + var axis = this, + options = axis.options, + tickPositions = axis.tickPositions, + minorTickInterval = axis.minorTickInterval, + minorTickPositions = [], + pos, + i, + len; + + if (axis.isLog) { + len = tickPositions.length; + for (i = 1; i < len; i++) { + minorTickPositions = minorTickPositions.concat( + axis.getLogTickPositions(minorTickInterval, tickPositions[i - 1], tickPositions[i], true) + ); + } + } else if (axis.isDatetimeAxis && options.minorTickInterval === 'auto') { // #1314 + minorTickPositions = minorTickPositions.concat( + axis.getTimeTicks( + axis.normalizeTimeTickInterval(minorTickInterval), + axis.min, + axis.max, + options.startOfWeek + ) + ); + if (minorTickPositions[0] < axis.min) { + minorTickPositions.shift(); + } + } else { + for (pos = axis.min + (tickPositions[0] - axis.min) % minorTickInterval; pos <= axis.max; pos += minorTickInterval) { + minorTickPositions.push(pos); + } + } + return minorTickPositions; + }, + + /** + * Adjust the min and max for the minimum range. Keep in mind that the series data is + * not yet processed, so we don't have information on data cropping and grouping, or + * updated axis.pointRange or series.pointRange. The data can't be processed until + * we have finally established min and max. + */ + adjustForMinRange: function () { + var axis = this, + options = axis.options, + min = axis.min, + max = axis.max, + zoomOffset, + spaceAvailable = axis.dataMax - axis.dataMin >= axis.minRange, + closestDataRange, + i, + distance, + xData, + loopLength, + minArgs, + maxArgs; + + // Set the automatic minimum range based on the closest point distance + if (axis.isXAxis && axis.minRange === UNDEFINED && !axis.isLog) { + + if (defined(options.min) || defined(options.max)) { + axis.minRange = null; // don't do this again + + } else { + + // Find the closest distance between raw data points, as opposed to + // closestPointRange that applies to processed points (cropped and grouped) + each(axis.series, function (series) { + xData = series.xData; + loopLength = series.xIncrement ? 1 : xData.length - 1; + for (i = loopLength; i > 0; i--) { + distance = xData[i] - xData[i - 1]; + if (closestDataRange === UNDEFINED || distance < closestDataRange) { + closestDataRange = distance; + } + } + }); + axis.minRange = mathMin(closestDataRange * 5, axis.dataMax - axis.dataMin); + } + } + + // if minRange is exceeded, adjust + if (max - min < axis.minRange) { + var minRange = axis.minRange; + zoomOffset = (minRange - max + min) / 2; + + // if min and max options have been set, don't go beyond it + minArgs = [min - zoomOffset, pick(options.min, min - zoomOffset)]; + if (spaceAvailable) { // if space is available, stay within the data range + minArgs[2] = axis.dataMin; + } + min = arrayMax(minArgs); + + maxArgs = [min + minRange, pick(options.max, min + minRange)]; + if (spaceAvailable) { // if space is availabe, stay within the data range + maxArgs[2] = axis.dataMax; + } + + max = arrayMin(maxArgs); + + // now if the max is adjusted, adjust the min back + if (max - min < minRange) { + minArgs[0] = max - minRange; + minArgs[1] = pick(options.min, max - minRange); + min = arrayMax(minArgs); + } + } + + // Record modified extremes + axis.min = min; + axis.max = max; + }, + + /** + * Update translation information + */ + setAxisTranslation: function (saveOld) { + var axis = this, + range = axis.max - axis.min, + pointRange = axis.axisPointRange || 0, + closestPointRange, + minPointOffset = 0, + pointRangePadding = 0, + linkedParent = axis.linkedParent, + ordinalCorrection, + hasCategories = !!axis.categories, + transA = axis.transA; + + // Adjust translation for padding. Y axis with categories need to go through the same (#1784). + if (axis.isXAxis || hasCategories || pointRange) { + if (linkedParent) { + minPointOffset = linkedParent.minPointOffset; + pointRangePadding = linkedParent.pointRangePadding; + + } else { + each(axis.series, function (series) { + var seriesPointRange = hasCategories ? 1 : (axis.isXAxis ? series.pointRange : (axis.axisPointRange || 0)), // #2806 + pointPlacement = series.options.pointPlacement, + seriesClosestPointRange = series.closestPointRange; + + if (seriesPointRange > range) { // #1446 + seriesPointRange = 0; + } + pointRange = mathMax(pointRange, seriesPointRange); + + // minPointOffset is the value padding to the left of the axis in order to make + // room for points with a pointRange, typically columns. When the pointPlacement option + // is 'between' or 'on', this padding does not apply. + minPointOffset = mathMax( + minPointOffset, + isString(pointPlacement) ? 0 : seriesPointRange / 2 + ); + + // Determine the total padding needed to the length of the axis to make room for the + // pointRange. If the series' pointPlacement is 'on', no padding is added. + pointRangePadding = mathMax( + pointRangePadding, + pointPlacement === 'on' ? 0 : seriesPointRange + ); + + // Set the closestPointRange + if (!series.noSharedTooltip && defined(seriesClosestPointRange)) { + closestPointRange = defined(closestPointRange) ? + mathMin(closestPointRange, seriesClosestPointRange) : + seriesClosestPointRange; + } + }); + } + + // Record minPointOffset and pointRangePadding + ordinalCorrection = axis.ordinalSlope && closestPointRange ? axis.ordinalSlope / closestPointRange : 1; // #988, #1853 + axis.minPointOffset = minPointOffset = minPointOffset * ordinalCorrection; + axis.pointRangePadding = pointRangePadding = pointRangePadding * ordinalCorrection; + + // pointRange means the width reserved for each point, like in a column chart + axis.pointRange = mathMin(pointRange, range); + + // closestPointRange means the closest distance between points. In columns + // it is mostly equal to pointRange, but in lines pointRange is 0 while closestPointRange + // is some other value + axis.closestPointRange = closestPointRange; + } + + // Secondary values + if (saveOld) { + axis.oldTransA = transA; + } + axis.translationSlope = axis.transA = transA = axis.len / ((range + pointRangePadding) || 1); + axis.transB = axis.horiz ? axis.left : axis.bottom; // translation addend + axis.minPixelPadding = transA * minPointOffset; + }, + + /** + * Set the tick positions to round values and optionally extend the extremes + * to the nearest tick + */ + setTickPositions: function (secondPass) { + var axis = this, + chart = axis.chart, + options = axis.options, + isLog = axis.isLog, + isDatetimeAxis = axis.isDatetimeAxis, + isXAxis = axis.isXAxis, + isLinked = axis.isLinked, + tickPositioner = axis.options.tickPositioner, + maxPadding = options.maxPadding, + minPadding = options.minPadding, + length, + linkedParentExtremes, + tickIntervalOption = options.tickInterval, + minTickIntervalOption = options.minTickInterval, + tickPixelIntervalOption = options.tickPixelInterval, + tickPositions, + keepTwoTicksOnly, + categories = axis.categories; + + // linked axis gets the extremes from the parent axis + if (isLinked) { + axis.linkedParent = chart[axis.coll][options.linkedTo]; + linkedParentExtremes = axis.linkedParent.getExtremes(); + axis.min = pick(linkedParentExtremes.min, linkedParentExtremes.dataMin); + axis.max = pick(linkedParentExtremes.max, linkedParentExtremes.dataMax); + if (options.type !== axis.linkedParent.options.type) { + error(11, 1); // Can't link axes of different type + } + } else { // initial min and max from the extreme data values + axis.min = pick(axis.userMin, options.min, axis.dataMin); + axis.max = pick(axis.userMax, options.max, axis.dataMax); + } + + if (isLog) { + if (!secondPass && mathMin(axis.min, pick(axis.dataMin, axis.min)) <= 0) { // #978 + error(10, 1); // Can't plot negative values on log axis + } + axis.min = correctFloat(log2lin(axis.min)); // correctFloat cures #934 + axis.max = correctFloat(log2lin(axis.max)); + } + + // handle zoomed range + if (axis.range && defined(axis.max)) { + axis.userMin = axis.min = mathMax(axis.min, axis.max - axis.range); // #618 + axis.userMax = axis.max; + + axis.range = null; // don't use it when running setExtremes + } + + // Hook for adjusting this.min and this.max. Used by bubble series. + if (axis.beforePadding) { + axis.beforePadding(); + } + + // adjust min and max for the minimum range + axis.adjustForMinRange(); + + // Pad the values to get clear of the chart's edges. To avoid tickInterval taking the padding + // into account, we do this after computing tick interval (#1337). + if (!categories && !axis.axisPointRange && !axis.usePercentage && !isLinked && defined(axis.min) && defined(axis.max)) { + length = axis.max - axis.min; + if (length) { + if (!defined(options.min) && !defined(axis.userMin) && minPadding && (axis.dataMin < 0 || !axis.ignoreMinPadding)) { + axis.min -= length * minPadding; + } + if (!defined(options.max) && !defined(axis.userMax) && maxPadding && (axis.dataMax > 0 || !axis.ignoreMaxPadding)) { + axis.max += length * maxPadding; + } + } + } + + // Stay within floor and ceiling + if (isNumber(options.floor)) { + axis.min = mathMax(axis.min, options.floor); + } + if (isNumber(options.ceiling)) { + axis.max = mathMin(axis.max, options.ceiling); + } + + // get tickInterval + if (axis.min === axis.max || axis.min === undefined || axis.max === undefined) { + axis.tickInterval = 1; + } else if (isLinked && !tickIntervalOption && + tickPixelIntervalOption === axis.linkedParent.options.tickPixelInterval) { + axis.tickInterval = axis.linkedParent.tickInterval; + } else { + axis.tickInterval = pick( + tickIntervalOption, + categories ? // for categoried axis, 1 is default, for linear axis use tickPix + 1 : + // don't let it be more than the data range + (axis.max - axis.min) * tickPixelIntervalOption / mathMax(axis.len, tickPixelIntervalOption) + ); + // For squished axes, set only two ticks + if (!defined(tickIntervalOption) && axis.len < tickPixelIntervalOption && !this.isRadial && + !this.isLog && !categories && options.startOnTick && options.endOnTick) { + keepTwoTicksOnly = true; + axis.tickInterval /= 4; // tick extremes closer to the real values + } + } + + // Now we're finished detecting min and max, crop and group series data. This + // is in turn needed in order to find tick positions in ordinal axes. + if (isXAxis && !secondPass) { + each(axis.series, function (series) { + series.processData(axis.min !== axis.oldMin || axis.max !== axis.oldMax); + }); + } + + // set the translation factor used in translate function + axis.setAxisTranslation(true); + + // hook for ordinal axes and radial axes + if (axis.beforeSetTickPositions) { + axis.beforeSetTickPositions(); + } + + // hook for extensions, used in Highstock ordinal axes + if (axis.postProcessTickInterval) { + axis.tickInterval = axis.postProcessTickInterval(axis.tickInterval); + } + + // In column-like charts, don't cramp in more ticks than there are points (#1943) + if (axis.pointRange) { + axis.tickInterval = mathMax(axis.pointRange, axis.tickInterval); + } + + // Before normalizing the tick interval, handle minimum tick interval. This applies only if tickInterval is not defined. + if (!tickIntervalOption && axis.tickInterval < minTickIntervalOption) { + axis.tickInterval = minTickIntervalOption; + } + + // for linear axes, get magnitude and normalize the interval + if (!isDatetimeAxis && !isLog) { // linear + if (!tickIntervalOption) { + axis.tickInterval = normalizeTickInterval(axis.tickInterval, null, getMagnitude(axis.tickInterval), options); + } + } + + // get minorTickInterval + axis.minorTickInterval = options.minorTickInterval === 'auto' && axis.tickInterval ? + axis.tickInterval / 5 : options.minorTickInterval; + + // find the tick positions + axis.tickPositions = tickPositions = options.tickPositions ? + [].concat(options.tickPositions) : // Work on a copy (#1565) + (tickPositioner && tickPositioner.apply(axis, [axis.min, axis.max])); + if (!tickPositions) { + + // Too many ticks + if (!axis.ordinalPositions && (axis.max - axis.min) / axis.tickInterval > mathMax(2 * axis.len, 200)) { + error(19, true); + } + + if (isDatetimeAxis) { + tickPositions = axis.getTimeTicks( + axis.normalizeTimeTickInterval(axis.tickInterval, options.units), + axis.min, + axis.max, + options.startOfWeek, + axis.ordinalPositions, + axis.closestPointRange, + true + ); + } else if (isLog) { + tickPositions = axis.getLogTickPositions(axis.tickInterval, axis.min, axis.max); + } else { + tickPositions = axis.getLinearTickPositions(axis.tickInterval, axis.min, axis.max); + } + + if (keepTwoTicksOnly) { + tickPositions.splice(1, tickPositions.length - 2); + } + + axis.tickPositions = tickPositions; + } + + if (!isLinked) { + + // reset min/max or remove extremes based on start/end on tick + var roundedMin = tickPositions[0], + roundedMax = tickPositions[tickPositions.length - 1], + minPointOffset = axis.minPointOffset || 0, + singlePad; + + if (options.startOnTick) { + axis.min = roundedMin; + } else if (axis.min - minPointOffset > roundedMin) { + tickPositions.shift(); + } + + if (options.endOnTick) { + axis.max = roundedMax; + } else if (axis.max + minPointOffset < roundedMax) { + tickPositions.pop(); + } + + // When there is only one point, or all points have the same value on this axis, then min + // and max are equal and tickPositions.length is 0 or 1. In this case, add some padding + // in order to center the point, but leave it with one tick. #1337. + if (tickPositions.length === 1) { + singlePad = mathAbs(axis.max) > 10e12 ? 1 : 0.001; // The lowest possible number to avoid extra padding on columns (#2619, #2846) + axis.min -= singlePad; + axis.max += singlePad; + } + } + }, + + /** + * Set the max ticks of either the x and y axis collection + */ + setMaxTicks: function () { + + var chart = this.chart, + maxTicks = chart.maxTicks || {}, + tickPositions = this.tickPositions, + key = this._maxTicksKey = [this.coll, this.pos, this.len].join('-'); + + if (!this.isLinked && !this.isDatetimeAxis && tickPositions && tickPositions.length > (maxTicks[key] || 0) && this.options.alignTicks !== false) { + maxTicks[key] = tickPositions.length; + } + chart.maxTicks = maxTicks; + }, + + /** + * When using multiple axes, adjust the number of ticks to match the highest + * number of ticks in that group + */ + adjustTickAmount: function () { + var axis = this, + chart = axis.chart, + key = axis._maxTicksKey, + tickPositions = axis.tickPositions, + maxTicks = chart.maxTicks; + + if (maxTicks && maxTicks[key] && !axis.isDatetimeAxis && !axis.categories && !axis.isLinked && + axis.options.alignTicks !== false && this.min !== UNDEFINED) { + var oldTickAmount = axis.tickAmount, + calculatedTickAmount = tickPositions.length, + tickAmount; + + // set the axis-level tickAmount to use below + axis.tickAmount = tickAmount = maxTicks[key]; + + if (calculatedTickAmount < tickAmount) { + while (tickPositions.length < tickAmount) { + tickPositions.push(correctFloat( + tickPositions[tickPositions.length - 1] + axis.tickInterval + )); + } + axis.transA *= (calculatedTickAmount - 1) / (tickAmount - 1); + axis.max = tickPositions[tickPositions.length - 1]; + + } + if (defined(oldTickAmount) && tickAmount !== oldTickAmount) { + axis.isDirty = true; + } + } + }, + + /** + * Set the scale based on data min and max, user set min and max or options + * + */ + setScale: function () { + var axis = this, + stacks = axis.stacks, + type, + i, + isDirtyData, + isDirtyAxisLength; + + axis.oldMin = axis.min; + axis.oldMax = axis.max; + axis.oldAxisLength = axis.len; + + // set the new axisLength + axis.setAxisSize(); + //axisLength = horiz ? axisWidth : axisHeight; + isDirtyAxisLength = axis.len !== axis.oldAxisLength; + + // is there new data? + each(axis.series, function (series) { + if (series.isDirtyData || series.isDirty || + series.xAxis.isDirty) { // when x axis is dirty, we need new data extremes for y as well + isDirtyData = true; + } + }); + + // do we really need to go through all this? + if (isDirtyAxisLength || isDirtyData || axis.isLinked || axis.forceRedraw || + axis.userMin !== axis.oldUserMin || axis.userMax !== axis.oldUserMax) { + + // reset stacks + if (!axis.isXAxis) { + for (type in stacks) { + for (i in stacks[type]) { + stacks[type][i].total = null; + stacks[type][i].cum = 0; + } + } + } + + axis.forceRedraw = false; + + // get data extremes if needed + axis.getSeriesExtremes(); + + // get fixed positions based on tickInterval + axis.setTickPositions(); + + // record old values to decide whether a rescale is necessary later on (#540) + axis.oldUserMin = axis.userMin; + axis.oldUserMax = axis.userMax; + + // Mark as dirty if it is not already set to dirty and extremes have changed. #595. + if (!axis.isDirty) { + axis.isDirty = isDirtyAxisLength || axis.min !== axis.oldMin || axis.max !== axis.oldMax; + } + } else if (!axis.isXAxis) { + if (axis.oldStacks) { + stacks = axis.stacks = axis.oldStacks; + } + + // reset stacks + for (type in stacks) { + for (i in stacks[type]) { + stacks[type][i].cum = stacks[type][i].total; + } + } + } + + // Set the maximum tick amount + axis.setMaxTicks(); + }, + + /** + * Set the extremes and optionally redraw + * @param {Number} newMin + * @param {Number} newMax + * @param {Boolean} redraw + * @param {Boolean|Object} animation Whether to apply animation, and optionally animation + * configuration + * @param {Object} eventArguments + * + */ + setExtremes: function (newMin, newMax, redraw, animation, eventArguments) { + var axis = this, + chart = axis.chart; + + redraw = pick(redraw, true); // defaults to true + + // Extend the arguments with min and max + eventArguments = extend(eventArguments, { + min: newMin, + max: newMax + }); + + // Fire the event + fireEvent(axis, 'setExtremes', eventArguments, function () { // the default event handler + + axis.userMin = newMin; + axis.userMax = newMax; + axis.eventArgs = eventArguments; + + // Mark for running afterSetExtremes + axis.isDirtyExtremes = true; + + // redraw + if (redraw) { + chart.redraw(animation); + } + }); + }, + + /** + * Overridable method for zooming chart. Pulled out in a separate method to allow overriding + * in stock charts. + */ + zoom: function (newMin, newMax) { + var dataMin = this.dataMin, + dataMax = this.dataMax, + options = this.options; + + // Prevent pinch zooming out of range. Check for defined is for #1946. #1734. + if (!this.allowZoomOutside) { + if (defined(dataMin) && newMin <= mathMin(dataMin, pick(options.min, dataMin))) { + newMin = UNDEFINED; + } + if (defined(dataMax) && newMax >= mathMax(dataMax, pick(options.max, dataMax))) { + newMax = UNDEFINED; + } + } + + // In full view, displaying the reset zoom button is not required + this.displayBtn = newMin !== UNDEFINED || newMax !== UNDEFINED; + + // Do it + this.setExtremes( + newMin, + newMax, + false, + UNDEFINED, + { trigger: 'zoom' } + ); + return true; + }, + + /** + * Update the axis metrics + */ + setAxisSize: function () { + var chart = this.chart, + options = this.options, + offsetLeft = options.offsetLeft || 0, + offsetRight = options.offsetRight || 0, + horiz = this.horiz, + width = pick(options.width, chart.plotWidth - offsetLeft + offsetRight), + height = pick(options.height, chart.plotHeight), + top = pick(options.top, chart.plotTop), + left = pick(options.left, chart.plotLeft + offsetLeft), + percentRegex = /%$/; // docs + + // Check for percentage based input values + if (percentRegex.test(height)) { + height = parseInt(height, 10) / 100 * chart.plotHeight; + } + if (percentRegex.test(top)) { + top = parseInt(top, 10) / 100 * chart.plotHeight + chart.plotTop; + } + + // Expose basic values to use in Series object and navigator + this.left = left; + this.top = top; + this.width = width; + this.height = height; + this.bottom = chart.chartHeight - height - top; + this.right = chart.chartWidth - width - left; + + // Direction agnostic properties + this.len = mathMax(horiz ? width : height, 0); // mathMax fixes #905 + this.pos = horiz ? left : top; // distance from SVG origin + }, + + /** + * Get the actual axis extremes + */ + getExtremes: function () { + var axis = this, + isLog = axis.isLog; + + return { + min: isLog ? correctFloat(lin2log(axis.min)) : axis.min, + max: isLog ? correctFloat(lin2log(axis.max)) : axis.max, + dataMin: axis.dataMin, + dataMax: axis.dataMax, + userMin: axis.userMin, + userMax: axis.userMax + }; + }, + + /** + * Get the zero plane either based on zero or on the min or max value. + * Used in bar and area plots + */ + getThreshold: function (threshold) { + var axis = this, + isLog = axis.isLog; + + var realMin = isLog ? lin2log(axis.min) : axis.min, + realMax = isLog ? lin2log(axis.max) : axis.max; + + if (realMin > threshold || threshold === null) { + threshold = realMin; + } else if (realMax < threshold) { + threshold = realMax; + } + + return axis.translate(threshold, 0, 1, 0, 1); + }, + + /** + * Compute auto alignment for the axis label based on which side the axis is on + * and the given rotation for the label + */ + autoLabelAlign: function (rotation) { + var ret, + angle = (pick(rotation, 0) - (this.side * 90) + 720) % 360; + + if (angle > 15 && angle < 165) { + ret = 'right'; + } else if (angle > 195 && angle < 345) { + ret = 'left'; + } else { + ret = 'center'; + } + return ret; + }, + + /** + * Render the tick labels to a preliminary position to get their sizes + */ + getOffset: function () { + var axis = this, + chart = axis.chart, + renderer = chart.renderer, + options = axis.options, + tickPositions = axis.tickPositions, + ticks = axis.ticks, + horiz = axis.horiz, + side = axis.side, + invertedSide = chart.inverted ? [1, 0, 3, 2][side] : side, + hasData, + showAxis, + titleOffset = 0, + titleOffsetOption, + titleMargin = 0, + axisTitleOptions = options.title, + labelOptions = options.labels, + labelOffset = 0, // reset + axisOffset = chart.axisOffset, + clipOffset = chart.clipOffset, + directionFactor = [-1, 1, 1, -1][side], + n, + i, + autoStaggerLines = 1, + maxStaggerLines = pick(labelOptions.maxStaggerLines, 5), + sortedPositions, + lastRight, + overlap, + pos, + bBox, + x, + w, + lineNo, + lineHeightCorrection = side === 2 ? renderer.fontMetrics(labelOptions.style.fontSize).b : 0; + + // For reuse in Axis.render + axis.hasData = hasData = (axis.hasVisibleSeries || (defined(axis.min) && defined(axis.max) && !!tickPositions)); + axis.showAxis = showAxis = hasData || pick(options.showEmpty, true); + + // Set/reset staggerLines + axis.staggerLines = axis.horiz && labelOptions.staggerLines; + + // Create the axisGroup and gridGroup elements on first iteration + if (!axis.axisGroup) { + axis.gridGroup = renderer.g('grid') + .attr({ zIndex: options.gridZIndex || 1 }) + .add(); + axis.axisGroup = renderer.g('axis') + .attr({ zIndex: options.zIndex || 2 }) + .add(); + axis.labelGroup = renderer.g('axis-labels') + .attr({ zIndex: labelOptions.zIndex || 7 }) + .addClass(PREFIX + axis.coll.toLowerCase() + '-labels') + .add(); + } + + if (hasData || axis.isLinked) { + + // Set the explicit or automatic label alignment + axis.labelAlign = pick(labelOptions.align || axis.autoLabelAlign(labelOptions.rotation)); + + // Generate ticks + each(tickPositions, function (pos) { + if (!ticks[pos]) { + ticks[pos] = new Tick(axis, pos); + } else { + ticks[pos].addLabel(); // update labels depending on tick interval + } + }); + + // Handle automatic stagger lines + if (axis.horiz && !axis.staggerLines && maxStaggerLines && !labelOptions.rotation) { + sortedPositions = axis.reversed ? [].concat(tickPositions).reverse() : tickPositions; + while (autoStaggerLines < maxStaggerLines) { + lastRight = []; + overlap = false; + + for (i = 0; i < sortedPositions.length; i++) { + pos = sortedPositions[i]; + bBox = ticks[pos].label && ticks[pos].label.getBBox(); + w = bBox ? bBox.width : 0; + lineNo = i % autoStaggerLines; + + if (w) { + x = axis.translate(pos); // don't handle log + if (lastRight[lineNo] !== UNDEFINED && x < lastRight[lineNo]) { + overlap = true; + } + lastRight[lineNo] = x + w; + } + } + if (overlap) { + autoStaggerLines++; + } else { + break; + } + } + + if (autoStaggerLines > 1) { + axis.staggerLines = autoStaggerLines; + } + } + + + each(tickPositions, function (pos) { + // left side must be align: right and right side must have align: left for labels + if (side === 0 || side === 2 || { 1: 'left', 3: 'right' }[side] === axis.labelAlign) { + + // get the highest offset + labelOffset = mathMax( + ticks[pos].getLabelSize(), + labelOffset + ); + } + + }); + if (axis.staggerLines) { + labelOffset *= axis.staggerLines; + axis.labelOffset = labelOffset; + } + + + } else { // doesn't have data + for (n in ticks) { + ticks[n].destroy(); + delete ticks[n]; + } + } + + if (axisTitleOptions && axisTitleOptions.text && axisTitleOptions.enabled !== false) { + if (!axis.axisTitle) { + axis.axisTitle = renderer.text( + axisTitleOptions.text, + 0, + 0, + axisTitleOptions.useHTML + ) + .attr({ + zIndex: 7, + rotation: axisTitleOptions.rotation || 0, + align: + axisTitleOptions.textAlign || + { low: 'left', middle: 'center', high: 'right' }[axisTitleOptions.align] + }) + .addClass(PREFIX + this.coll.toLowerCase() + '-title') + .css(axisTitleOptions.style) + .add(axis.axisGroup); + axis.axisTitle.isNew = true; + } + + if (showAxis) { + titleOffset = axis.axisTitle.getBBox()[horiz ? 'height' : 'width']; + titleMargin = pick(axisTitleOptions.margin, horiz ? 5 : 10); + titleOffsetOption = axisTitleOptions.offset; + } + + // hide or show the title depending on whether showEmpty is set + axis.axisTitle[showAxis ? 'show' : 'hide'](); + } + + // handle automatic or user set offset + axis.offset = directionFactor * pick(options.offset, axisOffset[side]); + + axis.axisTitleMargin = + pick(titleOffsetOption, + labelOffset + titleMargin + + (labelOffset && (directionFactor * options.labels[horiz ? 'y' : 'x'] - lineHeightCorrection)) + ); + + axisOffset[side] = mathMax( + axisOffset[side], + axis.axisTitleMargin + titleOffset + directionFactor * axis.offset + ); + clipOffset[invertedSide] = mathMax(clipOffset[invertedSide], mathFloor(options.lineWidth / 2) * 2); + }, + + /** + * Get the path for the axis line + */ + getLinePath: function (lineWidth) { + var chart = this.chart, + opposite = this.opposite, + offset = this.offset, + horiz = this.horiz, + lineLeft = this.left + (opposite ? this.width : 0) + offset, + lineTop = chart.chartHeight - this.bottom - (opposite ? this.height : 0) + offset; + + if (opposite) { + lineWidth *= -1; // crispify the other way - #1480, #1687 + } + + return chart.renderer.crispLine([ + M, + horiz ? + this.left : + lineLeft, + horiz ? + lineTop : + this.top, + L, + horiz ? + chart.chartWidth - this.right : + lineLeft, + horiz ? + lineTop : + chart.chartHeight - this.bottom + ], lineWidth); + }, + + /** + * Position the title + */ + getTitlePosition: function () { + // compute anchor points for each of the title align options + var horiz = this.horiz, + axisLeft = this.left, + axisTop = this.top, + axisLength = this.len, + axisTitleOptions = this.options.title, + margin = horiz ? axisLeft : axisTop, + opposite = this.opposite, + offset = this.offset, + fontSize = pInt(axisTitleOptions.style.fontSize || 12), + + // the position in the length direction of the axis + alongAxis = { + low: margin + (horiz ? 0 : axisLength), + middle: margin + axisLength / 2, + high: margin + (horiz ? axisLength : 0) + }[axisTitleOptions.align], + + // the position in the perpendicular direction of the axis + offAxis = (horiz ? axisTop + this.height : axisLeft) + + (horiz ? 1 : -1) * // horizontal axis reverses the margin + (opposite ? -1 : 1) * // so does opposite axes + this.axisTitleMargin + + (this.side === 2 ? fontSize : 0); + + return { + x: horiz ? + alongAxis : + offAxis + (opposite ? this.width : 0) + offset + + (axisTitleOptions.x || 0), // x + y: horiz ? + offAxis - (opposite ? this.height : 0) + offset : + alongAxis + (axisTitleOptions.y || 0) // y + }; + }, + + /** + * Render the axis + */ + render: function () { + var axis = this, + horiz = axis.horiz, + reversed = axis.reversed, + chart = axis.chart, + renderer = chart.renderer, + options = axis.options, + isLog = axis.isLog, + isLinked = axis.isLinked, + tickPositions = axis.tickPositions, + sortedPositions, + axisTitle = axis.axisTitle, + ticks = axis.ticks, + minorTicks = axis.minorTicks, + alternateBands = axis.alternateBands, + stackLabelOptions = options.stackLabels, + alternateGridColor = options.alternateGridColor, + tickmarkOffset = axis.tickmarkOffset, + lineWidth = options.lineWidth, + linePath, + hasRendered = chart.hasRendered, + slideInTicks = hasRendered && defined(axis.oldMin) && !isNaN(axis.oldMin), + hasData = axis.hasData, + showAxis = axis.showAxis, + from, + overflow = options.labels.overflow, + justifyLabels = axis.justifyLabels = horiz && overflow !== false, + to; + + // Reset + axis.labelEdge.length = 0; + axis.justifyToPlot = overflow === 'justify'; + + // Mark all elements inActive before we go over and mark the active ones + each([ticks, minorTicks, alternateBands], function (coll) { + var pos; + for (pos in coll) { + coll[pos].isActive = false; + } + }); + + // If the series has data draw the ticks. Else only the line and title + if (hasData || isLinked) { + + // minor ticks + if (axis.minorTickInterval && !axis.categories) { + each(axis.getMinorTickPositions(), function (pos) { + if (!minorTicks[pos]) { + minorTicks[pos] = new Tick(axis, pos, 'minor'); + } + + // render new ticks in old position + if (slideInTicks && minorTicks[pos].isNew) { + minorTicks[pos].render(null, true); + } + + minorTicks[pos].render(null, false, 1); + }); + } + + // Major ticks. Pull out the first item and render it last so that + // we can get the position of the neighbour label. #808. + if (tickPositions.length) { // #1300 + sortedPositions = tickPositions.slice(); + if ((horiz && reversed) || (!horiz && !reversed)) { + sortedPositions.reverse(); + } + if (justifyLabels) { + sortedPositions = sortedPositions.slice(1).concat([sortedPositions[0]]); + } + each(sortedPositions, function (pos, i) { + + // Reorganize the indices + if (justifyLabels) { + i = (i === sortedPositions.length - 1) ? 0 : i + 1; + } + + // linked axes need an extra check to find out if + if (!isLinked || (pos >= axis.min && pos <= axis.max)) { + + if (!ticks[pos]) { + ticks[pos] = new Tick(axis, pos); + } + + // render new ticks in old position + if (slideInTicks && ticks[pos].isNew) { + ticks[pos].render(i, true, 0.1); + } + + ticks[pos].render(i, false, 1); + } + + }); + // In a categorized axis, the tick marks are displayed between labels. So + // we need to add a tick mark and grid line at the left edge of the X axis. + if (tickmarkOffset && axis.min === 0) { + if (!ticks[-1]) { + ticks[-1] = new Tick(axis, -1, null, true); + } + ticks[-1].render(-1); + } + + } + + // alternate grid color + if (alternateGridColor) { + each(tickPositions, function (pos, i) { + if (i % 2 === 0 && pos < axis.max) { + if (!alternateBands[pos]) { + alternateBands[pos] = new Highcharts.PlotLineOrBand(axis); + } + from = pos + tickmarkOffset; // #949 + to = tickPositions[i + 1] !== UNDEFINED ? tickPositions[i + 1] + tickmarkOffset : axis.max; + alternateBands[pos].options = { + from: isLog ? lin2log(from) : from, + to: isLog ? lin2log(to) : to, + color: alternateGridColor + }; + alternateBands[pos].render(); + alternateBands[pos].isActive = true; + } + }); + } + + // custom plot lines and bands + if (!axis._addedPlotLB) { // only first time + each((options.plotLines || []).concat(options.plotBands || []), function (plotLineOptions) { + axis.addPlotBandOrLine(plotLineOptions); + }); + axis._addedPlotLB = true; + } + + } // end if hasData + + // Remove inactive ticks + each([ticks, minorTicks, alternateBands], function (coll) { + var pos, + i, + forDestruction = [], + delay = globalAnimation ? globalAnimation.duration || 500 : 0, + destroyInactiveItems = function () { + i = forDestruction.length; + while (i--) { + // When resizing rapidly, the same items may be destroyed in different timeouts, + // or the may be reactivated + if (coll[forDestruction[i]] && !coll[forDestruction[i]].isActive) { + coll[forDestruction[i]].destroy(); + delete coll[forDestruction[i]]; + } + } + + }; + + for (pos in coll) { + + if (!coll[pos].isActive) { + // Render to zero opacity + coll[pos].render(pos, false, 0); + coll[pos].isActive = false; + forDestruction.push(pos); + } + } + + // When the objects are finished fading out, destroy them + if (coll === alternateBands || !chart.hasRendered || !delay) { + destroyInactiveItems(); + } else if (delay) { + setTimeout(destroyInactiveItems, delay); + } + }); + + // Static items. As the axis group is cleared on subsequent calls + // to render, these items are added outside the group. + // axis line + if (lineWidth) { + linePath = axis.getLinePath(lineWidth); + if (!axis.axisLine) { + axis.axisLine = renderer.path(linePath) + .attr({ + stroke: options.lineColor, + 'stroke-width': lineWidth, + zIndex: 7 + }) + .add(axis.axisGroup); + } else { + axis.axisLine.animate({ d: linePath }); + } + + // show or hide the line depending on options.showEmpty + axis.axisLine[showAxis ? 'show' : 'hide'](); + } + + if (axisTitle && showAxis) { + + axisTitle[axisTitle.isNew ? 'attr' : 'animate']( + axis.getTitlePosition() + ); + axisTitle.isNew = false; + } + + // Stacked totals: + if (stackLabelOptions && stackLabelOptions.enabled) { + axis.renderStackTotals(); + } + // End stacked totals + + axis.isDirty = false; + }, + + /** + * Redraw the axis to reflect changes in the data or axis extremes + */ + redraw: function () { + var axis = this, + chart = axis.chart, + pointer = chart.pointer; + + // hide tooltip and hover states + if (pointer) { + pointer.reset(true); + } + + // render the axis + axis.render(); + + // move plot lines and bands + each(axis.plotLinesAndBands, function (plotLine) { + plotLine.render(); + }); + + // mark associated series as dirty and ready for redraw + each(axis.series, function (series) { + series.isDirty = true; + }); + + }, + + /** + * Destroys an Axis instance. + */ + destroy: function (keepEvents) { + var axis = this, + stacks = axis.stacks, + stackKey, + plotLinesAndBands = axis.plotLinesAndBands, + i; + + // Remove the events + if (!keepEvents) { + removeEvent(axis); + } + + // Destroy each stack total + for (stackKey in stacks) { + destroyObjectProperties(stacks[stackKey]); + + stacks[stackKey] = null; + } + + // Destroy collections + each([axis.ticks, axis.minorTicks, axis.alternateBands], function (coll) { + destroyObjectProperties(coll); + }); + i = plotLinesAndBands.length; + while (i--) { // #1975 + plotLinesAndBands[i].destroy(); + } + + // Destroy local variables + each(['stackTotalGroup', 'axisLine', 'axisTitle', 'axisGroup', 'cross', 'gridGroup', 'labelGroup'], function (prop) { + if (axis[prop]) { + axis[prop] = axis[prop].destroy(); + } + }); + + // Destroy crosshair + if (this.cross) { + this.cross.destroy(); + } + }, + + /** + * Draw the crosshair + */ + drawCrosshair: function (e, point) { + if (!this.crosshair) { return; }// Do not draw crosshairs if you don't have too. + + if ((defined(point) || !pick(this.crosshair.snap, true)) === false) { + this.hideCrosshair(); + return; + } + + var path, + options = this.crosshair, + animation = options.animation, + pos; + + // Get the path + if (!pick(options.snap, true)) { + pos = (this.horiz ? e.chartX - this.pos : this.len - e.chartY + this.pos); + } else if (defined(point)) { + /*jslint eqeq: true*/ + pos = (this.chart.inverted != this.horiz) ? point.plotX : this.len - point.plotY; + /*jslint eqeq: false*/ + } + + if (this.isRadial) { + path = this.getPlotLinePath(this.isXAxis ? point.x : pick(point.stackY, point.y)); + } else { + path = this.getPlotLinePath(null, null, null, null, pos); + } + + if (path === null) { + this.hideCrosshair(); + return; + } + + // Draw the cross + if (this.cross) { + this.cross + .attr({ visibility: VISIBLE })[animation ? 'animate' : 'attr']({ d: path }, animation); + } else { + var attribs = { + 'stroke-width': options.width || 1, + stroke: options.color || '#C0C0C0', + zIndex: options.zIndex || 2 + }; + if (options.dashStyle) { + attribs.dashstyle = options.dashStyle; + } + this.cross = this.chart.renderer.path(path).attr(attribs).add(); + } + }, + + /** + * Hide the crosshair. + */ + hideCrosshair: function () { + if (this.cross) { + this.cross.hide(); + } + } +}; // end Axis + +extend(Axis.prototype, AxisPlotLineOrBandExtension); + +/** + * Set the tick positions to a time unit that makes sense, for example + * on the first of each month or on every Monday. Return an array + * with the time positions. Used in datetime axes as well as for grouping + * data on a datetime axis. + * + * @param {Object} normalizedInterval The interval in axis values (ms) and the count + * @param {Number} min The minimum in axis values + * @param {Number} max The maximum in axis values + * @param {Number} startOfWeek + */ +Axis.prototype.getTimeTicks = function (normalizedInterval, min, max, startOfWeek) { + var tickPositions = [], + i, + higherRanks = {}, + useUTC = defaultOptions.global.useUTC, + minYear, // used in months and years as a basis for Date.UTC() + minDate = new Date(min - timezoneOffset), + interval = normalizedInterval.unitRange, + count = normalizedInterval.count; + + if (defined(min)) { // #1300 + if (interval >= timeUnits[SECOND]) { // second + minDate.setMilliseconds(0); + minDate.setSeconds(interval >= timeUnits[MINUTE] ? 0 : + count * mathFloor(minDate.getSeconds() / count)); + } + + if (interval >= timeUnits[MINUTE]) { // minute + minDate[setMinutes](interval >= timeUnits[HOUR] ? 0 : + count * mathFloor(minDate[getMinutes]() / count)); + } + + if (interval >= timeUnits[HOUR]) { // hour + minDate[setHours](interval >= timeUnits[DAY] ? 0 : + count * mathFloor(minDate[getHours]() / count)); + } + + if (interval >= timeUnits[DAY]) { // day + minDate[setDate](interval >= timeUnits[MONTH] ? 1 : + count * mathFloor(minDate[getDate]() / count)); + } + + if (interval >= timeUnits[MONTH]) { // month + minDate[setMonth](interval >= timeUnits[YEAR] ? 0 : + count * mathFloor(minDate[getMonth]() / count)); + minYear = minDate[getFullYear](); + } + + if (interval >= timeUnits[YEAR]) { // year + minYear -= minYear % count; + minDate[setFullYear](minYear); + } + + // week is a special case that runs outside the hierarchy + if (interval === timeUnits[WEEK]) { + // get start of current week, independent of count + minDate[setDate](minDate[getDate]() - minDate[getDay]() + + pick(startOfWeek, 1)); + } + + + // get tick positions + i = 1; + if (timezoneOffset) { + minDate = new Date(minDate.getTime() + timezoneOffset); + } + minYear = minDate[getFullYear](); + var time = minDate.getTime(), + minMonth = minDate[getMonth](), + minDateDate = minDate[getDate](), + localTimezoneOffset = useUTC ? + timezoneOffset : + (24 * 3600 * 1000 + minDate.getTimezoneOffset() * 60 * 1000) % (24 * 3600 * 1000); // #950 + + // iterate and add tick positions at appropriate values + while (time < max) { + tickPositions.push(time); + + // if the interval is years, use Date.UTC to increase years + if (interval === timeUnits[YEAR]) { + time = makeTime(minYear + i * count, 0); + + // if the interval is months, use Date.UTC to increase months + } else if (interval === timeUnits[MONTH]) { + time = makeTime(minYear, minMonth + i * count); + + // if we're using global time, the interval is not fixed as it jumps + // one hour at the DST crossover + } else if (!useUTC && (interval === timeUnits[DAY] || interval === timeUnits[WEEK])) { + time = makeTime(minYear, minMonth, minDateDate + + i * count * (interval === timeUnits[DAY] ? 1 : 7)); + + // else, the interval is fixed and we use simple addition + } else { + time += interval * count; + } + + i++; + } + + // push the last time + tickPositions.push(time); + + + // mark new days if the time is dividible by day (#1649, #1760) + each(grep(tickPositions, function (time) { + return interval <= timeUnits[HOUR] && time % timeUnits[DAY] === localTimezoneOffset; + }), function (time) { + higherRanks[time] = DAY; + }); + } + + + // record information on the chosen unit - for dynamic label formatter + tickPositions.info = extend(normalizedInterval, { + higherRanks: higherRanks, + totalRange: interval * count + }); + + return tickPositions; +}; + +/** + * Get a normalized tick interval for dates. Returns a configuration object with + * unit range (interval), count and name. Used to prepare data for getTimeTicks. + * Previously this logic was part of getTimeTicks, but as getTimeTicks now runs + * of segments in stock charts, the normalizing logic was extracted in order to + * prevent it for running over again for each segment having the same interval. + * #662, #697. + */ +Axis.prototype.normalizeTimeTickInterval = function (tickInterval, unitsOption) { + var units = unitsOption || [[ + MILLISECOND, // unit name + [1, 2, 5, 10, 20, 25, 50, 100, 200, 500] // allowed multiples + ], [ + SECOND, + [1, 2, 5, 10, 15, 30] + ], [ + MINUTE, + [1, 2, 5, 10, 15, 30] + ], [ + HOUR, + [1, 2, 3, 4, 6, 8, 12] + ], [ + DAY, + [1, 2] + ], [ + WEEK, + [1, 2] + ], [ + MONTH, + [1, 2, 3, 4, 6] + ], [ + YEAR, + null + ]], + unit = units[units.length - 1], // default unit is years + interval = timeUnits[unit[0]], + multiples = unit[1], + count, + i; + + // loop through the units to find the one that best fits the tickInterval + for (i = 0; i < units.length; i++) { + unit = units[i]; + interval = timeUnits[unit[0]]; + multiples = unit[1]; + + + if (units[i + 1]) { + // lessThan is in the middle between the highest multiple and the next unit. + var lessThan = (interval * multiples[multiples.length - 1] + + timeUnits[units[i + 1][0]]) / 2; + + // break and keep the current unit + if (tickInterval <= lessThan) { + break; + } + } + } + + // prevent 2.5 years intervals, though 25, 250 etc. are allowed + if (interval === timeUnits[YEAR] && tickInterval < 5 * interval) { + multiples = [1, 2, 5]; + } + + // get the count + count = normalizeTickInterval( + tickInterval / interval, + multiples, + unit[0] === YEAR ? mathMax(getMagnitude(tickInterval / interval), 1) : 1 // #1913, #2360 + ); + + return { + unitRange: interval, + count: count, + unitName: unit[0] + }; +};/** + * Methods defined on the Axis prototype + */ + +/** + * Set the tick positions of a logarithmic axis + */ +Axis.prototype.getLogTickPositions = function (interval, min, max, minor) { + var axis = this, + options = axis.options, + axisLength = axis.len, + // Since we use this method for both major and minor ticks, + // use a local variable and return the result + positions = []; + + // Reset + if (!minor) { + axis._minorAutoInterval = null; + } + + // First case: All ticks fall on whole logarithms: 1, 10, 100 etc. + if (interval >= 0.5) { + interval = mathRound(interval); + positions = axis.getLinearTickPositions(interval, min, max); + + // Second case: We need intermediary ticks. For example + // 1, 2, 4, 6, 8, 10, 20, 40 etc. + } else if (interval >= 0.08) { + var roundedMin = mathFloor(min), + intermediate, + i, + j, + len, + pos, + lastPos, + break2; + + if (interval > 0.3) { + intermediate = [1, 2, 4]; + } else if (interval > 0.15) { // 0.2 equals five minor ticks per 1, 10, 100 etc + intermediate = [1, 2, 4, 6, 8]; + } else { // 0.1 equals ten minor ticks per 1, 10, 100 etc + intermediate = [1, 2, 3, 4, 5, 6, 7, 8, 9]; + } + + for (i = roundedMin; i < max + 1 && !break2; i++) { + len = intermediate.length; + for (j = 0; j < len && !break2; j++) { + pos = log2lin(lin2log(i) * intermediate[j]); + + if (pos > min && (!minor || lastPos <= max)) { // #1670 + positions.push(lastPos); + } + + if (lastPos > max) { + break2 = true; + } + lastPos = pos; + } + } + + // Third case: We are so deep in between whole logarithmic values that + // we might as well handle the tick positions like a linear axis. For + // example 1.01, 1.02, 1.03, 1.04. + } else { + var realMin = lin2log(min), + realMax = lin2log(max), + tickIntervalOption = options[minor ? 'minorTickInterval' : 'tickInterval'], + filteredTickIntervalOption = tickIntervalOption === 'auto' ? null : tickIntervalOption, + tickPixelIntervalOption = options.tickPixelInterval / (minor ? 5 : 1), + totalPixelLength = minor ? axisLength / axis.tickPositions.length : axisLength; + + interval = pick( + filteredTickIntervalOption, + axis._minorAutoInterval, + (realMax - realMin) * tickPixelIntervalOption / (totalPixelLength || 1) + ); + + interval = normalizeTickInterval( + interval, + null, + getMagnitude(interval) + ); + + positions = map(axis.getLinearTickPositions( + interval, + realMin, + realMax + ), log2lin); + + if (!minor) { + axis._minorAutoInterval = interval / 5; + } + } + + // Set the axis-level tickInterval variable + if (!minor) { + axis.tickInterval = interval; + } + return positions; +};/** + * The tooltip object + * @param {Object} chart The chart instance + * @param {Object} options Tooltip options + */ +var Tooltip = Highcharts.Tooltip = function () { + this.init.apply(this, arguments); +}; + +Tooltip.prototype = { + + init: function (chart, options) { + + var borderWidth = options.borderWidth, + style = options.style, + padding = pInt(style.padding); + + // Save the chart and options + this.chart = chart; + this.options = options; + + // Keep track of the current series + //this.currentSeries = UNDEFINED; + + // List of crosshairs + this.crosshairs = []; + + // Current values of x and y when animating + this.now = { x: 0, y: 0 }; + + // The tooltip is initially hidden + this.isHidden = true; + + + // create the label + this.label = chart.renderer.label('', 0, 0, options.shape || 'callout', null, null, options.useHTML, null, 'tooltip') + .attr({ + padding: padding, + fill: options.backgroundColor, + 'stroke-width': borderWidth, + r: options.borderRadius, + zIndex: 8 + }) + .css(style) + .css({ padding: 0 }) // Remove it from VML, the padding is applied as an attribute instead (#1117) + .add() + .attr({ y: -9999 }); // #2301, #2657 + + // When using canVG the shadow shows up as a gray circle + // even if the tooltip is hidden. + if (!useCanVG) { + this.label.shadow(options.shadow); + } + + // Public property for getting the shared state. + this.shared = options.shared; + }, + + /** + * Destroy the tooltip and its elements. + */ + destroy: function () { + // Destroy and clear local variables + if (this.label) { + this.label = this.label.destroy(); + } + clearTimeout(this.hideTimer); + clearTimeout(this.tooltipTimeout); + }, + + /** + * Provide a soft movement for the tooltip + * + * @param {Number} x + * @param {Number} y + * @private + */ + move: function (x, y, anchorX, anchorY) { + var tooltip = this, + now = tooltip.now, + animate = tooltip.options.animation !== false && !tooltip.isHidden, + skipAnchor = tooltip.followPointer || tooltip.len > 1; + + // get intermediate values for animation + extend(now, { + x: animate ? (2 * now.x + x) / 3 : x, + y: animate ? (now.y + y) / 2 : y, + anchorX: skipAnchor ? UNDEFINED : animate ? (2 * now.anchorX + anchorX) / 3 : anchorX, + anchorY: skipAnchor ? UNDEFINED : animate ? (now.anchorY + anchorY) / 2 : anchorY + }); + + // move to the intermediate value + tooltip.label.attr(now); + + + // run on next tick of the mouse tracker + if (animate && (mathAbs(x - now.x) > 1 || mathAbs(y - now.y) > 1)) { + + // never allow two timeouts + clearTimeout(this.tooltipTimeout); + + // set the fixed interval ticking for the smooth tooltip + this.tooltipTimeout = setTimeout(function () { + // The interval function may still be running during destroy, so check that the chart is really there before calling. + if (tooltip) { + tooltip.move(x, y, anchorX, anchorY); + } + }, 32); + + } + }, + + /** + * Hide the tooltip + */ + hide: function () { + var tooltip = this, + hoverPoints; + + clearTimeout(this.hideTimer); // disallow duplicate timers (#1728, #1766) + if (!this.isHidden) { + hoverPoints = this.chart.hoverPoints; + + this.hideTimer = setTimeout(function () { + tooltip.label.fadeOut(); + tooltip.isHidden = true; + }, pick(this.options.hideDelay, 500)); + + // hide previous hoverPoints and set new + if (hoverPoints) { + each(hoverPoints, function (point) { + point.setState(); + }); + } + + this.chart.hoverPoints = null; + } + }, + + /** + * Extendable method to get the anchor position of the tooltip + * from a point or set of points + */ + getAnchor: function (points, mouseEvent) { + var ret, + chart = this.chart, + inverted = chart.inverted, + plotTop = chart.plotTop, + plotX = 0, + plotY = 0, + yAxis; + + points = splat(points); + + // Pie uses a special tooltipPos + ret = points[0].tooltipPos; + + // When tooltip follows mouse, relate the position to the mouse + if (this.followPointer && mouseEvent) { + if (mouseEvent.chartX === UNDEFINED) { + mouseEvent = chart.pointer.normalize(mouseEvent); + } + ret = [ + mouseEvent.chartX - chart.plotLeft, + mouseEvent.chartY - plotTop + ]; + } + // When shared, use the average position + if (!ret) { + each(points, function (point) { + yAxis = point.series.yAxis; + plotX += point.plotX; + plotY += (point.plotLow ? (point.plotLow + point.plotHigh) / 2 : point.plotY) + + (!inverted && yAxis ? yAxis.top - plotTop : 0); // #1151 + }); + + plotX /= points.length; + plotY /= points.length; + + ret = [ + inverted ? chart.plotWidth - plotY : plotX, + this.shared && !inverted && points.length > 1 && mouseEvent ? + mouseEvent.chartY - plotTop : // place shared tooltip next to the mouse (#424) + inverted ? chart.plotHeight - plotX : plotY + ]; + } + + return map(ret, mathRound); + }, + + /** + * Place the tooltip in a chart without spilling over + * and not covering the point it self. + */ + getPosition: function (boxWidth, boxHeight, point) { + + var chart = this.chart, + distance = this.distance, + ret = {}, + swapped, + first = ['y', chart.chartHeight, boxHeight, point.plotY + chart.plotTop], + second = ['x', chart.chartWidth, boxWidth, point.plotX + chart.plotLeft], + // The far side is right or bottom + preferFarSide = point.ttBelow || (chart.inverted && !point.negative) || (!chart.inverted && point.negative), + /** + * Handle the preferred dimension. When the preferred dimension is tooltip + * on top or bottom of the point, it will look for space there. + */ + firstDimension = function (dim, outerSize, innerSize, point) { + var roomLeft = innerSize < point - distance, + roomRight = point + distance + innerSize < outerSize, + alignedLeft = point - distance - innerSize, + alignedRight = point + distance; + + if (preferFarSide && roomRight) { + ret[dim] = alignedRight; + } else if (!preferFarSide && roomLeft) { + ret[dim] = alignedLeft; + } else if (roomLeft) { + ret[dim] = alignedLeft; + } else if (roomRight) { + ret[dim] = alignedRight; + } else { + return false; + } + }, + /** + * Handle the secondary dimension. If the preferred dimension is tooltip + * on top or bottom of the point, the second dimension is to align the tooltip + * above the point, trying to align center but allowing left or right + * align within the chart box. + */ + secondDimension = function (dim, outerSize, innerSize, point) { + // Too close to the edge, return false and swap dimensions + if (point < distance || point > outerSize - distance) { + return false; + + // Align left/top + } else if (point < innerSize / 2) { + ret[dim] = 1; + // Align right/bottom + } else if (point > outerSize - innerSize / 2) { + ret[dim] = outerSize - innerSize - 2; + // Align center + } else { + ret[dim] = point - innerSize / 2; + } + }, + /** + * Swap the dimensions + */ + swap = function (count) { + var temp = first; + first = second; + second = temp; + swapped = count; + }, + run = function () { + if (firstDimension.apply(0, first) !== false) { + if (secondDimension.apply(0, second) === false && !swapped) { + swap(true); + run(); + } + } else if (!swapped) { + swap(true); + run(); + } else { + ret.x = ret.y = 0; + } + }; + + // Under these conditions, prefer the tooltip on the side of the point + if (chart.inverted || this.len > 1) { + swap(); + } + run(); + + return ret; + + }, + + /** + * In case no user defined formatter is given, this will be used. Note that the context + * here is an object holding point, series, x, y etc. + */ + defaultFormatter: function (tooltip) { + var items = this.points || splat(this), + series = items[0].series, + s; + + // build the header + s = [tooltip.tooltipHeaderFormatter(items[0])]; + + // build the values + each(items, function (item) { + series = item.series; + s.push((series.tooltipFormatter && series.tooltipFormatter(item)) || + item.point.tooltipFormatter(series.tooltipOptions.pointFormat)); + }); + + // footer + s.push(tooltip.options.footerFormat || ''); + + return s.join(''); + }, + + /** + * Refresh the tooltip's text and position. + * @param {Object} point + */ + refresh: function (point, mouseEvent) { + var tooltip = this, + chart = tooltip.chart, + label = tooltip.label, + options = tooltip.options, + x, + y, + anchor, + textConfig = {}, + text, + pointConfig = [], + formatter = options.formatter || tooltip.defaultFormatter, + hoverPoints = chart.hoverPoints, + borderColor, + shared = tooltip.shared, + currentSeries; + + clearTimeout(this.hideTimer); + + // get the reference point coordinates (pie charts use tooltipPos) + tooltip.followPointer = splat(point)[0].series.tooltipOptions.followPointer; + anchor = tooltip.getAnchor(point, mouseEvent); + x = anchor[0]; + y = anchor[1]; + + // shared tooltip, array is sent over + if (shared && !(point.series && point.series.noSharedTooltip)) { + + // hide previous hoverPoints and set new + + chart.hoverPoints = point; + if (hoverPoints) { + each(hoverPoints, function (point) { + point.setState(); + }); + } + + each(point, function (item) { + item.setState(HOVER_STATE); + + pointConfig.push(item.getLabelConfig()); + }); + + textConfig = { + x: point[0].category, + y: point[0].y + }; + textConfig.points = pointConfig; + this.len = pointConfig.length; + point = point[0]; + + // single point tooltip + } else { + textConfig = point.getLabelConfig(); + } + text = formatter.call(textConfig, tooltip); + + // register the current series + currentSeries = point.series; + this.distance = pick(currentSeries.tooltipOptions.distance, 16); + + // update the inner HTML + if (text === false) { + this.hide(); + } else { + + // show it + if (tooltip.isHidden) { + stop(label); + label.attr('opacity', 1).show(); + } + + // update text + label.attr({ + text: text + }); + + // set the stroke color of the box + borderColor = options.borderColor || point.color || currentSeries.color || '#606060'; + label.attr({ + stroke: borderColor + }); + + tooltip.updatePosition({ plotX: x, plotY: y, negative: point.negative, ttBelow: point.ttBelow }); + + this.isHidden = false; + } + fireEvent(chart, 'tooltipRefresh', { + text: text, + x: x + chart.plotLeft, + y: y + chart.plotTop, + borderColor: borderColor + }); + }, + + /** + * Find the new position and perform the move + */ + updatePosition: function (point) { + var chart = this.chart, + label = this.label, + pos = (this.options.positioner || this.getPosition).call( + this, + label.width, + label.height, + point + ); + + // do the move + this.move( + mathRound(pos.x), + mathRound(pos.y), + point.plotX + chart.plotLeft, + point.plotY + chart.plotTop + ); + }, + + + /** + * Format the header of the tooltip + */ + tooltipHeaderFormatter: function (point) { + var series = point.series, + tooltipOptions = series.tooltipOptions, + dateTimeLabelFormats = tooltipOptions.dateTimeLabelFormats, + xDateFormat = tooltipOptions.xDateFormat, + xAxis = series.xAxis, + isDateTime = xAxis && xAxis.options.type === 'datetime' && isNumber(point.key), + headerFormat = tooltipOptions.headerFormat, + closestPointRange = xAxis && xAxis.closestPointRange, + n; + + // Guess the best date format based on the closest point distance (#568) + if (isDateTime && !xDateFormat) { + if (closestPointRange) { + for (n in timeUnits) { + if (timeUnits[n] >= closestPointRange || + // If the point is placed every day at 23:59, we need to show + // the minutes as well. This logic only works for time units less than + // a day, since all higher time units are dividable by those. #2637. + (timeUnits[n] <= timeUnits[DAY] && point.key % timeUnits[n] > 0)) { + xDateFormat = dateTimeLabelFormats[n]; + break; + } + } + } else { + xDateFormat = dateTimeLabelFormats.day; + } + + xDateFormat = xDateFormat || dateTimeLabelFormats.year; // #2546, 2581 + + } + + // Insert the header date format if any + if (isDateTime && xDateFormat) { + headerFormat = headerFormat.replace('{point.key}', '{point.key:' + xDateFormat + '}'); + } + + return format(headerFormat, { + point: point, + series: series + }); + } +}; + +var hoverChartIndex; + +// Global flag for touch support +hasTouch = doc.documentElement.ontouchstart !== UNDEFINED; + +/** + * The mouse tracker object. All methods starting with "on" are primary DOM event handlers. + * Subsequent methods should be named differently from what they are doing. + * @param {Object} chart The Chart instance + * @param {Object} options The root options object + */ +var Pointer = Highcharts.Pointer = function (chart, options) { + this.init(chart, options); +}; + +Pointer.prototype = { + /** + * Initialize Pointer + */ + init: function (chart, options) { + + var chartOptions = options.chart, + chartEvents = chartOptions.events, + zoomType = useCanVG ? '' : chartOptions.zoomType, + inverted = chart.inverted, + zoomX, + zoomY; + + // Store references + this.options = options; + this.chart = chart; + + // Zoom status + this.zoomX = zoomX = /x/.test(zoomType); + this.zoomY = zoomY = /y/.test(zoomType); + this.zoomHor = (zoomX && !inverted) || (zoomY && inverted); + this.zoomVert = (zoomY && !inverted) || (zoomX && inverted); + this.hasZoom = zoomX || zoomY; + + // Do we need to handle click on a touch device? + this.runChartClick = chartEvents && !!chartEvents.click; + + this.pinchDown = []; + this.lastValidTouch = {}; + + if (Highcharts.Tooltip && options.tooltip.enabled) { + chart.tooltip = new Tooltip(chart, options.tooltip); + this.followTouchMove = options.tooltip.followTouchMove; + } + + this.setDOMEvents(); + }, + + /** + * Add crossbrowser support for chartX and chartY + * @param {Object} e The event object in standard browsers + */ + normalize: function (e, chartPosition) { + var chartX, + chartY, + ePos; + + // common IE normalizing + e = e || window.event; + + // Framework specific normalizing (#1165) + e = washMouseEvent(e); + + // More IE normalizing, needs to go after washMouseEvent + if (!e.target) { + e.target = e.srcElement; + } + + // iOS (#2757) + ePos = e.touches ? (e.touches.length ? e.touches.item(0) : e.changedTouches[0]) : e; + + // Get mouse position + if (!chartPosition) { + this.chartPosition = chartPosition = offset(this.chart.container); + } + + // chartX and chartY + if (ePos.pageX === UNDEFINED) { // IE < 9. #886. + chartX = mathMax(e.x, e.clientX - chartPosition.left); // #2005, #2129: the second case is + // for IE10 quirks mode within framesets + chartY = e.y; + } else { + chartX = ePos.pageX - chartPosition.left; + chartY = ePos.pageY - chartPosition.top; + } + + return extend(e, { + chartX: mathRound(chartX), + chartY: mathRound(chartY) + }); + }, + + /** + * Get the click position in terms of axis values. + * + * @param {Object} e A pointer event + */ + getCoordinates: function (e) { + var coordinates = { + xAxis: [], + yAxis: [] + }; + + each(this.chart.axes, function (axis) { + coordinates[axis.isXAxis ? 'xAxis' : 'yAxis'].push({ + axis: axis, + value: axis.toValue(e[axis.horiz ? 'chartX' : 'chartY']) + }); + }); + return coordinates; + }, + + /** + * Return the index in the tooltipPoints array, corresponding to pixel position in + * the plot area. + */ + getIndex: function (e) { + var chart = this.chart; + return chart.inverted ? + chart.plotHeight + chart.plotTop - e.chartY : + e.chartX - chart.plotLeft; + }, + + /** + * With line type charts with a single tracker, get the point closest to the mouse. + * Run Point.onMouseOver and display tooltip for the point or points. + */ + runPointActions: function (e) { + var pointer = this, + chart = pointer.chart, + series = chart.series, + tooltip = chart.tooltip, + followPointer, + point, + points, + hoverPoint = chart.hoverPoint, + hoverSeries = chart.hoverSeries, + i, + j, + distance = chart.chartWidth, + index = pointer.getIndex(e), + anchor; + + // shared tooltip + if (tooltip && pointer.options.tooltip.shared && !(hoverSeries && hoverSeries.noSharedTooltip)) { + points = []; + + // loop over all series and find the ones with points closest to the mouse + i = series.length; + for (j = 0; j < i; j++) { + if (series[j].visible && + series[j].options.enableMouseTracking !== false && + !series[j].noSharedTooltip && series[j].singularTooltips !== true && series[j].tooltipPoints.length) { + point = series[j].tooltipPoints[index]; + if (point && point.series) { // not a dummy point, #1544 + point._dist = mathAbs(index - point.clientX); + distance = mathMin(distance, point._dist); + points.push(point); + } + } + } + // remove furthest points + i = points.length; + while (i--) { + if (points[i]._dist > distance) { + points.splice(i, 1); + } + } + // refresh the tooltip if necessary + if (points.length && (points[0].clientX !== pointer.hoverX)) { + tooltip.refresh(points, e); + pointer.hoverX = points[0].clientX; + } + } + + // Separate tooltip and general mouse events + followPointer = hoverSeries && hoverSeries.tooltipOptions.followPointer; + if (hoverSeries && hoverSeries.tracker && !followPointer) { // #2584, #2830 + + // get the point + point = hoverSeries.tooltipPoints[index]; + + // a new point is hovered, refresh the tooltip + if (point && point !== hoverPoint) { + + // trigger the events + point.onMouseOver(e); + + } + + } else if (tooltip && followPointer && !tooltip.isHidden) { + anchor = tooltip.getAnchor([{}], e); + tooltip.updatePosition({ plotX: anchor[0], plotY: anchor[1] }); + } + + // Start the event listener to pick up the tooltip + if (tooltip && !pointer._onDocumentMouseMove) { + pointer._onDocumentMouseMove = function (e) { + if (charts[hoverChartIndex]) { + charts[hoverChartIndex].pointer.onDocumentMouseMove(e); + } + }; + addEvent(doc, 'mousemove', pointer._onDocumentMouseMove); + } + + // Draw independent crosshairs + each(chart.axes, function (axis) { + axis.drawCrosshair(e, pick(point, hoverPoint)); + }); + }, + + + + /** + * Reset the tracking by hiding the tooltip, the hover series state and the hover point + * + * @param allowMove {Boolean} Instead of destroying the tooltip altogether, allow moving it if possible + */ + reset: function (allowMove) { + var pointer = this, + chart = pointer.chart, + hoverSeries = chart.hoverSeries, + hoverPoint = chart.hoverPoint, + tooltip = chart.tooltip, + tooltipPoints = tooltip && tooltip.shared ? chart.hoverPoints : hoverPoint; + + // Narrow in allowMove + allowMove = allowMove && tooltip && tooltipPoints; + + // Check if the points have moved outside the plot area, #1003 + if (allowMove && splat(tooltipPoints)[0].plotX === UNDEFINED) { + allowMove = false; + } + + // Just move the tooltip, #349 + if (allowMove) { + tooltip.refresh(tooltipPoints); + if (hoverPoint) { // #2500 + hoverPoint.setState(hoverPoint.state, true); + } + + // Full reset + } else { + + if (hoverPoint) { + hoverPoint.onMouseOut(); + } + + if (hoverSeries) { + hoverSeries.onMouseOut(); + } + + if (tooltip) { + tooltip.hide(); + } + + if (pointer._onDocumentMouseMove) { + removeEvent(doc, 'mousemove', pointer._onDocumentMouseMove); + pointer._onDocumentMouseMove = null; + } + + // Remove crosshairs + each(chart.axes, function (axis) { + axis.hideCrosshair(); + }); + + pointer.hoverX = null; + + } + }, + + /** + * Scale series groups to a certain scale and translation + */ + scaleGroups: function (attribs, clip) { + + var chart = this.chart, + seriesAttribs; + + // Scale each series + each(chart.series, function (series) { + seriesAttribs = attribs || series.getPlotBox(); // #1701 + if (series.xAxis && series.xAxis.zoomEnabled) { + series.group.attr(seriesAttribs); + if (series.markerGroup) { + series.markerGroup.attr(seriesAttribs); + series.markerGroup.clip(clip ? chart.clipRect : null); + } + if (series.dataLabelsGroup) { + series.dataLabelsGroup.attr(seriesAttribs); + } + } + }); + + // Clip + chart.clipRect.attr(clip || chart.clipBox); + }, + + /** + * Start a drag operation + */ + dragStart: function (e) { + var chart = this.chart; + + // Record the start position + chart.mouseIsDown = e.type; + chart.cancelClick = false; + chart.mouseDownX = this.mouseDownX = e.chartX; + chart.mouseDownY = this.mouseDownY = e.chartY; + }, + + /** + * Perform a drag operation in response to a mousemove event while the mouse is down + */ + drag: function (e) { + + var chart = this.chart, + chartOptions = chart.options.chart, + chartX = e.chartX, + chartY = e.chartY, + zoomHor = this.zoomHor, + zoomVert = this.zoomVert, + plotLeft = chart.plotLeft, + plotTop = chart.plotTop, + plotWidth = chart.plotWidth, + plotHeight = chart.plotHeight, + clickedInside, + size, + mouseDownX = this.mouseDownX, + mouseDownY = this.mouseDownY; + + // If the mouse is outside the plot area, adjust to cooordinates + // inside to prevent the selection marker from going outside + if (chartX < plotLeft) { + chartX = plotLeft; + } else if (chartX > plotLeft + plotWidth) { + chartX = plotLeft + plotWidth; + } + + if (chartY < plotTop) { + chartY = plotTop; + } else if (chartY > plotTop + plotHeight) { + chartY = plotTop + plotHeight; + } + + // determine if the mouse has moved more than 10px + this.hasDragged = Math.sqrt( + Math.pow(mouseDownX - chartX, 2) + + Math.pow(mouseDownY - chartY, 2) + ); + + if (this.hasDragged > 10) { + clickedInside = chart.isInsidePlot(mouseDownX - plotLeft, mouseDownY - plotTop); + + // make a selection + if (chart.hasCartesianSeries && (this.zoomX || this.zoomY) && clickedInside) { + if (!this.selectionMarker) { + this.selectionMarker = chart.renderer.rect( + plotLeft, + plotTop, + zoomHor ? 1 : plotWidth, + zoomVert ? 1 : plotHeight, + 0 + ) + .attr({ + fill: chartOptions.selectionMarkerFill || 'rgba(69,114,167,0.25)', + zIndex: 7 + }) + .add(); + } + } + + // adjust the width of the selection marker + if (this.selectionMarker && zoomHor) { + size = chartX - mouseDownX; + this.selectionMarker.attr({ + width: mathAbs(size), + x: (size > 0 ? 0 : size) + mouseDownX + }); + } + // adjust the height of the selection marker + if (this.selectionMarker && zoomVert) { + size = chartY - mouseDownY; + this.selectionMarker.attr({ + height: mathAbs(size), + y: (size > 0 ? 0 : size) + mouseDownY + }); + } + + // panning + if (clickedInside && !this.selectionMarker && chartOptions.panning) { + chart.pan(e, chartOptions.panning); + } + } + }, + + /** + * On mouse up or touch end across the entire document, drop the selection. + */ + drop: function (e) { + var chart = this.chart, + hasPinched = this.hasPinched; + + if (this.selectionMarker) { + var selectionData = { + xAxis: [], + yAxis: [], + originalEvent: e.originalEvent || e + }, + selectionBox = this.selectionMarker, + selectionLeft = selectionBox.attr ? selectionBox.attr('x') : selectionBox.x, + selectionTop = selectionBox.attr ? selectionBox.attr('y') : selectionBox.y, + selectionWidth = selectionBox.attr ? selectionBox.attr('width') : selectionBox.width, + selectionHeight = selectionBox.attr ? selectionBox.attr('height') : selectionBox.height, + runZoom; + + // a selection has been made + if (this.hasDragged || hasPinched) { + + // record each axis' min and max + each(chart.axes, function (axis) { + if (axis.zoomEnabled) { + var horiz = axis.horiz, + selectionMin = axis.toValue((horiz ? selectionLeft : selectionTop)), + selectionMax = axis.toValue((horiz ? selectionLeft + selectionWidth : selectionTop + selectionHeight)); + + if (!isNaN(selectionMin) && !isNaN(selectionMax)) { // #859 + selectionData[axis.coll].push({ + axis: axis, + min: mathMin(selectionMin, selectionMax), // for reversed axes, + max: mathMax(selectionMin, selectionMax) + }); + runZoom = true; + } + } + }); + if (runZoom) { + fireEvent(chart, 'selection', selectionData, function (args) { + chart.zoom(extend(args, hasPinched ? { animation: false } : null)); + }); + } + + } + this.selectionMarker = this.selectionMarker.destroy(); + + // Reset scaling preview + if (hasPinched) { + this.scaleGroups(); + } + } + + // Reset all + if (chart) { // it may be destroyed on mouse up - #877 + css(chart.container, { cursor: chart._cursor }); + chart.cancelClick = this.hasDragged > 10; // #370 + chart.mouseIsDown = this.hasDragged = this.hasPinched = false; + this.pinchDown = []; + } + }, + + onContainerMouseDown: function (e) { + + e = this.normalize(e); + + // issue #295, dragging not always working in Firefox + if (e.preventDefault) { + e.preventDefault(); + } + + this.dragStart(e); + }, + + + + onDocumentMouseUp: function (e) { + if (charts[hoverChartIndex]) { + charts[hoverChartIndex].pointer.drop(e); + } + }, + + /** + * Special handler for mouse move that will hide the tooltip when the mouse leaves the plotarea. + * Issue #149 workaround. The mouseleave event does not always fire. + */ + onDocumentMouseMove: function (e) { + var chart = this.chart, + chartPosition = this.chartPosition, + hoverSeries = chart.hoverSeries; + + e = this.normalize(e, chartPosition); + + // If we're outside, hide the tooltip + if (chartPosition && hoverSeries && !this.inClass(e.target, 'highcharts-tracker') && + !chart.isInsidePlot(e.chartX - chart.plotLeft, e.chartY - chart.plotTop)) { + this.reset(); + } + }, + + /** + * When mouse leaves the container, hide the tooltip. + */ + onContainerMouseLeave: function () { + var chart = charts[hoverChartIndex]; + if (chart) { + chart.pointer.reset(); + chart.pointer.chartPosition = null; // also reset the chart position, used in #149 fix + } + }, + + // The mousemove, touchmove and touchstart event handler + onContainerMouseMove: function (e) { + + var chart = this.chart; + + hoverChartIndex = chart.index; + + // normalize + e = this.normalize(e); + + if (chart.mouseIsDown === 'mousedown') { + this.drag(e); + } + + // Show the tooltip and run mouse over events (#977) + if ((this.inClass(e.target, 'highcharts-tracker') || + chart.isInsidePlot(e.chartX - chart.plotLeft, e.chartY - chart.plotTop)) && !chart.openMenu) { + this.runPointActions(e); + } + }, + + /** + * Utility to detect whether an element has, or has a parent with, a specific + * class name. Used on detection of tracker objects and on deciding whether + * hovering the tooltip should cause the active series to mouse out. + */ + inClass: function (element, className) { + var elemClassName; + while (element) { + elemClassName = attr(element, 'class'); + if (elemClassName) { + if (elemClassName.indexOf(className) !== -1) { + return true; + } else if (elemClassName.indexOf(PREFIX + 'container') !== -1) { + return false; + } + } + element = element.parentNode; + } + }, + + onTrackerMouseOut: function (e) { + var series = this.chart.hoverSeries, + relatedTarget = e.relatedTarget || e.toElement, + relatedSeries = relatedTarget && relatedTarget.point && relatedTarget.point.series; // #2499 + + if (series && !series.options.stickyTracking && !this.inClass(relatedTarget, PREFIX + 'tooltip') && + relatedSeries !== series) { + series.onMouseOut(); + } + }, + + onContainerClick: function (e) { + var chart = this.chart, + hoverPoint = chart.hoverPoint, + plotLeft = chart.plotLeft, + plotTop = chart.plotTop; + + e = this.normalize(e); + e.cancelBubble = true; // IE specific + + if (!chart.cancelClick) { + + // On tracker click, fire the series and point events. #783, #1583 + if (hoverPoint && this.inClass(e.target, PREFIX + 'tracker')) { + + // the series click event + fireEvent(hoverPoint.series, 'click', extend(e, { + point: hoverPoint + })); + + // the point click event + if (chart.hoverPoint) { // it may be destroyed (#1844) + hoverPoint.firePointEvent('click', e); + } + + // When clicking outside a tracker, fire a chart event + } else { + extend(e, this.getCoordinates(e)); + + // fire a click event in the chart + if (chart.isInsidePlot(e.chartX - plotLeft, e.chartY - plotTop)) { + fireEvent(chart, 'click', e); + } + } + + + } + }, + + /** + * Set the JS DOM events on the container and document. This method should contain + * a one-to-one assignment between methods and their handlers. Any advanced logic should + * be moved to the handler reflecting the event's name. + */ + setDOMEvents: function () { + + var pointer = this, + container = pointer.chart.container; + + container.onmousedown = function (e) { + pointer.onContainerMouseDown(e); + }; + container.onmousemove = function (e) { + pointer.onContainerMouseMove(e); + }; + container.onclick = function (e) { + pointer.onContainerClick(e); + }; + addEvent(container, 'mouseleave', pointer.onContainerMouseLeave); + if (chartCount === 1) { + addEvent(doc, 'mouseup', pointer.onDocumentMouseUp); + } + if (hasTouch) { + container.ontouchstart = function (e) { + pointer.onContainerTouchStart(e); + }; + container.ontouchmove = function (e) { + pointer.onContainerTouchMove(e); + }; + if (chartCount === 1) { + addEvent(doc, 'touchend', pointer.onDocumentTouchEnd); + } + } + + }, + + /** + * Destroys the Pointer object and disconnects DOM events. + */ + destroy: function () { + var prop; + + removeEvent(this.chart.container, 'mouseleave', this.onContainerMouseLeave); + if (!chartCount) { + removeEvent(doc, 'mouseup', this.onDocumentMouseUp); + removeEvent(doc, 'touchend', this.onDocumentTouchEnd); + } + + // memory and CPU leak + clearInterval(this.tooltipTimeout); + + for (prop in this) { + this[prop] = null; + } + } +}; + + +/* Support for touch devices */ +extend(Highcharts.Pointer.prototype, { + + /** + * Run translation operations + */ + pinchTranslate: function (pinchDown, touches, transform, selectionMarker, clip, lastValidTouch) { + if (this.zoomHor || this.pinchHor) { + this.pinchTranslateDirection(true, pinchDown, touches, transform, selectionMarker, clip, lastValidTouch); + } + if (this.zoomVert || this.pinchVert) { + this.pinchTranslateDirection(false, pinchDown, touches, transform, selectionMarker, clip, lastValidTouch); + } + }, + + /** + * Run translation operations for each direction (horizontal and vertical) independently + */ + pinchTranslateDirection: function (horiz, pinchDown, touches, transform, selectionMarker, clip, lastValidTouch, forcedScale) { + var chart = this.chart, + xy = horiz ? 'x' : 'y', + XY = horiz ? 'X' : 'Y', + sChartXY = 'chart' + XY, + wh = horiz ? 'width' : 'height', + plotLeftTop = chart['plot' + (horiz ? 'Left' : 'Top')], + selectionWH, + selectionXY, + clipXY, + scale = forcedScale || 1, + inverted = chart.inverted, + bounds = chart.bounds[horiz ? 'h' : 'v'], + singleTouch = pinchDown.length === 1, + touch0Start = pinchDown[0][sChartXY], + touch0Now = touches[0][sChartXY], + touch1Start = !singleTouch && pinchDown[1][sChartXY], + touch1Now = !singleTouch && touches[1][sChartXY], + outOfBounds, + transformScale, + scaleKey, + setScale = function () { + if (!singleTouch && mathAbs(touch0Start - touch1Start) > 20) { // Don't zoom if fingers are too close on this axis + scale = forcedScale || mathAbs(touch0Now - touch1Now) / mathAbs(touch0Start - touch1Start); + } + + clipXY = ((plotLeftTop - touch0Now) / scale) + touch0Start; + selectionWH = chart['plot' + (horiz ? 'Width' : 'Height')] / scale; + }; + + // Set the scale, first pass + setScale(); + + selectionXY = clipXY; // the clip position (x or y) is altered if out of bounds, the selection position is not + + // Out of bounds + if (selectionXY < bounds.min) { + selectionXY = bounds.min; + outOfBounds = true; + } else if (selectionXY + selectionWH > bounds.max) { + selectionXY = bounds.max - selectionWH; + outOfBounds = true; + } + + // Is the chart dragged off its bounds, determined by dataMin and dataMax? + if (outOfBounds) { + + // Modify the touchNow position in order to create an elastic drag movement. This indicates + // to the user that the chart is responsive but can't be dragged further. + touch0Now -= 0.8 * (touch0Now - lastValidTouch[xy][0]); + if (!singleTouch) { + touch1Now -= 0.8 * (touch1Now - lastValidTouch[xy][1]); + } + + // Set the scale, second pass to adapt to the modified touchNow positions + setScale(); + + } else { + lastValidTouch[xy] = [touch0Now, touch1Now]; + } + + // Set geometry for clipping, selection and transformation + if (!inverted) { // TODO: implement clipping for inverted charts + clip[xy] = clipXY - plotLeftTop; + clip[wh] = selectionWH; + } + scaleKey = inverted ? (horiz ? 'scaleY' : 'scaleX') : 'scale' + XY; + transformScale = inverted ? 1 / scale : scale; + + selectionMarker[wh] = selectionWH; + selectionMarker[xy] = selectionXY; + transform[scaleKey] = scale; + transform['translate' + XY] = (transformScale * plotLeftTop) + (touch0Now - (transformScale * touch0Start)); + }, + + /** + * Handle touch events with two touches + */ + pinch: function (e) { + + var self = this, + chart = self.chart, + pinchDown = self.pinchDown, + followTouchMove = self.followTouchMove, + touches = e.touches, + touchesLength = touches.length, + lastValidTouch = self.lastValidTouch, + hasZoom = self.hasZoom, + selectionMarker = self.selectionMarker, + transform = {}, + fireClickEvent = touchesLength === 1 && ((self.inClass(e.target, PREFIX + 'tracker') && + chart.runTrackerClick) || chart.runChartClick), + clip = {}; + + // On touch devices, only proceed to trigger click if a handler is defined + if ((hasZoom || followTouchMove) && !fireClickEvent) { + e.preventDefault(); + } + + // Normalize each touch + map(touches, function (e) { + return self.normalize(e); + }); + + // Register the touch start position + if (e.type === 'touchstart') { + each(touches, function (e, i) { + pinchDown[i] = { chartX: e.chartX, chartY: e.chartY }; + }); + lastValidTouch.x = [pinchDown[0].chartX, pinchDown[1] && pinchDown[1].chartX]; + lastValidTouch.y = [pinchDown[0].chartY, pinchDown[1] && pinchDown[1].chartY]; + + // Identify the data bounds in pixels + each(chart.axes, function (axis) { + if (axis.zoomEnabled) { + var bounds = chart.bounds[axis.horiz ? 'h' : 'v'], + minPixelPadding = axis.minPixelPadding, + min = axis.toPixels(axis.dataMin), + max = axis.toPixels(axis.dataMax), + absMin = mathMin(min, max), + absMax = mathMax(min, max); + + // Store the bounds for use in the touchmove handler + bounds.min = mathMin(axis.pos, absMin - minPixelPadding); + bounds.max = mathMax(axis.pos + axis.len, absMax + minPixelPadding); + } + }); + + // Event type is touchmove, handle panning and pinching + } else if (pinchDown.length) { // can be 0 when releasing, if touchend fires first + + + // Set the marker + if (!selectionMarker) { + self.selectionMarker = selectionMarker = extend({ + destroy: noop + }, chart.plotBox); + } + + self.pinchTranslate(pinchDown, touches, transform, selectionMarker, clip, lastValidTouch); + + self.hasPinched = hasZoom; + + // Scale and translate the groups to provide visual feedback during pinching + self.scaleGroups(transform, clip); + + // Optionally move the tooltip on touchmove + if (!hasZoom && followTouchMove && touchesLength === 1) { + this.runPointActions(self.normalize(e)); + } + } + }, + + onContainerTouchStart: function (e) { + var chart = this.chart; + + hoverChartIndex = chart.index; + + if (e.touches.length === 1) { + + e = this.normalize(e); + + if (chart.isInsidePlot(e.chartX - chart.plotLeft, e.chartY - chart.plotTop)) { + + // Run mouse events and display tooltip etc + this.runPointActions(e); + + this.pinch(e); + + } else { + // Hide the tooltip on touching outside the plot area (#1203) + this.reset(); + } + + } else if (e.touches.length === 2) { + this.pinch(e); + } + }, + + onContainerTouchMove: function (e) { + if (e.touches.length === 1 || e.touches.length === 2) { + this.pinch(e); + } + }, + + onDocumentTouchEnd: function (e) { + if (charts[hoverChartIndex]) { + charts[hoverChartIndex].pointer.drop(e); + } + } + +}); +if (win.PointerEvent || win.MSPointerEvent) { + + // The touches object keeps track of the points being touched at all times + var touches = {}, + hasPointerEvent = !!win.PointerEvent, + getWebkitTouches = function () { + var key, fake = []; + fake.item = function (i) { return this[i]; }; + for (key in touches) { + if (touches.hasOwnProperty(key)) { + fake.push({ + pageX: touches[key].pageX, + pageY: touches[key].pageY, + target: touches[key].target + }); + } + } + return fake; + }, + translateMSPointer = function (e, method, wktype, callback) { + var p; + e = e.originalEvent || e; + if ((e.pointerType === 'touch' || e.pointerType === e.MSPOINTER_TYPE_TOUCH) && charts[hoverChartIndex]) { + callback(e); + p = charts[hoverChartIndex].pointer; + p[method]({ + type: wktype, + target: e.currentTarget, + preventDefault: noop, + touches: getWebkitTouches() + }); + } + }; + + /** + * Extend the Pointer prototype with methods for each event handler and more + */ + extend(Pointer.prototype, { + onContainerPointerDown: function (e) { + translateMSPointer(e, 'onContainerTouchStart', 'touchstart', function (e) { + touches[e.pointerId] = { pageX: e.pageX, pageY: e.pageY, target: e.currentTarget }; + }); + }, + onContainerPointerMove: function (e) { + translateMSPointer(e, 'onContainerTouchMove', 'touchmove', function (e) { + touches[e.pointerId] = { pageX: e.pageX, pageY: e.pageY }; + if (!touches[e.pointerId].target) { + touches[e.pointerId].target = e.currentTarget; + } + }); + }, + onDocumentPointerUp: function (e) { + translateMSPointer(e, 'onContainerTouchEnd', 'touchend', function (e) { + delete touches[e.pointerId]; + }); + }, + + /** + * Add or remove the MS Pointer specific events + */ + batchMSEvents: function (fn) { + fn(this.chart.container, hasPointerEvent ? 'pointerdown' : 'MSPointerDown', this.onContainerPointerDown); + fn(this.chart.container, hasPointerEvent ? 'pointermove' : 'MSPointerMove', this.onContainerPointerMove); + fn(doc, hasPointerEvent ? 'pointerup' : 'MSPointerUp', this.onDocumentPointerUp); + } + }); + + // Disable default IE actions for pinch and such on chart element + wrap(Pointer.prototype, 'init', function (proceed, chart, options) { + proceed.call(this, chart, options); + if (this.hasZoom || this.followTouchMove) { + css(chart.container, { + '-ms-touch-action': NONE, + 'touch-action': NONE + }); + } + }); + + // Add IE specific touch events to chart + wrap(Pointer.prototype, 'setDOMEvents', function (proceed) { + proceed.apply(this); + if (this.hasZoom || this.followTouchMove) { + this.batchMSEvents(addEvent); + } + }); + // Destroy MS events also + wrap(Pointer.prototype, 'destroy', function (proceed) { + this.batchMSEvents(removeEvent); + proceed.call(this); + }); +} +/** + * The overview of the chart's series + */ +var Legend = Highcharts.Legend = function (chart, options) { + this.init(chart, options); +}; + +Legend.prototype = { + + /** + * Initialize the legend + */ + init: function (chart, options) { + + var legend = this, + itemStyle = options.itemStyle, + padding = pick(options.padding, 8), + itemMarginTop = options.itemMarginTop || 0; + + this.options = options; + + if (!options.enabled) { + return; + } + + legend.baseline = pInt(itemStyle.fontSize) + 3 + itemMarginTop; // used in Series prototype + legend.itemStyle = itemStyle; + legend.itemHiddenStyle = merge(itemStyle, options.itemHiddenStyle); + legend.itemMarginTop = itemMarginTop; + legend.padding = padding; + legend.initialItemX = padding; + legend.initialItemY = padding - 5; // 5 is the number of pixels above the text + legend.maxItemWidth = 0; + legend.chart = chart; + legend.itemHeight = 0; + legend.lastLineHeight = 0; + legend.symbolWidth = pick(options.symbolWidth, 16); + legend.pages = []; + + + // Render it + legend.render(); + + // move checkboxes + addEvent(legend.chart, 'endResize', function () { + legend.positionCheckboxes(); + }); + + }, + + /** + * Set the colors for the legend item + * @param {Object} item A Series or Point instance + * @param {Object} visible Dimmed or colored + */ + colorizeItem: function (item, visible) { + var legend = this, + options = legend.options, + legendItem = item.legendItem, + legendLine = item.legendLine, + legendSymbol = item.legendSymbol, + hiddenColor = legend.itemHiddenStyle.color, + textColor = visible ? options.itemStyle.color : hiddenColor, + symbolColor = visible ? (item.legendColor || item.color || '#CCC') : hiddenColor, + markerOptions = item.options && item.options.marker, + symbolAttr = { fill: symbolColor }, + key, + val; + + if (legendItem) { + legendItem.css({ fill: textColor, color: textColor }); // color for #1553, oldIE + } + if (legendLine) { + legendLine.attr({ stroke: symbolColor }); + } + + if (legendSymbol) { + + // Apply marker options + if (markerOptions && legendSymbol.isMarker) { // #585 + symbolAttr.stroke = symbolColor; + markerOptions = item.convertAttribs(markerOptions); + for (key in markerOptions) { + val = markerOptions[key]; + if (val !== UNDEFINED) { + symbolAttr[key] = val; + } + } + } + + legendSymbol.attr(symbolAttr); + } + }, + + /** + * Position the legend item + * @param {Object} item A Series or Point instance + */ + positionItem: function (item) { + var legend = this, + options = legend.options, + symbolPadding = options.symbolPadding, + ltr = !options.rtl, + legendItemPos = item._legendItemPos, + itemX = legendItemPos[0], + itemY = legendItemPos[1], + checkbox = item.checkbox; + + if (item.legendGroup) { + item.legendGroup.translate( + ltr ? itemX : legend.legendWidth - itemX - 2 * symbolPadding - 4, + itemY + ); + } + + if (checkbox) { + checkbox.x = itemX; + checkbox.y = itemY; + } + }, + + /** + * Destroy a single legend item + * @param {Object} item The series or point + */ + destroyItem: function (item) { + var checkbox = item.checkbox; + + // destroy SVG elements + each(['legendItem', 'legendLine', 'legendSymbol', 'legendGroup'], function (key) { + if (item[key]) { + item[key] = item[key].destroy(); + } + }); + + if (checkbox) { + discardElement(item.checkbox); + } + }, + + /** + * Destroys the legend. + */ + destroy: function () { + var legend = this, + legendGroup = legend.group, + box = legend.box; + + if (box) { + legend.box = box.destroy(); + } + + if (legendGroup) { + legend.group = legendGroup.destroy(); + } + }, + + /** + * Position the checkboxes after the width is determined + */ + positionCheckboxes: function (scrollOffset) { + var alignAttr = this.group.alignAttr, + translateY, + clipHeight = this.clipHeight || this.legendHeight; + + if (alignAttr) { + translateY = alignAttr.translateY; + each(this.allItems, function (item) { + var checkbox = item.checkbox, + top; + + if (checkbox) { + top = (translateY + checkbox.y + (scrollOffset || 0) + 3); + css(checkbox, { + left: (alignAttr.translateX + item.checkboxOffset + checkbox.x - 20) + PX, + top: top + PX, + display: top > translateY - 6 && top < translateY + clipHeight - 6 ? '' : NONE + }); + } + }); + } + }, + + /** + * Render the legend title on top of the legend + */ + renderTitle: function () { + var options = this.options, + padding = this.padding, + titleOptions = options.title, + titleHeight = 0, + bBox; + + if (titleOptions.text) { + if (!this.title) { + this.title = this.chart.renderer.label(titleOptions.text, padding - 3, padding - 4, null, null, null, null, null, 'legend-title') + .attr({ zIndex: 1 }) + .css(titleOptions.style) + .add(this.group); + } + bBox = this.title.getBBox(); + titleHeight = bBox.height; + this.offsetWidth = bBox.width; // #1717 + this.contentGroup.attr({ translateY: titleHeight }); + } + this.titleHeight = titleHeight; + }, + + /** + * Render a single specific legend item + * @param {Object} item A series or point + */ + renderItem: function (item) { + var legend = this, + chart = legend.chart, + renderer = chart.renderer, + options = legend.options, + horizontal = options.layout === 'horizontal', + symbolWidth = legend.symbolWidth, + symbolPadding = options.symbolPadding, + itemStyle = legend.itemStyle, + itemHiddenStyle = legend.itemHiddenStyle, + padding = legend.padding, + itemDistance = horizontal ? pick(options.itemDistance, 20) : 0, // docs + ltr = !options.rtl, + itemHeight, + widthOption = options.width, + itemMarginBottom = options.itemMarginBottom || 0, + itemMarginTop = legend.itemMarginTop, + initialItemX = legend.initialItemX, + bBox, + itemWidth, + li = item.legendItem, + series = item.series && item.series.drawLegendSymbol ? item.series : item, + seriesOptions = series.options, + showCheckbox = legend.createCheckboxForItem && seriesOptions && seriesOptions.showCheckbox, + useHTML = options.useHTML; + + if (!li) { // generate it once, later move it + + // Generate the group box + // A group to hold the symbol and text. Text is to be appended in Legend class. + item.legendGroup = renderer.g('legend-item') + .attr({ zIndex: 1 }) + .add(legend.scrollGroup); + + // Draw the legend symbol inside the group box + series.drawLegendSymbol(legend, item); + + // Generate the list item text and add it to the group + item.legendItem = li = renderer.text( + options.labelFormat ? format(options.labelFormat, item) : options.labelFormatter.call(item), + ltr ? symbolWidth + symbolPadding : -symbolPadding, + legend.baseline, + useHTML + ) + .css(merge(item.visible ? itemStyle : itemHiddenStyle)) // merge to prevent modifying original (#1021) + .attr({ + align: ltr ? 'left' : 'right', + zIndex: 2 + }) + .add(item.legendGroup); + + if (legend.setItemEvents) { + legend.setItemEvents(item, li, useHTML, itemStyle, itemHiddenStyle); + } + + // Colorize the items + legend.colorizeItem(item, item.visible); + + // add the HTML checkbox on top + if (showCheckbox) { + legend.createCheckboxForItem(item); + } + } + + // calculate the positions for the next line + bBox = li.getBBox(); + + itemWidth = item.checkboxOffset = + options.itemWidth || + item.legendItemWidth || + symbolWidth + symbolPadding + bBox.width + itemDistance + (showCheckbox ? 20 : 0); + legend.itemHeight = itemHeight = mathRound(item.legendItemHeight || bBox.height); + + // if the item exceeds the width, start a new line + if (horizontal && legend.itemX - initialItemX + itemWidth > + (widthOption || (chart.chartWidth - 2 * padding - initialItemX - options.x))) { + legend.itemX = initialItemX; + legend.itemY += itemMarginTop + legend.lastLineHeight + itemMarginBottom; + legend.lastLineHeight = 0; // reset for next line + } + + // If the item exceeds the height, start a new column + /*if (!horizontal && legend.itemY + options.y + itemHeight > chart.chartHeight - spacingTop - spacingBottom) { + legend.itemY = legend.initialItemY; + legend.itemX += legend.maxItemWidth; + legend.maxItemWidth = 0; + }*/ + + // Set the edge positions + legend.maxItemWidth = mathMax(legend.maxItemWidth, itemWidth); + legend.lastItemY = itemMarginTop + legend.itemY + itemMarginBottom; + legend.lastLineHeight = mathMax(itemHeight, legend.lastLineHeight); // #915 + + // cache the position of the newly generated or reordered items + item._legendItemPos = [legend.itemX, legend.itemY]; + + // advance + if (horizontal) { + legend.itemX += itemWidth; + + } else { + legend.itemY += itemMarginTop + itemHeight + itemMarginBottom; + legend.lastLineHeight = itemHeight; + } + + // the width of the widest item + legend.offsetWidth = widthOption || mathMax( + (horizontal ? legend.itemX - initialItemX - itemDistance : itemWidth) + padding, + legend.offsetWidth + ); + }, + + /** + * Get all items, which is one item per series for normal series and one item per point + * for pie series. + */ + getAllItems: function () { + var allItems = []; + each(this.chart.series, function (series) { + var seriesOptions = series.options; + + // Handle showInLegend. If the series is linked to another series, defaults to false. + if (!pick(seriesOptions.showInLegend, !defined(seriesOptions.linkedTo) ? UNDEFINED : false, true)) { + return; + } + + // use points or series for the legend item depending on legendType + allItems = allItems.concat( + series.legendItems || + (seriesOptions.legendType === 'point' ? + series.data : + series) + ); + }); + return allItems; + }, + + /** + * Render the legend. This method can be called both before and after + * chart.render. If called after, it will only rearrange items instead + * of creating new ones. + */ + render: function () { + var legend = this, + chart = legend.chart, + renderer = chart.renderer, + legendGroup = legend.group, + allItems, + display, + legendWidth, + legendHeight, + box = legend.box, + options = legend.options, + padding = legend.padding, + legendBorderWidth = options.borderWidth, + legendBackgroundColor = options.backgroundColor; + + legend.itemX = legend.initialItemX; + legend.itemY = legend.initialItemY; + legend.offsetWidth = 0; + legend.lastItemY = 0; + + if (!legendGroup) { + legend.group = legendGroup = renderer.g('legend') + .attr({ zIndex: 7 }) + .add(); + legend.contentGroup = renderer.g() + .attr({ zIndex: 1 }) // above background + .add(legendGroup); + legend.scrollGroup = renderer.g() + .add(legend.contentGroup); + } + + legend.renderTitle(); + + // add each series or point + allItems = legend.getAllItems(); + + // sort by legendIndex + stableSort(allItems, function (a, b) { + return ((a.options && a.options.legendIndex) || 0) - ((b.options && b.options.legendIndex) || 0); + }); + + // reversed legend + if (options.reversed) { + allItems.reverse(); + } + + legend.allItems = allItems; + legend.display = display = !!allItems.length; + + // render the items + each(allItems, function (item) { + legend.renderItem(item); + }); + + // Draw the border + legendWidth = options.width || legend.offsetWidth; + legendHeight = legend.lastItemY + legend.lastLineHeight + legend.titleHeight; + + + legendHeight = legend.handleOverflow(legendHeight); + + if (legendBorderWidth || legendBackgroundColor) { + legendWidth += padding; + legendHeight += padding; + + if (!box) { + legend.box = box = renderer.rect( + 0, + 0, + legendWidth, + legendHeight, + options.borderRadius, + legendBorderWidth || 0 + ).attr({ + stroke: options.borderColor, + 'stroke-width': legendBorderWidth || 0, + fill: legendBackgroundColor || NONE + }) + .add(legendGroup) + .shadow(options.shadow); + box.isNew = true; + + } else if (legendWidth > 0 && legendHeight > 0) { + box[box.isNew ? 'attr' : 'animate']( + box.crisp({ width: legendWidth, height: legendHeight }) + ); + box.isNew = false; + } + + // hide the border if no items + box[display ? 'show' : 'hide'](); + } + + legend.legendWidth = legendWidth; + legend.legendHeight = legendHeight; + + // Now that the legend width and height are established, put the items in the + // final position + each(allItems, function (item) { + legend.positionItem(item); + }); + + // 1.x compatibility: positioning based on style + /*var props = ['left', 'right', 'top', 'bottom'], + prop, + i = 4; + while (i--) { + prop = props[i]; + if (options.style[prop] && options.style[prop] !== 'auto') { + options[i < 2 ? 'align' : 'verticalAlign'] = prop; + options[i < 2 ? 'x' : 'y'] = pInt(options.style[prop]) * (i % 2 ? -1 : 1); + } + }*/ + + if (display) { + legendGroup.align(extend({ + width: legendWidth, + height: legendHeight + }, options), true, 'spacingBox'); + } + + if (!chart.isResizing) { + this.positionCheckboxes(); + } + }, + + /** + * Set up the overflow handling by adding navigation with up and down arrows below the + * legend. + */ + handleOverflow: function (legendHeight) { + var legend = this, + chart = this.chart, + renderer = chart.renderer, + options = this.options, + optionsY = options.y, + alignTop = options.verticalAlign === 'top', + spaceHeight = chart.spacingBox.height + (alignTop ? -optionsY : optionsY) - this.padding, + maxHeight = options.maxHeight, + clipHeight, + clipRect = this.clipRect, + navOptions = options.navigation, + animation = pick(navOptions.animation, true), + arrowSize = navOptions.arrowSize || 12, + nav = this.nav, + pages = this.pages, + lastY, + allItems = this.allItems; + + // Adjust the height + if (options.layout === 'horizontal') { + spaceHeight /= 2; + } + if (maxHeight) { + spaceHeight = mathMin(spaceHeight, maxHeight); + } + + // Reset the legend height and adjust the clipping rectangle + pages.length = 0; + if (legendHeight > spaceHeight && !options.useHTML) { + + this.clipHeight = clipHeight = spaceHeight - 20 - this.titleHeight - this.padding; + this.currentPage = pick(this.currentPage, 1); + this.fullHeight = legendHeight; + + // Fill pages with Y positions so that the top of each a legend item defines + // the scroll top for each page (#2098) + each(allItems, function (item, i) { + var y = item._legendItemPos[1], + h = mathRound(item.legendItem.getBBox().height), + len = pages.length; + + if (!len || (y - pages[len - 1] > clipHeight && (lastY || y) !== pages[len - 1])) { + pages.push(lastY || y); + len++; + } + + if (i === allItems.length - 1 && y + h - pages[len - 1] > clipHeight) { + pages.push(y); + } + if (y !== lastY) { + lastY = y; + } + }); + + // Only apply clipping if needed. Clipping causes blurred legend in PDF export (#1787) + if (!clipRect) { + clipRect = legend.clipRect = renderer.clipRect(0, this.padding, 9999, 0); + legend.contentGroup.clip(clipRect); + } + clipRect.attr({ + height: clipHeight + }); + + // Add navigation elements + if (!nav) { + this.nav = nav = renderer.g().attr({ zIndex: 1 }).add(this.group); + this.up = renderer.symbol('triangle', 0, 0, arrowSize, arrowSize) + .on('click', function () { + legend.scroll(-1, animation); + }) + .add(nav); + this.pager = renderer.text('', 15, 10) + .css(navOptions.style) + .add(nav); + this.down = renderer.symbol('triangle-down', 0, 0, arrowSize, arrowSize) + .on('click', function () { + legend.scroll(1, animation); + }) + .add(nav); + } + + // Set initial position + legend.scroll(0); + + legendHeight = spaceHeight; + + } else if (nav) { + clipRect.attr({ + height: chart.chartHeight + }); + nav.hide(); + this.scrollGroup.attr({ + translateY: 1 + }); + this.clipHeight = 0; // #1379 + } + + return legendHeight; + }, + + /** + * Scroll the legend by a number of pages + * @param {Object} scrollBy + * @param {Object} animation + */ + scroll: function (scrollBy, animation) { + var pages = this.pages, + pageCount = pages.length, + currentPage = this.currentPage + scrollBy, + clipHeight = this.clipHeight, + navOptions = this.options.navigation, + activeColor = navOptions.activeColor, + inactiveColor = navOptions.inactiveColor, + pager = this.pager, + padding = this.padding, + scrollOffset; + + // When resizing while looking at the last page + if (currentPage > pageCount) { + currentPage = pageCount; + } + + if (currentPage > 0) { + + if (animation !== UNDEFINED) { + setAnimation(animation, this.chart); + } + + this.nav.attr({ + translateX: padding, + translateY: clipHeight + this.padding + 7 + this.titleHeight, + visibility: VISIBLE + }); + this.up.attr({ + fill: currentPage === 1 ? inactiveColor : activeColor + }) + .css({ + cursor: currentPage === 1 ? 'default' : 'pointer' + }); + pager.attr({ + text: currentPage + '/' + pageCount + }); + this.down.attr({ + x: 18 + this.pager.getBBox().width, // adjust to text width + fill: currentPage === pageCount ? inactiveColor : activeColor + }) + .css({ + cursor: currentPage === pageCount ? 'default' : 'pointer' + }); + + scrollOffset = -pages[currentPage - 1] + this.initialItemY; + + this.scrollGroup.animate({ + translateY: scrollOffset + }); + + this.currentPage = currentPage; + this.positionCheckboxes(scrollOffset); + } + + } + +}; + +/* + * LegendSymbolMixin + */ + +var LegendSymbolMixin = Highcharts.LegendSymbolMixin = { + + /** + * Get the series' symbol in the legend + * + * @param {Object} legend The legend object + * @param {Object} item The series (this) or point + */ + drawRectangle: function (legend, item) { + var symbolHeight = legend.options.symbolHeight || 12; + + item.legendSymbol = this.chart.renderer.rect( + 0, + legend.baseline - 5 - (symbolHeight / 2), + legend.symbolWidth, + symbolHeight, + legend.options.symbolRadius || 0 + ).attr({ + zIndex: 3 + }).add(item.legendGroup); + + }, + + /** + * Get the series' symbol in the legend. This method should be overridable to create custom + * symbols through Highcharts.seriesTypes[type].prototype.drawLegendSymbols. + * + * @param {Object} legend The legend object + */ + drawLineMarker: function (legend) { + + var options = this.options, + markerOptions = options.marker, + radius, + legendOptions = legend.options, + legendSymbol, + symbolWidth = legend.symbolWidth, + renderer = this.chart.renderer, + legendItemGroup = this.legendGroup, + verticalCenter = legend.baseline - mathRound(renderer.fontMetrics(legendOptions.itemStyle.fontSize).b * 0.3), + attr; + + // Draw the line + if (options.lineWidth) { + attr = { + 'stroke-width': options.lineWidth + }; + if (options.dashStyle) { + attr.dashstyle = options.dashStyle; + } + this.legendLine = renderer.path([ + M, + 0, + verticalCenter, + L, + symbolWidth, + verticalCenter + ]) + .attr(attr) + .add(legendItemGroup); + } + + // Draw the marker + if (markerOptions && markerOptions.enabled !== false) { + radius = markerOptions.radius; + this.legendSymbol = legendSymbol = renderer.symbol( + this.symbol, + (symbolWidth / 2) - radius, + verticalCenter - radius, + 2 * radius, + 2 * radius + ) + .add(legendItemGroup); + legendSymbol.isMarker = true; + } + } +}; + +// Workaround for #2030, horizontal legend items not displaying in IE11 Preview, +// and for #2580, a similar drawing flaw in Firefox 26. +// TODO: Explore if there's a general cause for this. The problem may be related +// to nested group elements, as the legend item texts are within 4 group elements. +if (/Trident\/7\.0/.test(userAgent) || isFirefox) { + wrap(Legend.prototype, 'positionItem', function (proceed, item) { + var legend = this, + runPositionItem = function () { // If chart destroyed in sync, this is undefined (#2030) + if (item._legendItemPos) { + proceed.call(legend, item); + } + }; + + // Do it now, for export and to get checkbox placement + runPositionItem(); + + // Do it after to work around the core issue + setTimeout(runPositionItem); + }); +} +/** + * The chart class + * @param {Object} options + * @param {Function} callback Function to run when the chart has loaded + */ +function Chart() { + this.init.apply(this, arguments); +} + +Chart.prototype = { + + /** + * Initialize the chart + */ + init: function (userOptions, callback) { + + // Handle regular options + var options, + seriesOptions = userOptions.series; // skip merging data points to increase performance + + userOptions.series = null; + options = merge(defaultOptions, userOptions); // do the merge + options.series = userOptions.series = seriesOptions; // set back the series data + this.userOptions = userOptions; + + var optionsChart = options.chart; + + // Create margin & spacing array + this.margin = this.splashArray('margin', optionsChart); + this.spacing = this.splashArray('spacing', optionsChart); + + var chartEvents = optionsChart.events; + + //this.runChartClick = chartEvents && !!chartEvents.click; + this.bounds = { h: {}, v: {} }; // Pixel data bounds for touch zoom + + this.callback = callback; + this.isResizing = 0; + this.options = options; + //chartTitleOptions = UNDEFINED; + //chartSubtitleOptions = UNDEFINED; + + this.axes = []; + this.series = []; + this.hasCartesianSeries = optionsChart.showAxes; + //this.axisOffset = UNDEFINED; + //this.maxTicks = UNDEFINED; // handle the greatest amount of ticks on grouped axes + //this.inverted = UNDEFINED; + //this.loadingShown = UNDEFINED; + //this.container = UNDEFINED; + //this.chartWidth = UNDEFINED; + //this.chartHeight = UNDEFINED; + //this.marginRight = UNDEFINED; + //this.marginBottom = UNDEFINED; + //this.containerWidth = UNDEFINED; + //this.containerHeight = UNDEFINED; + //this.oldChartWidth = UNDEFINED; + //this.oldChartHeight = UNDEFINED; + + //this.renderTo = UNDEFINED; + //this.renderToClone = UNDEFINED; + + //this.spacingBox = UNDEFINED + + //this.legend = UNDEFINED; + + // Elements + //this.chartBackground = UNDEFINED; + //this.plotBackground = UNDEFINED; + //this.plotBGImage = UNDEFINED; + //this.plotBorder = UNDEFINED; + //this.loadingDiv = UNDEFINED; + //this.loadingSpan = UNDEFINED; + + var chart = this, + eventType; + + // Add the chart to the global lookup + chart.index = charts.length; + charts.push(chart); + chartCount++; + + // Set up auto resize + if (optionsChart.reflow !== false) { + addEvent(chart, 'load', function () { + chart.initReflow(); + }); + } + + // Chart event handlers + if (chartEvents) { + for (eventType in chartEvents) { + addEvent(chart, eventType, chartEvents[eventType]); + } + } + + chart.xAxis = []; + chart.yAxis = []; + + // Expose methods and variables + chart.animation = useCanVG ? false : pick(optionsChart.animation, true); + chart.pointCount = 0; + chart.counters = new ChartCounters(); + + chart.firstRender(); + }, + + /** + * Initialize an individual series, called internally before render time + */ + initSeries: function (options) { + var chart = this, + optionsChart = chart.options.chart, + type = options.type || optionsChart.type || optionsChart.defaultSeriesType, + series, + constr = seriesTypes[type]; + + // No such series type + if (!constr) { + error(17, true); + } + + series = new constr(); + series.init(this, options); + return series; + }, + + /** + * Check whether a given point is within the plot area + * + * @param {Number} plotX Pixel x relative to the plot area + * @param {Number} plotY Pixel y relative to the plot area + * @param {Boolean} inverted Whether the chart is inverted + */ + isInsidePlot: function (plotX, plotY, inverted) { + var x = inverted ? plotY : plotX, + y = inverted ? plotX : plotY; + + return x >= 0 && + x <= this.plotWidth && + y >= 0 && + y <= this.plotHeight; + }, + + /** + * Adjust all axes tick amounts + */ + adjustTickAmounts: function () { + if (this.options.chart.alignTicks !== false) { + each(this.axes, function (axis) { + axis.adjustTickAmount(); + }); + } + this.maxTicks = null; + }, + + /** + * Redraw legend, axes or series based on updated data + * + * @param {Boolean|Object} animation Whether to apply animation, and optionally animation + * configuration + */ + redraw: function (animation) { + var chart = this, + axes = chart.axes, + series = chart.series, + pointer = chart.pointer, + legend = chart.legend, + redrawLegend = chart.isDirtyLegend, + hasStackedSeries, + hasDirtyStacks, + isDirtyBox = chart.isDirtyBox, // todo: check if it has actually changed? + seriesLength = series.length, + i = seriesLength, + serie, + renderer = chart.renderer, + isHiddenChart = renderer.isHidden(), + afterRedraw = []; + + setAnimation(animation, chart); + + if (isHiddenChart) { + chart.cloneRenderTo(); + } + + // Adjust title layout (reflow multiline text) + chart.layOutTitles(); + + // link stacked series + while (i--) { + serie = series[i]; + + if (serie.options.stacking) { + hasStackedSeries = true; + + if (serie.isDirty) { + hasDirtyStacks = true; + break; + } + } + } + if (hasDirtyStacks) { // mark others as dirty + i = seriesLength; + while (i--) { + serie = series[i]; + if (serie.options.stacking) { + serie.isDirty = true; + } + } + } + + // handle updated data in the series + each(series, function (serie) { + if (serie.isDirty) { // prepare the data so axis can read it + if (serie.options.legendType === 'point') { + redrawLegend = true; + } + } + }); + + // handle added or removed series + if (redrawLegend && legend.options.enabled) { // series or pie points are added or removed + // draw legend graphics + legend.render(); + + chart.isDirtyLegend = false; + } + + // reset stacks + if (hasStackedSeries) { + chart.getStacks(); + } + + + if (chart.hasCartesianSeries) { + if (!chart.isResizing) { + + // reset maxTicks + chart.maxTicks = null; + + // set axes scales + each(axes, function (axis) { + axis.setScale(); + }); + } + + chart.adjustTickAmounts(); + chart.getMargins(); + + // If one axis is dirty, all axes must be redrawn (#792, #2169) + each(axes, function (axis) { + if (axis.isDirty) { + isDirtyBox = true; + } + }); + + // redraw axes + each(axes, function (axis) { + + // Fire 'afterSetExtremes' only if extremes are set + if (axis.isDirtyExtremes) { // #821 + axis.isDirtyExtremes = false; + afterRedraw.push(function () { // prevent a recursive call to chart.redraw() (#1119) + fireEvent(axis, 'afterSetExtremes', extend(axis.eventArgs, axis.getExtremes())); // #747, #751 + delete axis.eventArgs; + }); + } + + if (isDirtyBox || hasStackedSeries) { + axis.redraw(); + } + }); + + + } + // the plot areas size has changed + if (isDirtyBox) { + chart.drawChartBox(); + } + + + // redraw affected series + each(series, function (serie) { + if (serie.isDirty && serie.visible && + (!serie.isCartesian || serie.xAxis)) { // issue #153 + serie.redraw(); + } + }); + + // move tooltip or reset + if (pointer) { + pointer.reset(true); + } + + // redraw if canvas + renderer.draw(); + + // fire the event + fireEvent(chart, 'redraw'); // jQuery breaks this when calling it from addEvent. Overwrites chart.redraw + + if (isHiddenChart) { + chart.cloneRenderTo(true); + } + + // Fire callbacks that are put on hold until after the redraw + each(afterRedraw, function (callback) { + callback.call(); + }); + }, + + /** + * Get an axis, series or point object by id. + * @param id {String} The id as given in the configuration options + */ + get: function (id) { + var chart = this, + axes = chart.axes, + series = chart.series; + + var i, + j, + points; + + // search axes + for (i = 0; i < axes.length; i++) { + if (axes[i].options.id === id) { + return axes[i]; + } + } + + // search series + for (i = 0; i < series.length; i++) { + if (series[i].options.id === id) { + return series[i]; + } + } + + // search points + for (i = 0; i < series.length; i++) { + points = series[i].points || []; + for (j = 0; j < points.length; j++) { + if (points[j].id === id) { + return points[j]; + } + } + } + return null; + }, + + /** + * Create the Axis instances based on the config options + */ + getAxes: function () { + var chart = this, + options = this.options, + xAxisOptions = options.xAxis = splat(options.xAxis || {}), + yAxisOptions = options.yAxis = splat(options.yAxis || {}), + optionsArray, + axis; + + // make sure the options are arrays and add some members + each(xAxisOptions, function (axis, i) { + axis.index = i; + axis.isX = true; + }); + + each(yAxisOptions, function (axis, i) { + axis.index = i; + }); + + // concatenate all axis options into one array + optionsArray = xAxisOptions.concat(yAxisOptions); + + each(optionsArray, function (axisOptions) { + axis = new Axis(chart, axisOptions); + }); + + chart.adjustTickAmounts(); + }, + + + /** + * Get the currently selected points from all series + */ + getSelectedPoints: function () { + var points = []; + each(this.series, function (serie) { + points = points.concat(grep(serie.points || [], function (point) { + return point.selected; + })); + }); + return points; + }, + + /** + * Get the currently selected series + */ + getSelectedSeries: function () { + return grep(this.series, function (serie) { + return serie.selected; + }); + }, + + /** + * Generate stacks for each series and calculate stacks total values + */ + getStacks: function () { + var chart = this; + + // reset stacks for each yAxis + each(chart.yAxis, function (axis) { + if (axis.stacks && axis.hasVisibleSeries) { + axis.oldStacks = axis.stacks; + } + }); + + each(chart.series, function (series) { + if (series.options.stacking && (series.visible === true || chart.options.chart.ignoreHiddenSeries === false)) { + series.stackKey = series.type + pick(series.options.stack, ''); + } + }); + }, + + /** + * Show the title and subtitle of the chart + * + * @param titleOptions {Object} New title options + * @param subtitleOptions {Object} New subtitle options + * + */ + setTitle: function (titleOptions, subtitleOptions, redraw) { + var chart = this, + options = chart.options, + chartTitleOptions, + chartSubtitleOptions; + + chartTitleOptions = options.title = merge(options.title, titleOptions); + chartSubtitleOptions = options.subtitle = merge(options.subtitle, subtitleOptions); + + // add title and subtitle + each([ + ['title', titleOptions, chartTitleOptions], + ['subtitle', subtitleOptions, chartSubtitleOptions] + ], function (arr) { + var name = arr[0], + title = chart[name], + titleOptions = arr[1], + chartTitleOptions = arr[2]; + + if (title && titleOptions) { + chart[name] = title = title.destroy(); // remove old + } + + if (chartTitleOptions && chartTitleOptions.text && !title) { + chart[name] = chart.renderer.text( + chartTitleOptions.text, + 0, + 0, + chartTitleOptions.useHTML + ) + .attr({ + align: chartTitleOptions.align, + 'class': PREFIX + name, + zIndex: chartTitleOptions.zIndex || 4 + }) + .css(chartTitleOptions.style) + .add(); + } + }); + chart.layOutTitles(redraw); + }, + + /** + * Lay out the chart titles and cache the full offset height for use in getMargins + */ + layOutTitles: function (redraw) { + var titleOffset = 0, + title = this.title, + subtitle = this.subtitle, + options = this.options, + titleOptions = options.title, + subtitleOptions = options.subtitle, + requiresDirtyBox, + autoWidth = this.spacingBox.width - 44; // 44 makes room for default context button + + if (title) { + title + .css({ width: (titleOptions.width || autoWidth) + PX }) + .align(extend({ y: 15 }, titleOptions), false, 'spacingBox'); + + if (!titleOptions.floating && !titleOptions.verticalAlign) { + titleOffset = title.getBBox().height; + } + } + if (subtitle) { + subtitle + .css({ width: (subtitleOptions.width || autoWidth) + PX }) + .align(extend({ y: titleOffset + titleOptions.margin }, subtitleOptions), false, 'spacingBox'); + + if (!subtitleOptions.floating && !subtitleOptions.verticalAlign) { + titleOffset = mathCeil(titleOffset + subtitle.getBBox().height); + } + } + + requiresDirtyBox = this.titleOffset !== titleOffset; + this.titleOffset = titleOffset; // used in getMargins + + if (!this.isDirtyBox && requiresDirtyBox) { + this.isDirtyBox = requiresDirtyBox; + // Redraw if necessary (#2719, #2744) + if (this.hasRendered && pick(redraw, true) && this.isDirtyBox) { + this.redraw(); + } + } + }, + + /** + * Get chart width and height according to options and container size + */ + getChartSize: function () { + var chart = this, + optionsChart = chart.options.chart, + widthOption = optionsChart.width, + heightOption = optionsChart.height, + renderTo = chart.renderToClone || chart.renderTo; + + // get inner width and height from jQuery (#824) + if (!defined(widthOption)) { + chart.containerWidth = adapterRun(renderTo, 'width'); + } + if (!defined(heightOption)) { + chart.containerHeight = adapterRun(renderTo, 'height'); + } + + chart.chartWidth = mathMax(0, widthOption || chart.containerWidth || 600); // #1393, 1460 + chart.chartHeight = mathMax(0, pick(heightOption, + // the offsetHeight of an empty container is 0 in standard browsers, but 19 in IE7: + chart.containerHeight > 19 ? chart.containerHeight : 400)); + }, + + /** + * Create a clone of the chart's renderTo div and place it outside the viewport to allow + * size computation on chart.render and chart.redraw + */ + cloneRenderTo: function (revert) { + var clone = this.renderToClone, + container = this.container; + + // Destroy the clone and bring the container back to the real renderTo div + if (revert) { + if (clone) { + this.renderTo.appendChild(container); + discardElement(clone); + delete this.renderToClone; + } + + // Set up the clone + } else { + if (container && container.parentNode === this.renderTo) { + this.renderTo.removeChild(container); // do not clone this + } + this.renderToClone = clone = this.renderTo.cloneNode(0); + css(clone, { + position: ABSOLUTE, + top: '-9999px', + display: 'block' // #833 + }); + if (clone.style.setProperty) { // #2631 + clone.style.setProperty('display', 'block', 'important'); + } + doc.body.appendChild(clone); + if (container) { + clone.appendChild(container); + } + } + }, + + /** + * Get the containing element, determine the size and create the inner container + * div to hold the chart + */ + getContainer: function () { + var chart = this, + container, + optionsChart = chart.options.chart, + chartWidth, + chartHeight, + renderTo, + indexAttrName = 'data-highcharts-chart', + oldChartIndex, + containerId; + + chart.renderTo = renderTo = optionsChart.renderTo; + containerId = PREFIX + idCounter++; + + if (isString(renderTo)) { + chart.renderTo = renderTo = doc.getElementById(renderTo); + } + + // Display an error if the renderTo is wrong + if (!renderTo) { + error(13, true); + } + + // If the container already holds a chart, destroy it. The check for hasRendered is there + // because web pages that are saved to disk from the browser, will preserve the data-highcharts-chart + // attribute and the SVG contents, but not an interactive chart. So in this case, + // charts[oldChartIndex] will point to the wrong chart if any (#2609). + oldChartIndex = pInt(attr(renderTo, indexAttrName)); + if (!isNaN(oldChartIndex) && charts[oldChartIndex] && charts[oldChartIndex].hasRendered) { + charts[oldChartIndex].destroy(); + } + + // Make a reference to the chart from the div + attr(renderTo, indexAttrName, chart.index); + + // remove previous chart + renderTo.innerHTML = ''; + + // If the container doesn't have an offsetWidth, it has or is a child of a node + // that has display:none. We need to temporarily move it out to a visible + // state to determine the size, else the legend and tooltips won't render + // properly. The allowClone option is used in sparklines as a micro optimization, + // saving about 1-2 ms each chart. + if (!optionsChart.skipClone && !renderTo.offsetWidth) { + chart.cloneRenderTo(); + } + + // get the width and height + chart.getChartSize(); + chartWidth = chart.chartWidth; + chartHeight = chart.chartHeight; + + // create the inner container + chart.container = container = createElement(DIV, { + className: PREFIX + 'container' + + (optionsChart.className ? ' ' + optionsChart.className : ''), + id: containerId + }, extend({ + position: RELATIVE, + overflow: HIDDEN, // needed for context menu (avoid scrollbars) and + // content overflow in IE + width: chartWidth + PX, + height: chartHeight + PX, + textAlign: 'left', + lineHeight: 'normal', // #427 + zIndex: 0, // #1072 + '-webkit-tap-highlight-color': 'rgba(0,0,0,0)' + }, optionsChart.style), + chart.renderToClone || renderTo + ); + + // cache the cursor (#1650) + chart._cursor = container.style.cursor; + + // Initialize the renderer + chart.renderer = + optionsChart.forExport ? // force SVG, used for SVG export + new SVGRenderer(container, chartWidth, chartHeight, optionsChart.style, true) : + new Renderer(container, chartWidth, chartHeight, optionsChart.style); + + if (useCanVG) { + // If we need canvg library, extend and configure the renderer + // to get the tracker for translating mouse events + chart.renderer.create(chart, container, chartWidth, chartHeight); + } + }, + + /** + * Calculate margins by rendering axis labels in a preliminary position. Title, + * subtitle and legend have already been rendered at this stage, but will be + * moved into their final positions + */ + getMargins: function () { + var chart = this, + spacing = chart.spacing, + axisOffset, + legend = chart.legend, + margin = chart.margin, + legendOptions = chart.options.legend, + legendMargin = pick(legendOptions.margin, 20), + legendX = legendOptions.x, + legendY = legendOptions.y, + align = legendOptions.align, + verticalAlign = legendOptions.verticalAlign, + titleOffset = chart.titleOffset; + + chart.resetMargins(); + axisOffset = chart.axisOffset; + + // Adjust for title and subtitle + if (titleOffset && !defined(margin[0])) { + chart.plotTop = mathMax(chart.plotTop, titleOffset + chart.options.title.margin + spacing[0]); + } + + // Adjust for legend + if (legend.display && !legendOptions.floating) { + if (align === 'right') { // horizontal alignment handled first + if (!defined(margin[1])) { + chart.marginRight = mathMax( + chart.marginRight, + legend.legendWidth - legendX + legendMargin + spacing[1] + ); + } + } else if (align === 'left') { + if (!defined(margin[3])) { + chart.plotLeft = mathMax( + chart.plotLeft, + legend.legendWidth + legendX + legendMargin + spacing[3] + ); + } + + } else if (verticalAlign === 'top') { + if (!defined(margin[0])) { + chart.plotTop = mathMax( + chart.plotTop, + legend.legendHeight + legendY + legendMargin + spacing[0] + ); + } + + } else if (verticalAlign === 'bottom') { + if (!defined(margin[2])) { + chart.marginBottom = mathMax( + chart.marginBottom, + legend.legendHeight - legendY + legendMargin + spacing[2] + ); + } + } + } + + // adjust for scroller + if (chart.extraBottomMargin) { + chart.marginBottom += chart.extraBottomMargin; + } + if (chart.extraTopMargin) { + chart.plotTop += chart.extraTopMargin; + } + + // pre-render axes to get labels offset width + if (chart.hasCartesianSeries) { + each(chart.axes, function (axis) { + axis.getOffset(); + }); + } + + if (!defined(margin[3])) { + chart.plotLeft += axisOffset[3]; + } + if (!defined(margin[0])) { + chart.plotTop += axisOffset[0]; + } + if (!defined(margin[2])) { + chart.marginBottom += axisOffset[2]; + } + if (!defined(margin[1])) { + chart.marginRight += axisOffset[1]; + } + + chart.setChartSize(); + + }, + + /** + * Resize the chart to its container if size is not explicitly set + */ + reflow: function (e) { + var chart = this, + optionsChart = chart.options.chart, + renderTo = chart.renderTo, + width = optionsChart.width || adapterRun(renderTo, 'width'), + height = optionsChart.height || adapterRun(renderTo, 'height'), + target = e ? e.target : win, // #805 - MooTools doesn't supply e + doReflow = function () { + if (chart.container) { // It may have been destroyed in the meantime (#1257) + chart.setSize(width, height, false); + chart.hasUserSize = null; + } + }; + + // Width and height checks for display:none. Target is doc in IE8 and Opera, + // win in Firefox, Chrome and IE9. + if (!chart.hasUserSize && width && height && (target === win || target === doc)) { + if (width !== chart.containerWidth || height !== chart.containerHeight) { + clearTimeout(chart.reflowTimeout); + if (e) { // Called from window.resize + chart.reflowTimeout = setTimeout(doReflow, 100); + } else { // Called directly (#2224) + doReflow(); + } + } + chart.containerWidth = width; + chart.containerHeight = height; + } + }, + + /** + * Add the event handlers necessary for auto resizing + */ + initReflow: function () { + var chart = this, + reflow = function (e) { + chart.reflow(e); + }; + + + addEvent(win, 'resize', reflow); + addEvent(chart, 'destroy', function () { + removeEvent(win, 'resize', reflow); + }); + }, + + /** + * Resize the chart to a given width and height + * @param {Number} width + * @param {Number} height + * @param {Object|Boolean} animation + */ + setSize: function (width, height, animation) { + var chart = this, + chartWidth, + chartHeight, + fireEndResize; + + // Handle the isResizing counter + chart.isResizing += 1; + fireEndResize = function () { + if (chart) { + fireEvent(chart, 'endResize', null, function () { + chart.isResizing -= 1; + }); + } + }; + + // set the animation for the current process + setAnimation(animation, chart); + + chart.oldChartHeight = chart.chartHeight; + chart.oldChartWidth = chart.chartWidth; + if (defined(width)) { + chart.chartWidth = chartWidth = mathMax(0, mathRound(width)); + chart.hasUserSize = !!chartWidth; + } + if (defined(height)) { + chart.chartHeight = chartHeight = mathMax(0, mathRound(height)); + } + + // Resize the container with the global animation applied if enabled (#2503) + (globalAnimation ? animate : css)(chart.container, { + width: chartWidth + PX, + height: chartHeight + PX + }, globalAnimation); + + chart.setChartSize(true); + chart.renderer.setSize(chartWidth, chartHeight, animation); + + // handle axes + chart.maxTicks = null; + each(chart.axes, function (axis) { + axis.isDirty = true; + axis.setScale(); + }); + + // make sure non-cartesian series are also handled + each(chart.series, function (serie) { + serie.isDirty = true; + }); + + chart.isDirtyLegend = true; // force legend redraw + chart.isDirtyBox = true; // force redraw of plot and chart border + + chart.layOutTitles(); // #2857 + chart.getMargins(); + + chart.redraw(animation); + + + chart.oldChartHeight = null; + fireEvent(chart, 'resize'); + + // fire endResize and set isResizing back + // If animation is disabled, fire without delay + if (globalAnimation === false) { + fireEndResize(); + } else { // else set a timeout with the animation duration + setTimeout(fireEndResize, (globalAnimation && globalAnimation.duration) || 500); + } + }, + + /** + * Set the public chart properties. This is done before and after the pre-render + * to determine margin sizes + */ + setChartSize: function (skipAxes) { + var chart = this, + inverted = chart.inverted, + renderer = chart.renderer, + chartWidth = chart.chartWidth, + chartHeight = chart.chartHeight, + optionsChart = chart.options.chart, + spacing = chart.spacing, + clipOffset = chart.clipOffset, + clipX, + clipY, + plotLeft, + plotTop, + plotWidth, + plotHeight, + plotBorderWidth; + + chart.plotLeft = plotLeft = mathRound(chart.plotLeft); + chart.plotTop = plotTop = mathRound(chart.plotTop); + chart.plotWidth = plotWidth = mathMax(0, mathRound(chartWidth - plotLeft - chart.marginRight)); + chart.plotHeight = plotHeight = mathMax(0, mathRound(chartHeight - plotTop - chart.marginBottom)); + + chart.plotSizeX = inverted ? plotHeight : plotWidth; + chart.plotSizeY = inverted ? plotWidth : plotHeight; + + chart.plotBorderWidth = optionsChart.plotBorderWidth || 0; + + // Set boxes used for alignment + chart.spacingBox = renderer.spacingBox = { + x: spacing[3], + y: spacing[0], + width: chartWidth - spacing[3] - spacing[1], + height: chartHeight - spacing[0] - spacing[2] + }; + chart.plotBox = renderer.plotBox = { + x: plotLeft, + y: plotTop, + width: plotWidth, + height: plotHeight + }; + + plotBorderWidth = 2 * mathFloor(chart.plotBorderWidth / 2); + clipX = mathCeil(mathMax(plotBorderWidth, clipOffset[3]) / 2); + clipY = mathCeil(mathMax(plotBorderWidth, clipOffset[0]) / 2); + chart.clipBox = { + x: clipX, + y: clipY, + width: mathFloor(chart.plotSizeX - mathMax(plotBorderWidth, clipOffset[1]) / 2 - clipX), + height: mathFloor(chart.plotSizeY - mathMax(plotBorderWidth, clipOffset[2]) / 2 - clipY) + }; + + if (!skipAxes) { + each(chart.axes, function (axis) { + axis.setAxisSize(); + axis.setAxisTranslation(); + }); + } + }, + + /** + * Initial margins before auto size margins are applied + */ + resetMargins: function () { + var chart = this, + spacing = chart.spacing, + margin = chart.margin; + + chart.plotTop = pick(margin[0], spacing[0]); + chart.marginRight = pick(margin[1], spacing[1]); + chart.marginBottom = pick(margin[2], spacing[2]); + chart.plotLeft = pick(margin[3], spacing[3]); + chart.axisOffset = [0, 0, 0, 0]; // top, right, bottom, left + chart.clipOffset = [0, 0, 0, 0]; + }, + + /** + * Draw the borders and backgrounds for chart and plot area + */ + drawChartBox: function () { + var chart = this, + optionsChart = chart.options.chart, + renderer = chart.renderer, + chartWidth = chart.chartWidth, + chartHeight = chart.chartHeight, + chartBackground = chart.chartBackground, + plotBackground = chart.plotBackground, + plotBorder = chart.plotBorder, + plotBGImage = chart.plotBGImage, + chartBorderWidth = optionsChart.borderWidth || 0, + chartBackgroundColor = optionsChart.backgroundColor, + plotBackgroundColor = optionsChart.plotBackgroundColor, + plotBackgroundImage = optionsChart.plotBackgroundImage, + plotBorderWidth = optionsChart.plotBorderWidth || 0, + mgn, + bgAttr, + plotLeft = chart.plotLeft, + plotTop = chart.plotTop, + plotWidth = chart.plotWidth, + plotHeight = chart.plotHeight, + plotBox = chart.plotBox, + clipRect = chart.clipRect, + clipBox = chart.clipBox; + + // Chart area + mgn = chartBorderWidth + (optionsChart.shadow ? 8 : 0); + + if (chartBorderWidth || chartBackgroundColor) { + if (!chartBackground) { + + bgAttr = { + fill: chartBackgroundColor || NONE + }; + if (chartBorderWidth) { // #980 + bgAttr.stroke = optionsChart.borderColor; + bgAttr['stroke-width'] = chartBorderWidth; + } + chart.chartBackground = renderer.rect(mgn / 2, mgn / 2, chartWidth - mgn, chartHeight - mgn, + optionsChart.borderRadius, chartBorderWidth) + .attr(bgAttr) + .addClass(PREFIX + 'background') + .add() + .shadow(optionsChart.shadow); + + } else { // resize + chartBackground.animate( + chartBackground.crisp({ width: chartWidth - mgn, height: chartHeight - mgn }) + ); + } + } + + + // Plot background + if (plotBackgroundColor) { + if (!plotBackground) { + chart.plotBackground = renderer.rect(plotLeft, plotTop, plotWidth, plotHeight, 0) + .attr({ + fill: plotBackgroundColor + }) + .add() + .shadow(optionsChart.plotShadow); + } else { + plotBackground.animate(plotBox); + } + } + if (plotBackgroundImage) { + if (!plotBGImage) { + chart.plotBGImage = renderer.image(plotBackgroundImage, plotLeft, plotTop, plotWidth, plotHeight) + .add(); + } else { + plotBGImage.animate(plotBox); + } + } + + // Plot clip + if (!clipRect) { + chart.clipRect = renderer.clipRect(clipBox); + } else { + clipRect.animate({ + width: clipBox.width, + height: clipBox.height + }); + } + + // Plot area border + if (plotBorderWidth) { + if (!plotBorder) { + chart.plotBorder = renderer.rect(plotLeft, plotTop, plotWidth, plotHeight, 0, -plotBorderWidth) + .attr({ + stroke: optionsChart.plotBorderColor, + 'stroke-width': plotBorderWidth, + fill: NONE, + zIndex: 1 + }) + .add(); + } else { + plotBorder.animate( + plotBorder.crisp({ x: plotLeft, y: plotTop, width: plotWidth, height: plotHeight }) + ); + } + } + + // reset + chart.isDirtyBox = false; + }, + + /** + * Detect whether a certain chart property is needed based on inspecting its options + * and series. This mainly applies to the chart.invert property, and in extensions to + * the chart.angular and chart.polar properties. + */ + propFromSeries: function () { + var chart = this, + optionsChart = chart.options.chart, + klass, + seriesOptions = chart.options.series, + i, + value; + + + each(['inverted', 'angular', 'polar'], function (key) { + + // The default series type's class + klass = seriesTypes[optionsChart.type || optionsChart.defaultSeriesType]; + + // Get the value from available chart-wide properties + value = ( + chart[key] || // 1. it is set before + optionsChart[key] || // 2. it is set in the options + (klass && klass.prototype[key]) // 3. it's default series class requires it + ); + + // 4. Check if any the chart's series require it + i = seriesOptions && seriesOptions.length; + while (!value && i--) { + klass = seriesTypes[seriesOptions[i].type]; + if (klass && klass.prototype[key]) { + value = true; + } + } + + // Set the chart property + chart[key] = value; + }); + + }, + + /** + * Link two or more series together. This is done initially from Chart.render, + * and after Chart.addSeries and Series.remove. + */ + linkSeries: function () { + var chart = this, + chartSeries = chart.series; + + // Reset links + each(chartSeries, function (series) { + series.linkedSeries.length = 0; + }); + + // Apply new links + each(chartSeries, function (series) { + var linkedTo = series.options.linkedTo; + if (isString(linkedTo)) { + if (linkedTo === ':previous') { + linkedTo = chart.series[series.index - 1]; + } else { + linkedTo = chart.get(linkedTo); + } + if (linkedTo) { + linkedTo.linkedSeries.push(series); + series.linkedParent = linkedTo; + } + } + }); + }, + + /** + * Render series for the chart + */ + renderSeries: function () { + each(this.series, function (serie) { + serie.translate(); + if (serie.setTooltipPoints) { + serie.setTooltipPoints(); + } + serie.render(); + }); + }, + + /** + * Render all graphics for the chart + */ + render: function () { + var chart = this, + axes = chart.axes, + renderer = chart.renderer, + options = chart.options; + + var labels = options.labels, + credits = options.credits, + creditsHref; + + // Title + chart.setTitle(); + + + // Legend + chart.legend = new Legend(chart, options.legend); + + chart.getStacks(); // render stacks + + // Get margins by pre-rendering axes + // set axes scales + each(axes, function (axis) { + axis.setScale(); + }); + + chart.getMargins(); + + chart.maxTicks = null; // reset for second pass + each(axes, function (axis) { + axis.setTickPositions(true); // update to reflect the new margins + axis.setMaxTicks(); + }); + chart.adjustTickAmounts(); + chart.getMargins(); // second pass to check for new labels + + + // Draw the borders and backgrounds + chart.drawChartBox(); + + + // Axes + if (chart.hasCartesianSeries) { + each(axes, function (axis) { + axis.render(); + }); + } + + // The series + if (!chart.seriesGroup) { + chart.seriesGroup = renderer.g('series-group') + .attr({ zIndex: 3 }) + .add(); + } + chart.renderSeries(); + + // Labels + if (labels.items) { + each(labels.items, function (label) { + var style = extend(labels.style, label.style), + x = pInt(style.left) + chart.plotLeft, + y = pInt(style.top) + chart.plotTop + 12; + + // delete to prevent rewriting in IE + delete style.left; + delete style.top; + + renderer.text( + label.html, + x, + y + ) + .attr({ zIndex: 2 }) + .css(style) + .add(); + + }); + } + + // Credits + if (credits.enabled && !chart.credits) { + creditsHref = credits.href; + chart.credits = renderer.text( + credits.text, + 0, + 0 + ) + .on('click', function () { + if (creditsHref) { + location.href = creditsHref; + } + }) + .attr({ + align: credits.position.align, + zIndex: 8 + }) + .css(credits.style) + .add() + .align(credits.position); + } + + // Set flag + chart.hasRendered = true; + + }, + + /** + * Clean up memory usage + */ + destroy: function () { + var chart = this, + axes = chart.axes, + series = chart.series, + container = chart.container, + i, + parentNode = container && container.parentNode; + + // fire the chart.destoy event + fireEvent(chart, 'destroy'); + + // Delete the chart from charts lookup array + charts[chart.index] = UNDEFINED; + chartCount--; + chart.renderTo.removeAttribute('data-highcharts-chart'); + + // remove events + removeEvent(chart); + + // ==== Destroy collections: + // Destroy axes + i = axes.length; + while (i--) { + axes[i] = axes[i].destroy(); + } + + // Destroy each series + i = series.length; + while (i--) { + series[i] = series[i].destroy(); + } + + // ==== Destroy chart properties: + each(['title', 'subtitle', 'chartBackground', 'plotBackground', 'plotBGImage', + 'plotBorder', 'seriesGroup', 'clipRect', 'credits', 'pointer', 'scroller', + 'rangeSelector', 'legend', 'resetZoomButton', 'tooltip', 'renderer'], function (name) { + var prop = chart[name]; + + if (prop && prop.destroy) { + chart[name] = prop.destroy(); + } + }); + + // remove container and all SVG + if (container) { // can break in IE when destroyed before finished loading + container.innerHTML = ''; + removeEvent(container); + if (parentNode) { + discardElement(container); + } + + } + + // clean it all up + for (i in chart) { + delete chart[i]; + } + + }, + + + /** + * VML namespaces can't be added until after complete. Listening + * for Perini's doScroll hack is not enough. + */ + isReadyToRender: function () { + var chart = this; + + // Note: in spite of JSLint's complaints, win == win.top is required + /*jslint eqeq: true*/ + if ((!hasSVG && (win == win.top && doc.readyState !== 'complete')) || (useCanVG && !win.canvg)) { + /*jslint eqeq: false*/ + if (useCanVG) { + // Delay rendering until canvg library is downloaded and ready + CanVGController.push(function () { chart.firstRender(); }, chart.options.global.canvasToolsURL); + } else { + doc.attachEvent('onreadystatechange', function () { + doc.detachEvent('onreadystatechange', chart.firstRender); + if (doc.readyState === 'complete') { + chart.firstRender(); + } + }); + } + return false; + } + return true; + }, + + /** + * Prepare for first rendering after all data are loaded + */ + firstRender: function () { + var chart = this, + options = chart.options, + callback = chart.callback; + + // Check whether the chart is ready to render + if (!chart.isReadyToRender()) { + return; + } + + // Create the container + chart.getContainer(); + + // Run an early event after the container and renderer are established + fireEvent(chart, 'init'); + + + chart.resetMargins(); + chart.setChartSize(); + + // Set the common chart properties (mainly invert) from the given series + chart.propFromSeries(); + + // get axes + chart.getAxes(); + + // Initialize the series + each(options.series || [], function (serieOptions) { + chart.initSeries(serieOptions); + }); + + chart.linkSeries(); + + // Run an event after axes and series are initialized, but before render. At this stage, + // the series data is indexed and cached in the xData and yData arrays, so we can access + // those before rendering. Used in Highstock. + fireEvent(chart, 'beforeRender'); + + // depends on inverted and on margins being set + if (Highcharts.Pointer) { + chart.pointer = new Pointer(chart, options); + } + + chart.render(); + + // add canvas + chart.renderer.draw(); + // run callbacks + if (callback) { + callback.apply(chart, [chart]); + } + each(chart.callbacks, function (fn) { + fn.apply(chart, [chart]); + }); + + + // If the chart was rendered outside the top container, put it back in + chart.cloneRenderTo(true); + + fireEvent(chart, 'load'); + + }, + + /** + * Creates arrays for spacing and margin from given options. + */ + splashArray: function (target, options) { + var oVar = options[target], + tArray = isObject(oVar) ? oVar : [oVar, oVar, oVar, oVar]; + + return [pick(options[target + 'Top'], tArray[0]), + pick(options[target + 'Right'], tArray[1]), + pick(options[target + 'Bottom'], tArray[2]), + pick(options[target + 'Left'], tArray[3])]; + } +}; // end Chart + +// Hook for exporting module +Chart.prototype.callbacks = []; + +var CenteredSeriesMixin = Highcharts.CenteredSeriesMixin = { + /** + * Get the center of the pie based on the size and center options relative to the + * plot area. Borrowed by the polar and gauge series types. + */ + getCenter: function () { + + var options = this.options, + chart = this.chart, + slicingRoom = 2 * (options.slicedOffset || 0), + handleSlicingRoom, + plotWidth = chart.plotWidth - 2 * slicingRoom, + plotHeight = chart.plotHeight - 2 * slicingRoom, + centerOption = options.center, + positions = [pick(centerOption[0], '50%'), pick(centerOption[1], '50%'), options.size || '100%', options.innerSize || 0], + smallestSize = mathMin(plotWidth, plotHeight), + isPercent; + + return map(positions, function (length, i) { + isPercent = /%$/.test(length); + handleSlicingRoom = i < 2 || (i === 2 && isPercent); + return (isPercent ? + // i == 0: centerX, relative to width + // i == 1: centerY, relative to height + // i == 2: size, relative to smallestSize + // i == 4: innerSize, relative to smallestSize + [plotWidth, plotHeight, smallestSize, smallestSize][i] * + pInt(length) / 100 : + length) + (handleSlicingRoom ? slicingRoom : 0); + }); + } +}; + +/** + * The Point object and prototype. Inheritable and used as base for PiePoint + */ +var Point = function () {}; +Point.prototype = { + + /** + * Initialize the point + * @param {Object} series The series object containing this point + * @param {Object} options The data in either number, array or object format + */ + init: function (series, options, x) { + + var point = this, + colors; + point.series = series; + point.applyOptions(options, x); + point.pointAttr = {}; + + if (series.options.colorByPoint) { + colors = series.options.colors || series.chart.options.colors; + point.color = point.color || colors[series.colorCounter++]; + // loop back to zero + if (series.colorCounter === colors.length) { + series.colorCounter = 0; + } + } + + series.chart.pointCount++; + return point; + }, + /** + * Apply the options containing the x and y data and possible some extra properties. + * This is called on point init or from point.update. + * + * @param {Object} options + */ + applyOptions: function (options, x) { + var point = this, + series = point.series, + pointValKey = series.pointValKey; + + options = Point.prototype.optionsToObject.call(this, options); + + // copy options directly to point + extend(point, options); + point.options = point.options ? extend(point.options, options) : options; + + // For higher dimension series types. For instance, for ranges, point.y is mapped to point.low. + if (pointValKey) { + point.y = point[pointValKey]; + } + + // If no x is set by now, get auto incremented value. All points must have an + // x value, however the y value can be null to create a gap in the series + if (point.x === UNDEFINED && series) { + point.x = x === UNDEFINED ? series.autoIncrement() : x; + } + + return point; + }, + + /** + * Transform number or array configs into objects + */ + optionsToObject: function (options) { + var ret = {}, + series = this.series, + pointArrayMap = series.pointArrayMap || ['y'], + valueCount = pointArrayMap.length, + firstItemType, + i = 0, + j = 0; + + if (typeof options === 'number' || options === null) { + ret[pointArrayMap[0]] = options; + + } else if (isArray(options)) { + // with leading x value + if (options.length > valueCount) { + firstItemType = typeof options[0]; + if (firstItemType === 'string') { + ret.name = options[0]; + } else if (firstItemType === 'number') { + ret.x = options[0]; + } + i++; + } + while (j < valueCount) { + ret[pointArrayMap[j++]] = options[i++]; + } + } else if (typeof options === 'object') { + ret = options; + + // This is the fastest way to detect if there are individual point dataLabels that need + // to be considered in drawDataLabels. These can only occur in object configs. + if (options.dataLabels) { + series._hasPointLabels = true; + } + + // Same approach as above for markers + if (options.marker) { + series._hasPointMarkers = true; + } + } + return ret; + }, + + /** + * Destroy a point to clear memory. Its reference still stays in series.data. + */ + destroy: function () { + var point = this, + series = point.series, + chart = series.chart, + hoverPoints = chart.hoverPoints, + prop; + + chart.pointCount--; + + if (hoverPoints) { + point.setState(); + erase(hoverPoints, point); + if (!hoverPoints.length) { + chart.hoverPoints = null; + } + + } + if (point === chart.hoverPoint) { + point.onMouseOut(); + } + + // remove all events + if (point.graphic || point.dataLabel) { // removeEvent and destroyElements are performance expensive + removeEvent(point); + point.destroyElements(); + } + + if (point.legendItem) { // pies have legend items + chart.legend.destroyItem(point); + } + + for (prop in point) { + point[prop] = null; + } + + + }, + + /** + * Destroy SVG elements associated with the point + */ + destroyElements: function () { + var point = this, + props = ['graphic', 'dataLabel', 'dataLabelUpper', 'group', 'connector', 'shadowGroup'], + prop, + i = 6; + while (i--) { + prop = props[i]; + if (point[prop]) { + point[prop] = point[prop].destroy(); + } + } + }, + + /** + * Return the configuration hash needed for the data label and tooltip formatters + */ + getLabelConfig: function () { + var point = this; + return { + x: point.category, + y: point.y, + key: point.name || point.category, + series: point.series, + point: point, + percentage: point.percentage, + total: point.total || point.stackTotal + }; + }, + + /** + * Extendable method for formatting each point's tooltip line + * + * @return {String} A string to be concatenated in to the common tooltip text + */ + tooltipFormatter: function (pointFormat) { + + // Insert options for valueDecimals, valuePrefix, and valueSuffix + var series = this.series, + seriesTooltipOptions = series.tooltipOptions, + valueDecimals = pick(seriesTooltipOptions.valueDecimals, ''), + valuePrefix = seriesTooltipOptions.valuePrefix || '', + valueSuffix = seriesTooltipOptions.valueSuffix || ''; + + // Loop over the point array map and replace unformatted values with sprintf formatting markup + each(series.pointArrayMap || ['y'], function (key) { + key = '{point.' + key; // without the closing bracket + if (valuePrefix || valueSuffix) { + pointFormat = pointFormat.replace(key + '}', valuePrefix + key + '}' + valueSuffix); + } + pointFormat = pointFormat.replace(key + '}', key + ':,.' + valueDecimals + 'f}'); + }); + + return format(pointFormat, { + point: this, + series: this.series + }); + }, + + /** + * Fire an event on the Point object. Must not be renamed to fireEvent, as this + * causes a name clash in MooTools + * @param {String} eventType + * @param {Object} eventArgs Additional event arguments + * @param {Function} defaultFunction Default event handler + */ + firePointEvent: function (eventType, eventArgs, defaultFunction) { + var point = this, + series = this.series, + seriesOptions = series.options; + + // load event handlers on demand to save time on mouseover/out + if (seriesOptions.point.events[eventType] || (point.options && point.options.events && point.options.events[eventType])) { + this.importEvents(); + } + + // add default handler if in selection mode + if (eventType === 'click' && seriesOptions.allowPointSelect) { + defaultFunction = function (event) { + // Control key is for Windows, meta (= Cmd key) for Mac, Shift for Opera + point.select(null, event.ctrlKey || event.metaKey || event.shiftKey); + }; + } + + fireEvent(this, eventType, eventArgs, defaultFunction); + } +};/** + * @classDescription The base function which all other series types inherit from. The data in the series is stored + * in various arrays. + * + * - First, series.options.data contains all the original config options for + * each point whether added by options or methods like series.addPoint. + * - Next, series.data contains those values converted to points, but in case the series data length + * exceeds the cropThreshold, or if the data is grouped, series.data doesn't contain all the points. It + * only contains the points that have been created on demand. + * - Then there's series.points that contains all currently visible point objects. In case of cropping, + * the cropped-away points are not part of this array. The series.points array starts at series.cropStart + * compared to series.data and series.options.data. If however the series data is grouped, these can't + * be correlated one to one. + * - series.xData and series.processedXData contain clean x values, equivalent to series.data and series.points. + * - series.yData and series.processedYData contain clean x values, equivalent to series.data and series.points. + * + * @param {Object} chart + * @param {Object} options + */ +var Series = function () {}; + +Series.prototype = { + + isCartesian: true, + type: 'line', + pointClass: Point, + sorted: true, // requires the data to be sorted + requireSorting: true, + pointAttrToOptions: { // mapping between SVG attributes and the corresponding options + stroke: 'lineColor', + 'stroke-width': 'lineWidth', + fill: 'fillColor', + r: 'radius' + }, + axisTypes: ['xAxis', 'yAxis'], + colorCounter: 0, + parallelArrays: ['x', 'y'], // each point's x and y values are stored in this.xData and this.yData + init: function (chart, options) { + var series = this, + eventType, + events, + chartSeries = chart.series, + sortByIndex = function (a, b) { + return pick(a.options.index, a._i) - pick(b.options.index, b._i); + }; + + series.chart = chart; + series.options = options = series.setOptions(options); // merge with plotOptions + series.linkedSeries = []; + + // bind the axes + series.bindAxes(); + + // set some variables + extend(series, { + name: options.name, + state: NORMAL_STATE, + pointAttr: {}, + visible: options.visible !== false, // true by default + selected: options.selected === true // false by default + }); + + // special + if (useCanVG) { + options.animation = false; + } + + // register event listeners + events = options.events; + for (eventType in events) { + addEvent(series, eventType, events[eventType]); + } + if ( + (events && events.click) || + (options.point && options.point.events && options.point.events.click) || + options.allowPointSelect + ) { + chart.runTrackerClick = true; + } + + series.getColor(); + series.getSymbol(); + + // Set the data + each(series.parallelArrays, function (key) { + series[key + 'Data'] = []; + }); + series.setData(options.data, false); + + // Mark cartesian + if (series.isCartesian) { + chart.hasCartesianSeries = true; + } + + // Register it in the chart + chartSeries.push(series); + series._i = chartSeries.length - 1; + + // Sort series according to index option (#248, #1123, #2456) + stableSort(chartSeries, sortByIndex); + if (this.yAxis) { + stableSort(this.yAxis.series, sortByIndex); + } + + each(chartSeries, function (series, i) { + series.index = i; + series.name = series.name || 'Series ' + (i + 1); + }); + + }, + + /** + * Set the xAxis and yAxis properties of cartesian series, and register the series + * in the axis.series array + */ + bindAxes: function () { + var series = this, + seriesOptions = series.options, + chart = series.chart, + axisOptions; + + each(series.axisTypes || [], function (AXIS) { // repeat for xAxis and yAxis + + each(chart[AXIS], function (axis) { // loop through the chart's axis objects + axisOptions = axis.options; + + // apply if the series xAxis or yAxis option mathches the number of the + // axis, or if undefined, use the first axis + if ((seriesOptions[AXIS] === axisOptions.index) || + (seriesOptions[AXIS] !== UNDEFINED && seriesOptions[AXIS] === axisOptions.id) || + (seriesOptions[AXIS] === UNDEFINED && axisOptions.index === 0)) { + + // register this series in the axis.series lookup + axis.series.push(series); + + // set this series.xAxis or series.yAxis reference + series[AXIS] = axis; + + // mark dirty for redraw + axis.isDirty = true; + } + }); + + // The series needs an X and an Y axis + if (!series[AXIS] && series.optionalAxis !== AXIS) { + error(18, true); + } + + }); + }, + + /** + * For simple series types like line and column, the data values are held in arrays like + * xData and yData for quick lookup to find extremes and more. For multidimensional series + * like bubble and map, this can be extended with arrays like zData and valueData by + * adding to the series.parallelArrays array. + */ + updateParallelArrays: function (point, i) { + var series = point.series, + args = arguments, + fn = typeof i === 'number' ? + // Insert the value in the given position + function (key) { + var val = key === 'y' && series.toYData ? series.toYData(point) : point[key]; + series[key + 'Data'][i] = val; + } : + // Apply the method specified in i with the following arguments as arguments + function (key) { + Array.prototype[i].apply(series[key + 'Data'], Array.prototype.slice.call(args, 2)); + }; + + each(series.parallelArrays, fn); + }, + + /** + * Return an auto incremented x value based on the pointStart and pointInterval options. + * This is only used if an x value is not given for the point that calls autoIncrement. + */ + autoIncrement: function () { + var series = this, + options = series.options, + xIncrement = series.xIncrement; + + xIncrement = pick(xIncrement, options.pointStart, 0); + + series.pointInterval = pick(series.pointInterval, options.pointInterval, 1); + + series.xIncrement = xIncrement + series.pointInterval; + return xIncrement; + }, + + /** + * Divide the series data into segments divided by null values. + */ + getSegments: function () { + var series = this, + lastNull = -1, + segments = [], + i, + points = series.points, + pointsLength = points.length; + + if (pointsLength) { // no action required for [] + + // if connect nulls, just remove null points + if (series.options.connectNulls) { + i = pointsLength; + while (i--) { + if (points[i].y === null) { + points.splice(i, 1); + } + } + if (points.length) { + segments = [points]; + } + + // else, split on null points + } else { + each(points, function (point, i) { + if (point.y === null) { + if (i > lastNull + 1) { + segments.push(points.slice(lastNull + 1, i)); + } + lastNull = i; + } else if (i === pointsLength - 1) { // last value + segments.push(points.slice(lastNull + 1, i + 1)); + } + }); + } + } + + // register it + series.segments = segments; + }, + + /** + * Set the series options by merging from the options tree + * @param {Object} itemOptions + */ + setOptions: function (itemOptions) { + var chart = this.chart, + chartOptions = chart.options, + plotOptions = chartOptions.plotOptions, + userOptions = chart.userOptions || {}, + userPlotOptions = userOptions.plotOptions || {}, + typeOptions = plotOptions[this.type], + options; + + this.userOptions = itemOptions; + + options = merge( + typeOptions, + plotOptions.series, + itemOptions + ); + + // The tooltip options are merged between global and series specific options + this.tooltipOptions = merge( + defaultOptions.tooltip, + defaultOptions.plotOptions[this.type].tooltip, + userOptions.tooltip, + userPlotOptions.series && userPlotOptions.series.tooltip, + userPlotOptions[this.type] && userPlotOptions[this.type].tooltip, + itemOptions.tooltip + ); + + // Delete marker object if not allowed (#1125) + if (typeOptions.marker === null) { + delete options.marker; + } + + return options; + + }, + /** + * Get the series' color + */ + getColor: function () { + var options = this.options, + userOptions = this.userOptions, + defaultColors = this.chart.options.colors, + counters = this.chart.counters, + color, + colorIndex; + + color = options.color || defaultPlotOptions[this.type].color; + + if (!color && !options.colorByPoint) { + if (defined(userOptions._colorIndex)) { // after Series.update() + colorIndex = userOptions._colorIndex; + } else { + userOptions._colorIndex = counters.color; + colorIndex = counters.color++; + } + color = defaultColors[colorIndex]; + } + + this.color = color; + counters.wrapColor(defaultColors.length); + }, + /** + * Get the series' symbol + */ + getSymbol: function () { + var series = this, + userOptions = series.userOptions, + seriesMarkerOption = series.options.marker, + chart = series.chart, + defaultSymbols = chart.options.symbols, + counters = chart.counters, + symbolIndex; + + series.symbol = seriesMarkerOption.symbol; + if (!series.symbol) { + if (defined(userOptions._symbolIndex)) { // after Series.update() + symbolIndex = userOptions._symbolIndex; + } else { + userOptions._symbolIndex = counters.symbol; + symbolIndex = counters.symbol++; + } + series.symbol = defaultSymbols[symbolIndex]; + } + + // don't substract radius in image symbols (#604) + if (/^url/.test(series.symbol)) { + seriesMarkerOption.radius = 0; + } + counters.wrapSymbol(defaultSymbols.length); + }, + + drawLegendSymbol: LegendSymbolMixin.drawLineMarker, + + /** + * Replace the series data with a new set of data + * @param {Object} data + * @param {Object} redraw + */ + setData: function (data, redraw, animation, updatePoints) { + var series = this, + oldData = series.points, + oldDataLength = (oldData && oldData.length) || 0, + dataLength, + options = series.options, + chart = series.chart, + firstPoint = null, + xAxis = series.xAxis, + hasCategories = xAxis && !!xAxis.categories, + tooltipPoints = series.tooltipPoints, + i, + turboThreshold = options.turboThreshold, + pt, + xData = this.xData, + yData = this.yData, + pointArrayMap = series.pointArrayMap, + valueCount = pointArrayMap && pointArrayMap.length; + + data = data || []; + dataLength = data.length; + redraw = pick(redraw, true); + + // If the point count is the same as is was, just run Point.update which is + // cheaper, allows animation, and keeps references to points. + if (updatePoints !== false && dataLength && oldDataLength === dataLength && !series.cropped && !series.hasGroupedData) { + each(data, function (point, i) { + oldData[i].update(point, false); + }); + + } else { + + // Reset properties + series.xIncrement = null; + series.pointRange = hasCategories ? 1 : options.pointRange; + + series.colorCounter = 0; // for series with colorByPoint (#1547) + + // Update parallel arrays + each(this.parallelArrays, function (key) { + series[key + 'Data'].length = 0; + }); + + // In turbo mode, only one- or twodimensional arrays of numbers are allowed. The + // first value is tested, and we assume that all the rest are defined the same + // way. Although the 'for' loops are similar, they are repeated inside each + // if-else conditional for max performance. + if (turboThreshold && dataLength > turboThreshold) { + + // find the first non-null point + i = 0; + while (firstPoint === null && i < dataLength) { + firstPoint = data[i]; + i++; + } + + + if (isNumber(firstPoint)) { // assume all points are numbers + var x = pick(options.pointStart, 0), + pointInterval = pick(options.pointInterval, 1); + + for (i = 0; i < dataLength; i++) { + xData[i] = x; + yData[i] = data[i]; + x += pointInterval; + } + series.xIncrement = x; + } else if (isArray(firstPoint)) { // assume all points are arrays + if (valueCount) { // [x, low, high] or [x, o, h, l, c] + for (i = 0; i < dataLength; i++) { + pt = data[i]; + xData[i] = pt[0]; + yData[i] = pt.slice(1, valueCount + 1); + } + } else { // [x, y] + for (i = 0; i < dataLength; i++) { + pt = data[i]; + xData[i] = pt[0]; + yData[i] = pt[1]; + } + } + } else { + error(12); // Highcharts expects configs to be numbers or arrays in turbo mode + } + } else { + for (i = 0; i < dataLength; i++) { + if (data[i] !== UNDEFINED) { // stray commas in oldIE + pt = { series: series }; + series.pointClass.prototype.applyOptions.apply(pt, [data[i]]); + series.updateParallelArrays(pt, i); + if (hasCategories && pt.name) { + xAxis.names[pt.x] = pt.name; // #2046 + } + } + } + } + + // Forgetting to cast strings to numbers is a common caveat when handling CSV or JSON + if (isString(yData[0])) { + error(14, true); + } + + series.data = []; + series.options.data = data; + //series.zData = zData; + + // destroy old points + i = oldDataLength; + while (i--) { + if (oldData[i] && oldData[i].destroy) { + oldData[i].destroy(); + } + } + if (tooltipPoints) { // #2594 + tooltipPoints.length = 0; + } + + // reset minRange (#878) + if (xAxis) { + xAxis.minRange = xAxis.userMinRange; + } + + // redraw + series.isDirty = series.isDirtyData = chart.isDirtyBox = true; + animation = false; + } + + if (redraw) { + chart.redraw(animation); + } + }, + + /** + * Process the data by cropping away unused data points if the series is longer + * than the crop threshold. This saves computing time for lage series. + */ + processData: function (force) { + var series = this, + processedXData = series.xData, // copied during slice operation below + processedYData = series.yData, + dataLength = processedXData.length, + croppedData, + cropStart = 0, + cropped, + distance, + closestPointRange, + xAxis = series.xAxis, + i, // loop variable + options = series.options, + cropThreshold = options.cropThreshold, + activePointCount = 0, + isCartesian = series.isCartesian, + min, + max; + + // If the series data or axes haven't changed, don't go through this. Return false to pass + // the message on to override methods like in data grouping. + if (isCartesian && !series.isDirty && !xAxis.isDirty && !series.yAxis.isDirty && !force) { + return false; + } + + + // optionally filter out points outside the plot area + if (isCartesian && series.sorted && (!cropThreshold || dataLength > cropThreshold || series.forceCrop)) { + + min = xAxis.min; + max = xAxis.max; + + // it's outside current extremes + if (processedXData[dataLength - 1] < min || processedXData[0] > max) { + processedXData = []; + processedYData = []; + + // only crop if it's actually spilling out + } else if (processedXData[0] < min || processedXData[dataLength - 1] > max) { + croppedData = this.cropData(series.xData, series.yData, min, max); + processedXData = croppedData.xData; + processedYData = croppedData.yData; + cropStart = croppedData.start; + cropped = true; + activePointCount = processedXData.length; + } + } + + + // Find the closest distance between processed points + for (i = processedXData.length - 1; i >= 0; i--) { + distance = processedXData[i] - processedXData[i - 1]; + + if (!cropped && processedXData[i] > min && processedXData[i] < max) { + activePointCount++; + } + if (distance > 0 && (closestPointRange === UNDEFINED || distance < closestPointRange)) { + closestPointRange = distance; + + // Unsorted data is not supported by the line tooltip, as well as data grouping and + // navigation in Stock charts (#725) and width calculation of columns (#1900) + } else if (distance < 0 && series.requireSorting) { + error(15); + } + } + + // Record the properties + series.cropped = cropped; // undefined or true + series.cropStart = cropStart; + series.processedXData = processedXData; + series.processedYData = processedYData; + series.activePointCount = activePointCount; + + if (options.pointRange === null) { // null means auto, as for columns, candlesticks and OHLC + series.pointRange = closestPointRange || 1; + } + series.closestPointRange = closestPointRange; + + }, + + /** + * Iterate over xData and crop values between min and max. Returns object containing crop start/end + * cropped xData with corresponding part of yData, dataMin and dataMax within the cropped range + */ + cropData: function (xData, yData, min, max) { + var dataLength = xData.length, + cropStart = 0, + cropEnd = dataLength, + cropShoulder = pick(this.cropShoulder, 1), // line-type series need one point outside + i; + + // iterate up to find slice start + for (i = 0; i < dataLength; i++) { + if (xData[i] >= min) { + cropStart = mathMax(0, i - cropShoulder); + break; + } + } + + // proceed to find slice end + for (; i < dataLength; i++) { + if (xData[i] > max) { + cropEnd = i + cropShoulder; + break; + } + } + + return { + xData: xData.slice(cropStart, cropEnd), + yData: yData.slice(cropStart, cropEnd), + start: cropStart, + end: cropEnd + }; + }, + + + /** + * Generate the data point after the data has been processed by cropping away + * unused points and optionally grouped in Highcharts Stock. + */ + generatePoints: function () { + var series = this, + options = series.options, + dataOptions = options.data, + data = series.data, + dataLength, + processedXData = series.processedXData, + processedYData = series.processedYData, + pointClass = series.pointClass, + processedDataLength = processedXData.length, + cropStart = series.cropStart || 0, + cursor, + hasGroupedData = series.hasGroupedData, + point, + points = [], + i; + + if (!data && !hasGroupedData) { + var arr = []; + arr.length = dataOptions.length; + data = series.data = arr; + } + + for (i = 0; i < processedDataLength; i++) { + cursor = cropStart + i; + if (!hasGroupedData) { + if (data[cursor]) { + point = data[cursor]; + } else if (dataOptions[cursor] !== UNDEFINED) { // #970 + data[cursor] = point = (new pointClass()).init(series, dataOptions[cursor], processedXData[i]); + } + points[i] = point; + } else { + // splat the y data in case of ohlc data array + points[i] = (new pointClass()).init(series, [processedXData[i]].concat(splat(processedYData[i]))); + } + } + + // Hide cropped-away points - this only runs when the number of points is above cropThreshold, or when + // swithching view from non-grouped data to grouped data (#637) + if (data && (processedDataLength !== (dataLength = data.length) || hasGroupedData)) { + for (i = 0; i < dataLength; i++) { + if (i === cropStart && !hasGroupedData) { // when has grouped data, clear all points + i += processedDataLength; + } + if (data[i]) { + data[i].destroyElements(); + data[i].plotX = UNDEFINED; // #1003 + } + } + } + + series.data = data; + series.points = points; + }, + + /** + * Calculate Y extremes for visible data + */ + getExtremes: function (yData) { + var xAxis = this.xAxis, + yAxis = this.yAxis, + xData = this.processedXData, + yDataLength, + activeYData = [], + activeCounter = 0, + xExtremes = xAxis.getExtremes(), // #2117, need to compensate for log X axis + xMin = xExtremes.min, + xMax = xExtremes.max, + validValue, + withinRange, + dataMin, + dataMax, + x, + y, + i, + j; + + yData = yData || this.stackedYData || this.processedYData; + yDataLength = yData.length; + + for (i = 0; i < yDataLength; i++) { + + x = xData[i]; + y = yData[i]; + + // For points within the visible range, including the first point outside the + // visible range, consider y extremes + validValue = y !== null && y !== UNDEFINED && (!yAxis.isLog || (y.length || y > 0)); + withinRange = this.getExtremesFromAll || this.cropped || ((xData[i + 1] || x) >= xMin && + (xData[i - 1] || x) <= xMax); + + if (validValue && withinRange) { + + j = y.length; + if (j) { // array, like ohlc or range data + while (j--) { + if (y[j] !== null) { + activeYData[activeCounter++] = y[j]; + } + } + } else { + activeYData[activeCounter++] = y; + } + } + } + this.dataMin = pick(dataMin, arrayMin(activeYData)); + this.dataMax = pick(dataMax, arrayMax(activeYData)); + }, + + /** + * Translate data points from raw data values to chart specific positioning data + * needed later in drawPoints, drawGraph and drawTracker. + */ + translate: function () { + if (!this.processedXData) { // hidden series + this.processData(); + } + this.generatePoints(); + var series = this, + options = series.options, + stacking = options.stacking, + xAxis = series.xAxis, + categories = xAxis.categories, + yAxis = series.yAxis, + points = series.points, + dataLength = points.length, + hasModifyValue = !!series.modifyValue, + i, + pointPlacement = options.pointPlacement, + dynamicallyPlaced = pointPlacement === 'between' || isNumber(pointPlacement), + threshold = options.threshold; + + // Translate each point + for (i = 0; i < dataLength; i++) { + var point = points[i], + xValue = point.x, + yValue = point.y, + yBottom = point.low, + stack = stacking && yAxis.stacks[(series.negStacks && yValue < threshold ? '-' : '') + series.stackKey], + pointStack, + stackValues; + + // Discard disallowed y values for log axes + if (yAxis.isLog && yValue <= 0) { + point.y = yValue = null; + } + + // Get the plotX translation + point.plotX = xAxis.translate(xValue, 0, 0, 0, 1, pointPlacement, this.type === 'flags'); // Math.round fixes #591 + + + // Calculate the bottom y value for stacked series + if (stacking && series.visible && stack && stack[xValue]) { + + pointStack = stack[xValue]; + stackValues = pointStack.points[series.index + ',' + i]; + yBottom = stackValues[0]; + yValue = stackValues[1]; + + if (yBottom === 0) { + yBottom = pick(threshold, yAxis.min); + } + if (yAxis.isLog && yBottom <= 0) { // #1200, #1232 + yBottom = null; + } + + point.total = point.stackTotal = pointStack.total; + point.percentage = pointStack.total && (point.y / pointStack.total * 100); + point.stackY = yValue; + + // Place the stack label + pointStack.setOffset(series.pointXOffset || 0, series.barW || 0); + + } + + // Set translated yBottom or remove it + point.yBottom = defined(yBottom) ? + yAxis.translate(yBottom, 0, 1, 0, 1) : + null; + + // general hook, used for Highstock compare mode + if (hasModifyValue) { + yValue = series.modifyValue(yValue, point); + } + + // Set the the plotY value, reset it for redraws + point.plotY = (typeof yValue === 'number' && yValue !== Infinity) ? + //mathRound(yAxis.translate(yValue, 0, 1, 0, 1) * 10) / 10 : // Math.round fixes #591 + yAxis.translate(yValue, 0, 1, 0, 1) : + UNDEFINED; + + // Set client related positions for mouse tracking + point.clientX = dynamicallyPlaced ? xAxis.translate(xValue, 0, 0, 0, 1) : point.plotX; // #1514 + + point.negative = point.y < (threshold || 0); + + // some API data + point.category = categories && categories[point.x] !== UNDEFINED ? + categories[point.x] : point.x; + + } + + // now that we have the cropped data, build the segments + series.getSegments(); + }, + + /** + * Animate in the series + */ + animate: function (init) { + var series = this, + chart = series.chart, + renderer = chart.renderer, + clipRect, + markerClipRect, + animation = series.options.animation, + clipBox = series.clipBox || chart.clipBox, + inverted = chart.inverted, + sharedClipKey; + + // Animation option is set to true + if (animation && !isObject(animation)) { + animation = defaultPlotOptions[series.type].animation; + } + sharedClipKey = ['_sharedClip', animation.duration, animation.easing, clipBox.height].join(','); + + // Initialize the animation. Set up the clipping rectangle. + if (init) { + + // If a clipping rectangle with the same properties is currently present in the chart, use that. + clipRect = chart[sharedClipKey]; + markerClipRect = chart[sharedClipKey + 'm']; + if (!clipRect) { + chart[sharedClipKey] = clipRect = renderer.clipRect( + extend(clipBox, { width: 0 }) + ); + + chart[sharedClipKey + 'm'] = markerClipRect = renderer.clipRect( + -99, // include the width of the first marker + inverted ? -chart.plotLeft : -chart.plotTop, + 99, + inverted ? chart.chartWidth : chart.chartHeight + ); + } + series.group.clip(clipRect); + series.markerGroup.clip(markerClipRect); + series.sharedClipKey = sharedClipKey; + + // Run the animation + } else { + clipRect = chart[sharedClipKey]; + if (clipRect) { + clipRect.animate({ + width: chart.plotSizeX + }, animation); + } + if (chart[sharedClipKey + 'm']) { + chart[sharedClipKey + 'm'].animate({ + width: chart.plotSizeX + 99 + }, animation); + } + + // Delete this function to allow it only once + series.animate = null; + + } + }, + + /** + * This runs after animation to land on the final plot clipping + */ + afterAnimate: function () { + var chart = this.chart, + sharedClipKey = this.sharedClipKey, + group = this.group, + clipBox = this.clipBox; + + if (group && this.options.clip !== false) { + if (!sharedClipKey || !clipBox) { + group.clip(clipBox ? chart.renderer.clipRect(clipBox) : chart.clipRect); + } + this.markerGroup.clip(); // no clip + } + + fireEvent(this, 'afterAnimate'); + + // Remove the shared clipping rectancgle when all series are shown + setTimeout(function () { + if (sharedClipKey && chart[sharedClipKey]) { + if (!clipBox) { + chart[sharedClipKey] = chart[sharedClipKey].destroy(); + } + if (chart[sharedClipKey + 'm']) { + chart[sharedClipKey + 'm'] = chart[sharedClipKey + 'm'].destroy(); + } + } + }, 100); + }, + + /** + * Draw the markers + */ + drawPoints: function () { + var series = this, + pointAttr, + points = series.points, + chart = series.chart, + plotX, + plotY, + i, + point, + radius, + symbol, + isImage, + graphic, + options = series.options, + seriesMarkerOptions = options.marker, + seriesPointAttr = series.pointAttr[''], + pointMarkerOptions, + enabled, + isInside, + markerGroup = series.markerGroup, + globallyEnabled = pick( + seriesMarkerOptions.enabled, + series.activePointCount < (0.5 * series.xAxis.len / seriesMarkerOptions.radius) + ); + + if (seriesMarkerOptions.enabled !== false || series._hasPointMarkers) { + + i = points.length; + while (i--) { + point = points[i]; + plotX = mathFloor(point.plotX); // #1843 + plotY = point.plotY; + graphic = point.graphic; + pointMarkerOptions = point.marker || {}; + enabled = (globallyEnabled && pointMarkerOptions.enabled === UNDEFINED) || pointMarkerOptions.enabled; + isInside = chart.isInsidePlot(mathRound(plotX), plotY, chart.inverted); // #1858 + + // only draw the point if y is defined + if (enabled && plotY !== UNDEFINED && !isNaN(plotY) && point.y !== null) { + + // shortcuts + pointAttr = point.pointAttr[point.selected ? SELECT_STATE : NORMAL_STATE] || seriesPointAttr; + radius = pointAttr.r; + symbol = pick(pointMarkerOptions.symbol, series.symbol); + isImage = symbol.indexOf('url') === 0; + + if (graphic) { // update + graphic[isInside ? 'show' : 'hide'](true) // Since the marker group isn't clipped, each individual marker must be toggled + .animate(extend({ + x: plotX - radius, + y: plotY - radius + }, graphic.symbolName ? { // don't apply to image symbols #507 + width: 2 * radius, + height: 2 * radius + } : {})); + } else if (isInside && (radius > 0 || isImage)) { + point.graphic = graphic = chart.renderer.symbol( + symbol, + plotX - radius, + plotY - radius, + 2 * radius, + 2 * radius + ) + .attr(pointAttr) + .add(markerGroup); + } + + } else if (graphic) { + point.graphic = graphic.destroy(); // #1269 + } + } + } + + }, + + /** + * Convert state properties from API naming conventions to SVG attributes + * + * @param {Object} options API options object + * @param {Object} base1 SVG attribute object to inherit from + * @param {Object} base2 Second level SVG attribute object to inherit from + */ + convertAttribs: function (options, base1, base2, base3) { + var conversion = this.pointAttrToOptions, + attr, + option, + obj = {}; + + options = options || {}; + base1 = base1 || {}; + base2 = base2 || {}; + base3 = base3 || {}; + + for (attr in conversion) { + option = conversion[attr]; + obj[attr] = pick(options[option], base1[attr], base2[attr], base3[attr]); + } + return obj; + }, + + /** + * Get the state attributes. Each series type has its own set of attributes + * that are allowed to change on a point's state change. Series wide attributes are stored for + * all series, and additionally point specific attributes are stored for all + * points with individual marker options. If such options are not defined for the point, + * a reference to the series wide attributes is stored in point.pointAttr. + */ + getAttribs: function () { + var series = this, + seriesOptions = series.options, + normalOptions = defaultPlotOptions[series.type].marker ? seriesOptions.marker : seriesOptions, + stateOptions = normalOptions.states, + stateOptionsHover = stateOptions[HOVER_STATE], + pointStateOptionsHover, + seriesColor = series.color, + normalDefaults = { + stroke: seriesColor, + fill: seriesColor + }, + points = series.points || [], // #927 + i, + point, + seriesPointAttr = [], + pointAttr, + pointAttrToOptions = series.pointAttrToOptions, + hasPointSpecificOptions = series.hasPointSpecificOptions, + negativeColor = seriesOptions.negativeColor, + defaultLineColor = normalOptions.lineColor, + defaultFillColor = normalOptions.fillColor, + turboThreshold = seriesOptions.turboThreshold, + attr, + key; + + // series type specific modifications + if (seriesOptions.marker) { // line, spline, area, areaspline, scatter + + // if no hover radius is given, default to normal radius + 2 + stateOptionsHover.radius = stateOptionsHover.radius || normalOptions.radius + 2; + stateOptionsHover.lineWidth = stateOptionsHover.lineWidth || normalOptions.lineWidth + 1; + + } else { // column, bar, pie + + // if no hover color is given, brighten the normal color + stateOptionsHover.color = stateOptionsHover.color || + Color(stateOptionsHover.color || seriesColor) + .brighten(stateOptionsHover.brightness).get(); + } + + // general point attributes for the series normal state + seriesPointAttr[NORMAL_STATE] = series.convertAttribs(normalOptions, normalDefaults); + + // HOVER_STATE and SELECT_STATE states inherit from normal state except the default radius + each([HOVER_STATE, SELECT_STATE], function (state) { + seriesPointAttr[state] = + series.convertAttribs(stateOptions[state], seriesPointAttr[NORMAL_STATE]); + }); + + // set it + series.pointAttr = seriesPointAttr; + + + // Generate the point-specific attribute collections if specific point + // options are given. If not, create a referance to the series wide point + // attributes + i = points.length; + if (!turboThreshold || i < turboThreshold || hasPointSpecificOptions) { + while (i--) { + point = points[i]; + normalOptions = (point.options && point.options.marker) || point.options; + if (normalOptions && normalOptions.enabled === false) { + normalOptions.radius = 0; + } + + if (point.negative && negativeColor) { + point.color = point.fillColor = negativeColor; + } + + hasPointSpecificOptions = seriesOptions.colorByPoint || point.color; // #868 + + // check if the point has specific visual options + if (point.options) { + for (key in pointAttrToOptions) { + if (defined(normalOptions[pointAttrToOptions[key]])) { + hasPointSpecificOptions = true; + } + } + } + + // a specific marker config object is defined for the individual point: + // create it's own attribute collection + if (hasPointSpecificOptions) { + normalOptions = normalOptions || {}; + pointAttr = []; + stateOptions = normalOptions.states || {}; // reassign for individual point + pointStateOptionsHover = stateOptions[HOVER_STATE] = stateOptions[HOVER_STATE] || {}; + + // Handle colors for column and pies + if (!seriesOptions.marker) { // column, bar, point + // If no hover color is given, brighten the normal color. #1619, #2579 + pointStateOptionsHover.color = pointStateOptionsHover.color || (!point.options.color && stateOptionsHover.color) || + Color(point.color) + .brighten(pointStateOptionsHover.brightness || stateOptionsHover.brightness) + .get(); + } + + // normal point state inherits series wide normal state + attr = { color: point.color }; // #868 + if (!defaultFillColor) { // Individual point color or negative color markers (#2219) + attr.fillColor = point.color; + } + if (!defaultLineColor) { + attr.lineColor = point.color; // Bubbles take point color, line markers use white + } + pointAttr[NORMAL_STATE] = series.convertAttribs(extend(attr, normalOptions), seriesPointAttr[NORMAL_STATE]); + + // inherit from point normal and series hover + pointAttr[HOVER_STATE] = series.convertAttribs( + stateOptions[HOVER_STATE], + seriesPointAttr[HOVER_STATE], + pointAttr[NORMAL_STATE] + ); + + // inherit from point normal and series hover + pointAttr[SELECT_STATE] = series.convertAttribs( + stateOptions[SELECT_STATE], + seriesPointAttr[SELECT_STATE], + pointAttr[NORMAL_STATE] + ); + + + // no marker config object is created: copy a reference to the series-wide + // attribute collection + } else { + pointAttr = seriesPointAttr; + } + + point.pointAttr = pointAttr; + } + } + }, + + /** + * Clear DOM objects and free up memory + */ + destroy: function () { + var series = this, + chart = series.chart, + issue134 = /AppleWebKit\/533/.test(userAgent), + destroy, + i, + data = series.data || [], + point, + prop, + axis; + + // add event hook + fireEvent(series, 'destroy'); + + // remove all events + removeEvent(series); + + // erase from axes + each(series.axisTypes || [], function (AXIS) { + axis = series[AXIS]; + if (axis) { + erase(axis.series, series); + axis.isDirty = axis.forceRedraw = true; + } + }); + + // remove legend items + if (series.legendItem) { + series.chart.legend.destroyItem(series); + } + + // destroy all points with their elements + i = data.length; + while (i--) { + point = data[i]; + if (point && point.destroy) { + point.destroy(); + } + } + series.points = null; + + // Clear the animation timeout if we are destroying the series during initial animation + clearTimeout(series.animationTimeout); + + // destroy all SVGElements associated to the series + each(['area', 'graph', 'dataLabelsGroup', 'group', 'markerGroup', 'tracker', + 'graphNeg', 'areaNeg', 'posClip', 'negClip'], function (prop) { + if (series[prop]) { + + // issue 134 workaround + destroy = issue134 && prop === 'group' ? + 'hide' : + 'destroy'; + + series[prop][destroy](); + } + }); + + // remove from hoverSeries + if (chart.hoverSeries === series) { + chart.hoverSeries = null; + } + erase(chart.series, series); + + // clear all members + for (prop in series) { + delete series[prop]; + } + }, + + /** + * Return the graph path of a segment + */ + getSegmentPath: function (segment) { + var series = this, + segmentPath = [], + step = series.options.step; + + // build the segment line + each(segment, function (point, i) { + + var plotX = point.plotX, + plotY = point.plotY, + lastPoint; + + if (series.getPointSpline) { // generate the spline as defined in the SplineSeries object + segmentPath.push.apply(segmentPath, series.getPointSpline(segment, point, i)); + + } else { + + // moveTo or lineTo + segmentPath.push(i ? L : M); + + // step line? + if (step && i) { + lastPoint = segment[i - 1]; + if (step === 'right') { + segmentPath.push( + lastPoint.plotX, + plotY + ); + + } else if (step === 'center') { + segmentPath.push( + (lastPoint.plotX + plotX) / 2, + lastPoint.plotY, + (lastPoint.plotX + plotX) / 2, + plotY + ); + + } else { + segmentPath.push( + plotX, + lastPoint.plotY + ); + } + } + + // normal line to next point + segmentPath.push( + point.plotX, + point.plotY + ); + } + }); + + return segmentPath; + }, + + /** + * Get the graph path + */ + getGraphPath: function () { + var series = this, + graphPath = [], + segmentPath, + singlePoints = []; // used in drawTracker + + // Divide into segments and build graph and area paths + each(series.segments, function (segment) { + + segmentPath = series.getSegmentPath(segment); + + // add the segment to the graph, or a single point for tracking + if (segment.length > 1) { + graphPath = graphPath.concat(segmentPath); + } else { + singlePoints.push(segment[0]); + } + }); + + // Record it for use in drawGraph and drawTracker, and return graphPath + series.singlePoints = singlePoints; + series.graphPath = graphPath; + + return graphPath; + + }, + + /** + * Draw the actual graph + */ + drawGraph: function () { + var series = this, + options = this.options, + props = [['graph', options.lineColor || this.color]], + lineWidth = options.lineWidth, + dashStyle = options.dashStyle, + roundCap = options.linecap !== 'square', + graphPath = this.getGraphPath(), + negativeColor = options.negativeColor; + + if (negativeColor) { + props.push(['graphNeg', negativeColor]); + } + + // draw the graph + each(props, function (prop, i) { + var graphKey = prop[0], + graph = series[graphKey], + attribs; + + if (graph) { + stop(graph); // cancel running animations, #459 + graph.animate({ d: graphPath }); + + } else if (lineWidth && graphPath.length) { // #1487 + attribs = { + stroke: prop[1], + 'stroke-width': lineWidth, + fill: NONE, + zIndex: 1 // #1069 + }; + if (dashStyle) { + attribs.dashstyle = dashStyle; + } else if (roundCap) { + attribs['stroke-linecap'] = attribs['stroke-linejoin'] = 'round'; + } + + series[graphKey] = series.chart.renderer.path(graphPath) + .attr(attribs) + .add(series.group) + .shadow(!i && options.shadow); + } + }); + }, + + /** + * Clip the graphs into the positive and negative coloured graphs + */ + clipNeg: function () { + var options = this.options, + chart = this.chart, + renderer = chart.renderer, + negativeColor = options.negativeColor || options.negativeFillColor, + translatedThreshold, + posAttr, + negAttr, + graph = this.graph, + area = this.area, + posClip = this.posClip, + negClip = this.negClip, + chartWidth = chart.chartWidth, + chartHeight = chart.chartHeight, + chartSizeMax = mathMax(chartWidth, chartHeight), + yAxis = this.yAxis, + above, + below; + + if (negativeColor && (graph || area)) { + translatedThreshold = mathRound(yAxis.toPixels(options.threshold || 0, true)); + if (translatedThreshold < 0) { + chartSizeMax -= translatedThreshold; // #2534 + } + above = { + x: 0, + y: 0, + width: chartSizeMax, + height: translatedThreshold + }; + below = { + x: 0, + y: translatedThreshold, + width: chartSizeMax, + height: chartSizeMax + }; + + if (chart.inverted) { + + above.height = below.y = chart.plotWidth - translatedThreshold; + if (renderer.isVML) { + above = { + x: chart.plotWidth - translatedThreshold - chart.plotLeft, + y: 0, + width: chartWidth, + height: chartHeight + }; + below = { + x: translatedThreshold + chart.plotLeft - chartWidth, + y: 0, + width: chart.plotLeft + translatedThreshold, + height: chartWidth + }; + } + } + + if (yAxis.reversed) { + posAttr = below; + negAttr = above; + } else { + posAttr = above; + negAttr = below; + } + + if (posClip) { // update + posClip.animate(posAttr); + negClip.animate(negAttr); + } else { + + this.posClip = posClip = renderer.clipRect(posAttr); + this.negClip = negClip = renderer.clipRect(negAttr); + + if (graph && this.graphNeg) { + graph.clip(posClip); + this.graphNeg.clip(negClip); + } + + if (area) { + area.clip(posClip); + this.areaNeg.clip(negClip); + } + } + } + }, + + /** + * Initialize and perform group inversion on series.group and series.markerGroup + */ + invertGroups: function () { + var series = this, + chart = series.chart; + + // Pie, go away (#1736) + if (!series.xAxis) { + return; + } + + // A fixed size is needed for inversion to work + function setInvert() { + var size = { + width: series.yAxis.len, + height: series.xAxis.len + }; + + each(['group', 'markerGroup'], function (groupName) { + if (series[groupName]) { + series[groupName].attr(size).invert(); + } + }); + } + + addEvent(chart, 'resize', setInvert); // do it on resize + addEvent(series, 'destroy', function () { + removeEvent(chart, 'resize', setInvert); + }); + + // Do it now + setInvert(); // do it now + + // On subsequent render and redraw, just do setInvert without setting up events again + series.invertGroups = setInvert; + }, + + /** + * General abstraction for creating plot groups like series.group, series.dataLabelsGroup and + * series.markerGroup. On subsequent calls, the group will only be adjusted to the updated plot size. + */ + plotGroup: function (prop, name, visibility, zIndex, parent) { + var group = this[prop], + isNew = !group; + + // Generate it on first call + if (isNew) { + this[prop] = group = this.chart.renderer.g(name) + .attr({ + visibility: visibility, + zIndex: zIndex || 0.1 // IE8 needs this + }) + .add(parent); + } + // Place it on first and subsequent (redraw) calls + group[isNew ? 'attr' : 'animate'](this.getPlotBox()); + return group; + }, + + /** + * Get the translation and scale for the plot area of this series + */ + getPlotBox: function () { + var chart = this.chart, + xAxis = this.xAxis, + yAxis = this.yAxis; + + // Swap axes for inverted (#2339) + if (chart.inverted) { + xAxis = yAxis; + yAxis = this.xAxis; + } + return { + translateX: xAxis ? xAxis.left : chart.plotLeft, + translateY: yAxis ? yAxis.top : chart.plotTop, + scaleX: 1, // #1623 + scaleY: 1 + }; + }, + + /** + * Render the graph and markers + */ + render: function () { + var series = this, + chart = series.chart, + group, + options = series.options, + animation = options.animation, + // Animation doesn't work in IE8 quirks when the group div is hidden, + // and looks bad in other oldIE + animDuration = (animation && !!series.animate && chart.renderer.isSVG && pick(animation.duration, 500)) || 0, + visibility = series.visible ? VISIBLE : HIDDEN, + zIndex = options.zIndex, + hasRendered = series.hasRendered, + chartSeriesGroup = chart.seriesGroup; + + // the group + group = series.plotGroup( + 'group', + 'series', + visibility, + zIndex, + chartSeriesGroup + ); + + series.markerGroup = series.plotGroup( + 'markerGroup', + 'markers', + visibility, + zIndex, + chartSeriesGroup + ); + + // initiate the animation + if (animDuration) { + series.animate(true); + } + + // cache attributes for shapes + series.getAttribs(); + + // SVGRenderer needs to know this before drawing elements (#1089, #1795) + group.inverted = series.isCartesian ? chart.inverted : false; + + // draw the graph if any + if (series.drawGraph) { + series.drawGraph(); + series.clipNeg(); + } + + // draw the data labels (inn pies they go before the points) + if (series.drawDataLabels) { + series.drawDataLabels(); + } + + // draw the points + if (series.visible) { + series.drawPoints(); + } + + + // draw the mouse tracking area + if (series.drawTracker && series.options.enableMouseTracking !== false) { + series.drawTracker(); + } + + // Handle inverted series and tracker groups + if (chart.inverted) { + series.invertGroups(); + } + + // Initial clipping, must be defined after inverting groups for VML + if (options.clip !== false && !series.sharedClipKey && !hasRendered) { + group.clip(chart.clipRect); + } + + // Run the animation + if (animDuration) { + series.animate(); + } + + // Call the afterAnimate function on animation complete (but don't overwrite the animation.complete option + // which should be available to the user). + if (!hasRendered) { + if (animDuration) { + series.animationTimeout = setTimeout(function () { + series.afterAnimate(); + }, animDuration); + } else { + series.afterAnimate(); + } + } + + series.isDirty = series.isDirtyData = false; // means data is in accordance with what you see + // (See #322) series.isDirty = series.isDirtyData = false; // means data is in accordance with what you see + series.hasRendered = true; + }, + + /** + * Redraw the series after an update in the axes. + */ + redraw: function () { + var series = this, + chart = series.chart, + wasDirtyData = series.isDirtyData, // cache it here as it is set to false in render, but used after + group = series.group, + xAxis = series.xAxis, + yAxis = series.yAxis; + + // reposition on resize + if (group) { + if (chart.inverted) { + group.attr({ + width: chart.plotWidth, + height: chart.plotHeight + }); + } + + group.animate({ + translateX: pick(xAxis && xAxis.left, chart.plotLeft), + translateY: pick(yAxis && yAxis.top, chart.plotTop) + }); + } + + series.translate(); + if (series.setTooltipPoints) { + series.setTooltipPoints(true); + } + series.render(); + + if (wasDirtyData) { + fireEvent(series, 'updatedData'); + } + } +}; // end Series prototype + +/** + * The class for stack items + */ +function StackItem(axis, options, isNegative, x, stackOption) { + + var inverted = axis.chart.inverted; + + this.axis = axis; + + // Tells if the stack is negative + this.isNegative = isNegative; + + // Save the options to be able to style the label + this.options = options; + + // Save the x value to be able to position the label later + this.x = x; + + // Initialize total value + this.total = null; + + // This will keep each points' extremes stored by series.index and point index + this.points = {}; + + // Save the stack option on the series configuration object, and whether to treat it as percent + this.stack = stackOption; + + // The align options and text align varies on whether the stack is negative and + // if the chart is inverted or not. + // First test the user supplied value, then use the dynamic. + this.alignOptions = { + align: options.align || (inverted ? (isNegative ? 'left' : 'right') : 'center'), + verticalAlign: options.verticalAlign || (inverted ? 'middle' : (isNegative ? 'bottom' : 'top')), + y: pick(options.y, inverted ? 4 : (isNegative ? 14 : -6)), + x: pick(options.x, inverted ? (isNegative ? -6 : 6) : 0) + }; + + this.textAlign = options.textAlign || (inverted ? (isNegative ? 'right' : 'left') : 'center'); +} + +StackItem.prototype = { + destroy: function () { + destroyObjectProperties(this, this.axis); + }, + + /** + * Renders the stack total label and adds it to the stack label group. + */ + render: function (group) { + var options = this.options, + formatOption = options.format, + str = formatOption ? + format(formatOption, this) : + options.formatter.call(this); // format the text in the label + + // Change the text to reflect the new total and set visibility to hidden in case the serie is hidden + if (this.label) { + this.label.attr({text: str, visibility: HIDDEN}); + // Create new label + } else { + this.label = + this.axis.chart.renderer.text(str, null, null, options.useHTML) // dummy positions, actual position updated with setOffset method in columnseries + .css(options.style) // apply style + .attr({ + align: this.textAlign, // fix the text-anchor + rotation: options.rotation, // rotation + visibility: HIDDEN // hidden until setOffset is called + }) + .add(group); // add to the labels-group + } + }, + + /** + * Sets the offset that the stack has from the x value and repositions the label. + */ + setOffset: function (xOffset, xWidth) { + var stackItem = this, + axis = stackItem.axis, + chart = axis.chart, + inverted = chart.inverted, + neg = this.isNegative, // special treatment is needed for negative stacks + y = axis.translate(axis.usePercentage ? 100 : this.total, 0, 0, 0, 1), // stack value translated mapped to chart coordinates + yZero = axis.translate(0), // stack origin + h = mathAbs(y - yZero), // stack height + x = chart.xAxis[0].translate(this.x) + xOffset, // stack x position + plotHeight = chart.plotHeight, + stackBox = { // this is the box for the complete stack + x: inverted ? (neg ? y : y - h) : x, + y: inverted ? plotHeight - x - xWidth : (neg ? (plotHeight - y - h) : plotHeight - y), + width: inverted ? h : xWidth, + height: inverted ? xWidth : h + }, + label = this.label, + alignAttr; + + if (label) { + label.align(this.alignOptions, null, stackBox); // align the label to the box + + // Set visibility (#678) + alignAttr = label.alignAttr; + label[this.options.crop === false || chart.isInsidePlot(alignAttr.x, alignAttr.y) ? 'show' : 'hide'](true); + } + } +}; + + +// Stacking methods defined on the Axis prototype + +/** + * Build the stacks from top down + */ +Axis.prototype.buildStacks = function () { + var series = this.series, + reversedStacks = pick(this.options.reversedStacks, true), + i = series.length; + if (!this.isXAxis) { + this.usePercentage = false; + while (i--) { + series[reversedStacks ? i : series.length - i - 1].setStackedPoints(); + } + // Loop up again to compute percent stack + if (this.usePercentage) { + for (i = 0; i < series.length; i++) { + series[i].setPercentStacks(); + } + } + } +}; + +Axis.prototype.renderStackTotals = function () { + var axis = this, + chart = axis.chart, + renderer = chart.renderer, + stacks = axis.stacks, + stackKey, + oneStack, + stackCategory, + stackTotalGroup = axis.stackTotalGroup; + + // Create a separate group for the stack total labels + if (!stackTotalGroup) { + axis.stackTotalGroup = stackTotalGroup = + renderer.g('stack-labels') + .attr({ + visibility: VISIBLE, + zIndex: 6 + }) + .add(); + } + + // plotLeft/Top will change when y axis gets wider so we need to translate the + // stackTotalGroup at every render call. See bug #506 and #516 + stackTotalGroup.translate(chart.plotLeft, chart.plotTop); + + // Render each stack total + for (stackKey in stacks) { + oneStack = stacks[stackKey]; + for (stackCategory in oneStack) { + oneStack[stackCategory].render(stackTotalGroup); + } + } +}; + + +// Stacking methods defnied for Series prototype + +/** + * Adds series' points value to corresponding stack + */ +Series.prototype.setStackedPoints = function () { + if (!this.options.stacking || (this.visible !== true && this.chart.options.chart.ignoreHiddenSeries !== false)) { + return; + } + + var series = this, + xData = series.processedXData, + yData = series.processedYData, + stackedYData = [], + yDataLength = yData.length, + seriesOptions = series.options, + threshold = seriesOptions.threshold, + stackOption = seriesOptions.stack, + stacking = seriesOptions.stacking, + stackKey = series.stackKey, + negKey = '-' + stackKey, + negStacks = series.negStacks, + yAxis = series.yAxis, + stacks = yAxis.stacks, + oldStacks = yAxis.oldStacks, + isNegative, + stack, + other, + key, + pointKey, + i, + x, + y; + + // loop over the non-null y values and read them into a local array + for (i = 0; i < yDataLength; i++) { + x = xData[i]; + y = yData[i]; + pointKey = series.index + ',' + i; + + // Read stacked values into a stack based on the x value, + // the sign of y and the stack key. Stacking is also handled for null values (#739) + isNegative = negStacks && y < threshold; + key = isNegative ? negKey : stackKey; + + // Create empty object for this stack if it doesn't exist yet + if (!stacks[key]) { + stacks[key] = {}; + } + + // Initialize StackItem for this x + if (!stacks[key][x]) { + if (oldStacks[key] && oldStacks[key][x]) { + stacks[key][x] = oldStacks[key][x]; + stacks[key][x].total = null; + } else { + stacks[key][x] = new StackItem(yAxis, yAxis.options.stackLabels, isNegative, x, stackOption); + } + } + + // If the StackItem doesn't exist, create it first + stack = stacks[key][x]; + stack.points[pointKey] = [stack.cum || 0]; + + // Add value to the stack total + if (stacking === 'percent') { + + // Percent stacked column, totals are the same for the positive and negative stacks + other = isNegative ? stackKey : negKey; + if (negStacks && stacks[other] && stacks[other][x]) { + other = stacks[other][x]; + stack.total = other.total = mathMax(other.total, stack.total) + mathAbs(y) || 0; + + // Percent stacked areas + } else { + stack.total = correctFloat(stack.total + (mathAbs(y) || 0)); + } + } else { + stack.total = correctFloat(stack.total + (y || 0)); + } + + stack.cum = (stack.cum || 0) + (y || 0); + + stack.points[pointKey].push(stack.cum); + stackedYData[i] = stack.cum; + + } + + if (stacking === 'percent') { + yAxis.usePercentage = true; + } + + this.stackedYData = stackedYData; // To be used in getExtremes + + // Reset old stacks + yAxis.oldStacks = {}; +}; + +/** + * Iterate over all stacks and compute the absolute values to percent + */ +Series.prototype.setPercentStacks = function () { + var series = this, + stackKey = series.stackKey, + stacks = series.yAxis.stacks, + processedXData = series.processedXData; + + each([stackKey, '-' + stackKey], function (key) { + var i = processedXData.length, + x, + stack, + pointExtremes, + totalFactor; + + while (i--) { + x = processedXData[i]; + stack = stacks[key] && stacks[key][x]; + pointExtremes = stack && stack.points[series.index + ',' + i]; + if (pointExtremes) { + totalFactor = stack.total ? 100 / stack.total : 0; + pointExtremes[0] = correctFloat(pointExtremes[0] * totalFactor); // Y bottom value + pointExtremes[1] = correctFloat(pointExtremes[1] * totalFactor); // Y value + series.stackedYData[i] = pointExtremes[1]; + } + } + }); +}; + +// Extend the Chart prototype for dynamic methods +extend(Chart.prototype, { + + /** + * Add a series dynamically after time + * + * @param {Object} options The config options + * @param {Boolean} redraw Whether to redraw the chart after adding. Defaults to true. + * @param {Boolean|Object} animation Whether to apply animation, and optionally animation + * configuration + * + * @return {Object} series The newly created series object + */ + addSeries: function (options, redraw, animation) { + var series, + chart = this; + + if (options) { + redraw = pick(redraw, true); // defaults to true + + fireEvent(chart, 'addSeries', { options: options }, function () { + series = chart.initSeries(options); + + chart.isDirtyLegend = true; // the series array is out of sync with the display + chart.linkSeries(); + if (redraw) { + chart.redraw(animation); + } + }); + } + + return series; + }, + + /** + * Add an axis to the chart + * @param {Object} options The axis option + * @param {Boolean} isX Whether it is an X axis or a value axis + */ + addAxis: function (options, isX, redraw, animation) { + var key = isX ? 'xAxis' : 'yAxis', + chartOptions = this.options, + axis; + + /*jslint unused: false*/ + axis = new Axis(this, merge(options, { + index: this[key].length, + isX: isX + })); + /*jslint unused: true*/ + + // Push the new axis options to the chart options + chartOptions[key] = splat(chartOptions[key] || {}); + chartOptions[key].push(options); + + if (pick(redraw, true)) { + this.redraw(animation); + } + }, + + /** + * Dim the chart and show a loading text or symbol + * @param {String} str An optional text to show in the loading label instead of the default one + */ + showLoading: function (str) { + var chart = this, + options = chart.options, + loadingDiv = chart.loadingDiv; + + var loadingOptions = options.loading; + + // create the layer at the first call + if (!loadingDiv) { + chart.loadingDiv = loadingDiv = createElement(DIV, { + className: PREFIX + 'loading' + }, extend(loadingOptions.style, { + zIndex: 10, + display: NONE + }), chart.container); + + chart.loadingSpan = createElement( + 'span', + null, + loadingOptions.labelStyle, + loadingDiv + ); + + } + + // update text + chart.loadingSpan.innerHTML = str || options.lang.loading; + + // show it + if (!chart.loadingShown) { + css(loadingDiv, { + opacity: 0, + display: '', + left: chart.plotLeft + PX, + top: chart.plotTop + PX, + width: chart.plotWidth + PX, + height: chart.plotHeight + PX + }); + animate(loadingDiv, { + opacity: loadingOptions.style.opacity + }, { + duration: loadingOptions.showDuration || 0 + }); + chart.loadingShown = true; + } + }, + + /** + * Hide the loading layer + */ + hideLoading: function () { + var options = this.options, + loadingDiv = this.loadingDiv; + + if (loadingDiv) { + animate(loadingDiv, { + opacity: 0 + }, { + duration: options.loading.hideDuration || 100, + complete: function () { + css(loadingDiv, { display: NONE }); + } + }); + } + this.loadingShown = false; + } +}); + +// extend the Point prototype for dynamic methods +extend(Point.prototype, { + /** + * Update the point with new options (typically x/y data) and optionally redraw the series. + * + * @param {Object} options Point options as defined in the series.data array + * @param {Boolean} redraw Whether to redraw the chart or wait for an explicit call + * @param {Boolean|Object} animation Whether to apply animation, and optionally animation + * configuration + * + */ + update: function (options, redraw, animation) { + var point = this, + series = point.series, + graphic = point.graphic, + i, + data = series.data, + chart = series.chart, + seriesOptions = series.options; + + redraw = pick(redraw, true); + + // fire the event with a default handler of doing the update + point.firePointEvent('update', { options: options }, function () { + + point.applyOptions(options); + + // update visuals + if (isObject(options)) { + series.getAttribs(); + if (graphic) { + if (options && options.marker && options.marker.symbol) { + point.graphic = graphic.destroy(); + } else { + graphic.attr(point.pointAttr[point.state || '']); + } + } + if (options && options.dataLabels && point.dataLabel) { // #2468 + point.dataLabel = point.dataLabel.destroy(); + } + } + + // record changes in the parallel arrays + i = inArray(point, data); + series.updateParallelArrays(point, i); + + seriesOptions.data[i] = point.options; + + // redraw + series.isDirty = series.isDirtyData = true; + if (!series.fixedBox && series.hasCartesianSeries) { // #1906, #2320 + chart.isDirtyBox = true; + } + + if (seriesOptions.legendType === 'point') { // #1831, #1885 + chart.legend.destroyItem(point); + } + if (redraw) { + chart.redraw(animation); + } + }); + }, + + /** + * Remove a point and optionally redraw the series and if necessary the axes + * @param {Boolean} redraw Whether to redraw the chart or wait for an explicit call + * @param {Boolean|Object} animation Whether to apply animation, and optionally animation + * configuration + */ + remove: function (redraw, animation) { + var point = this, + series = point.series, + points = series.points, + chart = series.chart, + i, + data = series.data; + + setAnimation(animation, chart); + redraw = pick(redraw, true); + + // fire the event with a default handler of removing the point + point.firePointEvent('remove', null, function () { + + // splice all the parallel arrays + i = inArray(point, data); + if (data.length === points.length) { + points.splice(i, 1); + } + data.splice(i, 1); + series.options.data.splice(i, 1); + series.updateParallelArrays(point, 'splice', i, 1); + + point.destroy(); + + // redraw + series.isDirty = true; + series.isDirtyData = true; + if (redraw) { + chart.redraw(); + } + }); + } +}); + +// Extend the series prototype for dynamic methods +extend(Series.prototype, { + /** + * Add a point dynamically after chart load time + * @param {Object} options Point options as given in series.data + * @param {Boolean} redraw Whether to redraw the chart or wait for an explicit call + * @param {Boolean} shift If shift is true, a point is shifted off the start + * of the series as one is appended to the end. + * @param {Boolean|Object} animation Whether to apply animation, and optionally animation + * configuration + */ + addPoint: function (options, redraw, shift, animation) { + var series = this, + seriesOptions = series.options, + data = series.data, + graph = series.graph, + area = series.area, + chart = series.chart, + names = series.xAxis && series.xAxis.names, + currentShift = (graph && graph.shift) || 0, + dataOptions = seriesOptions.data, + point, + isInTheMiddle, + xData = series.xData, + x, + i; + + setAnimation(animation, chart); + + // Make graph animate sideways + if (shift) { + each([graph, area, series.graphNeg, series.areaNeg], function (shape) { + if (shape) { + shape.shift = currentShift + 1; + } + }); + } + if (area) { + area.isArea = true; // needed in animation, both with and without shift + } + + // Optional redraw, defaults to true + redraw = pick(redraw, true); + + // Get options and push the point to xData, yData and series.options. In series.generatePoints + // the Point instance will be created on demand and pushed to the series.data array. + point = { series: series }; + series.pointClass.prototype.applyOptions.apply(point, [options]); + x = point.x; + + // Get the insertion point + i = xData.length; + if (series.requireSorting && x < xData[i - 1]) { + isInTheMiddle = true; + while (i && xData[i - 1] > x) { + i--; + } + } + + series.updateParallelArrays(point, 'splice', i, 0, 0); // insert undefined item + series.updateParallelArrays(point, i); // update it + + if (names) { + names[x] = point.name; + } + dataOptions.splice(i, 0, options); + + if (isInTheMiddle) { + series.data.splice(i, 0, null); + series.processData(); + } + + // Generate points to be added to the legend (#1329) + if (seriesOptions.legendType === 'point') { + series.generatePoints(); + } + + // Shift the first point off the parallel arrays + // todo: consider series.removePoint(i) method + if (shift) { + if (data[0] && data[0].remove) { + data[0].remove(false); + } else { + data.shift(); + series.updateParallelArrays(point, 'shift'); + + dataOptions.shift(); + } + } + + // redraw + series.isDirty = true; + series.isDirtyData = true; + if (redraw) { + series.getAttribs(); // #1937 + chart.redraw(); + } + }, + + /** + * Remove a series and optionally redraw the chart + * + * @param {Boolean} redraw Whether to redraw the chart or wait for an explicit call + * @param {Boolean|Object} animation Whether to apply animation, and optionally animation + * configuration + */ + + remove: function (redraw, animation) { + var series = this, + chart = series.chart; + redraw = pick(redraw, true); + + if (!series.isRemoving) { /* prevent triggering native event in jQuery + (calling the remove function from the remove event) */ + series.isRemoving = true; + + // fire the event with a default handler of removing the point + fireEvent(series, 'remove', null, function () { + + + // destroy elements + series.destroy(); + + + // redraw + chart.isDirtyLegend = chart.isDirtyBox = true; + chart.linkSeries(); + + if (redraw) { + chart.redraw(animation); + } + }); + + } + series.isRemoving = false; + }, + + /** + * Update the series with a new set of options + */ + update: function (newOptions, redraw) { + var chart = this.chart, + // must use user options when changing type because this.options is merged + // in with type specific plotOptions + oldOptions = this.userOptions, + oldType = this.type, + proto = seriesTypes[oldType].prototype, + n; + + // Do the merge, with some forced options + newOptions = merge(oldOptions, { + animation: false, + index: this.index, + pointStart: this.xData[0] // when updating after addPoint + }, { data: this.options.data }, newOptions); + + // Destroy the series and reinsert methods from the type prototype + this.remove(false); + for (n in proto) { // Overwrite series-type specific methods (#2270) + if (proto.hasOwnProperty(n)) { + this[n] = UNDEFINED; + } + } + extend(this, seriesTypes[newOptions.type || oldType].prototype); + + + this.init(chart, newOptions); + if (pick(redraw, true)) { + chart.redraw(false); + } + } +}); + +// Extend the Axis.prototype for dynamic methods +extend(Axis.prototype, { + + /** + * Update the axis with a new options structure + */ + update: function (newOptions, redraw) { + var chart = this.chart; + + newOptions = chart.options[this.coll][this.options.index] = merge(this.userOptions, newOptions); + + this.destroy(true); + this._addedPlotLB = UNDEFINED; // #1611, #2887 + + this.init(chart, extend(newOptions, { events: UNDEFINED })); + + chart.isDirtyBox = true; + if (pick(redraw, true)) { + chart.redraw(); + } + }, + + /** + * Remove the axis from the chart + */ + remove: function (redraw) { + var chart = this.chart, + key = this.coll, // xAxis or yAxis + axisSeries = this.series, + i = axisSeries.length; + + // Remove associated series (#2687) + while (i--) { + if (axisSeries[i]) { + axisSeries[i].remove(false); + } + } + + // Remove the axis + erase(chart.axes, this); + erase(chart[key], this); + chart.options[key].splice(this.options.index, 1); + each(chart[key], function (axis, i) { // Re-index, #1706 + axis.options.index = i; + }); + this.destroy(); + chart.isDirtyBox = true; + + if (pick(redraw, true)) { + chart.redraw(); + } + }, + + /** + * Update the axis title by options + */ + setTitle: function (newTitleOptions, redraw) { + this.update({ title: newTitleOptions }, redraw); + }, + + /** + * Set new axis categories and optionally redraw + * @param {Array} categories + * @param {Boolean} redraw + */ + setCategories: function (categories, redraw) { + this.update({ categories: categories }, redraw); + } + +}); + + +/** + * LineSeries object + */ +var LineSeries = extendClass(Series); +seriesTypes.line = LineSeries; + +/** + * Set the default options for area + */ +defaultPlotOptions.area = merge(defaultSeriesOptions, { + threshold: 0 + // trackByArea: false, + // lineColor: null, // overrides color, but lets fillColor be unaltered + // fillOpacity: 0.75, + // fillColor: null +}); + +/** + * AreaSeries object + */ +var AreaSeries = extendClass(Series, { + type: 'area', + /** + * For stacks, don't split segments on null values. Instead, draw null values with + * no marker. Also insert dummy points for any X position that exists in other series + * in the stack. + */ + getSegments: function () { + var segments = [], + segment = [], + keys = [], + xAxis = this.xAxis, + yAxis = this.yAxis, + stack = yAxis.stacks[this.stackKey], + pointMap = {}, + plotX, + plotY, + points = this.points, + connectNulls = this.options.connectNulls, + val, + i, + x; + + if (this.options.stacking && !this.cropped) { // cropped causes artefacts in Stock, and perf issue + // Create a map where we can quickly look up the points by their X value. + for (i = 0; i < points.length; i++) { + pointMap[points[i].x] = points[i]; + } + + // Sort the keys (#1651) + for (x in stack) { + if (stack[x].total !== null) { // nulled after switching between grouping and not (#1651, #2336) + keys.push(+x); + } + } + keys.sort(function (a, b) { + return a - b; + }); + + each(keys, function (x) { + if (connectNulls && (!pointMap[x] || pointMap[x].y === null)) { // #1836 + return; + + // The point exists, push it to the segment + } else if (pointMap[x]) { + segment.push(pointMap[x]); + + // There is no point for this X value in this series, so we + // insert a dummy point in order for the areas to be drawn + // correctly. + } else { + plotX = xAxis.translate(x); + val = stack[x].percent ? (stack[x].total ? stack[x].cum * 100 / stack[x].total : 0) : stack[x].cum; // #1991 + plotY = yAxis.toPixels(val, true); + segment.push({ + y: null, + plotX: plotX, + clientX: plotX, + plotY: plotY, + yBottom: plotY, + onMouseOver: noop + }); + } + }); + + if (segment.length) { + segments.push(segment); + } + + } else { + Series.prototype.getSegments.call(this); + segments = this.segments; + } + + this.segments = segments; + }, + + /** + * Extend the base Series getSegmentPath method by adding the path for the area. + * This path is pushed to the series.areaPath property. + */ + getSegmentPath: function (segment) { + + var segmentPath = Series.prototype.getSegmentPath.call(this, segment), // call base method + areaSegmentPath = [].concat(segmentPath), // work on a copy for the area path + i, + options = this.options, + segLength = segmentPath.length, + translatedThreshold = this.yAxis.getThreshold(options.threshold), // #2181 + yBottom; + + if (segLength === 3) { // for animation from 1 to two points + areaSegmentPath.push(L, segmentPath[1], segmentPath[2]); + } + if (options.stacking && !this.closedStacks) { + + // Follow stack back. Todo: implement areaspline. A general solution could be to + // reverse the entire graphPath of the previous series, though may be hard with + // splines and with series with different extremes + for (i = segment.length - 1; i >= 0; i--) { + + yBottom = pick(segment[i].yBottom, translatedThreshold); + + // step line? + if (i < segment.length - 1 && options.step) { + areaSegmentPath.push(segment[i + 1].plotX, yBottom); + } + + areaSegmentPath.push(segment[i].plotX, yBottom); + } + + } else { // follow zero line back + this.closeSegment(areaSegmentPath, segment, translatedThreshold); + } + this.areaPath = this.areaPath.concat(areaSegmentPath); + return segmentPath; + }, + + /** + * Extendable method to close the segment path of an area. This is overridden in polar + * charts. + */ + closeSegment: function (path, segment, translatedThreshold) { + path.push( + L, + segment[segment.length - 1].plotX, + translatedThreshold, + L, + segment[0].plotX, + translatedThreshold + ); + }, + + /** + * Draw the graph and the underlying area. This method calls the Series base + * function and adds the area. The areaPath is calculated in the getSegmentPath + * method called from Series.prototype.drawGraph. + */ + drawGraph: function () { + + // Define or reset areaPath + this.areaPath = []; + + // Call the base method + Series.prototype.drawGraph.apply(this); + + // Define local variables + var series = this, + areaPath = this.areaPath, + options = this.options, + negativeColor = options.negativeColor, + negativeFillColor = options.negativeFillColor, + props = [['area', this.color, options.fillColor]]; // area name, main color, fill color + + if (negativeColor || negativeFillColor) { + props.push(['areaNeg', negativeColor, negativeFillColor]); + } + + each(props, function (prop) { + var areaKey = prop[0], + area = series[areaKey]; + + // Create or update the area + if (area) { // update + area.animate({ d: areaPath }); + + } else { // create + series[areaKey] = series.chart.renderer.path(areaPath) + .attr({ + fill: pick( + prop[2], + Color(prop[1]).setOpacity(pick(options.fillOpacity, 0.75)).get() + ), + zIndex: 0 // #1069 + }).add(series.group); + } + }); + }, + + drawLegendSymbol: LegendSymbolMixin.drawRectangle +}); + +seriesTypes.area = AreaSeries; +/** + * Set the default options for spline + */ +defaultPlotOptions.spline = merge(defaultSeriesOptions); + +/** + * SplineSeries object + */ +var SplineSeries = extendClass(Series, { + type: 'spline', + + /** + * Get the spline segment from a given point's previous neighbour to the given point + */ + getPointSpline: function (segment, point, i) { + var smoothing = 1.5, // 1 means control points midway between points, 2 means 1/3 from the point, 3 is 1/4 etc + denom = smoothing + 1, + plotX = point.plotX, + plotY = point.plotY, + lastPoint = segment[i - 1], + nextPoint = segment[i + 1], + leftContX, + leftContY, + rightContX, + rightContY, + ret; + + // find control points + if (lastPoint && nextPoint) { + + var lastX = lastPoint.plotX, + lastY = lastPoint.plotY, + nextX = nextPoint.plotX, + nextY = nextPoint.plotY, + correction; + + leftContX = (smoothing * plotX + lastX) / denom; + leftContY = (smoothing * plotY + lastY) / denom; + rightContX = (smoothing * plotX + nextX) / denom; + rightContY = (smoothing * plotY + nextY) / denom; + + // have the two control points make a straight line through main point + correction = ((rightContY - leftContY) * (rightContX - plotX)) / + (rightContX - leftContX) + plotY - rightContY; + + leftContY += correction; + rightContY += correction; + + // to prevent false extremes, check that control points are between + // neighbouring points' y values + if (leftContY > lastY && leftContY > plotY) { + leftContY = mathMax(lastY, plotY); + rightContY = 2 * plotY - leftContY; // mirror of left control point + } else if (leftContY < lastY && leftContY < plotY) { + leftContY = mathMin(lastY, plotY); + rightContY = 2 * plotY - leftContY; + } + if (rightContY > nextY && rightContY > plotY) { + rightContY = mathMax(nextY, plotY); + leftContY = 2 * plotY - rightContY; + } else if (rightContY < nextY && rightContY < plotY) { + rightContY = mathMin(nextY, plotY); + leftContY = 2 * plotY - rightContY; + } + + // record for drawing in next point + point.rightContX = rightContX; + point.rightContY = rightContY; + + } + + // Visualize control points for debugging + /* + if (leftContX) { + this.chart.renderer.circle(leftContX + this.chart.plotLeft, leftContY + this.chart.plotTop, 2) + .attr({ + stroke: 'red', + 'stroke-width': 1, + fill: 'none' + }) + .add(); + this.chart.renderer.path(['M', leftContX + this.chart.plotLeft, leftContY + this.chart.plotTop, + 'L', plotX + this.chart.plotLeft, plotY + this.chart.plotTop]) + .attr({ + stroke: 'red', + 'stroke-width': 1 + }) + .add(); + this.chart.renderer.circle(rightContX + this.chart.plotLeft, rightContY + this.chart.plotTop, 2) + .attr({ + stroke: 'green', + 'stroke-width': 1, + fill: 'none' + }) + .add(); + this.chart.renderer.path(['M', rightContX + this.chart.plotLeft, rightContY + this.chart.plotTop, + 'L', plotX + this.chart.plotLeft, plotY + this.chart.plotTop]) + .attr({ + stroke: 'green', + 'stroke-width': 1 + }) + .add(); + } + */ + + // moveTo or lineTo + if (!i) { + ret = [M, plotX, plotY]; + } else { // curve from last point to this + ret = [ + 'C', + lastPoint.rightContX || lastPoint.plotX, + lastPoint.rightContY || lastPoint.plotY, + leftContX || plotX, + leftContY || plotY, + plotX, + plotY + ]; + lastPoint.rightContX = lastPoint.rightContY = null; // reset for updating series later + } + return ret; + } +}); +seriesTypes.spline = SplineSeries; + +/** + * Set the default options for areaspline + */ +defaultPlotOptions.areaspline = merge(defaultPlotOptions.area); + +/** + * AreaSplineSeries object + */ +var areaProto = AreaSeries.prototype, + AreaSplineSeries = extendClass(SplineSeries, { + type: 'areaspline', + closedStacks: true, // instead of following the previous graph back, follow the threshold back + + // Mix in methods from the area series + getSegmentPath: areaProto.getSegmentPath, + closeSegment: areaProto.closeSegment, + drawGraph: areaProto.drawGraph, + drawLegendSymbol: LegendSymbolMixin.drawRectangle + }); + +seriesTypes.areaspline = AreaSplineSeries; + +/** + * Set the default options for column + */ +defaultPlotOptions.column = merge(defaultSeriesOptions, { + borderColor: '#FFFFFF', + //borderWidth: 1, + borderRadius: 0, + //colorByPoint: undefined, + groupPadding: 0.2, + //grouping: true, + marker: null, // point options are specified in the base options + pointPadding: 0.1, + //pointWidth: null, + minPointLength: 0, + cropThreshold: 50, // when there are more points, they will not animate out of the chart on xAxis.setExtremes + pointRange: null, // null means auto, meaning 1 in a categorized axis and least distance between points if not categories + states: { + hover: { + brightness: 0.1, + shadow: false, + halo: false + }, + select: { + color: '#C0C0C0', + borderColor: '#000000', + shadow: false + } + }, + dataLabels: { + align: null, // auto + verticalAlign: null, // auto + y: null + }, + stickyTracking: false, + tooltip: { + distance: 6 + }, + threshold: 0 +}); + +/** + * ColumnSeries object + */ +var ColumnSeries = extendClass(Series, { + type: 'column', + pointAttrToOptions: { // mapping between SVG attributes and the corresponding options + stroke: 'borderColor', + fill: 'color', + r: 'borderRadius' + }, + cropShoulder: 0, + trackerGroups: ['group', 'dataLabelsGroup'], + negStacks: true, // use separate negative stacks, unlike area stacks where a negative + // point is substracted from previous (#1910) + + /** + * Initialize the series + */ + init: function () { + Series.prototype.init.apply(this, arguments); + + var series = this, + chart = series.chart; + + // if the series is added dynamically, force redraw of other + // series affected by a new column + if (chart.hasRendered) { + each(chart.series, function (otherSeries) { + if (otherSeries.type === series.type) { + otherSeries.isDirty = true; + } + }); + } + }, + + /** + * Return the width and x offset of the columns adjusted for grouping, groupPadding, pointPadding, + * pointWidth etc. + */ + getColumnMetrics: function () { + + var series = this, + options = series.options, + xAxis = series.xAxis, + yAxis = series.yAxis, + reversedXAxis = xAxis.reversed, + stackKey, + stackGroups = {}, + columnIndex, + columnCount = 0; + + // Get the total number of column type series. + // This is called on every series. Consider moving this logic to a + // chart.orderStacks() function and call it on init, addSeries and removeSeries + if (options.grouping === false) { + columnCount = 1; + } else { + each(series.chart.series, function (otherSeries) { + var otherOptions = otherSeries.options, + otherYAxis = otherSeries.yAxis; + if (otherSeries.type === series.type && otherSeries.visible && + yAxis.len === otherYAxis.len && yAxis.pos === otherYAxis.pos) { // #642, #2086 + if (otherOptions.stacking) { + stackKey = otherSeries.stackKey; + if (stackGroups[stackKey] === UNDEFINED) { + stackGroups[stackKey] = columnCount++; + } + columnIndex = stackGroups[stackKey]; + } else if (otherOptions.grouping !== false) { // #1162 + columnIndex = columnCount++; + } + otherSeries.columnIndex = columnIndex; + } + }); + } + + var categoryWidth = mathMin( + mathAbs(xAxis.transA) * (xAxis.ordinalSlope || options.pointRange || xAxis.closestPointRange || xAxis.tickInterval || 1), // #2610 + xAxis.len // #1535 + ), + groupPadding = categoryWidth * options.groupPadding, + groupWidth = categoryWidth - 2 * groupPadding, + pointOffsetWidth = groupWidth / columnCount, + optionPointWidth = options.pointWidth, + pointPadding = defined(optionPointWidth) ? (pointOffsetWidth - optionPointWidth) / 2 : + pointOffsetWidth * options.pointPadding, + pointWidth = pick(optionPointWidth, pointOffsetWidth - 2 * pointPadding), // exact point width, used in polar charts + colIndex = (reversedXAxis ? + columnCount - (series.columnIndex || 0) : // #1251 + series.columnIndex) || 0, + pointXOffset = pointPadding + (groupPadding + colIndex * + pointOffsetWidth - (categoryWidth / 2)) * + (reversedXAxis ? -1 : 1); + + // Save it for reading in linked series (Error bars particularly) + return (series.columnMetrics = { + width: pointWidth, + offset: pointXOffset + }); + + }, + + /** + * Translate each point to the plot area coordinate system and find shape positions + */ + translate: function () { + var series = this, + chart = series.chart, + options = series.options, + borderWidth = series.borderWidth = pick( + options.borderWidth, + series.activePointCount > 0.5 * series.xAxis.len ? 0 : 1 + ), + yAxis = series.yAxis, + threshold = options.threshold, + translatedThreshold = series.translatedThreshold = yAxis.getThreshold(threshold), + minPointLength = pick(options.minPointLength, 5), + metrics = series.getColumnMetrics(), + pointWidth = metrics.width, + seriesBarW = series.barW = mathCeil(mathMax(pointWidth, 1 + 2 * borderWidth)), // rounded and postprocessed for border width + pointXOffset = series.pointXOffset = metrics.offset, + xCrisp = -(borderWidth % 2 ? 0.5 : 0), + yCrisp = borderWidth % 2 ? 0.5 : 1; + + if (chart.renderer.isVML && chart.inverted) { + yCrisp += 1; + } + + Series.prototype.translate.apply(series); + + // record the new values + each(series.points, function (point) { + var yBottom = pick(point.yBottom, translatedThreshold), + plotY = mathMin(mathMax(-999 - yBottom, point.plotY), yAxis.len + 999 + yBottom), // Don't draw too far outside plot area (#1303, #2241) + barX = point.plotX + pointXOffset, + barW = seriesBarW, + barY = mathMin(plotY, yBottom), + right, + bottom, + fromTop, + fromLeft, + barH = mathMax(plotY, yBottom) - barY; + + // Handle options.minPointLength + if (mathAbs(barH) < minPointLength) { + if (minPointLength) { + barH = minPointLength; + barY = + mathRound(mathAbs(barY - translatedThreshold) > minPointLength ? // stacked + yBottom - minPointLength : // keep position + translatedThreshold - (yAxis.translate(point.y, 0, 1, 0, 1) <= translatedThreshold ? minPointLength : 0)); // use exact yAxis.translation (#1485) + } + } + + // Cache for access in polar + point.barX = barX; + point.pointWidth = pointWidth; + + // Fix the tooltip on center of grouped columns (#1216) + point.tooltipPos = chart.inverted ? [yAxis.len - plotY, series.xAxis.len - barX - barW / 2] : [barX + barW / 2, plotY]; + + // Round off to obtain crisp edges + fromLeft = mathAbs(barX) < 0.5; + right = mathRound(barX + barW) + xCrisp; + barX = mathRound(barX) + xCrisp; + barW = right - barX; + + fromTop = mathAbs(barY) < 0.5; + bottom = mathRound(barY + barH) + yCrisp; + barY = mathRound(barY) + yCrisp; + barH = bottom - barY; + + // Top and left edges are exceptions + if (fromLeft) { + barX += 1; + barW -= 1; + } + if (fromTop) { + barY -= 1; + barH += 1; + } + + // Register shape type and arguments to be used in drawPoints + point.shapeType = 'rect'; + point.shapeArgs = { + x: barX, + y: barY, + width: barW, + height: barH + }; + }); + + }, + + getSymbol: noop, + + /** + * Use a solid rectangle like the area series types + */ + drawLegendSymbol: LegendSymbolMixin.drawRectangle, + + + /** + * Columns have no graph + */ + drawGraph: noop, + + /** + * Draw the columns. For bars, the series.group is rotated, so the same coordinates + * apply for columns and bars. This method is inherited by scatter series. + * + */ + drawPoints: function () { + var series = this, + chart = this.chart, + options = series.options, + renderer = chart.renderer, + animationLimit = options.animationLimit || 250, + shapeArgs, + pointAttr, + borderAttr; + + // draw the columns + each(series.points, function (point) { + var plotY = point.plotY, + graphic = point.graphic; + + if (plotY !== UNDEFINED && !isNaN(plotY) && point.y !== null) { + shapeArgs = point.shapeArgs; + borderAttr = defined(series.borderWidth) ? { + 'stroke-width': series.borderWidth + } : {}; + pointAttr = point.pointAttr[point.selected ? SELECT_STATE : NORMAL_STATE] || series.pointAttr[NORMAL_STATE]; + if (graphic) { // update + stop(graphic); + graphic.attr(borderAttr)[chart.pointCount < animationLimit ? 'animate' : 'attr'](merge(shapeArgs)); + + } else { + point.graphic = graphic = renderer[point.shapeType](shapeArgs) + .attr(pointAttr) + .attr(borderAttr) + .add(series.group) + .shadow(options.shadow, null, options.stacking && !options.borderRadius); + } + + } else if (graphic) { + point.graphic = graphic.destroy(); // #1269 + } + }); + }, + + /** + * Animate the column heights one by one from zero + * @param {Boolean} init Whether to initialize the animation or run it + */ + animate: function (init) { + var series = this, + yAxis = this.yAxis, + options = series.options, + inverted = this.chart.inverted, + attr = {}, + translatedThreshold; + + if (hasSVG) { // VML is too slow anyway + if (init) { + attr.scaleY = 0.001; + translatedThreshold = mathMin(yAxis.pos + yAxis.len, mathMax(yAxis.pos, yAxis.toPixels(options.threshold))); + if (inverted) { + attr.translateX = translatedThreshold - yAxis.len; + } else { + attr.translateY = translatedThreshold; + } + series.group.attr(attr); + + } else { // run the animation + + attr.scaleY = 1; + attr[inverted ? 'translateX' : 'translateY'] = yAxis.pos; + series.group.animate(attr, series.options.animation); + + // delete this function to allow it only once + series.animate = null; + } + } + }, + + /** + * Remove this series from the chart + */ + remove: function () { + var series = this, + chart = series.chart; + + // column and bar series affects other series of the same type + // as they are either stacked or grouped + if (chart.hasRendered) { + each(chart.series, function (otherSeries) { + if (otherSeries.type === series.type) { + otherSeries.isDirty = true; + } + }); + } + + Series.prototype.remove.apply(series, arguments); + } +}); +seriesTypes.column = ColumnSeries; +/** + * Set the default options for bar + */ +defaultPlotOptions.bar = merge(defaultPlotOptions.column); +/** + * The Bar series class + */ +var BarSeries = extendClass(ColumnSeries, { + type: 'bar', + inverted: true +}); +seriesTypes.bar = BarSeries; + +/** + * Set the default options for scatter + */ +defaultPlotOptions.scatter = merge(defaultSeriesOptions, { + lineWidth: 0, + tooltip: { + headerFormat: '\u25CF {series.name}
              ', // docs + pointFormat: 'x: {point.x}
              y: {point.y}
              ' + }, + stickyTracking: false +}); + +/** + * The scatter series class + */ +var ScatterSeries = extendClass(Series, { + type: 'scatter', + sorted: false, + requireSorting: false, + noSharedTooltip: true, + trackerGroups: ['markerGroup'], + takeOrdinalPosition: false, // #2342 + singularTooltips: true, + drawGraph: function () { + if (this.options.lineWidth) { + Series.prototype.drawGraph.call(this); + } + } +}); + +seriesTypes.scatter = ScatterSeries; + +/** + * Set the default options for pie + */ +defaultPlotOptions.pie = merge(defaultSeriesOptions, { + borderColor: '#FFFFFF', + borderWidth: 1, + center: [null, null], + clip: false, + colorByPoint: true, // always true for pies + dataLabels: { + // align: null, + // connectorWidth: 1, + // connectorColor: point.color, + // connectorPadding: 5, + distance: 30, + enabled: true, + formatter: function () { + return this.point.name; + } + // softConnector: true, + //y: 0 + }, + ignoreHiddenPoint: true, + //innerSize: 0, + legendType: 'point', + marker: null, // point options are specified in the base options + size: null, + showInLegend: false, + slicedOffset: 10, + states: { + hover: { + brightness: 0.1, + shadow: false + } + }, + stickyTracking: false, + tooltip: { + followPointer: true + } +}); + +/** + * Extended point object for pies + */ +var PiePoint = extendClass(Point, { + /** + * Initiate the pie slice + */ + init: function () { + + Point.prototype.init.apply(this, arguments); + + var point = this, + toggleSlice; + + // Disallow negative values (#1530) + if (point.y < 0) { + point.y = null; + } + + //visible: options.visible !== false, + extend(point, { + visible: point.visible !== false, + name: pick(point.name, 'Slice') + }); + + // add event listener for select + toggleSlice = function (e) { + point.slice(e.type === 'select'); + }; + addEvent(point, 'select', toggleSlice); + addEvent(point, 'unselect', toggleSlice); + + return point; + }, + + /** + * Toggle the visibility of the pie slice + * @param {Boolean} vis Whether to show the slice or not. If undefined, the + * visibility is toggled + */ + setVisible: function (vis) { + var point = this, + series = point.series, + chart = series.chart; + + // if called without an argument, toggle visibility + point.visible = point.options.visible = vis = vis === UNDEFINED ? !point.visible : vis; + series.options.data[inArray(point, series.data)] = point.options; // update userOptions.data + + // Show and hide associated elements + each(['graphic', 'dataLabel', 'connector', 'shadowGroup'], function (key) { + if (point[key]) { + point[key][vis ? 'show' : 'hide'](true); + } + }); + + if (point.legendItem) { + chart.legend.colorizeItem(point, vis); + } + + // Handle ignore hidden slices + if (!series.isDirty && series.options.ignoreHiddenPoint) { + series.isDirty = true; + chart.redraw(); + } + }, + + /** + * Set or toggle whether the slice is cut out from the pie + * @param {Boolean} sliced When undefined, the slice state is toggled + * @param {Boolean} redraw Whether to redraw the chart. True by default. + */ + slice: function (sliced, redraw, animation) { + var point = this, + series = point.series, + chart = series.chart, + translation; + + setAnimation(animation, chart); + + // redraw is true by default + redraw = pick(redraw, true); + + // if called without an argument, toggle + point.sliced = point.options.sliced = sliced = defined(sliced) ? sliced : !point.sliced; + series.options.data[inArray(point, series.data)] = point.options; // update userOptions.data + + translation = sliced ? point.slicedTranslation : { + translateX: 0, + translateY: 0 + }; + + point.graphic.animate(translation); + + if (point.shadowGroup) { + point.shadowGroup.animate(translation); + } + + }, + + haloPath: function (size) { + var shapeArgs = this.shapeArgs, + chart = this.series.chart; + + return this.series.chart.renderer.symbols.arc(chart.plotLeft + shapeArgs.x, chart.plotTop + shapeArgs.y, shapeArgs.r + size, shapeArgs.r + size, { + innerR: this.shapeArgs.r, + start: shapeArgs.start, + end: shapeArgs.end + }); + } +}); + +/** + * The Pie series class + */ +var PieSeries = { + type: 'pie', + isCartesian: false, + pointClass: PiePoint, + requireSorting: false, + noSharedTooltip: true, + trackerGroups: ['group', 'dataLabelsGroup'], + axisTypes: [], + pointAttrToOptions: { // mapping between SVG attributes and the corresponding options + stroke: 'borderColor', + 'stroke-width': 'borderWidth', + fill: 'color' + }, + singularTooltips: true, + + /** + * Pies have one color each point + */ + getColor: noop, + + /** + * Animate the pies in + */ + animate: function (init) { + var series = this, + points = series.points, + startAngleRad = series.startAngleRad; + + if (!init) { + each(points, function (point) { + var graphic = point.graphic, + args = point.shapeArgs; + + if (graphic) { + // start values + graphic.attr({ + r: series.center[3] / 2, // animate from inner radius (#779) + start: startAngleRad, + end: startAngleRad + }); + + // animate + graphic.animate({ + r: args.r, + start: args.start, + end: args.end + }, series.options.animation); + } + }); + + // delete this function to allow it only once + series.animate = null; + } + }, + + /** + * Extend the basic setData method by running processData and generatePoints immediately, + * in order to access the points from the legend. + */ + setData: function (data, redraw, animation, updatePoints) { + Series.prototype.setData.call(this, data, false, animation, updatePoints); + this.processData(); + this.generatePoints(); + if (pick(redraw, true)) { + this.chart.redraw(animation); + } + }, + + /** + * Extend the generatePoints method by adding total and percentage properties to each point + */ + generatePoints: function () { + var i, + total = 0, + points, + len, + point, + ignoreHiddenPoint = this.options.ignoreHiddenPoint; + + Series.prototype.generatePoints.call(this); + + // Populate local vars + points = this.points; + len = points.length; + + // Get the total sum + for (i = 0; i < len; i++) { + point = points[i]; + total += (ignoreHiddenPoint && !point.visible) ? 0 : point.y; + } + this.total = total; + + // Set each point's properties + for (i = 0; i < len; i++) { + point = points[i]; + point.percentage = total > 0 ? (point.y / total) * 100 : 0; + point.total = total; + } + + }, + + /** + * Do translation for pie slices + */ + translate: function (positions) { + this.generatePoints(); + + var series = this, + cumulative = 0, + precision = 1000, // issue #172 + options = series.options, + slicedOffset = options.slicedOffset, + connectorOffset = slicedOffset + options.borderWidth, + start, + end, + angle, + startAngle = options.startAngle || 0, + startAngleRad = series.startAngleRad = mathPI / 180 * (startAngle - 90), + endAngleRad = series.endAngleRad = mathPI / 180 * ((pick(options.endAngle, startAngle + 360)) - 90), + circ = endAngleRad - startAngleRad, //2 * mathPI, + points = series.points, + radiusX, // the x component of the radius vector for a given point + radiusY, + labelDistance = options.dataLabels.distance, + ignoreHiddenPoint = options.ignoreHiddenPoint, + i, + len = points.length, + point; + + // Get positions - either an integer or a percentage string must be given. + // If positions are passed as a parameter, we're in a recursive loop for adjusting + // space for data labels. + if (!positions) { + series.center = positions = series.getCenter(); + } + + // utility for getting the x value from a given y, used for anticollision logic in data labels + series.getX = function (y, left) { + + angle = math.asin(mathMin((y - positions[1]) / (positions[2] / 2 + labelDistance), 1)); + + return positions[0] + + (left ? -1 : 1) * + (mathCos(angle) * (positions[2] / 2 + labelDistance)); + }; + + // Calculate the geometry for each point + for (i = 0; i < len; i++) { + + point = points[i]; + + // set start and end angle + start = startAngleRad + (cumulative * circ); + if (!ignoreHiddenPoint || point.visible) { + cumulative += point.percentage / 100; + } + end = startAngleRad + (cumulative * circ); + + // set the shape + point.shapeType = 'arc'; + point.shapeArgs = { + x: positions[0], + y: positions[1], + r: positions[2] / 2, + innerR: positions[3] / 2, + start: mathRound(start * precision) / precision, + end: mathRound(end * precision) / precision + }; + + // The angle must stay within -90 and 270 (#2645) + angle = (end + start) / 2; + if (angle > 1.5 * mathPI) { + angle -= 2 * mathPI; + } else if (angle < -mathPI / 2) { + angle += 2 * mathPI; + } + + // Center for the sliced out slice + point.slicedTranslation = { + translateX: mathRound(mathCos(angle) * slicedOffset), + translateY: mathRound(mathSin(angle) * slicedOffset) + }; + + // set the anchor point for tooltips + radiusX = mathCos(angle) * positions[2] / 2; + radiusY = mathSin(angle) * positions[2] / 2; + point.tooltipPos = [ + positions[0] + radiusX * 0.7, + positions[1] + radiusY * 0.7 + ]; + + point.half = angle < -mathPI / 2 || angle > mathPI / 2 ? 1 : 0; + point.angle = angle; + + // set the anchor point for data labels + connectorOffset = mathMin(connectorOffset, labelDistance / 2); // #1678 + point.labelPos = [ + positions[0] + radiusX + mathCos(angle) * labelDistance, // first break of connector + positions[1] + radiusY + mathSin(angle) * labelDistance, // a/a + positions[0] + radiusX + mathCos(angle) * connectorOffset, // second break, right outside pie + positions[1] + radiusY + mathSin(angle) * connectorOffset, // a/a + positions[0] + radiusX, // landing point for connector + positions[1] + radiusY, // a/a + labelDistance < 0 ? // alignment + 'center' : + point.half ? 'right' : 'left', // alignment + angle // center angle + ]; + + } + }, + + drawGraph: null, + + /** + * Draw the data points + */ + drawPoints: function () { + var series = this, + chart = series.chart, + renderer = chart.renderer, + groupTranslation, + //center, + graphic, + //group, + shadow = series.options.shadow, + shadowGroup, + shapeArgs; + + if (shadow && !series.shadowGroup) { + series.shadowGroup = renderer.g('shadow') + .add(series.group); + } + + // draw the slices + each(series.points, function (point) { + graphic = point.graphic; + shapeArgs = point.shapeArgs; + shadowGroup = point.shadowGroup; + + // put the shadow behind all points + if (shadow && !shadowGroup) { + shadowGroup = point.shadowGroup = renderer.g('shadow') + .add(series.shadowGroup); + } + + // if the point is sliced, use special translation, else use plot area traslation + groupTranslation = point.sliced ? point.slicedTranslation : { + translateX: 0, + translateY: 0 + }; + + //group.translate(groupTranslation[0], groupTranslation[1]); + if (shadowGroup) { + shadowGroup.attr(groupTranslation); + } + + // draw the slice + if (graphic) { + graphic.animate(extend(shapeArgs, groupTranslation)); + } else { + point.graphic = graphic = renderer[point.shapeType](shapeArgs) + .setRadialReference(series.center) + .attr( + point.pointAttr[point.selected ? SELECT_STATE : NORMAL_STATE] + ) + .attr({ + 'stroke-linejoin': 'round' + //zIndex: 1 // #2722 (reversed) + }) + .attr(groupTranslation) + .add(series.group) + .shadow(shadow, shadowGroup); + } + + // detect point specific visibility (#2430) + if (point.visible !== undefined) { + point.setVisible(point.visible); + } + + }); + + }, + + /** + * Utility for sorting data labels + */ + sortByAngle: function (points, sign) { + points.sort(function (a, b) { + return a.angle !== undefined && (b.angle - a.angle) * sign; + }); + }, + + /** + * Use a simple symbol from LegendSymbolMixin + */ + drawLegendSymbol: LegendSymbolMixin.drawRectangle, + + /** + * Use the getCenter method from drawLegendSymbol + */ + getCenter: CenteredSeriesMixin.getCenter, + + /** + * Pies don't have point marker symbols + */ + getSymbol: noop + +}; +PieSeries = extendClass(Series, PieSeries); +seriesTypes.pie = PieSeries; + +/** + * Draw the data labels + */ +Series.prototype.drawDataLabels = function () { + + var series = this, + seriesOptions = series.options, + cursor = seriesOptions.cursor, + options = seriesOptions.dataLabels, + points = series.points, + pointOptions, + generalOptions, + str, + dataLabelsGroup; + + if (options.enabled || series._hasPointLabels) { + + // Process default alignment of data labels for columns + if (series.dlProcessOptions) { + series.dlProcessOptions(options); + } + + // Create a separate group for the data labels to avoid rotation + dataLabelsGroup = series.plotGroup( + 'dataLabelsGroup', + 'data-labels', + HIDDEN, + options.zIndex || 6 + ); + + if (!series.hasRendered && pick(options.defer, true)) { + dataLabelsGroup.attr({ opacity: 0 }); + addEvent(series, 'afterAnimate', function () { + series.dataLabelsGroup.show()[seriesOptions.animation ? 'animate' : 'attr']({ opacity: 1 }, { duration: 200 }); + }); + } + + // Make the labels for each point + generalOptions = options; + each(points, function (point) { + + var enabled, + dataLabel = point.dataLabel, + labelConfig, + attr, + name, + rotation, + connector = point.connector, + isNew = true; + + // Determine if each data label is enabled + pointOptions = point.options && point.options.dataLabels; + enabled = pick(pointOptions && pointOptions.enabled, generalOptions.enabled); // #2282 + + + // If the point is outside the plot area, destroy it. #678, #820 + if (dataLabel && !enabled) { + point.dataLabel = dataLabel.destroy(); + + // Individual labels are disabled if the are explicitly disabled + // in the point options, or if they fall outside the plot area. + } else if (enabled) { + + // Create individual options structure that can be extended without + // affecting others + options = merge(generalOptions, pointOptions); + + rotation = options.rotation; + + // Get the string + labelConfig = point.getLabelConfig(); + str = options.format ? + format(options.format, labelConfig) : + options.formatter.call(labelConfig, options); + + // Determine the color + options.style.color = pick(options.color, options.style.color, series.color, 'black'); + + + // update existing label + if (dataLabel) { + + if (defined(str)) { + dataLabel + .attr({ + text: str + }); + isNew = false; + + } else { // #1437 - the label is shown conditionally + point.dataLabel = dataLabel = dataLabel.destroy(); + if (connector) { + point.connector = connector.destroy(); + } + } + + // create new label + } else if (defined(str)) { + attr = { + //align: align, + fill: options.backgroundColor, + stroke: options.borderColor, + 'stroke-width': options.borderWidth, + r: options.borderRadius || 0, + rotation: rotation, + padding: options.padding, + zIndex: 1 + }; + // Remove unused attributes (#947) + for (name in attr) { + if (attr[name] === UNDEFINED) { + delete attr[name]; + } + } + + dataLabel = point.dataLabel = series.chart.renderer[rotation ? 'text' : 'label']( // labels don't support rotation + str, + 0, + -999, + null, + null, + null, + options.useHTML + ) + .attr(attr) + .css(extend(options.style, cursor && { cursor: cursor })) + .add(dataLabelsGroup) + .shadow(options.shadow); + + } + + if (dataLabel) { + // Now the data label is created and placed at 0,0, so we need to align it + series.alignDataLabel(point, dataLabel, options, null, isNew); + } + } + }); + } +}; + +/** + * Align each individual data label + */ +Series.prototype.alignDataLabel = function (point, dataLabel, options, alignTo, isNew) { + var chart = this.chart, + inverted = chart.inverted, + plotX = pick(point.plotX, -999), + plotY = pick(point.plotY, -999), + bBox = dataLabel.getBBox(), + // Math.round for rounding errors (#2683), alignTo to allow column labels (#2700) + visible = this.visible && (point.series.forceDL || chart.isInsidePlot(plotX, mathRound(plotY), inverted) || + (alignTo && chart.isInsidePlot(plotX, inverted ? alignTo.x + 1 : alignTo.y + alignTo.height - 1, inverted))), + alignAttr; // the final position; + + if (visible) { + + // The alignment box is a singular point + alignTo = extend({ + x: inverted ? chart.plotWidth - plotY : plotX, + y: mathRound(inverted ? chart.plotHeight - plotX : plotY), + width: 0, + height: 0 + }, alignTo); + + // Add the text size for alignment calculation + extend(options, { + width: bBox.width, + height: bBox.height + }); + + // Allow a hook for changing alignment in the last moment, then do the alignment + if (options.rotation) { // Fancy box alignment isn't supported for rotated text + alignAttr = { + align: options.align, + x: alignTo.x + options.x + alignTo.width / 2, + y: alignTo.y + options.y + alignTo.height / 2 + }; + dataLabel[isNew ? 'attr' : 'animate'](alignAttr); + } else { + dataLabel.align(options, null, alignTo); + alignAttr = dataLabel.alignAttr; + + // Handle justify or crop + if (pick(options.overflow, 'justify') === 'justify') { + this.justifyDataLabel(dataLabel, options, alignAttr, bBox, alignTo, isNew); + + } else if (pick(options.crop, true)) { + // Now check that the data label is within the plot area + visible = chart.isInsidePlot(alignAttr.x, alignAttr.y) && chart.isInsidePlot(alignAttr.x + bBox.width, alignAttr.y + bBox.height); + + } + } + } + + // Show or hide based on the final aligned position + if (!visible) { + dataLabel.attr({ y: -999 }); + dataLabel.placed = false; // don't animate back in + } + +}; + +/** + * If data labels fall partly outside the plot area, align them back in, in a way that + * doesn't hide the point. + */ +Series.prototype.justifyDataLabel = function (dataLabel, options, alignAttr, bBox, alignTo, isNew) { + var chart = this.chart, + align = options.align, + verticalAlign = options.verticalAlign, + off, + justified; + + // Off left + off = alignAttr.x; + if (off < 0) { + if (align === 'right') { + options.align = 'left'; + } else { + options.x = -off; + } + justified = true; + } + + // Off right + off = alignAttr.x + bBox.width; + if (off > chart.plotWidth) { + if (align === 'left') { + options.align = 'right'; + } else { + options.x = chart.plotWidth - off; + } + justified = true; + } + + // Off top + off = alignAttr.y; + if (off < 0) { + if (verticalAlign === 'bottom') { + options.verticalAlign = 'top'; + } else { + options.y = -off; + } + justified = true; + } + + // Off bottom + off = alignAttr.y + bBox.height; + if (off > chart.plotHeight) { + if (verticalAlign === 'top') { + options.verticalAlign = 'bottom'; + } else { + options.y = chart.plotHeight - off; + } + justified = true; + } + + if (justified) { + dataLabel.placed = !isNew; + dataLabel.align(options, null, alignTo); + } +}; + +/** + * Override the base drawDataLabels method by pie specific functionality + */ +if (seriesTypes.pie) { + seriesTypes.pie.prototype.drawDataLabels = function () { + var series = this, + data = series.data, + point, + chart = series.chart, + options = series.options.dataLabels, + connectorPadding = pick(options.connectorPadding, 10), + connectorWidth = pick(options.connectorWidth, 1), + plotWidth = chart.plotWidth, + plotHeight = chart.plotHeight, + connector, + connectorPath, + softConnector = pick(options.softConnector, true), + distanceOption = options.distance, + seriesCenter = series.center, + radius = seriesCenter[2] / 2, + centerY = seriesCenter[1], + outside = distanceOption > 0, + dataLabel, + dataLabelWidth, + labelPos, + labelHeight, + halves = [// divide the points into right and left halves for anti collision + [], // right + [] // left + ], + x, + y, + visibility, + rankArr, + i, + j, + overflow = [0, 0, 0, 0], // top, right, bottom, left + sort = function (a, b) { + return b.y - a.y; + }; + + // get out if not enabled + if (!series.visible || (!options.enabled && !series._hasPointLabels)) { + return; + } + + // run parent method + Series.prototype.drawDataLabels.apply(series); + + // arrange points for detection collision + each(data, function (point) { + if (point.dataLabel && point.visible) { // #407, #2510 + halves[point.half].push(point); + } + }); + + // assume equal label heights + i = 0; + while (!labelHeight && data[i]) { // #1569 + labelHeight = data[i] && data[i].dataLabel && (data[i].dataLabel.getBBox().height || 21); // 21 is for #968 + i++; + } + + /* Loop over the points in each half, starting from the top and bottom + * of the pie to detect overlapping labels. + */ + i = 2; + while (i--) { + + var slots = [], + slotsLength, + usedSlots = [], + points = halves[i], + pos, + length = points.length, + slotIndex; + + // Sort by angle + series.sortByAngle(points, i - 0.5); + + // Only do anti-collision when we are outside the pie and have connectors (#856) + if (distanceOption > 0) { + + // build the slots + for (pos = centerY - radius - distanceOption; pos <= centerY + radius + distanceOption; pos += labelHeight) { + slots.push(pos); + + // visualize the slot + /* + var slotX = series.getX(pos, i) + chart.plotLeft - (i ? 100 : 0), + slotY = pos + chart.plotTop; + if (!isNaN(slotX)) { + chart.renderer.rect(slotX, slotY - 7, 100, labelHeight, 1) + .attr({ + 'stroke-width': 1, + stroke: 'silver' + }) + .add(); + chart.renderer.text('Slot '+ (slots.length - 1), slotX, slotY + 4) + .attr({ + fill: 'silver' + }).add(); + } + */ + } + slotsLength = slots.length; + + // if there are more values than available slots, remove lowest values + if (length > slotsLength) { + // create an array for sorting and ranking the points within each quarter + rankArr = [].concat(points); + rankArr.sort(sort); + j = length; + while (j--) { + rankArr[j].rank = j; + } + j = length; + while (j--) { + if (points[j].rank >= slotsLength) { + points.splice(j, 1); + } + } + length = points.length; + } + + // The label goes to the nearest open slot, but not closer to the edge than + // the label's index. + for (j = 0; j < length; j++) { + + point = points[j]; + labelPos = point.labelPos; + + var closest = 9999, + distance, + slotI; + + // find the closest slot index + for (slotI = 0; slotI < slotsLength; slotI++) { + distance = mathAbs(slots[slotI] - labelPos[1]); + if (distance < closest) { + closest = distance; + slotIndex = slotI; + } + } + + // if that slot index is closer to the edges of the slots, move it + // to the closest appropriate slot + if (slotIndex < j && slots[j] !== null) { // cluster at the top + slotIndex = j; + } else if (slotsLength < length - j + slotIndex && slots[j] !== null) { // cluster at the bottom + slotIndex = slotsLength - length + j; + while (slots[slotIndex] === null) { // make sure it is not taken + slotIndex++; + } + } else { + // Slot is taken, find next free slot below. In the next run, the next slice will find the + // slot above these, because it is the closest one + while (slots[slotIndex] === null) { // make sure it is not taken + slotIndex++; + } + } + + usedSlots.push({ i: slotIndex, y: slots[slotIndex] }); + slots[slotIndex] = null; // mark as taken + } + // sort them in order to fill in from the top + usedSlots.sort(sort); + } + + // now the used slots are sorted, fill them up sequentially + for (j = 0; j < length; j++) { + + var slot, naturalY; + + point = points[j]; + labelPos = point.labelPos; + dataLabel = point.dataLabel; + visibility = point.visible === false ? HIDDEN : VISIBLE; + naturalY = labelPos[1]; + + if (distanceOption > 0) { + slot = usedSlots.pop(); + slotIndex = slot.i; + + // if the slot next to currrent slot is free, the y value is allowed + // to fall back to the natural position + y = slot.y; + if ((naturalY > y && slots[slotIndex + 1] !== null) || + (naturalY < y && slots[slotIndex - 1] !== null)) { + y = naturalY; + } + + } else { + y = naturalY; + } + + // get the x - use the natural x position for first and last slot, to prevent the top + // and botton slice connectors from touching each other on either side + x = options.justify ? + seriesCenter[0] + (i ? -1 : 1) * (radius + distanceOption) : + series.getX(slotIndex === 0 || slotIndex === slots.length - 1 ? naturalY : y, i); + + + // Record the placement and visibility + dataLabel._attr = { + visibility: visibility, + align: labelPos[6] + }; + dataLabel._pos = { + x: x + options.x + + ({ left: connectorPadding, right: -connectorPadding }[labelPos[6]] || 0), + y: y + options.y - 10 // 10 is for the baseline (label vs text) + }; + dataLabel.connX = x; + dataLabel.connY = y; + + + // Detect overflowing data labels + if (this.options.size === null) { + dataLabelWidth = dataLabel.width; + // Overflow left + if (x - dataLabelWidth < connectorPadding) { + overflow[3] = mathMax(mathRound(dataLabelWidth - x + connectorPadding), overflow[3]); + + // Overflow right + } else if (x + dataLabelWidth > plotWidth - connectorPadding) { + overflow[1] = mathMax(mathRound(x + dataLabelWidth - plotWidth + connectorPadding), overflow[1]); + } + + // Overflow top + if (y - labelHeight / 2 < 0) { + overflow[0] = mathMax(mathRound(-y + labelHeight / 2), overflow[0]); + + // Overflow left + } else if (y + labelHeight / 2 > plotHeight) { + overflow[2] = mathMax(mathRound(y + labelHeight / 2 - plotHeight), overflow[2]); + } + } + } // for each point + } // for each half + + // Do not apply the final placement and draw the connectors until we have verified + // that labels are not spilling over. + if (arrayMax(overflow) === 0 || this.verifyDataLabelOverflow(overflow)) { + + // Place the labels in the final position + this.placeDataLabels(); + + // Draw the connectors + if (outside && connectorWidth) { + each(this.points, function (point) { + connector = point.connector; + labelPos = point.labelPos; + dataLabel = point.dataLabel; + + if (dataLabel && dataLabel._pos) { + visibility = dataLabel._attr.visibility; + x = dataLabel.connX; + y = dataLabel.connY; + connectorPath = softConnector ? [ + M, + x + (labelPos[6] === 'left' ? 5 : -5), y, // end of the string at the label + 'C', + x, y, // first break, next to the label + 2 * labelPos[2] - labelPos[4], 2 * labelPos[3] - labelPos[5], + labelPos[2], labelPos[3], // second break + L, + labelPos[4], labelPos[5] // base + ] : [ + M, + x + (labelPos[6] === 'left' ? 5 : -5), y, // end of the string at the label + L, + labelPos[2], labelPos[3], // second break + L, + labelPos[4], labelPos[5] // base + ]; + + if (connector) { + connector.animate({ d: connectorPath }); + connector.attr('visibility', visibility); + + } else { + point.connector = connector = series.chart.renderer.path(connectorPath).attr({ + 'stroke-width': connectorWidth, + stroke: options.connectorColor || point.color || '#606060', + visibility: visibility + //zIndex: 0 // #2722 (reversed) + }) + .add(series.dataLabelsGroup); + } + } else if (connector) { + point.connector = connector.destroy(); + } + }); + } + } + }; + /** + * Perform the final placement of the data labels after we have verified that they + * fall within the plot area. + */ + seriesTypes.pie.prototype.placeDataLabels = function () { + each(this.points, function (point) { + var dataLabel = point.dataLabel, + _pos; + + if (dataLabel) { + _pos = dataLabel._pos; + if (_pos) { + dataLabel.attr(dataLabel._attr); + dataLabel[dataLabel.moved ? 'animate' : 'attr'](_pos); + dataLabel.moved = true; + } else if (dataLabel) { + dataLabel.attr({ y: -999 }); + } + } + }); + }; + + seriesTypes.pie.prototype.alignDataLabel = noop; + + /** + * Verify whether the data labels are allowed to draw, or we should run more translation and data + * label positioning to keep them inside the plot area. Returns true when data labels are ready + * to draw. + */ + seriesTypes.pie.prototype.verifyDataLabelOverflow = function (overflow) { + + var center = this.center, + options = this.options, + centerOption = options.center, + minSize = options.minSize || 80, + newSize = minSize, + ret; + + // Handle horizontal size and center + if (centerOption[0] !== null) { // Fixed center + newSize = mathMax(center[2] - mathMax(overflow[1], overflow[3]), minSize); + + } else { // Auto center + newSize = mathMax( + center[2] - overflow[1] - overflow[3], // horizontal overflow + minSize + ); + center[0] += (overflow[3] - overflow[1]) / 2; // horizontal center + } + + // Handle vertical size and center + if (centerOption[1] !== null) { // Fixed center + newSize = mathMax(mathMin(newSize, center[2] - mathMax(overflow[0], overflow[2])), minSize); + + } else { // Auto center + newSize = mathMax( + mathMin( + newSize, + center[2] - overflow[0] - overflow[2] // vertical overflow + ), + minSize + ); + center[1] += (overflow[0] - overflow[2]) / 2; // vertical center + } + + // If the size must be decreased, we need to run translate and drawDataLabels again + if (newSize < center[2]) { + center[2] = newSize; + this.translate(center); + each(this.points, function (point) { + if (point.dataLabel) { + point.dataLabel._pos = null; // reset + } + }); + + if (this.drawDataLabels) { + this.drawDataLabels(); + } + // Else, return true to indicate that the pie and its labels is within the plot area + } else { + ret = true; + } + return ret; + }; +} + +if (seriesTypes.column) { + + /** + * Override the basic data label alignment by adjusting for the position of the column + */ + seriesTypes.column.prototype.alignDataLabel = function (point, dataLabel, options, alignTo, isNew) { + var chart = this.chart, + inverted = chart.inverted, + dlBox = point.dlBox || point.shapeArgs, // data label box for alignment + below = point.below || (point.plotY > pick(this.translatedThreshold, chart.plotSizeY)), + inside = pick(options.inside, !!this.options.stacking); // draw it inside the box? + + // Align to the column itself, or the top of it + if (dlBox) { // Area range uses this method but not alignTo + alignTo = merge(dlBox); + + if (inverted) { + alignTo = { + x: chart.plotWidth - alignTo.y - alignTo.height, + y: chart.plotHeight - alignTo.x - alignTo.width, + width: alignTo.height, + height: alignTo.width + }; + } + + // Compute the alignment box + if (!inside) { + if (inverted) { + alignTo.x += below ? 0 : alignTo.width; + alignTo.width = 0; + } else { + alignTo.y += below ? alignTo.height : 0; + alignTo.height = 0; + } + } + } + + + // When alignment is undefined (typically columns and bars), display the individual + // point below or above the point depending on the threshold + options.align = pick( + options.align, + !inverted || inside ? 'center' : below ? 'right' : 'left' + ); + options.verticalAlign = pick( + options.verticalAlign, + inverted || inside ? 'middle' : below ? 'top' : 'bottom' + ); + + // Call the parent method + Series.prototype.alignDataLabel.call(this, point, dataLabel, options, alignTo, isNew); + }; +} + + + +/** + * TrackerMixin for points and graphs + */ + +var TrackerMixin = Highcharts.TrackerMixin = { + + drawTrackerPoint: function () { + var series = this, + chart = series.chart, + pointer = chart.pointer, + cursor = series.options.cursor, + css = cursor && { cursor: cursor }, + onMouseOver = function (e) { + var target = e.target, + point; + + if (chart.hoverSeries !== series) { + series.onMouseOver(); + } + + while (target && !point) { + point = target.point; + target = target.parentNode; + } + + if (point !== UNDEFINED && point !== chart.hoverPoint) { // undefined on graph in scatterchart + point.onMouseOver(e); + } + }; + + // Add reference to the point + each(series.points, function (point) { + if (point.graphic) { + point.graphic.element.point = point; + } + if (point.dataLabel) { + point.dataLabel.element.point = point; + } + }); + + // Add the event listeners, we need to do this only once + if (!series._hasTracking) { + each(series.trackerGroups, function (key) { + if (series[key]) { // we don't always have dataLabelsGroup + series[key] + .addClass(PREFIX + 'tracker') + .on('mouseover', onMouseOver) + .on('mouseout', function (e) { pointer.onTrackerMouseOut(e); }) + .css(css); + if (hasTouch) { + series[key].on('touchstart', onMouseOver); + } + } + }); + series._hasTracking = true; + } + }, + + /** + * Draw the tracker object that sits above all data labels and markers to + * track mouse events on the graph or points. For the line type charts + * the tracker uses the same graphPath, but with a greater stroke width + * for better control. + */ + drawTrackerGraph: function () { + var series = this, + options = series.options, + trackByArea = options.trackByArea, + trackerPath = [].concat(trackByArea ? series.areaPath : series.graphPath), + trackerPathLength = trackerPath.length, + chart = series.chart, + pointer = chart.pointer, + renderer = chart.renderer, + snap = chart.options.tooltip.snap, + tracker = series.tracker, + cursor = options.cursor, + css = cursor && { cursor: cursor }, + singlePoints = series.singlePoints, + singlePoint, + i, + onMouseOver = function () { + if (chart.hoverSeries !== series) { + series.onMouseOver(); + } + }, + /* + * Empirical lowest possible opacities for TRACKER_FILL for an element to stay invisible but clickable + * IE6: 0.002 + * IE7: 0.002 + * IE8: 0.002 + * IE9: 0.00000000001 (unlimited) + * IE10: 0.0001 (exporting only) + * FF: 0.00000000001 (unlimited) + * Chrome: 0.000001 + * Safari: 0.000001 + * Opera: 0.00000000001 (unlimited) + */ + TRACKER_FILL = 'rgba(192,192,192,' + (hasSVG ? 0.0001 : 0.002) + ')'; + + // Extend end points. A better way would be to use round linecaps, + // but those are not clickable in VML. + if (trackerPathLength && !trackByArea) { + i = trackerPathLength + 1; + while (i--) { + if (trackerPath[i] === M) { // extend left side + trackerPath.splice(i + 1, 0, trackerPath[i + 1] - snap, trackerPath[i + 2], L); + } + if ((i && trackerPath[i] === M) || i === trackerPathLength) { // extend right side + trackerPath.splice(i, 0, L, trackerPath[i - 2] + snap, trackerPath[i - 1]); + } + } + } + + // handle single points + for (i = 0; i < singlePoints.length; i++) { + singlePoint = singlePoints[i]; + trackerPath.push(M, singlePoint.plotX - snap, singlePoint.plotY, + L, singlePoint.plotX + snap, singlePoint.plotY); + } + + // draw the tracker + if (tracker) { + tracker.attr({ d: trackerPath }); + } else { // create + + series.tracker = renderer.path(trackerPath) + .attr({ + 'stroke-linejoin': 'round', // #1225 + visibility: series.visible ? VISIBLE : HIDDEN, + stroke: TRACKER_FILL, + fill: trackByArea ? TRACKER_FILL : NONE, + 'stroke-width' : options.lineWidth + (trackByArea ? 0 : 2 * snap), + zIndex: 2 + }) + .add(series.group); + + // The tracker is added to the series group, which is clipped, but is covered + // by the marker group. So the marker group also needs to capture events. + each([series.tracker, series.markerGroup], function (tracker) { + tracker.addClass(PREFIX + 'tracker') + .on('mouseover', onMouseOver) + .on('mouseout', function (e) { pointer.onTrackerMouseOut(e); }) + .css(css); + + if (hasTouch) { + tracker.on('touchstart', onMouseOver); + } + }); + } + } +}; +/* End TrackerMixin */ + + +/** + * Add tracking event listener to the series group, so the point graphics + * themselves act as trackers + */ + +if (seriesTypes.column) { + ColumnSeries.prototype.drawTracker = TrackerMixin.drawTrackerPoint; +} + +if (seriesTypes.pie) { + seriesTypes.pie.prototype.drawTracker = TrackerMixin.drawTrackerPoint; +} + +if (seriesTypes.scatter) { + ScatterSeries.prototype.drawTracker = TrackerMixin.drawTrackerPoint; +} + +/* + * Extend Legend for item events + */ +extend(Legend.prototype, { + + setItemEvents: function (item, legendItem, useHTML, itemStyle, itemHiddenStyle) { + var legend = this; + // Set the events on the item group, or in case of useHTML, the item itself (#1249) + (useHTML ? legendItem : item.legendGroup).on('mouseover', function () { + item.setState(HOVER_STATE); + legendItem.css(legend.options.itemHoverStyle); + }) + .on('mouseout', function () { + legendItem.css(item.visible ? itemStyle : itemHiddenStyle); + item.setState(); + }) + .on('click', function (event) { + var strLegendItemClick = 'legendItemClick', + fnLegendItemClick = function () { + item.setVisible(); + }; + + // Pass over the click/touch event. #4. + event = { + browserEvent: event + }; + + // click the name or symbol + if (item.firePointEvent) { // point + item.firePointEvent(strLegendItemClick, event, fnLegendItemClick); + } else { + fireEvent(item, strLegendItemClick, event, fnLegendItemClick); + } + }); + }, + + createCheckboxForItem: function (item) { + var legend = this; + + item.checkbox = createElement('input', { + type: 'checkbox', + checked: item.selected, + defaultChecked: item.selected // required by IE7 + }, legend.options.itemCheckboxStyle, legend.chart.container); + + addEvent(item.checkbox, 'click', function (event) { + var target = event.target; + fireEvent(item, 'checkboxClick', { + checked: target.checked + }, + function () { + item.select(); + } + ); + }); + } +}); + +/* + * Add pointer cursor to legend itemstyle in defaultOptions + */ +defaultOptions.legend.itemStyle.cursor = 'pointer'; + + +/* + * Extend the Chart object with interaction + */ + +extend(Chart.prototype, { + /** + * Display the zoom button + */ + showResetZoom: function () { + var chart = this, + lang = defaultOptions.lang, + btnOptions = chart.options.chart.resetZoomButton, + theme = btnOptions.theme, + states = theme.states, + alignTo = btnOptions.relativeTo === 'chart' ? null : 'plotBox'; + + this.resetZoomButton = chart.renderer.button(lang.resetZoom, null, null, function () { chart.zoomOut(); }, theme, states && states.hover) + .attr({ + align: btnOptions.position.align, + title: lang.resetZoomTitle + }) + .add() + .align(btnOptions.position, false, alignTo); + + }, + + /** + * Zoom out to 1:1 + */ + zoomOut: function () { + var chart = this; + fireEvent(chart, 'selection', { resetSelection: true }, function () { + chart.zoom(); + }); + }, + + /** + * Zoom into a given portion of the chart given by axis coordinates + * @param {Object} event + */ + zoom: function (event) { + var chart = this, + hasZoomed, + pointer = chart.pointer, + displayButton = false, + resetZoomButton; + + // If zoom is called with no arguments, reset the axes + if (!event || event.resetSelection) { + each(chart.axes, function (axis) { + hasZoomed = axis.zoom(); + }); + } else { // else, zoom in on all axes + each(event.xAxis.concat(event.yAxis), function (axisData) { + var axis = axisData.axis, + isXAxis = axis.isXAxis; + + // don't zoom more than minRange + if (pointer[isXAxis ? 'zoomX' : 'zoomY'] || pointer[isXAxis ? 'pinchX' : 'pinchY']) { + hasZoomed = axis.zoom(axisData.min, axisData.max); + if (axis.displayBtn) { + displayButton = true; + } + } + }); + } + + // Show or hide the Reset zoom button + resetZoomButton = chart.resetZoomButton; + if (displayButton && !resetZoomButton) { + chart.showResetZoom(); + } else if (!displayButton && isObject(resetZoomButton)) { + chart.resetZoomButton = resetZoomButton.destroy(); + } + + + // Redraw + if (hasZoomed) { + chart.redraw( + pick(chart.options.chart.animation, event && event.animation, chart.pointCount < 100) // animation + ); + } + }, + + /** + * Pan the chart by dragging the mouse across the pane. This function is called + * on mouse move, and the distance to pan is computed from chartX compared to + * the first chartX position in the dragging operation. + */ + pan: function (e, panning) { + + var chart = this, + hoverPoints = chart.hoverPoints, + doRedraw; + + // remove active points for shared tooltip + if (hoverPoints) { + each(hoverPoints, function (point) { + point.setState(); + }); + } + + each(panning === 'xy' ? [1, 0] : [1], function (isX) { // xy is used in maps + var mousePos = e[isX ? 'chartX' : 'chartY'], + axis = chart[isX ? 'xAxis' : 'yAxis'][0], + startPos = chart[isX ? 'mouseDownX' : 'mouseDownY'], + halfPointRange = (axis.pointRange || 0) / 2, + extremes = axis.getExtremes(), + newMin = axis.toValue(startPos - mousePos, true) + halfPointRange, + newMax = axis.toValue(startPos + chart[isX ? 'plotWidth' : 'plotHeight'] - mousePos, true) - halfPointRange; + + if (axis.series.length && newMin > mathMin(extremes.dataMin, extremes.min) && newMax < mathMax(extremes.dataMax, extremes.max)) { + axis.setExtremes(newMin, newMax, false, false, { trigger: 'pan' }); + doRedraw = true; + } + + chart[isX ? 'mouseDownX' : 'mouseDownY'] = mousePos; // set new reference for next run + }); + + if (doRedraw) { + chart.redraw(false); + } + css(chart.container, { cursor: 'move' }); + } +}); + +/* + * Extend the Point object with interaction + */ +extend(Point.prototype, { + /** + * Toggle the selection status of a point + * @param {Boolean} selected Whether to select or unselect the point. + * @param {Boolean} accumulate Whether to add to the previous selection. By default, + * this happens if the control key (Cmd on Mac) was pressed during clicking. + */ + select: function (selected, accumulate) { + var point = this, + series = point.series, + chart = series.chart; + + selected = pick(selected, !point.selected); + + // fire the event with the defalut handler + point.firePointEvent(selected ? 'select' : 'unselect', { accumulate: accumulate }, function () { + point.selected = point.options.selected = selected; + series.options.data[inArray(point, series.data)] = point.options; + + point.setState(selected && SELECT_STATE); + + // unselect all other points unless Ctrl or Cmd + click + if (!accumulate) { + each(chart.getSelectedPoints(), function (loopPoint) { + if (loopPoint.selected && loopPoint !== point) { + loopPoint.selected = loopPoint.options.selected = false; + series.options.data[inArray(loopPoint, series.data)] = loopPoint.options; + loopPoint.setState(NORMAL_STATE); + loopPoint.firePointEvent('unselect'); + } + }); + } + }); + }, + + /** + * Runs on mouse over the point + */ + onMouseOver: function (e) { + var point = this, + series = point.series, + chart = series.chart, + tooltip = chart.tooltip, + hoverPoint = chart.hoverPoint; + + // set normal state to previous series + if (hoverPoint && hoverPoint !== point) { + hoverPoint.onMouseOut(); + } + + // trigger the event + point.firePointEvent('mouseOver'); + + // update the tooltip + if (tooltip && (!tooltip.shared || series.noSharedTooltip)) { + tooltip.refresh(point, e); + } + + // hover this + point.setState(HOVER_STATE); + chart.hoverPoint = point; + }, + + /** + * Runs on mouse out from the point + */ + onMouseOut: function () { + var chart = this.series.chart, + hoverPoints = chart.hoverPoints; + + if (!hoverPoints || inArray(this, hoverPoints) === -1) { // #887 + this.firePointEvent('mouseOut'); + + this.setState(); + chart.hoverPoint = null; + } + }, + + /** + * Import events from the series' and point's options. Only do it on + * demand, to save processing time on hovering. + */ + importEvents: function () { + if (!this.hasImportedEvents) { + var point = this, + options = merge(point.series.options.point, point.options), + events = options.events, + eventType; + + point.events = events; + + for (eventType in events) { + addEvent(point, eventType, events[eventType]); + } + this.hasImportedEvents = true; + + } + }, + + /** + * Set the point's state + * @param {String} state + */ + setState: function (state, move) { + var point = this, + plotX = point.plotX, + plotY = point.plotY, + series = point.series, + stateOptions = series.options.states, + markerOptions = defaultPlotOptions[series.type].marker && series.options.marker, + normalDisabled = markerOptions && !markerOptions.enabled, + markerStateOptions = markerOptions && markerOptions.states[state], + stateDisabled = markerStateOptions && markerStateOptions.enabled === false, + stateMarkerGraphic = series.stateMarkerGraphic, + pointMarker = point.marker || {}, + chart = series.chart, + radius, + halo = series.halo, + haloOptions, + newSymbol, + pointAttr; + + state = state || NORMAL_STATE; // empty string + pointAttr = point.pointAttr[state] || series.pointAttr[state]; + + if ( + // already has this state + (state === point.state && !move) || + // selected points don't respond to hover + (point.selected && state !== SELECT_STATE) || + // series' state options is disabled + (stateOptions[state] && stateOptions[state].enabled === false) || + // general point marker's state options is disabled + (state && (stateDisabled || (normalDisabled && markerStateOptions.enabled === false))) || + // individual point marker's state options is disabled + (state && pointMarker.states && pointMarker.states[state] && pointMarker.states[state].enabled === false) // #1610 + + ) { + return; + } + + // apply hover styles to the existing point + if (point.graphic) { + radius = markerOptions && point.graphic.symbolName && pointAttr.r; + point.graphic.attr(merge( + pointAttr, + radius ? { // new symbol attributes (#507, #612) + x: plotX - radius, + y: plotY - radius, + width: 2 * radius, + height: 2 * radius + } : {} + )); + + // Zooming in from a range with no markers to a range with markers + if (stateMarkerGraphic) { + stateMarkerGraphic.hide(); + } + } else { + // if a graphic is not applied to each point in the normal state, create a shared + // graphic for the hover state + if (state && markerStateOptions) { + radius = markerStateOptions.radius; + newSymbol = pointMarker.symbol || series.symbol; + + // If the point has another symbol than the previous one, throw away the + // state marker graphic and force a new one (#1459) + if (stateMarkerGraphic && stateMarkerGraphic.currentSymbol !== newSymbol) { + stateMarkerGraphic = stateMarkerGraphic.destroy(); + } + + // Add a new state marker graphic + if (!stateMarkerGraphic) { + if (newSymbol) { + series.stateMarkerGraphic = stateMarkerGraphic = chart.renderer.symbol( + newSymbol, + plotX - radius, + plotY - radius, + 2 * radius, + 2 * radius + ) + .attr(pointAttr) + .add(series.markerGroup); + stateMarkerGraphic.currentSymbol = newSymbol; + } + + // Move the existing graphic + } else { + stateMarkerGraphic[move ? 'animate' : 'attr']({ // #1054 + x: plotX - radius, + y: plotY - radius + }); + } + } + + if (stateMarkerGraphic) { + stateMarkerGraphic[state && chart.isInsidePlot(plotX, plotY, chart.inverted) ? 'show' : 'hide'](); // #2450 + } + } + + // Show me your halo + haloOptions = stateOptions[state] && stateOptions[state].halo; + if (haloOptions && haloOptions.size) { + if (!halo) { + series.halo = halo = chart.renderer.path() + .add(series.seriesGroup); + } + halo.attr(extend({ + fill: Color(point.color || series.color).setOpacity(haloOptions.opacity).get() + }, haloOptions.attributes))[move ? 'animate' : 'attr']({ + d: point.haloPath(haloOptions.size) + }); + } else if (halo) { + halo.attr({ d: [] }); + } + + point.state = state; + }, + + haloPath: function (size) { + var series = this.series, + chart = series.chart, + plotBox = series.getPlotBox(), + inverted = chart.inverted; + + return chart.renderer.symbols.circle( + plotBox.translateX + (inverted ? series.yAxis.len - this.plotY : this.plotX) - size, + plotBox.translateY + (inverted ? series.xAxis.len - this.plotX : this.plotY) - size, + size * 2, + size * 2 + ); + } +}); + +/* + * Extend the Series object with interaction + */ + +extend(Series.prototype, { + /** + * Series mouse over handler + */ + onMouseOver: function () { + var series = this, + chart = series.chart, + hoverSeries = chart.hoverSeries; + + // set normal state to previous series + if (hoverSeries && hoverSeries !== series) { + hoverSeries.onMouseOut(); + } + + // trigger the event, but to save processing time, + // only if defined + if (series.options.events.mouseOver) { + fireEvent(series, 'mouseOver'); + } + + // hover this + series.setState(HOVER_STATE); + chart.hoverSeries = series; + }, + + /** + * Series mouse out handler + */ + onMouseOut: function () { + // trigger the event only if listeners exist + var series = this, + options = series.options, + chart = series.chart, + tooltip = chart.tooltip, + hoverPoint = chart.hoverPoint; + + // trigger mouse out on the point, which must be in this series + if (hoverPoint) { + hoverPoint.onMouseOut(); + } + + // fire the mouse out event + if (series && options.events.mouseOut) { + fireEvent(series, 'mouseOut'); + } + + + // hide the tooltip + if (tooltip && !options.stickyTracking && (!tooltip.shared || series.noSharedTooltip)) { + tooltip.hide(); + } + + // set normal state + series.setState(); + chart.hoverSeries = null; + }, + + /** + * Set the state of the graph + */ + setState: function (state) { + var series = this, + options = series.options, + graph = series.graph, + graphNeg = series.graphNeg, + stateOptions = options.states, + lineWidth = options.lineWidth, + attribs; + + state = state || NORMAL_STATE; + + if (series.state !== state) { + series.state = state; + + if (stateOptions[state] && stateOptions[state].enabled === false) { + return; + } + + if (state) { + lineWidth = stateOptions[state].lineWidth || lineWidth + 1; + } + + if (graph && !graph.dashstyle) { // hover is turned off for dashed lines in VML + attribs = { + 'stroke-width': lineWidth + }; + // use attr because animate will cause any other animation on the graph to stop + graph.attr(attribs); + if (graphNeg) { + graphNeg.attr(attribs); + } + } + } + }, + + /** + * Set the visibility of the graph + * + * @param vis {Boolean} True to show the series, false to hide. If UNDEFINED, + * the visibility is toggled. + */ + setVisible: function (vis, redraw) { + var series = this, + chart = series.chart, + legendItem = series.legendItem, + showOrHide, + ignoreHiddenSeries = chart.options.chart.ignoreHiddenSeries, + oldVisibility = series.visible; + + // if called without an argument, toggle visibility + series.visible = vis = series.userOptions.visible = vis === UNDEFINED ? !oldVisibility : vis; + showOrHide = vis ? 'show' : 'hide'; + + // show or hide elements + each(['group', 'dataLabelsGroup', 'markerGroup', 'tracker'], function (key) { + if (series[key]) { + series[key][showOrHide](); + } + }); + + + // hide tooltip (#1361) + if (chart.hoverSeries === series) { + series.onMouseOut(); + } + + + if (legendItem) { + chart.legend.colorizeItem(series, vis); + } + + + // rescale or adapt to resized chart + series.isDirty = true; + // in a stack, all other series are affected + if (series.options.stacking) { + each(chart.series, function (otherSeries) { + if (otherSeries.options.stacking && otherSeries.visible) { + otherSeries.isDirty = true; + } + }); + } + + // show or hide linked series + each(series.linkedSeries, function (otherSeries) { + otherSeries.setVisible(vis, false); + }); + + if (ignoreHiddenSeries) { + chart.isDirtyBox = true; + } + if (redraw !== false) { + chart.redraw(); + } + + fireEvent(series, showOrHide); + }, + + /** + * Memorize tooltip texts and positions + */ + setTooltipPoints: function (renew) { + var series = this, + points = [], + pointsLength, + low, + high, + xAxis = series.xAxis, + xExtremes = xAxis && xAxis.getExtremes(), + axisLength = xAxis ? (xAxis.tooltipLen || xAxis.len) : series.chart.plotSizeX, // tooltipLen and tooltipPosName used in polar + point, + pointX, + nextPoint, + i, + tooltipPoints = []; // a lookup array for each pixel in the x dimension + + // don't waste resources if tracker is disabled + if (series.options.enableMouseTracking === false || series.singularTooltips) { + return; + } + + // renew + if (renew) { + series.tooltipPoints = null; + } + + // concat segments to overcome null values + each(series.segments || series.points, function (segment) { + points = points.concat(segment); + }); + + // Reverse the points in case the X axis is reversed + if (xAxis && xAxis.reversed) { + points = points.reverse(); + } + + // Polar needs additional shaping + if (series.orderTooltipPoints) { + series.orderTooltipPoints(points); + } + + // Assign each pixel position to the nearest point + pointsLength = points.length; + for (i = 0; i < pointsLength; i++) { + point = points[i]; + pointX = point.x; + if (pointX >= xExtremes.min && pointX <= xExtremes.max) { // #1149 + nextPoint = points[i + 1]; + + // Set this range's low to the last range's high plus one + low = high === UNDEFINED ? 0 : high + 1; + // Now find the new high + high = points[i + 1] ? + mathMin(mathMax(0, mathFloor( // #2070 + (point.clientX + (nextPoint ? (nextPoint.wrappedClientX || nextPoint.clientX) : axisLength)) / 2 + )), axisLength) : + axisLength; + + while (low >= 0 && low <= high) { + tooltipPoints[low++] = point; + } + } + } + series.tooltipPoints = tooltipPoints; + }, + + /** + * Show the graph + */ + show: function () { + this.setVisible(true); + }, + + /** + * Hide the graph + */ + hide: function () { + this.setVisible(false); + }, + + + /** + * Set the selected state of the graph + * + * @param selected {Boolean} True to select the series, false to unselect. If + * UNDEFINED, the selection state is toggled. + */ + select: function (selected) { + var series = this; + // if called without an argument, toggle + series.selected = selected = (selected === UNDEFINED) ? !series.selected : selected; + + if (series.checkbox) { + series.checkbox.checked = selected; + } + + fireEvent(series, selected ? 'select' : 'unselect'); + }, + + drawTracker: TrackerMixin.drawTrackerGraph +}); +// global variables +extend(Highcharts, { + + // Constructors + Axis: Axis, + Chart: Chart, + Color: Color, + Point: Point, + Tick: Tick, + Renderer: Renderer, + Series: Series, + SVGElement: SVGElement, + SVGRenderer: SVGRenderer, + + // Various + arrayMin: arrayMin, + arrayMax: arrayMax, + charts: charts, + dateFormat: dateFormat, + format: format, + pathAnim: pathAnim, + getOptions: getOptions, + hasBidiBug: hasBidiBug, + isTouchDevice: isTouchDevice, + numberFormat: numberFormat, + seriesTypes: seriesTypes, + setOptions: setOptions, + addEvent: addEvent, + removeEvent: removeEvent, + createElement: createElement, + discardElement: discardElement, + css: css, + each: each, + extend: extend, + map: map, + merge: merge, + pick: pick, + splat: splat, + extendClass: extendClass, + pInt: pInt, + wrap: wrap, + svg: hasSVG, + canvas: useCanVG, + vml: !hasSVG && !useCanVG, + product: PRODUCT, + version: VERSION +}); + +}()); diff --git a/ABC_Score/assets/javascripts/jquery.filtertable.min.js b/ABC_Score/assets/javascripts/jquery.filtertable.min.js new file mode 100755 index 00000000..b3d4d392 --- /dev/null +++ b/ABC_Score/assets/javascripts/jquery.filtertable.min.js @@ -0,0 +1,13 @@ +/** + * jquery.filterTable + * + * This plugin will add a search filter to tables. When typing in the filter, + * any rows that do not contain the filter will be hidden. + * + * Utilizes bindWithDelay() if available. https://github.com/bgrins/bindWithDelay + * + * @version v1.5.6 + * @author Sunny Walker, swalker@hawaii.edu + * @license MIT + */ +!function($){var e=$.fn.jquery.split("."),t=parseFloat(e[0]),n=parseFloat(e[1]);2>t&&8>n?($.expr[":"].filterTableFind=function(e,t,n){return $(e).text().toUpperCase().indexOf(n[3].toUpperCase().replace(/"""/g,'"').replace(/"\\"/g,"\\"))>=0},$.expr[":"].filterTableFindAny=function(e,t,n){var i=n[3].split(/[\s,]/),r=[];return $.each(i,function(e,t){var n=t.replace(/^\s+|\s$/g,"");n&&r.push(n)}),r.length?function(e){var t=!1;return $.each(r,function(n,i){return $(e).text().toUpperCase().indexOf(i.toUpperCase().replace(/"""/g,'"').replace(/"\\"/g,"\\"))>=0?(t=!0,!1):void 0}),t}:!1},$.expr[":"].filterTableFindAll=function(e,t,n){var i=n[3].split(/[\s,]/),r=[];return $.each(i,function(e,t){var n=t.replace(/^\s+|\s$/g,"");n&&r.push(n)}),r.length?function(e){var t=0;return $.each(r,function(n,i){$(e).text().toUpperCase().indexOf(i.toUpperCase().replace(/"""/g,'"').replace(/"\\"/g,"\\"))>=0&&t++}),t===r.length}:!1}):($.expr[":"].filterTableFind=jQuery.expr.createPseudo(function(e){return function(t){return $(t).text().toUpperCase().indexOf(e.toUpperCase().replace(/"""/g,'"').replace(/"\\"/g,"\\"))>=0}}),$.expr[":"].filterTableFindAny=jQuery.expr.createPseudo(function(e){var t=e.split(/[\s,]/),n=[];return $.each(t,function(e,t){var i=t.replace(/^\s+|\s$/g,"");i&&n.push(i)}),n.length?function(e){var t=!1;return $.each(n,function(n,i){return $(e).text().toUpperCase().indexOf(i.toUpperCase().replace(/"""/g,'"').replace(/"\\"/g,"\\"))>=0?(t=!0,!1):void 0}),t}:!1}),$.expr[":"].filterTableFindAll=jQuery.expr.createPseudo(function(e){var t=e.split(/[\s,]/),n=[];return $.each(t,function(e,t){var i=t.replace(/^\s+|\s$/g,"");i&&n.push(i)}),n.length?function(e){var t=0;return $.each(n,function(n,i){$(e).text().toUpperCase().indexOf(i.toUpperCase().replace(/"""/g,'"').replace(/"\\"/g,"\\"))>=0&&t++}),t===n.length}:!1})),$.fn.filterTable=function(e){var t={autofocus:!1,callback:null,containerClass:"filter-table",containerTag:"p",filterExpression:"filterTableFind",hideTFootOnFilter:!1,highlightClass:"alt",ignoreClass:"",ignoreColumns:[],inputSelector:null,inputName:"",inputType:"search",label:"Filter:",minChars:1,minRows:8,placeholder:"search this table",preventReturnKey:!0,quickList:[],quickListClass:"quick",quickListGroupTag:"",quickListTag:"a",visibleClass:"visible"},n=function(e){return e.replace(/&/g,"&").replace(/"/g,""").replace(//g,">")},i=$.extend({},t,e),r=function(e,t){var n=e.find("tbody");if(""===t||t.length0&&(0===i.minRows||i.minRows>0&&t.find("tr").length>=i.minRows)&&!e.prev().hasClass(i.containerClass)&&(i.inputSelector&&1===$(i.inputSelector).length?(s=$(i.inputSelector),a=s.parent(),o=!1):(a=$("<"+i.containerTag+" />"),""!==i.containerClass&&a.addClass(i.containerClass),a.prepend(i.label+" "),s=$(''),i.preventReturnKey&&s.on("keydown",function(e){return 13===(e.keyCode||e.which)?(e.preventDefault(),!1):void 0})),i.autofocus&&s.attr("autofocus",!0),$.fn.bindWithDelay?s.bindWithDelay("keyup",function(){r(e,$(this).val())},200):s.bind("keyup",function(){r(e,$(this).val())}),s.bind("click search input paste blur",function(){r(e,$(this).val())}),o&&a.append(s),i.quickList.length>0&&(l=i.quickListGroupTag?$("<"+i.quickListGroupTag+" />"):a,$.each(i.quickList,function(e,t){var r=$("<"+i.quickListTag+' class="'+i.quickListClass+'" />');r.text(n(t)),"A"===r[0].nodeName&&r.attr("href","#"),r.bind("click",function(e){e.preventDefault(),s.val(t).focus().trigger("click")}),l.append(r)}),l!==a&&a.append(l)),o&&e.before(a))})}}(jQuery); \ No newline at end of file diff --git a/ABC_Score/assets/javascripts/jquery.min.js b/ABC_Score/assets/javascripts/jquery.min.js new file mode 100755 index 00000000..4c5be4c0 --- /dev/null +++ b/ABC_Score/assets/javascripts/jquery.min.js @@ -0,0 +1,4 @@ +/*! jQuery v3.1.1 | (c) jQuery Foundation | jquery.org/license */ +!function(a,b){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){"use strict";var c=[],d=a.document,e=Object.getPrototypeOf,f=c.slice,g=c.concat,h=c.push,i=c.indexOf,j={},k=j.toString,l=j.hasOwnProperty,m=l.toString,n=m.call(Object),o={};function p(a,b){b=b||d;var c=b.createElement("script");c.text=a,b.head.appendChild(c).parentNode.removeChild(c)}var q="3.1.1",r=function(a,b){return new r.fn.init(a,b)},s=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,t=/^-ms-/,u=/-([a-z])/g,v=function(a,b){return b.toUpperCase()};r.fn=r.prototype={jquery:q,constructor:r,length:0,toArray:function(){return f.call(this)},get:function(a){return null==a?f.call(this):a<0?this[a+this.length]:this[a]},pushStack:function(a){var b=r.merge(this.constructor(),a);return b.prevObject=this,b},each:function(a){return r.each(this,a)},map:function(a){return this.pushStack(r.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(f.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(a<0?b:0);return this.pushStack(c>=0&&c0&&b-1 in a)}var x=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ha(),z=ha(),A=ha(),B=function(a,b){return a===b&&(l=!0),0},C={}.hasOwnProperty,D=[],E=D.pop,F=D.push,G=D.push,H=D.slice,I=function(a,b){for(var c=0,d=a.length;c+~]|"+K+")"+K+"*"),S=new RegExp("="+K+"*([^\\]'\"]*?)"+K+"*\\]","g"),T=new RegExp(N),U=new RegExp("^"+L+"$"),V={ID:new RegExp("^#("+L+")"),CLASS:new RegExp("^\\.("+L+")"),TAG:new RegExp("^("+L+"|[*])"),ATTR:new RegExp("^"+M),PSEUDO:new RegExp("^"+N),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+K+"*(even|odd|(([+-]|)(\\d*)n|)"+K+"*(?:([+-]|)"+K+"*(\\d+)|))"+K+"*\\)|)","i"),bool:new RegExp("^(?:"+J+")$","i"),needsContext:new RegExp("^"+K+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+K+"*((?:-\\d)?\\d*)"+K+"*\\)|)(?=[^-]|$)","i")},W=/^(?:input|select|textarea|button)$/i,X=/^h\d$/i,Y=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,$=/[+~]/,_=new RegExp("\\\\([\\da-f]{1,6}"+K+"?|("+K+")|.)","ig"),aa=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:d<0?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},ba=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ca=function(a,b){return b?"\0"===a?"\ufffd":a.slice(0,-1)+"\\"+a.charCodeAt(a.length-1).toString(16)+" ":"\\"+a},da=function(){m()},ea=ta(function(a){return a.disabled===!0&&("form"in a||"label"in a)},{dir:"parentNode",next:"legend"});try{G.apply(D=H.call(v.childNodes),v.childNodes),D[v.childNodes.length].nodeType}catch(fa){G={apply:D.length?function(a,b){F.apply(a,H.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function ga(a,b,d,e){var f,h,j,k,l,o,r,s=b&&b.ownerDocument,w=b?b.nodeType:9;if(d=d||[],"string"!=typeof a||!a||1!==w&&9!==w&&11!==w)return d;if(!e&&((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,p)){if(11!==w&&(l=Z.exec(a)))if(f=l[1]){if(9===w){if(!(j=b.getElementById(f)))return d;if(j.id===f)return d.push(j),d}else if(s&&(j=s.getElementById(f))&&t(b,j)&&j.id===f)return d.push(j),d}else{if(l[2])return G.apply(d,b.getElementsByTagName(a)),d;if((f=l[3])&&c.getElementsByClassName&&b.getElementsByClassName)return G.apply(d,b.getElementsByClassName(f)),d}if(c.qsa&&!A[a+" "]&&(!q||!q.test(a))){if(1!==w)s=b,r=a;else if("object"!==b.nodeName.toLowerCase()){(k=b.getAttribute("id"))?k=k.replace(ba,ca):b.setAttribute("id",k=u),o=g(a),h=o.length;while(h--)o[h]="#"+k+" "+sa(o[h]);r=o.join(","),s=$.test(a)&&qa(b.parentNode)||b}if(r)try{return G.apply(d,s.querySelectorAll(r)),d}catch(x){}finally{k===u&&b.removeAttribute("id")}}}return i(a.replace(P,"$1"),b,d,e)}function ha(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ia(a){return a[u]=!0,a}function ja(a){var b=n.createElement("fieldset");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ka(a,b){var c=a.split("|"),e=c.length;while(e--)d.attrHandle[c[e]]=b}function la(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&a.sourceIndex-b.sourceIndex;if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function na(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function oa(a){return function(b){return"form"in b?b.parentNode&&b.disabled===!1?"label"in b?"label"in b.parentNode?b.parentNode.disabled===a:b.disabled===a:b.isDisabled===a||b.isDisabled!==!a&&ea(b)===a:b.disabled===a:"label"in b&&b.disabled===a}}function pa(a){return ia(function(b){return b=+b,ia(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function qa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=ga.support={},f=ga.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return!!b&&"HTML"!==b.nodeName},m=ga.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=n.documentElement,p=!f(n),v!==n&&(e=n.defaultView)&&e.top!==e&&(e.addEventListener?e.addEventListener("unload",da,!1):e.attachEvent&&e.attachEvent("onunload",da)),c.attributes=ja(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ja(function(a){return a.appendChild(n.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Y.test(n.getElementsByClassName),c.getById=ja(function(a){return o.appendChild(a).id=u,!n.getElementsByName||!n.getElementsByName(u).length}),c.getById?(d.filter.ID=function(a){var b=a.replace(_,aa);return function(a){return a.getAttribute("id")===b}},d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c?[c]:[]}}):(d.filter.ID=function(a){var b=a.replace(_,aa);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}},d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c,d,e,f=b.getElementById(a);if(f){if(c=f.getAttributeNode("id"),c&&c.value===a)return[f];e=b.getElementsByName(a),d=0;while(f=e[d++])if(c=f.getAttributeNode("id"),c&&c.value===a)return[f]}return[]}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){if("undefined"!=typeof b.getElementsByClassName&&p)return b.getElementsByClassName(a)},r=[],q=[],(c.qsa=Y.test(n.querySelectorAll))&&(ja(function(a){o.appendChild(a).innerHTML="
              ",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+K+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+K+"*(?:value|"+J+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ja(function(a){a.innerHTML="";var b=n.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+K+"*[*^$|!~]?="),2!==a.querySelectorAll(":enabled").length&&q.push(":enabled",":disabled"),o.appendChild(a).disabled=!0,2!==a.querySelectorAll(":disabled").length&&q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=Y.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ja(function(a){c.disconnectedMatch=s.call(a,"*"),s.call(a,"[s!='']:x"),r.push("!=",N)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=Y.test(o.compareDocumentPosition),t=b||Y.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===n||a.ownerDocument===v&&t(v,a)?-1:b===n||b.ownerDocument===v&&t(v,b)?1:k?I(k,a)-I(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,g=[a],h=[b];if(!e||!f)return a===n?-1:b===n?1:e?-1:f?1:k?I(k,a)-I(k,b):0;if(e===f)return la(a,b);c=a;while(c=c.parentNode)g.unshift(c);c=b;while(c=c.parentNode)h.unshift(c);while(g[d]===h[d])d++;return d?la(g[d],h[d]):g[d]===v?-1:h[d]===v?1:0},n):n},ga.matches=function(a,b){return ga(a,null,null,b)},ga.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(S,"='$1']"),c.matchesSelector&&p&&!A[b+" "]&&(!r||!r.test(b))&&(!q||!q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return ga(b,n,null,[a]).length>0},ga.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},ga.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&C.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},ga.escape=function(a){return(a+"").replace(ba,ca)},ga.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},ga.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=ga.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=ga.selectors={cacheLength:50,createPseudo:ia,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(_,aa),a[3]=(a[3]||a[4]||a[5]||"").replace(_,aa),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||ga.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&ga.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return V.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&T.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(_,aa).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+K+")"+a+"("+K+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=ga.attr(d,a);return null==e?"!="===b:!b||(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(O," ")+" ").indexOf(c)>-1:"|="===b&&(e===c||e.slice(0,c.length+1)===c+"-"))}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h,t=!1;if(q){if(f){while(p){m=b;while(m=m[p])if(h?m.nodeName.toLowerCase()===r:1===m.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){m=q,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n&&j[2],m=n&&q.childNodes[n];while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if(1===m.nodeType&&++t&&m===b){k[a]=[w,n,t];break}}else if(s&&(m=b,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n),t===!1)while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if((h?m.nodeName.toLowerCase()===r:1===m.nodeType)&&++t&&(s&&(l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),k[a]=[w,t]),m===b))break;return t-=e,t===d||t%d===0&&t/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||ga.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ia(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=I(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ia(function(a){var b=[],c=[],d=h(a.replace(P,"$1"));return d[u]?ia(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ia(function(a){return function(b){return ga(a,b).length>0}}),contains:ia(function(a){return a=a.replace(_,aa),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ia(function(a){return U.test(a||"")||ga.error("unsupported lang: "+a),a=a.replace(_,aa).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:oa(!1),disabled:oa(!0),checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return X.test(a.nodeName)},input:function(a){return W.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:pa(function(){return[0]}),last:pa(function(a,b){return[b-1]}),eq:pa(function(a,b,c){return[c<0?c+b:c]}),even:pa(function(a,b){for(var c=0;c=0;)a.push(d);return a}),gt:pa(function(a,b,c){for(var d=c<0?c+b:c;++d1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function va(a,b,c){for(var d=0,e=b.length;d-1&&(f[j]=!(g[j]=l))}}else r=wa(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):G.apply(g,r)})}function ya(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=ta(function(a){return a===b},h,!0),l=ta(function(a){return I(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];i1&&ua(m),i>1&&sa(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(P,"$1"),c,i0,e=a.length>0,f=function(f,g,h,i,k){var l,o,q,r=0,s="0",t=f&&[],u=[],v=j,x=f||e&&d.find.TAG("*",k),y=w+=null==v?1:Math.random()||.1,z=x.length;for(k&&(j=g===n||g||k);s!==z&&null!=(l=x[s]);s++){if(e&&l){o=0,g||l.ownerDocument===n||(m(l),h=!p);while(q=a[o++])if(q(l,g||n,h)){i.push(l);break}k&&(w=y)}c&&((l=!q&&l)&&r--,f&&t.push(l))}if(r+=s,c&&s!==r){o=0;while(q=b[o++])q(t,u,g,h);if(f){if(r>0)while(s--)t[s]||u[s]||(u[s]=E.call(i));u=wa(u)}G.apply(i,u),k&&!f&&u.length>0&&r+b.length>1&&ga.uniqueSort(i)}return k&&(w=y,j=v),t};return c?ia(f):f}return h=ga.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=ya(b[c]),f[u]?d.push(f):e.push(f);f=A(a,za(e,d)),f.selector=a}return f},i=ga.select=function(a,b,c,e){var f,i,j,k,l,m="function"==typeof a&&a,n=!e&&g(a=m.selector||a);if(c=c||[],1===n.length){if(i=n[0]=n[0].slice(0),i.length>2&&"ID"===(j=i[0]).type&&9===b.nodeType&&p&&d.relative[i[1].type]){if(b=(d.find.ID(j.matches[0].replace(_,aa),b)||[])[0],!b)return c;m&&(b=b.parentNode),a=a.slice(i.shift().value.length)}f=V.needsContext.test(a)?0:i.length;while(f--){if(j=i[f],d.relative[k=j.type])break;if((l=d.find[k])&&(e=l(j.matches[0].replace(_,aa),$.test(i[0].type)&&qa(b.parentNode)||b))){if(i.splice(f,1),a=e.length&&sa(i),!a)return G.apply(c,e),c;break}}}return(m||h(a,n))(e,b,!p,c,!b||$.test(a)&&qa(b.parentNode)||b),c},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ja(function(a){return 1&a.compareDocumentPosition(n.createElement("fieldset"))}),ja(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||ka("type|href|height|width",function(a,b,c){if(!c)return a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ja(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ka("value",function(a,b,c){if(!c&&"input"===a.nodeName.toLowerCase())return a.defaultValue}),ja(function(a){return null==a.getAttribute("disabled")})||ka(J,function(a,b,c){var d;if(!c)return a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),ga}(a);r.find=x,r.expr=x.selectors,r.expr[":"]=r.expr.pseudos,r.uniqueSort=r.unique=x.uniqueSort,r.text=x.getText,r.isXMLDoc=x.isXML,r.contains=x.contains,r.escapeSelector=x.escape;var y=function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&r(a).is(c))break;d.push(a)}return d},z=function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c},A=r.expr.match.needsContext,B=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i,C=/^.[^:#\[\.,]*$/;function D(a,b,c){return r.isFunction(b)?r.grep(a,function(a,d){return!!b.call(a,d,a)!==c}):b.nodeType?r.grep(a,function(a){return a===b!==c}):"string"!=typeof b?r.grep(a,function(a){return i.call(b,a)>-1!==c}):C.test(b)?r.filter(b,a,c):(b=r.filter(b,a),r.grep(a,function(a){return i.call(b,a)>-1!==c&&1===a.nodeType}))}r.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?r.find.matchesSelector(d,a)?[d]:[]:r.find.matches(a,r.grep(b,function(a){return 1===a.nodeType}))},r.fn.extend({find:function(a){var b,c,d=this.length,e=this;if("string"!=typeof a)return this.pushStack(r(a).filter(function(){for(b=0;b1?r.uniqueSort(c):c},filter:function(a){return this.pushStack(D(this,a||[],!1))},not:function(a){return this.pushStack(D(this,a||[],!0))},is:function(a){return!!D(this,"string"==typeof a&&A.test(a)?r(a):a||[],!1).length}});var E,F=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,G=r.fn.init=function(a,b,c){var e,f;if(!a)return this;if(c=c||E,"string"==typeof a){if(e="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:F.exec(a),!e||!e[1]&&b)return!b||b.jquery?(b||c).find(a):this.constructor(b).find(a);if(e[1]){if(b=b instanceof r?b[0]:b,r.merge(this,r.parseHTML(e[1],b&&b.nodeType?b.ownerDocument||b:d,!0)),B.test(e[1])&&r.isPlainObject(b))for(e in b)r.isFunction(this[e])?this[e](b[e]):this.attr(e,b[e]);return this}return f=d.getElementById(e[2]),f&&(this[0]=f,this.length=1),this}return a.nodeType?(this[0]=a,this.length=1,this):r.isFunction(a)?void 0!==c.ready?c.ready(a):a(r):r.makeArray(a,this)};G.prototype=r.fn,E=r(d);var H=/^(?:parents|prev(?:Until|All))/,I={children:!0,contents:!0,next:!0,prev:!0};r.fn.extend({has:function(a){var b=r(a,this),c=b.length;return this.filter(function(){for(var a=0;a-1:1===c.nodeType&&r.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?r.uniqueSort(f):f)},index:function(a){return a?"string"==typeof a?i.call(r(a),this[0]):i.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(r.uniqueSort(r.merge(this.get(),r(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function J(a,b){while((a=a[b])&&1!==a.nodeType);return a}r.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return y(a,"parentNode")},parentsUntil:function(a,b,c){return y(a,"parentNode",c)},next:function(a){return J(a,"nextSibling")},prev:function(a){return J(a,"previousSibling")},nextAll:function(a){return y(a,"nextSibling")},prevAll:function(a){return y(a,"previousSibling")},nextUntil:function(a,b,c){return y(a,"nextSibling",c)},prevUntil:function(a,b,c){return y(a,"previousSibling",c)},siblings:function(a){return z((a.parentNode||{}).firstChild,a)},children:function(a){return z(a.firstChild)},contents:function(a){return a.contentDocument||r.merge([],a.childNodes)}},function(a,b){r.fn[a]=function(c,d){var e=r.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=r.filter(d,e)),this.length>1&&(I[a]||r.uniqueSort(e),H.test(a)&&e.reverse()),this.pushStack(e)}});var K=/[^\x20\t\r\n\f]+/g;function L(a){var b={};return r.each(a.match(K)||[],function(a,c){b[c]=!0}),b}r.Callbacks=function(a){a="string"==typeof a?L(a):r.extend({},a);var b,c,d,e,f=[],g=[],h=-1,i=function(){for(e=a.once,d=b=!0;g.length;h=-1){c=g.shift();while(++h-1)f.splice(c,1),c<=h&&h--}),this},has:function(a){return a?r.inArray(a,f)>-1:f.length>0},empty:function(){return f&&(f=[]),this},disable:function(){return e=g=[],f=c="",this},disabled:function(){return!f},lock:function(){return e=g=[],c||b||(f=c=""),this},locked:function(){return!!e},fireWith:function(a,c){return e||(c=c||[],c=[a,c.slice?c.slice():c],g.push(c),b||i()),this},fire:function(){return j.fireWith(this,arguments),this},fired:function(){return!!d}};return j};function M(a){return a}function N(a){throw a}function O(a,b,c){var d;try{a&&r.isFunction(d=a.promise)?d.call(a).done(b).fail(c):a&&r.isFunction(d=a.then)?d.call(a,b,c):b.call(void 0,a)}catch(a){c.call(void 0,a)}}r.extend({Deferred:function(b){var c=[["notify","progress",r.Callbacks("memory"),r.Callbacks("memory"),2],["resolve","done",r.Callbacks("once memory"),r.Callbacks("once memory"),0,"resolved"],["reject","fail",r.Callbacks("once memory"),r.Callbacks("once memory"),1,"rejected"]],d="pending",e={state:function(){return d},always:function(){return f.done(arguments).fail(arguments),this},"catch":function(a){return e.then(null,a)},pipe:function(){var a=arguments;return r.Deferred(function(b){r.each(c,function(c,d){var e=r.isFunction(a[d[4]])&&a[d[4]];f[d[1]](function(){var a=e&&e.apply(this,arguments);a&&r.isFunction(a.promise)?a.promise().progress(b.notify).done(b.resolve).fail(b.reject):b[d[0]+"With"](this,e?[a]:arguments)})}),a=null}).promise()},then:function(b,d,e){var f=0;function g(b,c,d,e){return function(){var h=this,i=arguments,j=function(){var a,j;if(!(b=f&&(d!==N&&(h=void 0,i=[a]),c.rejectWith(h,i))}};b?k():(r.Deferred.getStackHook&&(k.stackTrace=r.Deferred.getStackHook()),a.setTimeout(k))}}return r.Deferred(function(a){c[0][3].add(g(0,a,r.isFunction(e)?e:M,a.notifyWith)),c[1][3].add(g(0,a,r.isFunction(b)?b:M)),c[2][3].add(g(0,a,r.isFunction(d)?d:N))}).promise()},promise:function(a){return null!=a?r.extend(a,e):e}},f={};return r.each(c,function(a,b){var g=b[2],h=b[5];e[b[1]]=g.add,h&&g.add(function(){d=h},c[3-a][2].disable,c[0][2].lock),g.add(b[3].fire),f[b[0]]=function(){return f[b[0]+"With"](this===f?void 0:this,arguments),this},f[b[0]+"With"]=g.fireWith}),e.promise(f),b&&b.call(f,f),f},when:function(a){var b=arguments.length,c=b,d=Array(c),e=f.call(arguments),g=r.Deferred(),h=function(a){return function(c){d[a]=this,e[a]=arguments.length>1?f.call(arguments):c,--b||g.resolveWith(d,e)}};if(b<=1&&(O(a,g.done(h(c)).resolve,g.reject),"pending"===g.state()||r.isFunction(e[c]&&e[c].then)))return g.then();while(c--)O(e[c],h(c),g.reject);return g.promise()}});var P=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;r.Deferred.exceptionHook=function(b,c){a.console&&a.console.warn&&b&&P.test(b.name)&&a.console.warn("jQuery.Deferred exception: "+b.message,b.stack,c)},r.readyException=function(b){a.setTimeout(function(){throw b})};var Q=r.Deferred();r.fn.ready=function(a){return Q.then(a)["catch"](function(a){r.readyException(a)}),this},r.extend({isReady:!1,readyWait:1,holdReady:function(a){a?r.readyWait++:r.ready(!0)},ready:function(a){(a===!0?--r.readyWait:r.isReady)||(r.isReady=!0,a!==!0&&--r.readyWait>0||Q.resolveWith(d,[r]))}}),r.ready.then=Q.then;function R(){d.removeEventListener("DOMContentLoaded",R), +a.removeEventListener("load",R),r.ready()}"complete"===d.readyState||"loading"!==d.readyState&&!d.documentElement.doScroll?a.setTimeout(r.ready):(d.addEventListener("DOMContentLoaded",R),a.addEventListener("load",R));var S=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===r.type(c)){e=!0;for(h in c)S(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,r.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(r(a),c)})),b))for(;h1,null,!0)},removeData:function(a){return this.each(function(){W.remove(this,a)})}}),r.extend({queue:function(a,b,c){var d;if(a)return b=(b||"fx")+"queue",d=V.get(a,b),c&&(!d||r.isArray(c)?d=V.access(a,b,r.makeArray(c)):d.push(c)),d||[]},dequeue:function(a,b){b=b||"fx";var c=r.queue(a,b),d=c.length,e=c.shift(),f=r._queueHooks(a,b),g=function(){r.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return V.get(a,c)||V.access(a,c,{empty:r.Callbacks("once memory").add(function(){V.remove(a,[b+"queue",c])})})}}),r.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length\x20\t\r\n\f]+)/i,ka=/^$|\/(?:java|ecma)script/i,la={option:[1,""],thead:[1,"","
              "],col:[2,"","
              "],tr:[2,"","
              "],td:[3,"","
              "],_default:[0,"",""]};la.optgroup=la.option,la.tbody=la.tfoot=la.colgroup=la.caption=la.thead,la.th=la.td;function ma(a,b){var c;return c="undefined"!=typeof a.getElementsByTagName?a.getElementsByTagName(b||"*"):"undefined"!=typeof a.querySelectorAll?a.querySelectorAll(b||"*"):[],void 0===b||b&&r.nodeName(a,b)?r.merge([a],c):c}function na(a,b){for(var c=0,d=a.length;c-1)e&&e.push(f);else if(j=r.contains(f.ownerDocument,f),g=ma(l.appendChild(f),"script"),j&&na(g),c){k=0;while(f=g[k++])ka.test(f.type||"")&&c.push(f)}return l}!function(){var a=d.createDocumentFragment(),b=a.appendChild(d.createElement("div")),c=d.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),o.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="",o.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var qa=d.documentElement,ra=/^key/,sa=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,ta=/^([^.]*)(?:\.(.+)|)/;function ua(){return!0}function va(){return!1}function wa(){try{return d.activeElement}catch(a){}}function xa(a,b,c,d,e,f){var g,h;if("object"==typeof b){"string"!=typeof c&&(d=d||c,c=void 0);for(h in b)xa(a,h,c,d,b[h],f);return a}if(null==d&&null==e?(e=c,d=c=void 0):null==e&&("string"==typeof c?(e=d,d=void 0):(e=d,d=c,c=void 0)),e===!1)e=va;else if(!e)return a;return 1===f&&(g=e,e=function(a){return r().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=r.guid++)),a.each(function(){r.event.add(this,b,e,d,c)})}r.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=V.get(a);if(q){c.handler&&(f=c,c=f.handler,e=f.selector),e&&r.find.matchesSelector(qa,e),c.guid||(c.guid=r.guid++),(i=q.events)||(i=q.events={}),(g=q.handle)||(g=q.handle=function(b){return"undefined"!=typeof r&&r.event.triggered!==b.type?r.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(K)||[""],j=b.length;while(j--)h=ta.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n&&(l=r.event.special[n]||{},n=(e?l.delegateType:l.bindType)||n,l=r.event.special[n]||{},k=r.extend({type:n,origType:p,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&r.expr.match.needsContext.test(e),namespace:o.join(".")},f),(m=i[n])||(m=i[n]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,o,g)!==!1||a.addEventListener&&a.addEventListener(n,g)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),r.event.global[n]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=V.hasData(a)&&V.get(a);if(q&&(i=q.events)){b=(b||"").match(K)||[""],j=b.length;while(j--)if(h=ta.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n){l=r.event.special[n]||{},n=(d?l.delegateType:l.bindType)||n,m=i[n]||[],h=h[2]&&new RegExp("(^|\\.)"+o.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&p!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,o,q.handle)!==!1||r.removeEvent(a,n,q.handle),delete i[n])}else for(n in i)r.event.remove(a,n+b[j],c,d,!0);r.isEmptyObject(i)&&V.remove(a,"handle events")}},dispatch:function(a){var b=r.event.fix(a),c,d,e,f,g,h,i=new Array(arguments.length),j=(V.get(this,"events")||{})[b.type]||[],k=r.event.special[b.type]||{};for(i[0]=b,c=1;c=1))for(;j!==this;j=j.parentNode||this)if(1===j.nodeType&&("click"!==a.type||j.disabled!==!0)){for(f=[],g={},c=0;c-1:r.find(e,this,null,[j]).length),g[e]&&f.push(d);f.length&&h.push({elem:j,handlers:f})}return j=this,i\x20\t\r\n\f]*)[^>]*)\/>/gi,za=/\s*$/g;function Da(a,b){return r.nodeName(a,"table")&&r.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a:a}function Ea(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function Fa(a){var b=Ba.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function Ga(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(V.hasData(a)&&(f=V.access(a),g=V.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;c1&&"string"==typeof q&&!o.checkClone&&Aa.test(q))return a.each(function(e){var f=a.eq(e);s&&(b[0]=q.call(this,e,f.html())),Ia(f,b,c,d)});if(m&&(e=pa(b,a[0].ownerDocument,!1,a,d),f=e.firstChild,1===e.childNodes.length&&(e=f),f||d)){for(h=r.map(ma(e,"script"),Ea),i=h.length;l")},clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=r.contains(a.ownerDocument,a);if(!(o.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||r.isXMLDoc(a)))for(g=ma(h),f=ma(a),d=0,e=f.length;d0&&na(g,!i&&ma(a,"script")),h},cleanData:function(a){for(var b,c,d,e=r.event.special,f=0;void 0!==(c=a[f]);f++)if(T(c)){if(b=c[V.expando]){if(b.events)for(d in b.events)e[d]?r.event.remove(c,d):r.removeEvent(c,d,b.handle);c[V.expando]=void 0}c[W.expando]&&(c[W.expando]=void 0)}}}),r.fn.extend({detach:function(a){return Ja(this,a,!0)},remove:function(a){return Ja(this,a)},text:function(a){return S(this,function(a){return void 0===a?r.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=a)})},null,a,arguments.length)},append:function(){return Ia(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Da(this,a);b.appendChild(a)}})},prepend:function(){return Ia(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Da(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return Ia(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return Ia(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(r.cleanData(ma(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null!=a&&a,b=null==b?a:b,this.map(function(){return r.clone(this,a,b)})},html:function(a){return S(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!za.test(a)&&!la[(ja.exec(a)||["",""])[1].toLowerCase()]){a=r.htmlPrefilter(a);try{for(;c1)}});function Ya(a,b,c,d,e){return new Ya.prototype.init(a,b,c,d,e)}r.Tween=Ya,Ya.prototype={constructor:Ya,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||r.easing._default,this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(r.cssNumber[c]?"":"px")},cur:function(){var a=Ya.propHooks[this.prop];return a&&a.get?a.get(this):Ya.propHooks._default.get(this)},run:function(a){var b,c=Ya.propHooks[this.prop];return this.options.duration?this.pos=b=r.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):Ya.propHooks._default.set(this),this}},Ya.prototype.init.prototype=Ya.prototype,Ya.propHooks={_default:{get:function(a){var b;return 1!==a.elem.nodeType||null!=a.elem[a.prop]&&null==a.elem.style[a.prop]?a.elem[a.prop]:(b=r.css(a.elem,a.prop,""),b&&"auto"!==b?b:0)},set:function(a){r.fx.step[a.prop]?r.fx.step[a.prop](a):1!==a.elem.nodeType||null==a.elem.style[r.cssProps[a.prop]]&&!r.cssHooks[a.prop]?a.elem[a.prop]=a.now:r.style(a.elem,a.prop,a.now+a.unit)}}},Ya.propHooks.scrollTop=Ya.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},r.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2},_default:"swing"},r.fx=Ya.prototype.init,r.fx.step={};var Za,$a,_a=/^(?:toggle|show|hide)$/,ab=/queueHooks$/;function bb(){$a&&(a.requestAnimationFrame(bb),r.fx.tick())}function cb(){return a.setTimeout(function(){Za=void 0}),Za=r.now()}function db(a,b){var c,d=0,e={height:a};for(b=b?1:0;d<4;d+=2-b)c=ba[d],e["margin"+c]=e["padding"+c]=a;return b&&(e.opacity=e.width=a),e}function eb(a,b,c){for(var d,e=(hb.tweeners[b]||[]).concat(hb.tweeners["*"]),f=0,g=e.length;f1)},removeAttr:function(a){return this.each(function(){r.removeAttr(this,a)})}}),r.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return"undefined"==typeof a.getAttribute?r.prop(a,b,c):(1===f&&r.isXMLDoc(a)||(e=r.attrHooks[b.toLowerCase()]||(r.expr.match.bool.test(b)?ib:void 0)), +void 0!==c?null===c?void r.removeAttr(a,b):e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:(a.setAttribute(b,c+""),c):e&&"get"in e&&null!==(d=e.get(a,b))?d:(d=r.find.attr(a,b),null==d?void 0:d))},attrHooks:{type:{set:function(a,b){if(!o.radioValue&&"radio"===b&&r.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}},removeAttr:function(a,b){var c,d=0,e=b&&b.match(K);if(e&&1===a.nodeType)while(c=e[d++])a.removeAttribute(c)}}),ib={set:function(a,b,c){return b===!1?r.removeAttr(a,c):a.setAttribute(c,c),c}},r.each(r.expr.match.bool.source.match(/\w+/g),function(a,b){var c=jb[b]||r.find.attr;jb[b]=function(a,b,d){var e,f,g=b.toLowerCase();return d||(f=jb[g],jb[g]=e,e=null!=c(a,b,d)?g:null,jb[g]=f),e}});var kb=/^(?:input|select|textarea|button)$/i,lb=/^(?:a|area)$/i;r.fn.extend({prop:function(a,b){return S(this,r.prop,a,b,arguments.length>1)},removeProp:function(a){return this.each(function(){delete this[r.propFix[a]||a]})}}),r.extend({prop:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return 1===f&&r.isXMLDoc(a)||(b=r.propFix[b]||b,e=r.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=r.find.attr(a,"tabindex");return b?parseInt(b,10):kb.test(a.nodeName)||lb.test(a.nodeName)&&a.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),o.optSelected||(r.propHooks.selected={get:function(a){var b=a.parentNode;return b&&b.parentNode&&b.parentNode.selectedIndex,null},set:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex)}}),r.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){r.propFix[this.toLowerCase()]=this});function mb(a){var b=a.match(K)||[];return b.join(" ")}function nb(a){return a.getAttribute&&a.getAttribute("class")||""}r.fn.extend({addClass:function(a){var b,c,d,e,f,g,h,i=0;if(r.isFunction(a))return this.each(function(b){r(this).addClass(a.call(this,b,nb(this)))});if("string"==typeof a&&a){b=a.match(K)||[];while(c=this[i++])if(e=nb(c),d=1===c.nodeType&&" "+mb(e)+" "){g=0;while(f=b[g++])d.indexOf(" "+f+" ")<0&&(d+=f+" ");h=mb(d),e!==h&&c.setAttribute("class",h)}}return this},removeClass:function(a){var b,c,d,e,f,g,h,i=0;if(r.isFunction(a))return this.each(function(b){r(this).removeClass(a.call(this,b,nb(this)))});if(!arguments.length)return this.attr("class","");if("string"==typeof a&&a){b=a.match(K)||[];while(c=this[i++])if(e=nb(c),d=1===c.nodeType&&" "+mb(e)+" "){g=0;while(f=b[g++])while(d.indexOf(" "+f+" ")>-1)d=d.replace(" "+f+" "," ");h=mb(d),e!==h&&c.setAttribute("class",h)}}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):r.isFunction(a)?this.each(function(c){r(this).toggleClass(a.call(this,c,nb(this),b),b)}):this.each(function(){var b,d,e,f;if("string"===c){d=0,e=r(this),f=a.match(K)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else void 0!==a&&"boolean"!==c||(b=nb(this),b&&V.set(this,"__className__",b),this.setAttribute&&this.setAttribute("class",b||a===!1?"":V.get(this,"__className__")||""))})},hasClass:function(a){var b,c,d=0;b=" "+a+" ";while(c=this[d++])if(1===c.nodeType&&(" "+mb(nb(c))+" ").indexOf(b)>-1)return!0;return!1}});var ob=/\r/g;r.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=r.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,r(this).val()):a,null==e?e="":"number"==typeof e?e+="":r.isArray(e)&&(e=r.map(e,function(a){return null==a?"":a+""})),b=r.valHooks[this.type]||r.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=r.valHooks[e.type]||r.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(ob,""):null==c?"":c)}}}),r.extend({valHooks:{option:{get:function(a){var b=r.find.attr(a,"value");return null!=b?b:mb(r.text(a))}},select:{get:function(a){var b,c,d,e=a.options,f=a.selectedIndex,g="select-one"===a.type,h=g?null:[],i=g?f+1:e.length;for(d=f<0?i:g?f:0;d-1)&&(c=!0);return c||(a.selectedIndex=-1),f}}}}),r.each(["radio","checkbox"],function(){r.valHooks[this]={set:function(a,b){if(r.isArray(b))return a.checked=r.inArray(r(a).val(),b)>-1}},o.checkOn||(r.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var pb=/^(?:focusinfocus|focusoutblur)$/;r.extend(r.event,{trigger:function(b,c,e,f){var g,h,i,j,k,m,n,o=[e||d],p=l.call(b,"type")?b.type:b,q=l.call(b,"namespace")?b.namespace.split("."):[];if(h=i=e=e||d,3!==e.nodeType&&8!==e.nodeType&&!pb.test(p+r.event.triggered)&&(p.indexOf(".")>-1&&(q=p.split("."),p=q.shift(),q.sort()),k=p.indexOf(":")<0&&"on"+p,b=b[r.expando]?b:new r.Event(p,"object"==typeof b&&b),b.isTrigger=f?2:3,b.namespace=q.join("."),b.rnamespace=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=e),c=null==c?[b]:r.makeArray(c,[b]),n=r.event.special[p]||{},f||!n.trigger||n.trigger.apply(e,c)!==!1)){if(!f&&!n.noBubble&&!r.isWindow(e)){for(j=n.delegateType||p,pb.test(j+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),i=h;i===(e.ownerDocument||d)&&o.push(i.defaultView||i.parentWindow||a)}g=0;while((h=o[g++])&&!b.isPropagationStopped())b.type=g>1?j:n.bindType||p,m=(V.get(h,"events")||{})[b.type]&&V.get(h,"handle"),m&&m.apply(h,c),m=k&&h[k],m&&m.apply&&T(h)&&(b.result=m.apply(h,c),b.result===!1&&b.preventDefault());return b.type=p,f||b.isDefaultPrevented()||n._default&&n._default.apply(o.pop(),c)!==!1||!T(e)||k&&r.isFunction(e[p])&&!r.isWindow(e)&&(i=e[k],i&&(e[k]=null),r.event.triggered=p,e[p](),r.event.triggered=void 0,i&&(e[k]=i)),b.result}},simulate:function(a,b,c){var d=r.extend(new r.Event,c,{type:a,isSimulated:!0});r.event.trigger(d,null,b)}}),r.fn.extend({trigger:function(a,b){return this.each(function(){r.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];if(c)return r.event.trigger(a,b,c,!0)}}),r.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(a,b){r.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),r.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),o.focusin="onfocusin"in a,o.focusin||r.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){r.event.simulate(b,a.target,r.event.fix(a))};r.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=V.access(d,b);e||d.addEventListener(a,c,!0),V.access(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=V.access(d,b)-1;e?V.access(d,b,e):(d.removeEventListener(a,c,!0),V.remove(d,b))}}});var qb=a.location,rb=r.now(),sb=/\?/;r.parseXML=function(b){var c;if(!b||"string"!=typeof b)return null;try{c=(new a.DOMParser).parseFromString(b,"text/xml")}catch(d){c=void 0}return c&&!c.getElementsByTagName("parsererror").length||r.error("Invalid XML: "+b),c};var tb=/\[\]$/,ub=/\r?\n/g,vb=/^(?:submit|button|image|reset|file)$/i,wb=/^(?:input|select|textarea|keygen)/i;function xb(a,b,c,d){var e;if(r.isArray(b))r.each(b,function(b,e){c||tb.test(a)?d(a,e):xb(a+"["+("object"==typeof e&&null!=e?b:"")+"]",e,c,d)});else if(c||"object"!==r.type(b))d(a,b);else for(e in b)xb(a+"["+e+"]",b[e],c,d)}r.param=function(a,b){var c,d=[],e=function(a,b){var c=r.isFunction(b)?b():b;d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(null==c?"":c)};if(r.isArray(a)||a.jquery&&!r.isPlainObject(a))r.each(a,function(){e(this.name,this.value)});else for(c in a)xb(c,a[c],b,e);return d.join("&")},r.fn.extend({serialize:function(){return r.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=r.prop(this,"elements");return a?r.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!r(this).is(":disabled")&&wb.test(this.nodeName)&&!vb.test(a)&&(this.checked||!ia.test(a))}).map(function(a,b){var c=r(this).val();return null==c?null:r.isArray(c)?r.map(c,function(a){return{name:b.name,value:a.replace(ub,"\r\n")}}):{name:b.name,value:c.replace(ub,"\r\n")}}).get()}});var yb=/%20/g,zb=/#.*$/,Ab=/([?&])_=[^&]*/,Bb=/^(.*?):[ \t]*([^\r\n]*)$/gm,Cb=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Db=/^(?:GET|HEAD)$/,Eb=/^\/\//,Fb={},Gb={},Hb="*/".concat("*"),Ib=d.createElement("a");Ib.href=qb.href;function Jb(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(K)||[];if(r.isFunction(c))while(d=f[e++])"+"===d[0]?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Kb(a,b,c,d){var e={},f=a===Gb;function g(h){var i;return e[h]=!0,r.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function Lb(a,b){var c,d,e=r.ajaxSettings.flatOptions||{};for(c in b)void 0!==b[c]&&((e[c]?a:d||(d={}))[c]=b[c]);return d&&r.extend(!0,a,d),a}function Mb(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===d&&(d=a.mimeType||b.getResponseHeader("Content-Type"));if(d)for(e in h)if(h[e]&&h[e].test(d)){i.unshift(e);break}if(i[0]in c)f=i[0];else{for(e in c){if(!i[0]||a.converters[e+" "+i[0]]){f=e;break}g||(g=e)}f=f||g}if(f)return f!==i[0]&&i.unshift(f),c[f]}function Nb(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}r.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:qb.href,type:"GET",isLocal:Cb.test(qb.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Hb,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":r.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Lb(Lb(a,r.ajaxSettings),b):Lb(r.ajaxSettings,a)},ajaxPrefilter:Jb(Fb),ajaxTransport:Jb(Gb),ajax:function(b,c){"object"==typeof b&&(c=b,b=void 0),c=c||{};var e,f,g,h,i,j,k,l,m,n,o=r.ajaxSetup({},c),p=o.context||o,q=o.context&&(p.nodeType||p.jquery)?r(p):r.event,s=r.Deferred(),t=r.Callbacks("once memory"),u=o.statusCode||{},v={},w={},x="canceled",y={readyState:0,getResponseHeader:function(a){var b;if(k){if(!h){h={};while(b=Bb.exec(g))h[b[1].toLowerCase()]=b[2]}b=h[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return k?g:null},setRequestHeader:function(a,b){return null==k&&(a=w[a.toLowerCase()]=w[a.toLowerCase()]||a,v[a]=b),this},overrideMimeType:function(a){return null==k&&(o.mimeType=a),this},statusCode:function(a){var b;if(a)if(k)y.always(a[y.status]);else for(b in a)u[b]=[u[b],a[b]];return this},abort:function(a){var b=a||x;return e&&e.abort(b),A(0,b),this}};if(s.promise(y),o.url=((b||o.url||qb.href)+"").replace(Eb,qb.protocol+"//"),o.type=c.method||c.type||o.method||o.type,o.dataTypes=(o.dataType||"*").toLowerCase().match(K)||[""],null==o.crossDomain){j=d.createElement("a");try{j.href=o.url,j.href=j.href,o.crossDomain=Ib.protocol+"//"+Ib.host!=j.protocol+"//"+j.host}catch(z){o.crossDomain=!0}}if(o.data&&o.processData&&"string"!=typeof o.data&&(o.data=r.param(o.data,o.traditional)),Kb(Fb,o,c,y),k)return y;l=r.event&&o.global,l&&0===r.active++&&r.event.trigger("ajaxStart"),o.type=o.type.toUpperCase(),o.hasContent=!Db.test(o.type),f=o.url.replace(zb,""),o.hasContent?o.data&&o.processData&&0===(o.contentType||"").indexOf("application/x-www-form-urlencoded")&&(o.data=o.data.replace(yb,"+")):(n=o.url.slice(f.length),o.data&&(f+=(sb.test(f)?"&":"?")+o.data,delete o.data),o.cache===!1&&(f=f.replace(Ab,"$1"),n=(sb.test(f)?"&":"?")+"_="+rb++ +n),o.url=f+n),o.ifModified&&(r.lastModified[f]&&y.setRequestHeader("If-Modified-Since",r.lastModified[f]),r.etag[f]&&y.setRequestHeader("If-None-Match",r.etag[f])),(o.data&&o.hasContent&&o.contentType!==!1||c.contentType)&&y.setRequestHeader("Content-Type",o.contentType),y.setRequestHeader("Accept",o.dataTypes[0]&&o.accepts[o.dataTypes[0]]?o.accepts[o.dataTypes[0]]+("*"!==o.dataTypes[0]?", "+Hb+"; q=0.01":""):o.accepts["*"]);for(m in o.headers)y.setRequestHeader(m,o.headers[m]);if(o.beforeSend&&(o.beforeSend.call(p,y,o)===!1||k))return y.abort();if(x="abort",t.add(o.complete),y.done(o.success),y.fail(o.error),e=Kb(Gb,o,c,y)){if(y.readyState=1,l&&q.trigger("ajaxSend",[y,o]),k)return y;o.async&&o.timeout>0&&(i=a.setTimeout(function(){y.abort("timeout")},o.timeout));try{k=!1,e.send(v,A)}catch(z){if(k)throw z;A(-1,z)}}else A(-1,"No Transport");function A(b,c,d,h){var j,m,n,v,w,x=c;k||(k=!0,i&&a.clearTimeout(i),e=void 0,g=h||"",y.readyState=b>0?4:0,j=b>=200&&b<300||304===b,d&&(v=Mb(o,y,d)),v=Nb(o,v,y,j),j?(o.ifModified&&(w=y.getResponseHeader("Last-Modified"),w&&(r.lastModified[f]=w),w=y.getResponseHeader("etag"),w&&(r.etag[f]=w)),204===b||"HEAD"===o.type?x="nocontent":304===b?x="notmodified":(x=v.state,m=v.data,n=v.error,j=!n)):(n=x,!b&&x||(x="error",b<0&&(b=0))),y.status=b,y.statusText=(c||x)+"",j?s.resolveWith(p,[m,x,y]):s.rejectWith(p,[y,x,n]),y.statusCode(u),u=void 0,l&&q.trigger(j?"ajaxSuccess":"ajaxError",[y,o,j?m:n]),t.fireWith(p,[y,x]),l&&(q.trigger("ajaxComplete",[y,o]),--r.active||r.event.trigger("ajaxStop")))}return y},getJSON:function(a,b,c){return r.get(a,b,c,"json")},getScript:function(a,b){return r.get(a,void 0,b,"script")}}),r.each(["get","post"],function(a,b){r[b]=function(a,c,d,e){return r.isFunction(c)&&(e=e||d,d=c,c=void 0),r.ajax(r.extend({url:a,type:b,dataType:e,data:c,success:d},r.isPlainObject(a)&&a))}}),r._evalUrl=function(a){return r.ajax({url:a,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,"throws":!0})},r.fn.extend({wrapAll:function(a){var b;return this[0]&&(r.isFunction(a)&&(a=a.call(this[0])),b=r(a,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstElementChild)a=a.firstElementChild;return a}).append(this)),this},wrapInner:function(a){return r.isFunction(a)?this.each(function(b){r(this).wrapInner(a.call(this,b))}):this.each(function(){var b=r(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=r.isFunction(a);return this.each(function(c){r(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(a){return this.parent(a).not("body").each(function(){r(this).replaceWith(this.childNodes)}),this}}),r.expr.pseudos.hidden=function(a){return!r.expr.pseudos.visible(a)},r.expr.pseudos.visible=function(a){return!!(a.offsetWidth||a.offsetHeight||a.getClientRects().length)},r.ajaxSettings.xhr=function(){try{return new a.XMLHttpRequest}catch(b){}};var Ob={0:200,1223:204},Pb=r.ajaxSettings.xhr();o.cors=!!Pb&&"withCredentials"in Pb,o.ajax=Pb=!!Pb,r.ajaxTransport(function(b){var c,d;if(o.cors||Pb&&!b.crossDomain)return{send:function(e,f){var g,h=b.xhr();if(h.open(b.type,b.url,b.async,b.username,b.password),b.xhrFields)for(g in b.xhrFields)h[g]=b.xhrFields[g];b.mimeType&&h.overrideMimeType&&h.overrideMimeType(b.mimeType),b.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest");for(g in e)h.setRequestHeader(g,e[g]);c=function(a){return function(){c&&(c=d=h.onload=h.onerror=h.onabort=h.onreadystatechange=null,"abort"===a?h.abort():"error"===a?"number"!=typeof h.status?f(0,"error"):f(h.status,h.statusText):f(Ob[h.status]||h.status,h.statusText,"text"!==(h.responseType||"text")||"string"!=typeof h.responseText?{binary:h.response}:{text:h.responseText},h.getAllResponseHeaders()))}},h.onload=c(),d=h.onerror=c("error"),void 0!==h.onabort?h.onabort=d:h.onreadystatechange=function(){4===h.readyState&&a.setTimeout(function(){c&&d()})},c=c("abort");try{h.send(b.hasContent&&b.data||null)}catch(i){if(c)throw i}},abort:function(){c&&c()}}}),r.ajaxPrefilter(function(a){a.crossDomain&&(a.contents.script=!1)}),r.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(a){return r.globalEval(a),a}}}),r.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET")}),r.ajaxTransport("script",function(a){if(a.crossDomain){var b,c;return{send:function(e,f){b=r(" + + + + + + + + + + diff --git a/ABC_Score/config/application.html b/ABC_Score/config/application.html new file mode 100644 index 00000000..cf8b3cdf --- /dev/null +++ b/ABC_Score/config/application.html @@ -0,0 +1,138 @@ + + + + + + Ruby Critic - Home + + + + + + + + + + + + +
              + + + +
              +
              +
              + +
              +
              + + + Updated + + +
              +
              +

              config / application.rb

              +
              +
              + +
              + +
              +
              +
              +
              +
              + A +
              +
              +
              +
              +
              19 lines of codes
              +
              0 methods
              +
              +
              +
              N/A complexity/method
              +
              3 churn
              +
              +
              +
              0.0 complexity
              +
              0 duplications
              +
              +
              +
              +
              +
              +
              + +
              +
              +
              + + require_relative 'boot' + +require 'rails/all' + +# Require the gems listed in Gemfile, including any gems +# you've limited to :test, :development, or :production. +Bundler.require(*Rails.groups) + +module SecretariaPpgi + class Application < Rails::Application
              1. SecretariaPpgi::Application has no descriptive comment
              + # Initialize configuration defaults for originally generated Rails version. + config.load_defaults 5.2 + + # Settings in config/environments/* take precedence over those specified here. + # Application configuration can go into files in config/initializers + # -- all .rb files in that directory are automatically loaded after loading + # the framework and any gems in your application. + end +end +
              +
              +
              + +
              +
              +
              + + + + + + + + + + + + + diff --git a/ABC_Score/config/boot.html b/ABC_Score/config/boot.html new file mode 100644 index 00000000..0850468f --- /dev/null +++ b/ABC_Score/config/boot.html @@ -0,0 +1,123 @@ + + + + + + Ruby Critic - Home + + + + + + + + + + + + +
              + + + +
              +
              +
              + +
              +
              + + + Updated + + +
              +
              +

              config / boot.rb

              +
              +
              + +
              + +
              +
              +
              +
              +
              + A +
              +
              +
              +
              +
              4 lines of codes
              +
              0 methods
              +
              +
              +
              N/A complexity/method
              +
              1 churn
              +
              +
              +
              0.0 complexity
              +
              0 duplications
              +
              +
              +
              +
              +
              +
              + +
              +
              +
              + + ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../Gemfile', __dir__) + +require 'bundler/setup' # Set up gems listed in the Gemfile. +require 'bootsnap/setup' # Speed up boot time by caching expensive operations. + +
              +
              + +
              +
              +
              + + + + + + + + + + + + + diff --git a/ABC_Score/config/environment.html b/ABC_Score/config/environment.html new file mode 100644 index 00000000..6287083f --- /dev/null +++ b/ABC_Score/config/environment.html @@ -0,0 +1,124 @@ + + + + + + Ruby Critic - Home + + + + + + + + + + + + +
              + + + +
              +
              +
              + +
              +
              + + + Updated + + +
              +
              +

              config / environment.rb

              +
              +
              + +
              + +
              +
              +
              +
              +
              + A +
              +
              +
              +
              +
              5 lines of codes
              +
              0 methods
              +
              +
              +
              N/A complexity/method
              +
              1 churn
              +
              +
              +
              0.0 complexity
              +
              0 duplications
              +
              +
              +
              +
              +
              +
              + +
              +
              +
              + + # Load the Rails application. +require_relative 'application' + +# Initialize the Rails application. +Rails.application.initialize! + +
              +
              + +
              +
              +
              + + + + + + + + + + + + + diff --git a/ABC_Score/config/environments/development.html b/ABC_Score/config/environments/development.html new file mode 100644 index 00000000..caab7e63 --- /dev/null +++ b/ABC_Score/config/environments/development.html @@ -0,0 +1,182 @@ + + + + + + Ruby Critic - Home + + + + + + + + + + + + +
              + + + +
              +
              +
              + +
              +
              + + + Updated + + +
              +
              +

              config/environments / development.rb

              +
              +
              + +
              + +
              +
              +
              +
              +
              + A +
              +
              +
              +
              +
              63 lines of codes
              +
              0 methods
              +
              +
              +
              N/A complexity/method
              +
              3 churn
              +
              +
              +
              0.0 complexity
              +
              0 duplications
              +
              +
              +
              +
              +
              +
              + +
              +
              +
              + + Rails.application.configure do + # Settings specified here will take precedence over those in config/application.rb. + + # In the development environment your application's code is reloaded on + # every request. This slows down response time but is perfect for development + # since you don't have to restart the web server when you make code changes. + config.cache_classes = false + + # Do not eager load code on boot. + config.eager_load = false + + # Show full error reports. + config.consider_all_requests_local = true + + # Enable/disable caching. By default caching is disabled. + # Run rails dev:cache to toggle caching. + if Rails.root.join('tmp', 'caching-dev.txt').exist? + config.action_controller.perform_caching = true + + config.cache_store = :memory_store + config.public_file_server.headers = { + 'Cache-Control' => "public, max-age=#{2.days.to_i}" + } + else + config.action_controller.perform_caching = false + + config.cache_store = :null_store + end + + # Store uploaded files on the local file system (see config/storage.yml for options) + config.active_storage.service = :local + + # action mailer url + config.action_mailer.default_url_options = { host: 'localhost', port: 3000 } + # Don't care if the mailer can't send. + config.action_mailer.raise_delivery_errors = false + + config.action_mailer.perform_caching = false + + # Print deprecation notices to the Rails logger. + config.active_support.deprecation = :log + + # Raise an error on page load if there are pending migrations. + config.active_record.migration_error = :page_load + + # Highlight code that triggered database queries in logs. + config.active_record.verbose_query_logs = true + + # Debug mode disables concatenation and preprocessing of assets. + # This option may cause significant delays in view rendering with a large + # number of complex assets. + config.assets.debug = true + + # Suppress logger output for asset requests. + config.assets.quiet = true + + # Raises error for missing translations + # config.action_view.raise_on_missing_translations = true + + # Use an evented file watcher to asynchronously detect changes in source code, + # routes, locales, etc. This feature depends on the listen gem. + config.file_watcher = ActiveSupport::EventedFileUpdateChecker +end + +
              +
              + +
              +
              +
              + + + + + + + + + + + + + diff --git a/ABC_Score/config/environments/production.html b/ABC_Score/config/environments/production.html new file mode 100644 index 00000000..250a6a3a --- /dev/null +++ b/ABC_Score/config/environments/production.html @@ -0,0 +1,217 @@ + + + + + + Ruby Critic - Home + + + + + + + + + + + + +
              + + + +
              +
              +
              + +
              +
              + + + Updated + + +
              +
              +

              config/environments / production.rb

              +
              +
              + +
              + +
              +
              +
              +
              +
              + A +
              +
              +
              +
              +
              98 lines of codes
              +
              0 methods
              +
              +
              +
              N/A complexity/method
              +
              3 churn
              +
              +
              +
              0.0 complexity
              +
              0 duplications
              +
              +
              +
              +
              +
              +
              + +
              +
              +
              + + # frozen_string_literal: true + +Rails.application.configure do + # Settings specified here will take precedence over those in config/application.rb. + + # Code is not reloaded between requests. + config.cache_classes = true + + # Eager load code on boot. This eager loads most of Rails and + # your application in memory, allowing both threaded web servers + # and those relying on copy on write to perform better. + # Rake tasks automatically ignore this option for performance. + config.eager_load = true + + # Full error reports are disabled and caching is turned on. + config.consider_all_requests_local = false + config.action_controller.perform_caching = true + + # Ensures that a master key has been made available in either ENV["RAILS_MASTER_KEY"] + # or in config/master.key. This key is used to decrypt credentials (and other encrypted files). + # config.require_master_key = true + + # Disable serving static files from the `/public` folder by default since + # Apache or NGINX already handles this. + config.public_file_server.enabled = ENV['RAILS_SERVE_STATIC_FILES'].present? + + # Compress JavaScripts and CSS. + config.assets.js_compressor = :uglifier + # config.assets.css_compressor = :sass + + # Do not fallback to assets pipeline if a precompiled asset is missed. + config.assets.compile = false + + # `config.assets.precompile` and `config.assets.version` have moved to config/initializers/assets.rb + + # Enable serving of images, stylesheets, and JavaScripts from an asset server. + # config.action_controller.asset_host = 'http://assets.example.com' + + # Specifies the header that your server uses for sending files. + # config.action_dispatch.x_sendfile_header = 'X-Sendfile' # for Apache + # config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for NGINX + + # Store uploaded files on the local file system (see config/storage.yml for options) + config.active_storage.service = :local + + # Mount Action Cable outside main process or domain + # config.action_cable.mount_path = nil + # config.action_cable.url = 'wss://example.com/cable' + # config.action_cable.allowed_request_origins = [ 'http://example.com', /http:\/\/example.*/ ] + + # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies. + # config.force_ssl = true + + # Use the lowest log level to ensure availability of diagnostic information + # when problems arise. + config.log_level = :debug + + # Prepend all log lines with the following tags. + config.log_tags = [:request_id] + + # Use a different cache store in production. + # config.cache_store = :mem_cache_store + + # Use a real queuing backend for Active Job (and separate queues per environment) + # config.active_job.queue_adapter = :resque + # config.active_job.queue_name_prefix = "secretaria_ppgi_#{Rails.env}" + + # @TODO change this value to the production host + config.action_mailer.default_url_options = { host: 'localhost', port: 3000 } + config.action_mailer.perform_caching = false + + # Ignore bad email addresses and do not raise email delivery errors. + # Set this to true and configure the email server for immediate delivery to raise delivery errors. + # config.action_mailer.raise_delivery_errors = false + + # Enable locale fallbacks for I18n (makes lookups for any locale fall back to + # the I18n.default_locale when a translation cannot be found). + config.i18n.fallbacks = true + + # Send deprecation notices to registered listeners. + config.active_support.deprecation = :notify + + # Use default logging formatter so that PID and timestamp are not suppressed. + config.log_formatter = ::Logger::Formatter.new + + # Use a different logger for distributed setups. + # require 'syslog/logger' + # config.logger = ActiveSupport::TaggedLogging.new(Syslog::Logger.new 'app-name') + + if ENV['RAILS_LOG_TO_STDOUT'].present? + logger = ActiveSupport::Logger.new(STDOUT) + logger.formatter = config.log_formatter + config.logger = ActiveSupport::TaggedLogging.new(logger) + end + + # Do not dump schema after migrations. + config.active_record.dump_schema_after_migration = false +end + +
              +
              + +
              +
              +
              + + + + + + + + + + + + + diff --git a/ABC_Score/config/environments/test.html b/ABC_Score/config/environments/test.html new file mode 100644 index 00000000..5c97a690 --- /dev/null +++ b/ABC_Score/config/environments/test.html @@ -0,0 +1,165 @@ + + + + + + Ruby Critic - Home + + + + + + + + + + + + +
              + + + +
              +
              +
              + +
              +
              + + + Updated + + +
              +
              +

              config/environments / test.rb

              +
              +
              + +
              + +
              +
              +
              +
              +
              + A +
              +
              +
              +
              +
              46 lines of codes
              +
              0 methods
              +
              +
              +
              N/A complexity/method
              +
              2 churn
              +
              +
              +
              0.0 complexity
              +
              0 duplications
              +
              +
              +
              +
              +
              +
              + +
              +
              +
              + + Rails.application.configure do + # Settings specified here will take precedence over those in config/application.rb. + + # The test environment is used exclusively to run your application's + # test suite. You never need to work with it otherwise. Remember that + # your test database is "scratch space" for the test suite and is wiped + # and recreated between test runs. Don't rely on the data there! + config.cache_classes = true + + # Do not eager load code on boot. This avoids loading your whole application + # just for the purpose of running a single test. If you are using a tool that + # preloads Rails for running tests, you may have to set it to true. + config.eager_load = false + + # Configure public file server for tests with Cache-Control for performance. + config.public_file_server.enabled = true + config.public_file_server.headers = { + 'Cache-Control' => "public, max-age=#{1.hour.to_i}" + } + + # Show full error reports and disable caching. + config.consider_all_requests_local = true + config.action_controller.perform_caching = false + + # Raise exceptions instead of rendering exception templates. + config.action_dispatch.show_exceptions = false + + # Disable request forgery protection in test environment. + config.action_controller.allow_forgery_protection = false + + # Store uploaded files on the local file system in a temporary directory + config.active_storage.service = :test + + config.action_mailer.perform_caching = false + + # Tell Action Mailer not to deliver emails to the real world. + # The :test delivery method accumulates sent emails in the + # ActionMailer::Base.deliveries array. + config.action_mailer.delivery_method = :test + + # Print deprecation notices to the stderr. + config.active_support.deprecation = :stderr + + # Raises error for missing translations + # config.action_view.raise_on_missing_translations = true +end + +
              +
              + +
              +
              +
              + + + + + + + + + + + + + diff --git a/ABC_Score/config/initializers/application_controller_renderer.html b/ABC_Score/config/initializers/application_controller_renderer.html new file mode 100644 index 00000000..191343c1 --- /dev/null +++ b/ABC_Score/config/initializers/application_controller_renderer.html @@ -0,0 +1,127 @@ + + + + + + Ruby Critic - Home + + + + + + + + + + + + +
              + + + +
              +
              +
              + +
              +
              + + + Updated + + +
              +
              +

              config/initializers / application_controller_renderer.rb

              +
              +
              + +
              + +
              +
              +
              +
              +
              + A +
              +
              +
              +
              +
              8 lines of codes
              +
              0 methods
              +
              +
              +
              N/A complexity/method
              +
              1 churn
              +
              +
              +
              0.0 complexity
              +
              0 duplications
              +
              +
              +
              +
              +
              +
              + +
              +
              +
              + + # Be sure to restart your server when you modify this file. + +# ActiveSupport::Reloader.to_prepare do +# ApplicationController.renderer.defaults.merge!( +# http_host: 'example.org', +# https: false +# ) +# end + +
              +
              + +
              +
              +
              + + + + + + + + + + + + + diff --git a/ABC_Score/config/initializers/assets.html b/ABC_Score/config/initializers/assets.html new file mode 100644 index 00000000..2bc38efd --- /dev/null +++ b/ABC_Score/config/initializers/assets.html @@ -0,0 +1,133 @@ + + + + + + Ruby Critic - Home + + + + + + + + + + + + +
              + + + +
              +
              +
              + +
              +
              + + + Updated + + +
              +
              +

              config/initializers / assets.rb

              +
              +
              + +
              + +
              +
              +
              +
              +
              + A +
              +
              +
              +
              +
              14 lines of codes
              +
              0 methods
              +
              +
              +
              N/A complexity/method
              +
              1 churn
              +
              +
              +
              0.0 complexity
              +
              0 duplications
              +
              +
              +
              +
              +
              +
              + +
              +
              +
              + + # Be sure to restart your server when you modify this file. + +# Version of your assets, change this if you want to expire all your assets. +Rails.application.config.assets.version = '1.0' + +# Add additional assets to the asset load path. +# Rails.application.config.assets.paths << Emoji.images_path +# Add Yarn node_modules folder to the asset load path. +Rails.application.config.assets.paths << Rails.root.join('node_modules') + +# Precompile additional assets. +# application.js, application.css, and all non-JS/CSS in the app/assets +# folder are already added. +# Rails.application.config.assets.precompile += %w( admin.js admin.css ) + +
              +
              + +
              +
              +
              + + + + + + + + + + + + + diff --git a/ABC_Score/config/initializers/backtrace_silencers.html b/ABC_Score/config/initializers/backtrace_silencers.html new file mode 100644 index 00000000..13020bc1 --- /dev/null +++ b/ABC_Score/config/initializers/backtrace_silencers.html @@ -0,0 +1,126 @@ + + + + + + Ruby Critic - Home + + + + + + + + + + + + +
              + + + +
              +
              +
              + +
              +
              + + + Updated + + +
              +
              +

              config/initializers / backtrace_silencers.rb

              +
              +
              + +
              + +
              +
              +
              +
              +
              + A +
              +
              +
              +
              +
              7 lines of codes
              +
              0 methods
              +
              +
              +
              N/A complexity/method
              +
              1 churn
              +
              +
              +
              0.0 complexity
              +
              0 duplications
              +
              +
              +
              +
              +
              +
              + +
              +
              +
              + + # Be sure to restart your server when you modify this file. + +# You can add backtrace silencers for libraries that you're using but don't wish to see in your backtraces. +# Rails.backtrace_cleaner.add_silencer { |line| line =~ /my_noisy_library/ } + +# You can also remove all the silencers if you're trying to debug a problem that might stem from framework code. +# Rails.backtrace_cleaner.remove_silencers! + +
              +
              + +
              +
              +
              + + + + + + + + + + + + + diff --git a/ABC_Score/config/initializers/content_security_policy.html b/ABC_Score/config/initializers/content_security_policy.html new file mode 100644 index 00000000..637c5731 --- /dev/null +++ b/ABC_Score/config/initializers/content_security_policy.html @@ -0,0 +1,144 @@ + + + + + + Ruby Critic - Home + + + + + + + + + + + + +
              + + + +
              +
              +
              + +
              +
              + + + Updated + + +
              +
              +

              config/initializers / content_security_policy.rb

              +
              +
              + +
              + +
              +
              +
              +
              +
              + A +
              +
              +
              +
              +
              25 lines of codes
              +
              0 methods
              +
              +
              +
              N/A complexity/method
              +
              1 churn
              +
              +
              +
              0.0 complexity
              +
              0 duplications
              +
              +
              +
              +
              +
              +
              + +
              +
              +
              + + # Be sure to restart your server when you modify this file. + +# Define an application-wide content security policy +# For further information see the following documentation +# https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy + +# Rails.application.config.content_security_policy do |policy| +# policy.default_src :self, :https +# policy.font_src :self, :https, :data +# policy.img_src :self, :https, :data +# policy.object_src :none +# policy.script_src :self, :https +# policy.style_src :self, :https + +# # Specify URI for violation reports +# # policy.report_uri "/csp-violation-report-endpoint" +# end + +# If you are using UJS then enable automatic nonce generation +# Rails.application.config.content_security_policy_nonce_generator = -> request { SecureRandom.base64(16) } + +# Report CSP violations to a specified URI +# For further information see the following documentation: +# https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy-Report-Only +# Rails.application.config.content_security_policy_report_only = true + +
              +
              + +
              +
              +
              + + + + + + + + + + + + + diff --git a/ABC_Score/config/initializers/cookies_serializer.html b/ABC_Score/config/initializers/cookies_serializer.html new file mode 100644 index 00000000..9df57e66 --- /dev/null +++ b/ABC_Score/config/initializers/cookies_serializer.html @@ -0,0 +1,124 @@ + + + + + + Ruby Critic - Home + + + + + + + + + + + + +
              + + + +
              +
              +
              + +
              +
              + + + Updated + + +
              +
              +

              config/initializers / cookies_serializer.rb

              +
              +
              + +
              + +
              +
              +
              +
              +
              + A +
              +
              +
              +
              +
              5 lines of codes
              +
              0 methods
              +
              +
              +
              N/A complexity/method
              +
              1 churn
              +
              +
              +
              0.0 complexity
              +
              0 duplications
              +
              +
              +
              +
              +
              +
              + +
              +
              +
              + + # Be sure to restart your server when you modify this file. + +# Specify a serializer for the signed and encrypted cookie jars. +# Valid options are :json, :marshal, and :hybrid. +Rails.application.config.action_dispatch.cookies_serializer = :json + +
              +
              + +
              +
              +
              + + + + + + + + + + + + + diff --git a/ABC_Score/config/initializers/devise.html b/ABC_Score/config/initializers/devise.html new file mode 100644 index 00000000..333b2a89 --- /dev/null +++ b/ABC_Score/config/initializers/devise.html @@ -0,0 +1,418 @@ + + + + + + Ruby Critic - Home + + + + + + + + + + + + +
              + + + +
              +
              +
              + +
              +
              + + + Updated + + +
              +
              +

              config/initializers / devise.rb

              +
              +
              + +
              + +
              +
              +
              +
              +
              + A +
              +
              +
              +
              +
              299 lines of codes
              +
              0 methods
              +
              +
              +
              N/A complexity/method
              +
              2 churn
              +
              +
              +
              0.0 complexity
              +
              0 duplications
              +
              +
              +
              +
              +
              +
              + +
              +
              +
              + + # frozen_string_literal: true + +# Use this hook to configure devise mailer, warden hooks and so forth. +# Many of these configuration options can be set straight in your model. +Devise.setup do |config| + # The secret key used by Devise. Devise uses this key to generate + # random tokens. Changing this key will render invalid all existing + # confirmation, reset password and unlock tokens in the database. + # Devise will use the `secret_key_base` as its `secret_key` + # by default. You can change it below and use your own secret key. + # config.secret_key = '53c9f741be418fcb535205b1faaad3062f2fb772dcf8b618c3fe37a03164092b11cce7e2fd0b2f88d17ebece35eac91546f6f987a3c739ff3681aa5721b55f8a' + + # ==> Controller configuration + # Configure the parent class to the devise controllers. + # config.parent_controller = 'DeviseController' + + # ==> Mailer Configuration + # Configure the e-mail address which will be shown in Devise::Mailer, + # note that it will be overwritten if you use your own mailer class + # with default "from" parameter. + config.mailer_sender = 'please-change-me-at-config-initializers-devise@example.com' + + # Configure the class responsible to send e-mails. + # config.mailer = 'Devise::Mailer' + + # Configure the parent class responsible to send e-mails. + # config.parent_mailer = 'ActionMailer::Base' + + # ==> ORM configuration + # Load and configure the ORM. Supports :active_record (default) and + # :mongoid (bson_ext recommended) by default. Other ORMs may be + # available as additional gems. + require 'devise/orm/active_record' + + # ==> Configuration for any authentication mechanism + # Configure which keys are used when authenticating a user. The default is + # just :email. You can configure it to use [:username, :subdomain], so for + # authenticating a user, both parameters are required. Remember that those + # parameters are used only when authenticating and not when retrieving from + # session. If you need permissions, you should implement that in a before filter. + # You can also supply a hash where the value is a boolean determining whether + # or not authentication should be aborted when the value is not present. + # config.authentication_keys = [:email] + + # Configure parameters from the request object used for authentication. Each entry + # given should be a request method and it will automatically be passed to the + # find_for_authentication method and considered in your model lookup. For instance, + # if you set :request_keys to [:subdomain], :subdomain will be used on authentication. + # The same considerations mentioned for authentication_keys also apply to request_keys. + # config.request_keys = [] + + # Configure which authentication keys should be case-insensitive. + # These keys will be downcased upon creating or modifying a user and when used + # to authenticate or find a user. Default is :email. + config.case_insensitive_keys = [:email] + + # Configure which authentication keys should have whitespace stripped. + # These keys will have whitespace before and after removed upon creating or + # modifying a user and when used to authenticate or find a user. Default is :email. + config.strip_whitespace_keys = [:email] + + # Tell if authentication through request.params is enabled. True by default. + # It can be set to an array that will enable params authentication only for the + # given strategies, for example, `config.params_authenticatable = [:database]` will + # enable it only for database (email + password) authentication. + # config.params_authenticatable = true + + # Tell if authentication through HTTP Auth is enabled. False by default. + # It can be set to an array that will enable http authentication only for the + # given strategies, for example, `config.http_authenticatable = [:database]` will + # enable it only for database authentication. The supported strategies are: + # :database = Support basic authentication with authentication key + password + # config.http_authenticatable = false + + # If 401 status code should be returned for AJAX requests. True by default. + # config.http_authenticatable_on_xhr = true + + # The realm used in Http Basic Authentication. 'Application' by default. + # config.http_authentication_realm = 'Application' + + # It will change confirmation, password recovery and other workflows + # to behave the same regardless if the e-mail provided was right or wrong. + # Does not affect registerable. + # config.paranoid = true + + # By default Devise will store the user in session. You can skip storage for + # particular strategies by setting this option. + # Notice that if you are skipping storage for all authentication paths, you + # may want to disable generating routes to Devise's sessions controller by + # passing skip: :sessions to `devise_for` in your config/routes.rb + config.skip_session_storage = [:http_auth] + + # By default, Devise cleans up the CSRF token on authentication to + # avoid CSRF token fixation attacks. This means that, when using AJAX + # requests for sign in and sign up, you need to get a new CSRF token + # from the server. You can disable this option at your own risk. + # config.clean_up_csrf_token_on_authentication = true + + # When false, Devise will not attempt to reload routes on eager load. + # This can reduce the time taken to boot the app but if your application + # requires the Devise mappings to be loaded during boot time the application + # won't boot properly. + # config.reload_routes = true + + # ==> Configuration for :database_authenticatable + # For bcrypt, this is the cost for hashing the password and defaults to 11. If + # using other algorithms, it sets how many times you want the password to be hashed. + # + # Limiting the stretches to just one in testing will increase the performance of + # your test suite dramatically. However, it is STRONGLY RECOMMENDED to not use + # a value less than 10 in other environments. Note that, for bcrypt (the default + # algorithm), the cost increases exponentially with the number of stretches (e.g. + # a value of 20 is already extremely slow: approx. 60 seconds for 1 calculation). + config.stretches = Rails.env.test? ? 1 : 11 + + # Set up a pepper to generate the hashed password. + # config.pepper = '30f4c027405b92d0b7d5f25895b625a97791988e1867e0b79fb3d5c05b0ffff2ace19181de61c481bdb477e1c2fff8be2203afd78336ce261b97e9296f2259e9' + + # Send a notification to the original email when the user's email is changed. + # config.send_email_changed_notification = false + + # Send a notification email when the user's password is changed. + # config.send_password_change_notification = false + + # ==> Configuration for :confirmable + # A period that the user is allowed to access the website even without + # confirming their account. For instance, if set to 2.days, the user will be + # able to access the website for two days without confirming their account, + # access will be blocked just in the third day. + # You can also set it to nil, which will allow the user to access the website + # without confirming their account. + # Default is 0.days, meaning the user cannot access the website without + # confirming their account. + # config.allow_unconfirmed_access_for = 2.days + + # A period that the user is allowed to confirm their account before their + # token becomes invalid. For example, if set to 3.days, the user can confirm + # their account within 3 days after the mail was sent, but on the fourth day + # their account can't be confirmed with the token any more. + # Default is nil, meaning there is no restriction on how long a user can take + # before confirming their account. + # config.confirm_within = 3.days + + # If true, requires any email changes to be confirmed (exactly the same way as + # initial account confirmation) to be applied. Requires additional unconfirmed_email + # db field (see migrations). Until confirmed, new email is stored in + # unconfirmed_email column, and copied to email column on successful confirmation. + config.reconfirmable = true + + # Defines which key will be used when confirming an account + # config.confirmation_keys = [:email] + + # ==> Configuration for :rememberable + # The time the user will be remembered without asking for credentials again. + # config.remember_for = 2.weeks + + # Invalidates all the remember me tokens when the user signs out. + config.expire_all_remember_me_on_sign_out = true + + # If true, extends the user's remember period when remembered via cookie. + # config.extend_remember_period = false + + # Options to be passed to the created cookie. For instance, you can set + # secure: true in order to force SSL only cookies. + # config.rememberable_options = {} + + # ==> Configuration for :validatable + # Range for password length. + config.password_length = 6..128 + + # Email regex used to validate email formats. It simply asserts that + # one (and only one) @ exists in the given string. This is mainly + # to give user feedback and not to assert the e-mail validity. + config.email_regexp = /\A[^@\s]+@[^@\s]+\z/ + + # ==> Configuration for :timeoutable + # The time you want to timeout the user session without activity. After this + # time the user will be asked for credentials again. Default is 30 minutes. + # config.timeout_in = 30.minutes + + # ==> Configuration for :lockable + # Defines which strategy will be used to lock an account. + # :failed_attempts = Locks an account after a number of failed attempts to sign in. + # :none = No lock strategy. You should handle locking by yourself. + # config.lock_strategy = :failed_attempts + + # Defines which key will be used when locking and unlocking an account + # config.unlock_keys = [:email] + + # Defines which strategy will be used to unlock an account. + # :email = Sends an unlock link to the user email + # :time = Re-enables login after a certain amount of time (see :unlock_in below) + # :both = Enables both strategies + # :none = No unlock strategy. You should handle unlocking by yourself. + # config.unlock_strategy = :both + + # Number of authentication tries before locking an account if lock_strategy + # is failed attempts. + # config.maximum_attempts = 20 + + # Time interval to unlock the account if :time is enabled as unlock_strategy. + # config.unlock_in = 1.hour + + # Warn on the last attempt before the account is locked. + # config.last_attempt_warning = true + + # ==> Configuration for :recoverable + # + # Defines which key will be used when recovering the password for an account + # config.reset_password_keys = [:email] + + # Time interval you can reset your password with a reset password key. + # Don't put a too small interval or your users won't have the time to + # change their passwords. + config.reset_password_within = 6.hours + + # When set to false, does not sign a user in automatically after their password is + # reset. Defaults to true, so a user is signed in automatically after a reset. + # config.sign_in_after_reset_password = true + + # ==> Configuration for :encryptable + # Allow you to use another hashing or encryption algorithm besides bcrypt (default). + # You can use :sha1, :sha512 or algorithms from others authentication tools as + # :clearance_sha1, :authlogic_sha512 (then you should set stretches above to 20 + # for default behavior) and :restful_authentication_sha1 (then you should set + # stretches to 10, and copy REST_AUTH_SITE_KEY to pepper). + # + # Require the `devise-encryptable` gem when using anything other than bcrypt + # config.encryptor = :sha512 + + # ==> Scopes configuration + # Turn scoped views on. Before rendering "sessions/new", it will first check for + # "users/sessions/new". It's turned off by default because it's slower if you + # are using only default views. + # config.scoped_views = false + + # Configure the default scope given to Warden. By default it's the first + # devise role declared in your routes (usually :user). + # config.default_scope = :user + + # Set this configuration to false if you want /users/sign_out to sign out + # only the current scope. By default, Devise signs out all scopes. + # config.sign_out_all_scopes = true + + # ==> Navigation configuration + # Lists the formats that should be treated as navigational. Formats like + # :html, should redirect to the sign in page when the user does not have + # access, but formats like :xml or :json, should return 401. + # + # If you have any extra navigational formats, like :iphone or :mobile, you + # should add them to the navigational formats lists. + # + # The "*/*" below is required to match Internet Explorer requests. + # config.navigational_formats = ['*/*', :html] + + # The default HTTP method used to sign out a resource. Default is :delete. + config.sign_out_via = :delete + + # ==> OmniAuth + # Add a new OmniAuth provider. Check the wiki for more information on setting + # up on your models and hooks. + # config.omniauth :github, 'APP_ID', 'APP_SECRET', scope: 'user,public_repo' + + # ==> Warden configuration + # If you want to use other strategies, that are not supported by Devise, or + # change the failure app, you can configure them inside the config.warden block. + # + # config.warden do |manager| + # manager.intercept_401 = false + # manager.default_strategies(scope: :user).unshift :some_external_strategy + # end + + # ==> Mountable engine configurations + # When using Devise inside an engine, let's call it `MyEngine`, and this engine + # is mountable, there are some extra configurations to be taken into account. + # The following options are available, assuming the engine is mounted as: + # + # mount MyEngine, at: '/my_engine' + # + # The router that invoked `devise_for`, in the example above, would be: + # config.router_name = :my_engine + # + # When using OmniAuth, Devise cannot automatically set OmniAuth path, + # so you need to do it manually. For the users scope, it would be: + # config.omniauth_path_prefix = '/my_engine/users/auth' + + # ==> Turbolinks configuration + # If your app is using Turbolinks, Turbolinks::Controller needs to be included to make redirection work correctly: + # + # ActiveSupport.on_load(:devise_failure_app) do + # include Turbolinks::Controller + # end + + # ==> Configuration for :registerable + + # When set to false, does not sign a user in automatically after their password is + # changed. Defaults to true, so a user is signed in automatically after changing a password. + # config.sign_in_after_change_password = true +end + +
              +
              + +
              +
              +
              + + + + + + + + + + + + + diff --git a/ABC_Score/config/initializers/filter_parameter_logging.html b/ABC_Score/config/initializers/filter_parameter_logging.html new file mode 100644 index 00000000..3a92cc6e --- /dev/null +++ b/ABC_Score/config/initializers/filter_parameter_logging.html @@ -0,0 +1,123 @@ + + + + + + Ruby Critic - Home + + + + + + + + + + + + +
              + + + +
              +
              +
              + +
              +
              + + + Updated + + +
              +
              +

              config/initializers / filter_parameter_logging.rb

              +
              +
              + +
              + +
              +
              +
              +
              +
              + A +
              +
              +
              +
              +
              4 lines of codes
              +
              0 methods
              +
              +
              +
              N/A complexity/method
              +
              1 churn
              +
              +
              +
              0.0 complexity
              +
              0 duplications
              +
              +
              +
              +
              +
              +
              + +
              +
              +
              + + # Be sure to restart your server when you modify this file. + +# Configure sensitive parameters which will be filtered from the log file. +Rails.application.config.filter_parameters += [:password] + +
              +
              + +
              +
              +
              + + + + + + + + + + + + + diff --git a/ABC_Score/config/initializers/inflections.html b/ABC_Score/config/initializers/inflections.html new file mode 100644 index 00000000..4c35bfc5 --- /dev/null +++ b/ABC_Score/config/initializers/inflections.html @@ -0,0 +1,135 @@ + + + + + + Ruby Critic - Home + + + + + + + + + + + + +
              + + + +
              +
              +
              + +
              +
              + + + Updated + + +
              +
              +

              config/initializers / inflections.rb

              +
              +
              + +
              + +
              +
              +
              +
              +
              + A +
              +
              +
              +
              +
              16 lines of codes
              +
              0 methods
              +
              +
              +
              N/A complexity/method
              +
              1 churn
              +
              +
              +
              0.0 complexity
              +
              0 duplications
              +
              +
              +
              +
              +
              +
              + +
              +
              +
              + + # Be sure to restart your server when you modify this file. + +# Add new inflection rules using the following format. Inflections +# are locale specific, and you may define rules for as many different +# locales as you wish. All of these examples are active by default: +# ActiveSupport::Inflector.inflections(:en) do |inflect| +# inflect.plural /^(ox)$/i, '\1en' +# inflect.singular /^(ox)en/i, '\1' +# inflect.irregular 'person', 'people' +# inflect.uncountable %w( fish sheep ) +# end + +# These inflection rules are supported but not enabled by default: +# ActiveSupport::Inflector.inflections(:en) do |inflect| +# inflect.acronym 'RESTful' +# end + +
              +
              + +
              +
              +
              + + + + + + + + + + + + + diff --git a/ABC_Score/config/initializers/mime_types.html b/ABC_Score/config/initializers/mime_types.html new file mode 100644 index 00000000..117c12a6 --- /dev/null +++ b/ABC_Score/config/initializers/mime_types.html @@ -0,0 +1,123 @@ + + + + + + Ruby Critic - Home + + + + + + + + + + + + +
              + + + +
              +
              +
              + +
              +
              + + + Updated + + +
              +
              +

              config/initializers / mime_types.rb

              +
              +
              + +
              + +
              +
              +
              +
              +
              + A +
              +
              +
              +
              +
              4 lines of codes
              +
              0 methods
              +
              +
              +
              N/A complexity/method
              +
              1 churn
              +
              +
              +
              0.0 complexity
              +
              0 duplications
              +
              +
              +
              +
              +
              +
              + +
              +
              +
              + + # Be sure to restart your server when you modify this file. + +# Add new mime types for use in respond_to blocks: +# Mime::Type.register "text/richtext", :rtf + +
              +
              + +
              +
              +
              + + + + + + + + + + + + + diff --git a/ABC_Score/config/initializers/wrap_parameters.html b/ABC_Score/config/initializers/wrap_parameters.html new file mode 100644 index 00000000..740ba38a --- /dev/null +++ b/ABC_Score/config/initializers/wrap_parameters.html @@ -0,0 +1,133 @@ + + + + + + Ruby Critic - Home + + + + + + + + + + + + +
              + + + +
              +
              +
              + +
              +
              + + + Updated + + +
              +
              +

              config/initializers / wrap_parameters.rb

              +
              +
              + +
              + +
              +
              +
              +
              +
              + A +
              +
              +
              +
              +
              14 lines of codes
              +
              0 methods
              +
              +
              +
              N/A complexity/method
              +
              1 churn
              +
              +
              +
              0.0 complexity
              +
              0 duplications
              +
              +
              +
              +
              +
              +
              + +
              +
              +
              + + # Be sure to restart your server when you modify this file. + +# This file contains settings for ActionController::ParamsWrapper which +# is enabled by default. + +# Enable parameter wrapping for JSON. You can disable this by setting :format to an empty array. +ActiveSupport.on_load(:action_controller) do + wrap_parameters format: [:json] +end + +# To enable root element in JSON for ActiveRecord objects. +# ActiveSupport.on_load(:active_record) do +# self.include_root_in_json = true +# end + +
              +
              + +
              +
              +
              + + + + + + + + + + + + + diff --git a/ABC_Score/config/puma.html b/ABC_Score/config/puma.html new file mode 100644 index 00000000..7cf4ff19 --- /dev/null +++ b/ABC_Score/config/puma.html @@ -0,0 +1,153 @@ + + + + + + Ruby Critic - Home + + + + + + + + + + + + +
              + + + +
              +
              +
              + +
              +
              + + + Updated + + +
              +
              +

              config / puma.rb

              +
              +
              + +
              + +
              +
              +
              +
              +
              + A +
              +
              +
              +
              +
              34 lines of codes
              +
              0 methods
              +
              +
              +
              N/A complexity/method
              +
              1 churn
              +
              +
              +
              0.0 complexity
              +
              0 duplications
              +
              +
              +
              +
              +
              +
              + +
              +
              +
              + + # Puma can serve each request in a thread from an internal thread pool. +# The `threads` method setting takes two numbers: a minimum and maximum. +# Any libraries that use thread pools should be configured to match +# the maximum value specified for Puma. Default is set to 5 threads for minimum +# and maximum; this matches the default thread size of Active Record. +# +threads_count = ENV.fetch("RAILS_MAX_THREADS") { 5 } +threads threads_count, threads_count + +# Specifies the `port` that Puma will listen on to receive requests; default is 3000. +# +port ENV.fetch("PORT") { 3000 } + +# Specifies the `environment` that Puma will run in. +# +environment ENV.fetch("RAILS_ENV") { "development" } + +# Specifies the number of `workers` to boot in clustered mode. +# Workers are forked webserver processes. If using threads and workers together +# the concurrency of the application would be max `threads` * `workers`. +# Workers do not work on JRuby or Windows (both of which do not support +# processes). +# +# workers ENV.fetch("WEB_CONCURRENCY") { 2 } + +# Use the `preload_app!` method when specifying a `workers` number. +# This directive tells Puma to first boot the application and load code +# before forking the application. This takes advantage of Copy On Write +# process behavior so workers use less memory. +# +# preload_app! + +# Allow puma to be restarted by `rails restart` command. +plugin :tmp_restart + +
              +
              + +
              +
              +
              + + + + + + + + + + + + + diff --git a/ABC_Score/config/routes.html b/ABC_Score/config/routes.html new file mode 100644 index 00000000..989bbfb3 --- /dev/null +++ b/ABC_Score/config/routes.html @@ -0,0 +1,136 @@ + + + + + + Ruby Critic - Home + + + + + + + + + + + + +
              + + + +
              +
              +
              + +
              +
              + + + Updated + + +
              +
              +

              config / routes.rb

              +
              +
              + +
              + +
              +
              +
              +
              +
              + A +
              +
              +
              +
              +
              17 lines of codes
              +
              0 methods
              +
              +
              +
              N/A complexity/method
              +
              39 churn
              +
              +
              +
              3.89 complexity
              +
              0 duplications
              +
              +
              +
              +
              +
              +
              + +
              +
              +
              + + # frozen_string_literal: true + +Rails.application.routes.draw do + resources :accreditations + resources :sei_processes + + resources :requirements do + member do + delete :delete_document_attachment + end + end + + get 'home/index' + devise_for :users + # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html + root to: 'home#index' +end + +
              +
              + +
              +
              +
              + + + + + + + + + + + + + diff --git a/ABC_Score/config/spring.html b/ABC_Score/config/spring.html new file mode 100644 index 00000000..da676339 --- /dev/null +++ b/ABC_Score/config/spring.html @@ -0,0 +1,125 @@ + + + + + + Ruby Critic - Home + + + + + + + + + + + + +
              + + + +
              +
              +
              + +
              +
              + + + Updated + + +
              +
              +

              config / spring.rb

              +
              +
              + +
              + +
              +
              +
              +
              +
              + A +
              +
              +
              +
              +
              6 lines of codes
              +
              0 methods
              +
              +
              +
              N/A complexity/method
              +
              1 churn
              +
              +
              +
              0.0 complexity
              +
              0 duplications
              +
              +
              +
              +
              +
              +
              + +
              +
              +
              + + %w[ + .ruby-version + .rbenv-vars + tmp/restart.txt + tmp/caching-dev.txt +].each { |path| Spring.watch(path) } + +
              +
              + +
              +
              +
              + + + + + + + + + + + + + diff --git a/ABC_Score/db/migrate/20191114162918_devise_create_users.html b/ABC_Score/db/migrate/20191114162918_devise_create_users.html new file mode 100644 index 00000000..d88d9fe7 --- /dev/null +++ b/ABC_Score/db/migrate/20191114162918_devise_create_users.html @@ -0,0 +1,163 @@ + + + + + + Ruby Critic - Home + + + + + + + + + + + + +
              + + + +
              +
              +
              + +
              +
              + + + Updated + + +
              +
              +

              db/migrate / 20191114162918_devise_create_users.rb

              +
              +
              + +
              + +
              +
              +
              +
              +
              + A +
              +
              +
              +
              +
              44 lines of codes
              +
              1 methods
              +
              +
              +
              10.3 complexity/method
              +
              4 churn
              +
              +
              +
              10.25 complexity
              +
              0 duplications
              +
              +
              +
              +
              +
              +
              + +
              +
              +
              + + # frozen_string_literal: true + +class DeviseCreateUsers < ActiveRecord::Migration[5.2]
              1. DeviseCreateUsers has no descriptive comment
              + def change
              1. DeviseCreateUsers#change has approx 9 statements
              + create_table :users do |t|
              1. DeviseCreateUsers#change has the variable name 't'
              + ## Database authenticatable + t.string :email, null: false, default: ""
              1. DeviseCreateUsers#change refers to 't' more than self (maybe move it to another class?) Locations: 0 1 2 3 4 5
              + t.string :encrypted_password, null: false, default: ""
              1. DeviseCreateUsers#change refers to 't' more than self (maybe move it to another class?) Locations: 0 1 2 3 4 5
              + + ## Recoverable + t.string :reset_password_token
              1. DeviseCreateUsers#change refers to 't' more than self (maybe move it to another class?) Locations: 0 1 2 3 4 5
              + t.datetime :reset_password_sent_at
              1. DeviseCreateUsers#change refers to 't' more than self (maybe move it to another class?) Locations: 0 1 2 3 4 5
              + + ## Rememberable + t.datetime :remember_created_at
              1. DeviseCreateUsers#change refers to 't' more than self (maybe move it to another class?) Locations: 0 1 2 3 4 5
              + + ## Trackable + # t.integer :sign_in_count, default: 0, null: false + # t.datetime :current_sign_in_at + # t.datetime :last_sign_in_at + # t.inet :current_sign_in_ip + # t.inet :last_sign_in_ip + + ## Confirmable + # t.string :confirmation_token + # t.datetime :confirmed_at + # t.datetime :confirmation_sent_at + # t.string :unconfirmed_email # Only if using reconfirmable + + ## Lockable + # t.integer :failed_attempts, default: 0, null: false # Only if lock strategy is :failed_attempts + # t.string :unlock_token # Only if unlock strategy is :email or :both + # t.datetime :locked_at + + + t.timestamps null: false
              1. DeviseCreateUsers#change refers to 't' more than self (maybe move it to another class?) Locations: 0 1 2 3 4 5
              + end + + add_index :users, :email, unique: true + add_index :users, :reset_password_token, unique: true + # add_index :users, :confirmation_token, unique: true + # add_index :users, :unlock_token, unique: true + end +end +
              +
              +
              + +
              +
              +
              + + + + + + + + + + + + + diff --git a/ABC_Score/db/migrate/20191114163205_add_info_to_users.html b/ABC_Score/db/migrate/20191114163205_add_info_to_users.html new file mode 100644 index 00000000..f3b37949 --- /dev/null +++ b/ABC_Score/db/migrate/20191114163205_add_info_to_users.html @@ -0,0 +1,126 @@ + + + + + + Ruby Critic - Home + + + + + + + + + + + + +
              + + + +
              +
              +
              + +
              +
              + + + Updated + + +
              +
              +

              db/migrate / 20191114163205_add_info_to_users.rb

              +
              +
              + +
              + +
              +
              +
              +
              +
              + A +
              +
              +
              +
              +
              7 lines of codes
              +
              1 methods
              +
              +
              +
              3.0 complexity/method
              +
              2 churn
              +
              +
              +
              3.0 complexity
              +
              0 duplications
              +
              +
              +
              +
              +
              +
              + +
              +
              +
              + + class AddInfoToUsers < ActiveRecord::Migration[5.2]
              1. AddInfoToUsers has no descriptive comment
              + def change + add_column :users, :full_name, :string + add_column :users, :registration, :string + add_column :users, :role, :integer + end +end +
              +
              +
              + +
              +
              +
              + + + + + + + + + + + + + diff --git a/ABC_Score/db/migrate/20201113221041_create_requirements.html b/ABC_Score/db/migrate/20201113221041_create_requirements.html new file mode 100644 index 00000000..15405ef5 --- /dev/null +++ b/ABC_Score/db/migrate/20201113221041_create_requirements.html @@ -0,0 +1,129 @@ + + + + + + Ruby Critic - Home + + + + + + + + + + + + +
              + + + +
              +
              +
              + +
              +
              + + + Updated + + +
              +
              +

              db/migrate / 20201113221041_create_requirements.rb

              +
              +
              + +
              + +
              +
              +
              +
              +
              + A +
              +
              +
              +
              +
              10 lines of codes
              +
              1 methods
              +
              +
              +
              4.7 complexity/method
              +
              1 churn
              +
              +
              +
              4.71 complexity
              +
              0 duplications
              +
              +
              +
              +
              +
              +
              + +
              +
              +
              + + class CreateRequirements < ActiveRecord::Migration[5.2]
              1. CreateRequirements has no descriptive comment
              + def change + create_table :requirements do |t|
              1. CreateRequirements#change has the variable name 't'
              + t.string :title
              1. CreateRequirements#change refers to 't' more than self (maybe move it to another class?) Locations: 0 1 2
              + t.text :content
              1. CreateRequirements#change refers to 't' more than self (maybe move it to another class?) Locations: 0 1 2
              + + t.timestamps
              1. CreateRequirements#change refers to 't' more than self (maybe move it to another class?) Locations: 0 1 2
              + end + end +end +
              +
              +
              + +
              +
              +
              + + + + + + + + + + + + + diff --git a/ABC_Score/db/migrate/20201113222004_create_sei_processes.html b/ABC_Score/db/migrate/20201113222004_create_sei_processes.html new file mode 100644 index 00000000..2344fb1e --- /dev/null +++ b/ABC_Score/db/migrate/20201113222004_create_sei_processes.html @@ -0,0 +1,130 @@ + + + + + + Ruby Critic - Home + + + + + + + + + + + + +
              + + + +
              +
              +
              + +
              +
              + + + Updated + + +
              +
              +

              db/migrate / 20201113222004_create_sei_processes.rb

              +
              +
              + +
              + +
              +
              +
              +
              +
              + A +
              +
              +
              +
              +
              11 lines of codes
              +
              1 methods
              +
              +
              +
              5.9 complexity/method
              +
              1 churn
              +
              +
              +
              5.89 complexity
              +
              0 duplications
              +
              +
              +
              +
              +
              +
              + +
              +
              +
              + + class CreateSeiProcesses < ActiveRecord::Migration[5.2]
              1. CreateSeiProcesses has no descriptive comment
              + def change + create_table :sei_processes do |t|
              1. CreateSeiProcesses#change has the variable name 't'
              + t.belongs_to :user, foreign_key: true
              1. CreateSeiProcesses#change refers to 't' more than self (maybe move it to another class?) Locations: 0 1 2 3
              + t.integer :status
              1. CreateSeiProcesses#change refers to 't' more than self (maybe move it to another class?) Locations: 0 1 2 3
              + t.string :code
              1. CreateSeiProcesses#change refers to 't' more than self (maybe move it to another class?) Locations: 0 1 2 3
              + + t.timestamps
              1. CreateSeiProcesses#change refers to 't' more than self (maybe move it to another class?) Locations: 0 1 2 3
              + end + end +end +
              +
              +
              + +
              +
              +
              + + + + + + + + + + + + + diff --git a/ABC_Score/db/migrate/20201113222556_create_active_storage_tables.active_storage.html b/ABC_Score/db/migrate/20201113222556_create_active_storage_tables.active_storage.html new file mode 100644 index 00000000..ae6c6cf6 --- /dev/null +++ b/ABC_Score/db/migrate/20201113222556_create_active_storage_tables.active_storage.html @@ -0,0 +1,146 @@ + + + + + + Ruby Critic - Home + + + + + + + + + + + + +
              + + + +
              +
              +
              + +
              +
              + + + Updated + + +
              +
              +

              db/migrate / 20201113222556_create_active_storage_tables.active_storage.rb

              +
              +
              + +
              + +
              +
              +
              +
              +
              + A +
              +
              +
              +
              +
              27 lines of codes
              +
              1 methods
              +
              +
              +
              18.9 complexity/method
              +
              2 churn
              +
              +
              +
              18.91 complexity
              +
              0 duplications
              +
              +
              +
              +
              +
              +
              + +
              +
              +
              + + # This migration comes from active_storage (originally 20170806125915) +class CreateActiveStorageTables < ActiveRecord::Migration[5.2] + def change
              1. CreateActiveStorageTables#change has approx 16 statements
              + create_table :active_storage_blobs do |t|
              1. CreateActiveStorageTables#change has the variable name 't' Locations: 0 1
              + t.string :key, null: false
              1. CreateActiveStorageTables#change refers to 't' more than self (maybe move it to another class?) Locations: 0 1 2 3 4 5 6 7 8 9 10 11 12 13
              + t.string :filename, null: false
              1. CreateActiveStorageTables#change refers to 't' more than self (maybe move it to another class?) Locations: 0 1 2 3 4 5 6 7 8 9 10 11 12 13
              + t.string :content_type
              1. CreateActiveStorageTables#change refers to 't' more than self (maybe move it to another class?) Locations: 0 1 2 3 4 5 6 7 8 9 10 11 12 13
              + t.text :metadata
              1. CreateActiveStorageTables#change refers to 't' more than self (maybe move it to another class?) Locations: 0 1 2 3 4 5 6 7 8 9 10 11 12 13
              + t.bigint :byte_size, null: false
              1. CreateActiveStorageTables#change refers to 't' more than self (maybe move it to another class?) Locations: 0 1 2 3 4 5 6 7 8 9 10 11 12 13
              + t.string :checksum, null: false
              1. CreateActiveStorageTables#change refers to 't' more than self (maybe move it to another class?) Locations: 0 1 2 3 4 5 6 7 8 9 10 11 12 13
              + t.datetime :created_at, null: false
              1. CreateActiveStorageTables#change calls 't.datetime :created_at, null: false' 2 times Locations: 0 1
              2. CreateActiveStorageTables#change refers to 't' more than self (maybe move it to another class?) Locations: 0 1 2 3 4 5 6 7 8 9 10 11 12 13
              + + t.index [ :key ], unique: true
              1. CreateActiveStorageTables#change refers to 't' more than self (maybe move it to another class?) Locations: 0 1 2 3 4 5 6 7 8 9 10 11 12 13
              + end + + create_table :active_storage_attachments do |t|
              1. CreateActiveStorageTables#change has the variable name 't' Locations: 0 1
              + t.string :name, null: false
              1. CreateActiveStorageTables#change refers to 't' more than self (maybe move it to another class?) Locations: 0 1 2 3 4 5 6 7 8 9 10 11 12 13
              + t.references :record, null: false, polymorphic: true, index: false
              1. CreateActiveStorageTables#change refers to 't' more than self (maybe move it to another class?) Locations: 0 1 2 3 4 5 6 7 8 9 10 11 12 13
              + t.references :blob, null: false
              1. CreateActiveStorageTables#change refers to 't' more than self (maybe move it to another class?) Locations: 0 1 2 3 4 5 6 7 8 9 10 11 12 13
              + + t.datetime :created_at, null: false
              1. CreateActiveStorageTables#change calls 't.datetime :created_at, null: false' 2 times Locations: 0 1
              2. CreateActiveStorageTables#change refers to 't' more than self (maybe move it to another class?) Locations: 0 1 2 3 4 5 6 7 8 9 10 11 12 13
              + + t.index [ :record_type, :record_id, :name, :blob_id ], name: "index_active_storage_attachments_uniqueness", unique: true
              1. CreateActiveStorageTables#change refers to 't' more than self (maybe move it to another class?) Locations: 0 1 2 3 4 5 6 7 8 9 10 11 12 13
              + t.foreign_key :active_storage_blobs, column: :blob_id
              1. CreateActiveStorageTables#change refers to 't' more than self (maybe move it to another class?) Locations: 0 1 2 3 4 5 6 7 8 9 10 11 12 13
              + end + end +end +
              +
              +
              + +
              +
              +
              + + + + + + + + + + + + + diff --git a/ABC_Score/db/migrate/20201114202425_create_accreditations.html b/ABC_Score/db/migrate/20201114202425_create_accreditations.html new file mode 100644 index 00000000..014c9c15 --- /dev/null +++ b/ABC_Score/db/migrate/20201114202425_create_accreditations.html @@ -0,0 +1,131 @@ + + + + + + Ruby Critic - Home + + + + + + + + + + + + +
              + + + +
              +
              +
              + +
              +
              + + + Updated + + +
              +
              +

              db/migrate / 20201114202425_create_accreditations.rb

              +
              +
              + +
              + +
              +
              +
              +
              +
              + A +
              +
              +
              +
              +
              12 lines of codes
              +
              1 methods
              +
              +
              +
              7.1 complexity/method
              +
              2 churn
              +
              +
              +
              7.07 complexity
              +
              0 duplications
              +
              +
              +
              +
              +
              +
              + +
              +
              +
              + + class CreateAccreditations < ActiveRecord::Migration[5.2]
              1. CreateAccreditations has no descriptive comment
              + def change
              1. CreateAccreditations#change has approx 6 statements
              + create_table :accreditations do |t|
              1. CreateAccreditations#change has the variable name 't'
              + t.belongs_to :user, foreign_key: true
              1. CreateAccreditations#change refers to 't' more than self (maybe move it to another class?) Locations: 0 1 2 3 4
              + t.date :start_date
              1. CreateAccreditations#change refers to 't' more than self (maybe move it to another class?) Locations: 0 1 2 3 4
              + t.date :end_date
              1. CreateAccreditations#change refers to 't' more than self (maybe move it to another class?) Locations: 0 1 2 3 4
              + t.references :sei_process, foreign_key: true
              1. CreateAccreditations#change refers to 't' more than self (maybe move it to another class?) Locations: 0 1 2 3 4
              + + t.timestamps
              1. CreateAccreditations#change refers to 't' more than self (maybe move it to another class?) Locations: 0 1 2 3 4
              + end + end +end +
              +
              +
              + +
              +
              +
              + + + + + + + + + + + + + diff --git a/ABC_Score/db/schema.html b/ABC_Score/db/schema.html new file mode 100644 index 00000000..090eae03 --- /dev/null +++ b/ABC_Score/db/schema.html @@ -0,0 +1,207 @@ + + + + + + Ruby Critic - Home + + + + + + + + + + + + +
              + + + +
              +
              +
              + +
              +
              + + + Updated + + +
              +
              +

              db / schema.rb

              +
              +
              + +
              + +
              +
              +
              +
              +
              + B +
              +
              +
              +
              +
              88 lines of codes
              +
              0 methods
              +
              +
              +
              N/A complexity/method
              +
              39 churn
              +
              +
              +
              65.7 complexity
              +
              0 duplications
              +
              +
              +
              +
              +
              +
              + +
              +
              +
              + + # This file is auto-generated from the current state of the database. Instead +# of editing this file, please use the migrations feature of Active Record to +# incrementally modify your database, and then regenerate this schema definition. +# +# Note that this schema.rb definition is the authoritative source for your +# database schema. If you need to create the application database on another +# system, you should be using db:schema:load, not running all the migrations +# from scratch. The latter is a flawed and unsustainable approach (the more migrations +# you'll amass, the slower it'll run and the greater likelihood for issues). +# +# It's strongly recommended that you check this file into your version control system. + +ActiveRecord::Schema.define(version: 2020_11_14_202425) do + + # These are extensions that must be enabled in order to support this database + enable_extension "plpgsql" + + # Cria tabela de Credenciamento + create_table "accreditations", force: :cascade do |t| + t.bigint "user_id" + t.date "start_date" + t.date "end_date" + t.bigint "sei_process_id" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["sei_process_id"], name: "index_accreditations_on_sei_process_id" + t.index ["user_id"], name: "index_accreditations_on_user_id" + end + + create_table "active_storage_attachments", force: :cascade do |t| + t.string "name", null: false + t.string "record_type", null: false + t.bigint "record_id", null: false + t.bigint "blob_id", null: false + t.datetime "created_at", null: false + t.index ["blob_id"], name: "index_active_storage_attachments_on_blob_id" + t.index ["record_type", "record_id", "name", "blob_id"], name: "index_active_storage_attachments_uniqueness", unique: true + end + + create_table "active_storage_blobs", force: :cascade do |t| + t.string "key", null: false + t.string "filename", null: false + t.string "content_type" + t.text "metadata" + t.bigint "byte_size", null: false + t.string "checksum", null: false + t.datetime "created_at", null: false + t.index ["key"], name: "index_active_storage_blobs_on_key", unique: true + end + + # Cria tabela de Requisitos + create_table "requirements", force: :cascade do |t| + t.string "title" + t.text "content" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + end + + # Cria tabela de Processos Sei + create_table "sei_processes", force: :cascade do |t| + t.bigint "user_id" + t.integer "status" + t.string "code" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["user_id"], name: "index_sei_processes_on_user_id" + end + + create_table "users", force: :cascade do |t| + t.string "email", default: "", null: false + t.string "encrypted_password", default: "", null: false + t.string "reset_password_token" + t.datetime "reset_password_sent_at" + t.datetime "remember_created_at" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.string "full_name" + t.string "registration" + t.integer "role" + t.index ["email"], name: "index_users_on_email", unique: true + t.index ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true + end + + add_foreign_key "accreditations", "sei_processes" + add_foreign_key "accreditations", "users" + add_foreign_key "active_storage_attachments", "active_storage_blobs", column: "blob_id" + add_foreign_key "sei_processes", "users" +end + +
              +
              + +
              +
              +
              + + + + + + + + + + + + + diff --git a/ABC_Score/db/seeds.html b/ABC_Score/db/seeds.html new file mode 100644 index 00000000..dc8f2fa2 --- /dev/null +++ b/ABC_Score/db/seeds.html @@ -0,0 +1,145 @@ + + + + + + Ruby Critic - Home + + + + + + + + + + + + +
              + + + +
              +
              +
              + +
              +
              + + + Updated + + +
              +
              +

              db / seeds.rb

              +
              +
              + +
              + +
              +
              +
              +
              +
              + A +
              +
              +
              +
              +
              26 lines of codes
              +
              1 methods
              +
              +
              +
              3.9 complexity/method
              +
              21 churn
              +
              +
              +
              3.86 complexity
              +
              0 duplications
              +
              +
              +
              +
              +
              +
              + +
              +
              +
              + + # This file should contain all the record creation needed to seed the database with its default values. +# The data can then be loaded with the rails db:seed command (or created alongside the database with db:setup). +# +# Examples: +# +# movies = Movie.create([{ name: 'Star Wars' }, { name: 'Lord of the Rings' }]) +# Character.create(name: 'Luke', movie: movies.first) + +def destroy_records class_name
              1. destroy_records doesn't depend on instance state (maybe move it to another class?)
              + class_name.each do |obj| + obj.allow_deletion! + obj.destroy + end +end + +# All Stuff +destroy_records(Requirement.all) +destroy_records(Accreditation.all) +destroy_records(SeiProcess.all) + +# Users +User.destroy_all +User.create(full_name: "Administrador", email: "admin@admin.com", password: "admin123", role: "administrator", registration: "000000000") +User.create(full_name: "Secretário", email: "secretary@secretary.com", password: "admin123", role: "secretary", registration: "000000000") +User.create(full_name: "Professor", email: "professor@professor.com", password: "admin123", role: "professor", registration: "000000000") +User.create(full_name: "Aluno", email: "student@student.com", password: "admin123", role: "student", registration: "000000000") +
              +
              +
              + +
              +
              +
              + + + + + + + + + + + + + diff --git a/ABC_Score/features/step_definitions/credenciamento_professores_steps.html b/ABC_Score/features/step_definitions/credenciamento_professores_steps.html new file mode 100644 index 00000000..2659e536 --- /dev/null +++ b/ABC_Score/features/step_definitions/credenciamento_professores_steps.html @@ -0,0 +1,334 @@ + + + + + + Ruby Critic - Home + + + + + + + + + + + + +
              + + + +
              +
              +
              + +
              +
              + + + Updated + + +
              +
              +

              features/step_definitions / credenciamento_professores_steps.rb

              +
              +
              + +
              + +
              +
              +
              +
              +
              + D +
              +
              +
              +
              +
              215 lines of codes
              +
              5 methods
              +
              +
              +
              38.5 complexity/method
              +
              19 churn
              +
              +
              +
              192.6 complexity
              +
              116 duplications
              +
              +
              +
              +
              +
              +
              + +
              +
              +
              + + require 'uri' +require 'cgi' +require File.expand_path(File.join(File.dirname(__FILE__), "..", "support", "paths")) +require File.expand_path(File.join(File.dirname(__FILE__), "..", "support", "selectors")) + +module WithinHelpers
              1. WithinHelpers has no descriptive comment
              + def with_scope(locator) + locator ? within(*selector_for(locator)) { yield } : yield + end +end +World(WithinHelpers) + +module UserSessionHelper
              1. UserSessionHelper has no descriptive comment
              + def current_user + @current_user + end + + def login user
              1. UserSessionHelper#login has approx 6 statements
              + @current_user = user + visit new_user_session_path + fill_in("Email", with: user.email) + fill_in("Password", with: user.password) + click_button("Log in") + Current.user = @current_user + end + + def sower_begin (user=nil) + if user != nil + @saved_user = user + visit '/' + click_link("Sair") + end + + sower = User.create( + full_name: "Sower", + email: "sower@admin.com", + password: "admin123", + role: "administrator", + registration: "000000000" + ) + login(sower) + end + + def sower_finish + Current.user = nil + visit '/' + click_link("Sair") + @current_user = nil + + login(@saved_user) if @saved_user != nil + end +end +World(UserSessionHelper) if respond_to?(:World) + +Dado "que existam as seguintes solicitações:" do |table| + sower_begin(@current_user) + file = fixture_file_upload(Rails.root.join('public', 'TestImage.png'), 'image/png') + + table.hashes.each do |row| + name = row['user_full_name'] + user = User.create!(
              1. Identical code found in 2 nodes Locations: 0 1
              + full_name: name, + email: name+'@professor.com', + password: name+'123', + role: 'professor', + registration: '200000000' + ) + SeiProcess.create!( + user_id: user.id, + status: row['status'], + code: 0, + documents: [file] + ) + end + sower_finish +end + +Dado "que existam os seguintes credenciamentos sem prazo definido:" do |table|
              1. Dado#que existam os seguintes credenciamentos sem prazo definido: has a flog score of 26
              + sower_begin(@current_user) + file = fixture_file_upload(Rails.root.join('public', 'TestImage.png'), 'image/png') + + table.hashes.each do |row| + name = row['user_full_name'] + user = User.create!(
              1. Identical code found in 2 nodes Locations: 0 1
              + full_name: name, + email: name+'@professor.com', + password: name+'123', + role: 'professor', + registration: '200000000' + ) + sei_process = SeiProcess.create!( + user_id: user.id, + status: 'Aprovado', + code: 0, + documents: [file] + ) + Accreditation.create!( + user_id: user.id, + sei_process_id: sei_process.id, + start_date: row['start_date'] + ) + end + sower_finish +end + +Dado /^que o registro "([^"]*)" já exista na tabela de requisitos$/ do |text| + sower_begin(@current_user) + Requirement.create!(title: text) + sower_finish +end + +Dado /^que eu esteja cadastrado e logado como (.*)$/ do |input| + user_props = [:full_name, :email, :password, :role, :registration] + + values = input.gsub!(/"/,'').split(/,\s?/) + record = Hash[user_props.zip(values)] + user = User.create!(record) + login(user) +end + +Dado /^que eu esteja na página (.+)$/ do |page_name| + visit path_to(page_name) +end + +Quando /^eu escolho avaliar "([^"]*)"$/ do |name|
              1. Similar code found in 2 nodes Locations: 0 1
              + user_id = User.find_by(full_name: name).id + process_id = SeiProcess.find_by(user_id: user_id).id + visit "/sei_processes/#{process_id}/edit" +end + +Quando /^eu escolho credenciar "([^"]*)"$/ do |name|
              1. Similar code found in 2 nodes Locations: 0 1
              + user_id = User.find_by(full_name: name).id + accreditation_id = Accreditation.find_by(user_id: user_id).id + visit "/accreditations/#{accreditation_id}/edit" +end + +Quando /^eu anexo o arquivo "([^"]*)" em '([^']*)'$/ do |path, field| + attach_file(field, File.expand_path(path)) +end + +Quando /^eu clico em '([^']*)'$/ do |link| + click_link(link) +end + +Então /^eu devo estar na página (.+)$/ do |page_name| + current_path = URI.parse(current_url).path + if current_path.respond_to? :should + current_path.should == path_to(page_name) + else + assert_equal path_to(page_name), current_path + end +end + +Quando /^eu escolho '([^']*)'$/ do |option| + choose(option) +end + +Quando /^eu marco apenas os seguintes estados: (.*)$/ do |statuses| + all("input[type=checkbox]").each do |checkbox| + checkbox.uncheck + end + statuses.split(/,[ ]*/).each do |status| + check("statuses[#{status}]") + end +end + +Quando /^eu preencho em '([^']*)' com/m do |field, text| + fill_in(field, :with => text) +end + +Quando /^eu preencho com "([^"]*)" em '([^']*)'$/ do |text, field| + fill_in(field, :with => text) +end + +Quando /^eu seleciono uma data final (posterior|anterior) a data inicial$/ do |status| + if status == 'posterior' + date1 = Date.tomorrow.strftime("%Y-%0m-%0e") + elsif status == 'anterior' + date1 = Date.yesterday.strftime("%Y-%0m-%0e") + end + date2 = Date.current.strftime("%Y-%0m-%0e") + + fill_in 'Data final', with: date1 + fill_in 'Data inicial', with: date2 +end + +Quando /^eu aperto '([^']*)'$/ do |button| + click_button(button) +end + +Então /^eu devo ver "([^"]*)"$/ do |text|
              1. Similar code found in 2 nodes Locations: 0 1
              + if page.respond_to? :should + page.should have_content(text) + else + assert page.has_content?(text) + end +end + +Então /^eu não devo ver "([^"]*)"$/ do |text|
              1. Similar code found in 2 nodes Locations: 0 1
              + if page.respond_to? :should + page.should have_no_content(text) + else + assert page.has_no_content?(text) + end +end + +Então /^eu devo receber uma mensagem de (sucesso|erro)$/ do |status| + if status == 'sucesso' + find(".notice", text: /sucesso!$/) + elsif status == 'erro' + find("#error_explanation") + else + raise StandardError.new('Mensagem não encontrada') + end +end +
              +
              +
              + +
              +
              +
              + + + + + + + + + + + + + diff --git a/ABC_Score/features/support/env.html b/ABC_Score/features/support/env.html new file mode 100644 index 00000000..2dd4f68f --- /dev/null +++ b/ABC_Score/features/support/env.html @@ -0,0 +1,178 @@ + + + + + + Ruby Critic - Home + + + + + + + + + + + + +
              + + + +
              +
              +
              + +
              +
              + + + Updated + + +
              +
              +

              features/support / env.rb

              +
              +
              + +
              + +
              +
              +
              +
              +
              + A +
              +
              +
              +
              +
              59 lines of codes
              +
              0 methods
              +
              +
              +
              N/A complexity/method
              +
              6 churn
              +
              +
              +
              0.0 complexity
              +
              0 duplications
              +
              +
              +
              +
              +
              +
              + +
              +
              +
              + + # IMPORTANT: This file is generated by cucumber-rails - edit at your own peril. +# It is recommended to regenerate this file in the future when you upgrade to a +# newer version of cucumber-rails. Consider adding your own code to a new file +# instead of editing this one. Cucumber will automatically load all features/**/*.rb +# files. + +require 'cucumber/rails' + +# frozen_string_literal: true + +# Capybara defaults to CSS3 selectors rather than XPath. +# If you'd prefer to use XPath, just uncomment this line and adjust any +# selectors in your step definitions to use the XPath syntax. +# Capybara.default_selector = :xpath + +# By default, any exception happening in your Rails application will bubble up +# to Cucumber so that your scenario will fail. This is a different from how +# your application behaves in the production environment, where an error page will +# be rendered instead. +# +# Sometimes we want to override this default behaviour and allow Rails to rescue +# exceptions and display an error page (just like when the app is running in production). +# Typical scenarios where you want to do this is when you test your error pages. +# There are two ways to allow Rails to rescue exceptions: +# +# 1) Tag your scenario (or feature) with @allow-rescue +# +# 2) Set the value below to true. Beware that doing this globally is not +# recommended as it will mask a lot of errors for you! +# +ActionController::Base.allow_rescue = false + +# Remove/comment out the lines below if your app doesn't have a database. +# For some databases (like MongoDB and CouchDB) you may need to use :truncation instead. +begin + DatabaseCleaner.strategy = :transaction +rescue NameError + raise "You need to add database_cleaner to your Gemfile (in the :test group) if you wish to use it." +end + +# You may also want to configure DatabaseCleaner to use different strategies for certain features and scenarios. +# See the DatabaseCleaner documentation for details. Example: +# +# Before('@no-txn,@selenium,@culerity,@celerity,@javascript') do +# # { except: [:widgets] } may not do what you expect here +# # as Cucumber::Rails::Database.javascript_strategy overrides +# # this setting. +# DatabaseCleaner.strategy = :truncation +# end +# +# Before('not @no-txn', 'not @selenium', 'not @culerity', 'not @celerity', 'not @javascript') do +# DatabaseCleaner.strategy = :transaction +# end +# + +# Possible values are :truncation and :transaction +# The :transaction strategy is faster, but might give you threading problems. +# See https://github.com/cucumber/cucumber-rails/blob/master/features/choose_javascript_database_strategy.feature +Cucumber::Rails::Database.javascript_strategy = :truncation + +
              +
              + +
              +
              +
              + + + + + + + + + + + + + diff --git a/ABC_Score/features/support/hooks.html b/ABC_Score/features/support/hooks.html new file mode 100644 index 00000000..5b51e325 --- /dev/null +++ b/ABC_Score/features/support/hooks.html @@ -0,0 +1,160 @@ + + + + + + Ruby Critic - Home + + + + + + + + + + + + +
              + + + +
              +
              +
              + +
              +
              + + + Updated + + +
              +
              +

              features/support / hooks.rb

              +
              +
              + +
              + +
              +
              +
              +
              +
              + A +
              +
              +
              +
              +
              41 lines of codes
              +
              2 methods
              +
              +
              +
              21.7 complexity/method
              +
              3 churn
              +
              +
              +
              43.48 complexity
              +
              0 duplications
              +
              +
              +
              +
              +
              +
              + +
              +
              +
              + + After do |scenario| + add_screenshot(scenario) + + if scenario.failed? + add_browser_logs + end + end + + def add_screenshot(scenario) + nome_cenario = scenario.name.gsub(/[^A-Za-z0-9]/, '') + nome_cenario = nome_cenario.gsub(' ','_').downcase! + screenshot = "log/screenshots/#{nome_cenario}.png" + # page.save_screenshot(screenshot) + attach(screenshot, 'image/png') + end + + def add_browser_logs
              1. main#add_browser_logs has a flog score of 37
              2. add_browser_logs has approx 8 statements
              + time_now = Time.now + # Getting current URL + current_url = Capybara.current_url.to_s + # Gather browser logs + logs = page.driver.browser.manage.logs.get(:browser).map {|line| [line.level, line.message]}
              1. add_browser_logs refers to 'line' more than self (maybe move it to another class?) Locations: 0 1
              + # Remove warnings and info messages + logs.reject! { |line| ['WARNING', 'INFO'].include?(line.first) }
              1. add_browser_logs refers to 'line' more than self (maybe move it to another class?) Locations: 0 1
              2. add_browser_logs refers to 'logs' more than self (maybe move it to another class?) Locations: 0 1 2
              + logs.any? == true
              1. add_browser_logs refers to 'logs' more than self (maybe move it to another class?) Locations: 0 1 2
              + embed(time_now.strftime('%Y-%m-%d-%H-%M-%S' + "\n") + ( "Current URL: " + current_url + "\n") + logs.join("\n"), 'text/plain', 'BROWSER ERROR')
              1. add_browser_logs refers to 'logs' more than self (maybe move it to another class?) Locations: 0 1 2
              +end + +at_exit do + time = Time.now.getutc + ReportBuilder.configure do |config| + config.json_path = 'report.json' + config.report_path = 'cucumber_web_report' + config.report_types = [:html] + config.report_tabs = %w[Overview Features Scenarios Errors] + config.report_title = 'Cucumber Report Builder web automation test results' + config.compress_images = false + config.additional_info = { 'Project name' => 'Test', 'Platform' => 'Integration', 'Report generated' => time } + end + ReportBuilder.build_report +end +
              +
              +
              + +
              +
              +
              + + + + + + + + + + + + + diff --git a/ABC_Score/features/support/paths.html b/ABC_Score/features/support/paths.html new file mode 100644 index 00000000..bd1411ef --- /dev/null +++ b/ABC_Score/features/support/paths.html @@ -0,0 +1,161 @@ + + + + + + Ruby Critic - Home + + + + + + + + + + + + +
              + + + +
              +
              +
              + +
              +
              + + + Updated + + +
              +
              +

              features/support / paths.rb

              +
              +
              + +
              + +
              +
              +
              +
              +
              + A +
              +
              +
              +
              +
              42 lines of codes
              +
              1 methods
              +
              +
              +
              15.6 complexity/method
              +
              5 churn
              +
              +
              +
              15.58 complexity
              +
              0 duplications
              +
              +
              +
              +
              +
              +
              + +
              +
              +
              + + module NavigationHelpers
              1. NavigationHelpers has no descriptive comment
              + # Maps a name to a path. Used by the + # + # When /^I go to (.+)$/ do |page_name| + # + # step definition in web_steps.rb + # + def path_to(page_name)
              1. NavigationHelpers#path_to has approx 8 statements
              + case page_name + + when /^the home\s?page$/ + '/' + + when /^de requisitos para o credenciamento$/ + '/requirements' + + when /^de solicitações de credenciamento$/ + '/sei_processes' + + when /^de credenciamentos$/ + '/accreditations' + + # Add more mappings here. + # Here is an example that pulls values out of the Regexp: + # + # when /^(.*)'s profile page$/i + # user_profile_path(User.find_by_login($1)) + + else + begin + page_name =~ /^the (.*) page$/ + path_components = $1.split(/\s+/) + self.send(path_components.push('path').join('_').to_sym) + rescue NoMethodError, ArgumentError + raise "Can't find mapping from \"#{page_name}\" to a path.\n" + + "Now, go and add a mapping in #{__FILE__}" + end + end + end +end + +World(NavigationHelpers) +
              +
              +
              + +
              +
              +
              + + + + + + + + + + + + + diff --git a/ABC_Score/features/support/selectors.html b/ABC_Score/features/support/selectors.html new file mode 100644 index 00000000..56f5378b --- /dev/null +++ b/ABC_Score/features/support/selectors.html @@ -0,0 +1,163 @@ + + + + + + Ruby Critic - Home + + + + + + + + + + + + +
              + + + +
              +
              +
              + +
              +
              + + + Updated + + +
              +
              +

              features/support / selectors.rb

              +
              +
              + +
              + +
              +
              +
              +
              +
              + A +
              +
              +
              +
              +
              44 lines of codes
              +
              1 methods
              +
              +
              +
              4.4 complexity/method
              +
              2 churn
              +
              +
              +
              4.36 complexity
              +
              0 duplications
              +
              +
              +
              +
              +
              +
              + +
              +
              +
              + + # TL;DR: YOU SHOULD DELETE THIS FILE +# +# This file is used by web_steps.rb, which you should also delete +# +# You have been warned +module HtmlSelectorsHelpers + # Maps a name to a selector. Used primarily by the + # + # When /^(.+) within (.+)$/ do |step, scope| + # + # step definitions in web_steps.rb + # + def selector_for(locator) + case locator + + when "the page" + "html > body" + + # Add more mappings here. + # Here is an example that pulls values out of the Regexp: + # + # when /^the (notice|error|info) flash$/ + # ".flash.#{$1}" + + # You can also return an array to use a different selector + # type, like: + # + # when /the header/ + # [:xpath, "//header"] + + # This allows you to provide a quoted selector as the scope + # for "within" steps as was previously the default for the + # web steps: + when /^"(.+)"$/ + $1 + + else + raise "Can't find mapping from \"#{locator}\" to a selector.\n" + + "Now, go and add a mapping in #{__FILE__}" + end + end +end + +World(HtmlSelectorsHelpers) + +
              +
              + +
              +
              +
              + + + + + + + + + + + + + diff --git a/ABC_Score/overview.html b/ABC_Score/overview.html new file mode 100644 index 00000000..3175d972 --- /dev/null +++ b/ABC_Score/overview.html @@ -0,0 +1,185 @@ + + + + + + Ruby Critic - Home + + + + + + + + + + + + +
              + + + +
              +
              + +
              +
              +
              + +
              +

              Overview

              +
              + +
              + +
              +
              +
              +
              +
              +
              + + + +
              +
              + +
              + + + +
              +
              + + + +
              +
              +

              Summary

              + +
              + +
              +
              +
              +

              A

              +
              +
              +
                +
              • 56

                files
              • +
              • 251

                churns
              • +
              • 61

                smells
              • +
              +
              +
              +
              + +
              +
              +
              +

              B

              +
              +
              +
                +
              • 2

                files
              • +
              • 54

                churns
              • +
              • 5

                smells
              • +
              +
              +
              +
              + +
              +
              +
              +

              C

              +
              +
              +
                +
              • 4

                files
              • +
              • 47

                churns
              • +
              • 25

                smells
              • +
              +
              +
              +
              + +
              +
              +
              +

              D

              +
              +
              +
                +
              • 4

                files
              • +
              • 24

                churns
              • +
              • 10

                smells
              • +
              +
              +
              +
              + +
              +
              +
              +

              F

              +
              +
              +
                +
              • 3

                files
              • +
              • 17

                churns
              • +
              • 25

                smells
              • +
              +
              +
              +
              + +
              +
              +
              + +
              +
              +
              +
              + + +
              +
              +
              + + + + + + + + + + + + + diff --git a/ABC_Score/simple_cov_index.html b/ABC_Score/simple_cov_index.html new file mode 100644 index 00000000..e1fe819f --- /dev/null +++ b/ABC_Score/simple_cov_index.html @@ -0,0 +1,971 @@ + + + + + + Ruby Critic - Home + + + + + + + + + + + + +
              + + + +
              +
              + +
              +
              +
              + +
              +

              Coverage

              +
              + +
              + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
              RatingNameCoverage
              +
              F
              +
              + + 0%
              +
              F
              +
              + + 0%
              +
              F
              +
              + + 0%
              +
              F
              +
              + + 0%
              +
              F
              +
              + + 0%
              +
              F
              +
              + + 0%
              +
              F
              +
              + + 0%
              +
              F
              +
              + + 0%
              +
              F
              +
              + + 0%
              +
              F
              +
              + + 0%
              +
              F
              +
              + + 0%
              +
              F
              +
              + + 0%
              +
              F
              +
              + + 0%
              +
              F
              +
              + + 0%
              +
              F
              +
              + + 0%
              +
              F
              +
              + + 0%
              +
              F
              +
              + + 0%
              +
              F
              +
              + + 0%
              +
              F
              +
              + + 0%
              +
              F
              +
              + + 0%
              +
              F
              +
              + + 0%
              +
              F
              +
              + + 0%
              +
              F
              +
              + + 0%
              +
              F
              +
              + + 0%
              +
              F
              +
              + + 0%
              +
              F
              +
              + + 0%
              +
              F
              +
              + + 0%
              +
              F
              +
              + + 0%
              +
              F
              +
              + + 0%
              +
              F
              +
              + + 0%
              +
              F
              +
              + + 0%
              +
              F
              +
              + + 0%
              +
              F
              +
              + + 0%
              +
              F
              +
              + + 0%
              +
              F
              +
              + + 0%
              +
              F
              +
              + + 0%
              +
              F
              +
              + + 0%
              +
              F
              +
              + + 0%
              +
              F
              +
              + + 0%
              +
              F
              +
              + + 0%
              +
              F
              +
              + + 0%
              +
              F
              +
              + + 0%
              +
              F
              +
              + + 0%
              +
              F
              +
              + + 0%
              +
              F
              +
              + + 0%
              +
              F
              +
              + + 0%
              +
              F
              +
              + + 0%
              +
              F
              +
              + + 0%
              +
              F
              +
              + + 0%
              +
              F
              +
              + + 0%
              +
              F
              +
              + + 0%
              +
              F
              +
              + + 0%
              +
              +
              +
              +
              + + +
              +
              +
              + + + + + + + + + + + + + diff --git a/ABC_Score/smells_index.html b/ABC_Score/smells_index.html new file mode 100644 index 00000000..c6b331ac --- /dev/null +++ b/ABC_Score/smells_index.html @@ -0,0 +1,2765 @@ + + + + + + Ruby Critic - Home + + + + + + + + + + + + +
              + + + +
              +
              + +
              +
              +
              + +
              +

              Smells

              +
              + +
              + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
              SmellLocationsStatus
              IrresponsibleModule + + + +
              DuplicateMethodCall + + + +
              InstanceVariableAssumption + + + +
              IrresponsibleModule + + + +
              MissingSafeMethod + + + +
              NilCheck + + + +
              UtilityFunction + + + +
              DuplicateMethodCall + + + +
              InstanceVariableAssumption + + + +
              IrresponsibleModule + + + +
              MissingSafeMethod + + + +
              NilCheck + + + +
              UtilityFunction + + + +
              DuplicateMethodCall + + + +
              InstanceVariableAssumption + + + +
              IrresponsibleModule + + + +
              MissingSafeMethod + + + +
              UtilityFunction + + + +
              IrresponsibleModule + + + +
              IrresponsibleModule + + + +
              IrresponsibleModule + + + +
              IrresponsibleModule + + + +
              IrresponsibleModule + + + +
              DuplicateCode + + + +
              DuplicateMethodCall + + + +
              DuplicateMethodCall + + + +
              InstanceVariableAssumption + + + +
              IrresponsibleModule + + + +
              DuplicateMethodCall + + + +
              DuplicateMethodCall + + + +
              DuplicateMethodCall + + + +
              InstanceVariableAssumption + + + +
              InstanceVariableAssumption + + + +
              InstanceVariableAssumption + + + +
              IrresponsibleModule + + + +
              TooManyStatements + + + +
              DuplicateMethodCall + + + +
              DuplicateMethodCall + + + +
              DuplicateMethodCall + + + +
              DuplicateMethodCall + + + +
              DuplicateMethodCall + + + +
              InstanceVariableAssumption + + + +
              InstanceVariableAssumption + + + +
              InstanceVariableAssumption + + + +
              IrresponsibleModule + + + +
              NilCheck + + + +
              TooManyInstanceVariables + + + +
              TooManyStatements + + + +
              TooManyStatements + + + +
              IrresponsibleModule + + + +
              IrresponsibleModule + + + +
              IrresponsibleModule + + + +
              IrresponsibleModule + + + +
              IrresponsibleModule + + + +
              IrresponsibleModule + + + +
              IrresponsibleModule + + + +
              IrresponsibleModule + + + +
              IrresponsibleModule + + + +
              IrresponsibleModule + + + +
              IrresponsibleModule + + + +
              IrresponsibleModule + + + +
              TooManyStatements + + + +
              HighComplexity + + + +
              FeatureEnvy + + + +
              FeatureEnvy + + + +
              TooManyStatements + + + +
              DuplicateCode + + + +
              DuplicateCode + + + +
              DuplicateCode + + + +
              HighComplexity + + + +
              IrresponsibleModule + + + +
              IrresponsibleModule + + + +
              TooManyStatements + + + +
              DuplicateCode + + + +
              DuplicateCode + + + +
              DuplicateCode + + + +
              DuplicateCode + + + +
              DuplicateCode + + + +
              DuplicateCode + + + +
              DuplicateCode + + + +
              DuplicateCode + + + +
              HighComplexity + + + +
              HighComplexity + + + +
              DuplicateCode + + + +
              DuplicateCode + + + +
              DuplicateCode + + + +
              HighComplexity + + + +
              HighComplexity + + + +
              HighComplexity + + + +
              HighComplexity + + + +
              UtilityFunction + + + +
              IrresponsibleModule + + + +
              FeatureEnvy + + + +
              IrresponsibleModule + + + +
              TooManyStatements + + + +
              UncommunicativeVariableName + + + +
              FeatureEnvy + + + +
              IrresponsibleModule + + + +
              UncommunicativeVariableName + + + +
              DuplicateMethodCall + + + +
              FeatureEnvy + + + +
              TooManyStatements + + + +
              UncommunicativeVariableName + + + +
              FeatureEnvy + + + +
              IrresponsibleModule + + + +
              TooManyStatements + + + +
              UncommunicativeVariableName + + + +
              FeatureEnvy + + + +
              IrresponsibleModule + + + +
              UncommunicativeVariableName + + + +
              +
              +
              +
              +
              + + +
              +
              +
              + + + + + + + + + + + + + diff --git a/ABC_Score/spec/controllers/accreditations_controller_spec.html b/ABC_Score/spec/controllers/accreditations_controller_spec.html new file mode 100644 index 00000000..adcafae7 --- /dev/null +++ b/ABC_Score/spec/controllers/accreditations_controller_spec.html @@ -0,0 +1,226 @@ + + + + + + Ruby Critic - Home + + + + + + + + + + + + +
              + + + +
              +
              +
              + +
              +
              + + + Updated + + +
              +
              +

              spec/controllers / accreditations_controller_spec.rb

              +
              +
              + +
              + +
              +
              +
              +
              +
              + F +
              +
              +
              +
              +
              107 lines of codes
              +
              0 methods
              +
              +
              +
              N/A complexity/method
              +
              4 churn
              +
              +
              +
              201.52 complexity
              +
              169 duplications
              +
              +
              +
              +
              +
              +
              + +
              +
              +
              + + require 'rails_helper' + +RSpec.describe AccreditationsController, type: :controller do + fixtures :users + + let(:file) { + fixture_file_upload(Rails.root.join('public', 'TestImage.png'), 'image/png') + } + + let(:valid_prof_params) { + {user_id: users(:admin).id, status: 'Espera', code: 0, documents: [file]} + } + + before(:each) do
              1. Similar code found in 4 nodes Locations: 0 1 2 3
              + sign_in users(:prof) + Current.user = users(:prof) + @process = SeiProcess.create!(valid_prof_params) + + sign_out users(:prof) + sign_in users(:admin) + Current.user = users(:admin) + end + + let(:valid_attributes) { + {user_id: users(:prof).id, start_date: '2020-11-15', end_date: '2021-11-15', sei_process_id: @process.id} + } + + let(:invalid_attributes) { + {user_id: users(:prof).id, start_date: '2020-11-15', end_date: '2019-11-15', sei_process_id: @process.id} + } + + let(:valid_session) { {} } + + describe "GET #index" do
              1. Similar code found in 2 nodes Locations: 0 1
              + it "returns a success response" do + Accreditation.create! valid_attributes + get :index, params: {}, session: valid_session + expect(response).to be_successful + end + end + + describe "GET #show" do
              1. Similar code found in 4 nodes Locations: 0 1 2 3
              + it "returns a success response" do + accreditation = Accreditation.create! valid_attributes + get :show, params: {id: accreditation.to_param}, session: valid_session + expect(response).to be_successful + end + end + + describe "GET #edit" do
              1. Similar code found in 4 nodes Locations: 0 1 2 3
              + it "returns a success response" do + accreditation = Accreditation.create! valid_attributes + get :edit, params: {id: accreditation.to_param}, session: valid_session + expect(response).to be_successful + end + end + + describe "PUT #update" do + context "with valid params" do + let(:new_attributes) { + {end_date: '2022-11-15'} + } + + it "updates the requested accreditation" do
              1. describe(PUT #update)::context(with valid params)::it#updates the requested accreditation has a flog score of 27
              + accreditation = Accreditation.create! valid_attributes + put :update, params: {id: accreditation.to_param, accreditation: new_attributes}, session: valid_session + accreditation.reload + expect(accreditation.end_date).to eq(Date.parse(new_attributes[:end_date])) + end + end + + context "with invalid params" do + it "returns a success response (i.e. to display the 'edit' template)" do
              1. Similar code found in 2 nodes Locations: 0 1
              + accreditation = Accreditation.create! valid_attributes + put :update, params: {id: accreditation.to_param, accreditation: invalid_attributes}, session: valid_session + expect(response).to be_successful + end + end + end + + describe "DELETE #destroy" do + it "destroys the requested accreditation" do
              1. Similar code found in 3 nodes Locations: 0 1 2
              + accreditation = Accreditation.create! valid_attributes + expect { + delete :destroy, params: {id: accreditation.to_param}, session: valid_session + }.to change(Accreditation, :count).by(-1) + end + + it "redirects to the accreditations list" do
              1. Similar code found in 2 nodes Locations: 0 1
              + accreditation = Accreditation.create! valid_attributes + delete :destroy, params: {id: accreditation.to_param}, session: valid_session + expect(response).to redirect_to(accreditations_url) + end + + it "fails to destroy the requested accreditation" do
              1. describe(DELETE #destroy)::it#fails to destroy the requested accreditation has a flog score of 25
              + accreditation = Accreditation.create! valid_attributes + sign_out users(:admin) + + sign_in users(:prof) + Current.user = users(:prof) + + expect { + delete :destroy, params: {id: accreditation.to_param}, session: valid_session + }.to change(Accreditation, :count).by(0) + end + end +end +
              +
              +
              + +
              +
              +
              + + + + + + + + + + + + + diff --git a/ABC_Score/spec/controllers/home_controller_spec.html b/ABC_Score/spec/controllers/home_controller_spec.html new file mode 100644 index 00000000..f78d1b13 --- /dev/null +++ b/ABC_Score/spec/controllers/home_controller_spec.html @@ -0,0 +1,131 @@ + + + + + + Ruby Critic - Home + + + + + + + + + + + + +
              + + + +
              +
              +
              + +
              +
              + + + Updated + + +
              +
              +

              spec/controllers / home_controller_spec.rb

              +
              +
              + +
              + +
              +
              +
              +
              +
              + A +
              +
              +
              +
              +
              12 lines of codes
              +
              0 methods
              +
              +
              +
              N/A complexity/method
              +
              2 churn
              +
              +
              +
              9.7 complexity
              +
              0 duplications
              +
              +
              +
              +
              +
              +
              + +
              +
              +
              + + require 'rails_helper' + +RSpec.describe HomeController, type: :controller do + + describe "GET #index" do + it "returns http success" do + get :index + expect(response).to have_http_status(:success) + end + end + +end + +
              +
              + +
              +
              +
              + + + + + + + + + + + + + diff --git a/ABC_Score/spec/controllers/requirements_controller_spec.html b/ABC_Score/spec/controllers/requirements_controller_spec.html new file mode 100644 index 00000000..e37f710a --- /dev/null +++ b/ABC_Score/spec/controllers/requirements_controller_spec.html @@ -0,0 +1,335 @@ + + + + + + Ruby Critic - Home + + + + + + + + + + + + +
              + + + +
              +
              +
              + +
              +
              + + + Updated + + +
              +
              +

              spec/controllers / requirements_controller_spec.rb

              +
              +
              + +
              + +
              +
              +
              +
              +
              + F +
              +
              +
              +
              +
              216 lines of codes
              +
              0 methods
              +
              +
              +
              N/A complexity/method
              +
              10 churn
              +
              +
              +
              427.71 complexity
              +
              274 duplications
              +
              +
              +
              +
              +
              +
              + +
              +
              +
              + + require 'rails_helper' + +RSpec.describe RequirementsController, type: :controller do + fixtures :users + + let(:valid_attributes) {
              1. Similar code found in 2 nodes Locations: 0 1
              + file = fixture_file_upload(Rails.root.join('public', 'TestImage.png'), 'image/png') + {title: "test", content: "", documents: [file]} + } + + let(:invalid_attributes) { + {"title" => ""} + } + + let(:valid_session) { {} } + + context "by an admin" do + before(:each) do + sign_in users(:admin) + Current.user = users(:admin) + end + + describe "GET #index" do
              1. Similar code found in 2 nodes Locations: 0 1
              + it "returns a success response" do + Requirement.create! valid_attributes + get :index, params: {}, session: valid_session + expect(response).to be_successful + end + end + + describe "GET #show" do
              1. Similar code found in 4 nodes Locations: 0 1 2 3
              + it "returns a success response" do + requirement = Requirement.create! valid_attributes + get :show, params: {id: requirement.to_param}, session: valid_session + expect(response).to be_successful + end + end + + describe "GET #new" do + it "returns a success response" do + get :new, params: {}, session: valid_session + expect(response).to be_successful + end + end + + describe "GET #edit" do
              1. Similar code found in 4 nodes Locations: 0 1 2 3
              + it "returns a success response" do + requirement = Requirement.create! valid_attributes + get :edit, params: {id: requirement.to_param}, session: valid_session + expect(response).to be_successful + end + end + end + + describe "POST #create" do + context "with valid params" do + before(:each) do + sign_in users(:admin) + Current.user = users(:admin) + end + + it "creates a new Requirement" do
              1. Similar code found in 4 nodes Locations: 0 1 2 3
              + expect { + post :create, params: {requirement: valid_attributes}, session: valid_session + }.to change(Requirement, :count).by(1) + end + + it "redirects to the created requirement" do + post :create, params: {requirement: valid_attributes}, session: valid_session + expect(response).to redirect_to(Requirement.last) + end + end + + context "with invalid params" do + before(:each) do + sign_in users(:admin) + Current.user = users(:admin) + end + + it "returns a success response (i.e. to display the 'new' template)" do + post :create, params: {requirement: invalid_attributes}, session: valid_session + expect(response).to be_successful + end + end + + context "by a non-admin user" do + before(:each) do + sign_in users(:prof) + Current.user = users(:prof) + end + + it "does not create a new Requirement" do
              1. Similar code found in 4 nodes Locations: 0 1 2 3
              + expect { + post :create, params: {requirement: valid_attributes}, session: valid_session + }.to change(Requirement, :count).by(0) + end + end + end + + describe "PUT #update" do + let(:new_attributes) {
              1. Similar code found in 2 nodes Locations: 0 1
              + file = fixture_file_upload(Rails.root.join('public', 'TestImage.png'), 'image/png') + {title: "Novo", content: "Conteúdo", documents: [file]} + } + + context "with valid params" do + before(:each) do + sign_in users(:admin) + Current.user = users(:admin) + end + + it "updates the requested requirement" do
              1. describe(PUT #update)::context(with valid params)::it#updates the requested requirement has a flog score of 36
              + requirement = Requirement.create! valid_attributes + put :update, params: {id: requirement.to_param, requirement: new_attributes}, session: valid_session + requirement.reload + expect(requirement.title).to eq(new_attributes[:title]) + expect(requirement.content).to eq(new_attributes[:content]) + end + + it "redirects to the requirement" do + requirement = Requirement.create! valid_attributes + put :update, params: {id: requirement.to_param, requirement: valid_attributes}, session: valid_session + expect(response).to redirect_to(requirement) + end + end + + context "with invalid params" do + before(:each) do + sign_in users(:admin) + Current.user = users(:admin) + end + + it "returns a success response (i.e. to display the 'edit' template)" do
              1. Similar code found in 2 nodes Locations: 0 1
              + requirement = Requirement.create! valid_attributes + put :update, params: {id: requirement.to_param, requirement: invalid_attributes}, session: valid_session + expect(response).to be_successful + end + end + + context "by a non-admin user" do + before(:each) do
              1. Similar code found in 4 nodes Locations: 0 1 2 3
              + sign_in users(:admin) + Current.user = users(:admin) + @requirement = Requirement.create! valid_attributes + + sign_out users(:admin) + sign_in users(:prof) + Current.user = users(:prof) + end + + it "updates the requested requirement" do
              1. describe(PUT #update)::context(by a non-admin user)::it#updates the requested requirement has a flog score of 33
              + put :update, params: {id: @requirement.to_param, requirement: new_attributes}, session: valid_session + @requirement.reload + expect(@requirement.title).to_not eq(new_attributes[:title]) + expect(@requirement.content).to_not eq(new_attributes[:content]) + end + end + end + + describe "Documents Management"do + before(:each) do + sign_in users(:admin) + Current.user = users(:admin) + end + + it 'purges a specific file' do + requirement = Requirement.create! valid_attributes + requirement.documents.each do | document | + expect { + delete :delete_document_attachment, params: { id: document.id, requirement_id: requirement.id } + }.to change(ActiveStorage::Attachment, :count).by(-1) + end + end + end + + describe "DELETE #destroy" do + context "by an admin" do + before(:each) do + sign_in users(:admin) + Current.user = users(:admin) + end + + it "destroys the requested requirement" do
              1. Similar code found in 3 nodes Locations: 0 1 2
              + requirement = Requirement.create! valid_attributes + expect { + delete :destroy, params: {id: requirement.to_param}, session: valid_session + }.to change(Requirement, :count).by(-1) + end + + it "redirects to the requirements list" do
              1. Similar code found in 2 nodes Locations: 0 1
              + requirement = Requirement.create! valid_attributes + delete :destroy, params: {id: requirement.to_param}, session: valid_session + expect(response).to redirect_to(requirements_url) + end + end + + context "by a non-admin user" do + before(:each) do
              1. Similar code found in 4 nodes Locations: 0 1 2 3
              + sign_in users(:admin) + Current.user = users(:admin) + @requirement = Requirement.create! valid_attributes + + sign_out users(:admin) + sign_in users(:prof) + Current.user = users(:prof) + end + + it "does not destroy the requested requirement" do + expect { + delete :destroy, params: {id: @requirement.to_param}, session: valid_session + }.to change(Requirement, :count).by(0) + end + end + end + +end +
              +
              +
              + +
              +
              +
              + + + + + + + + + + + + + diff --git a/ABC_Score/spec/controllers/sei_processes_controller_spec.html b/ABC_Score/spec/controllers/sei_processes_controller_spec.html new file mode 100644 index 00000000..5388f33c --- /dev/null +++ b/ABC_Score/spec/controllers/sei_processes_controller_spec.html @@ -0,0 +1,336 @@ + + + + + + Ruby Critic - Home + + + + + + + + + + + + +
              + + + +
              +
              +
              + +
              +
              + + + Updated + + +
              +
              +

              spec/controllers / sei_processes_controller_spec.rb

              +
              +
              + +
              + +
              +
              +
              +
              +
              + F +
              +
              +
              +
              +
              217 lines of codes
              +
              0 methods
              +
              +
              +
              N/A complexity/method
              +
              3 churn
              +
              +
              +
              410.26 complexity
              +
              274 duplications
              +
              +
              +
              +
              +
              +
              + +
              +
              +
              + + require 'rails_helper' + +RSpec.describe SeiProcessesController, type: :controller do + fixtures :users + + let(:file) { + fixture_file_upload(Rails.root.join('public', 'TestImage.png'), 'image/png') + } + + let(:valid_admin_params) { + {user_id: users(:admin).id, status: 'Espera', code: 0, documents: [file]} + } + + let(:valid_prof_params) { + {user_id: users(:prof).id, status: 'Espera', code: 0, documents: [file]} + } + + let(:invalid_status_params) { + {user_id: users(:prof).id, status: 'Aprovado', code: 0, documents: [file]} + } + + let(:invalid_docs_params_by_admin) { + {user_id: users(:admin).id, status: 'Espera', code: 0} + } + + let(:invalid_docs_params_by_prof) { + {user_id: users(:prof).id, status: 'Espera', code: 0} + } + + let(:some_process) { + SeiProcess.create!(valid_prof_params) + } + + let(:valid_session) { {} } + + describe "GET #index" do + context 'taken by an admin' do
              1. Similar code found in 3 nodes Locations: 0 1 2
              + before(:each) do + sign_in users(:admin) + Current.user = users(:admin) + end + + it "returns a success response" do + get :index, params: {}, session: valid_session + expect(response).to be_successful + end + end + + context 'taken by an non-admin user' do
              1. Similar code found in 3 nodes Locations: 0 1 2
              + before(:each) do + sign_in users(:prof) + Current.user = users(:prof) + end + + it "returns a success response" do + get :index, params: {}, session: valid_session + expect(response).to be_successful + end + end + end + + describe "GET #show" do
              1. Similar code found in 2 nodes Locations: 0 1
              + before(:each) do + sign_in users(:admin) + Current.user = users(:admin) + end + + it "returns a success response" do + get :show, params: {id: some_process.id}, session: valid_session + expect(response).to be_successful + end + end + + describe "GET #new" do
              1. Similar code found in 3 nodes Locations: 0 1 2
              + before(:each) do + sign_in users(:prof) + Current.user = users(:prof) + end + + it "returns a success response" do + get :new, params: {}, session: valid_session + expect(response).to be_successful + end + end + + describe "GET #edit" do
              1. Similar code found in 2 nodes Locations: 0 1
              + before(:each) do + sign_in users(:admin) + Current.user = users(:admin) + end + + it "returns a success response" do + get :edit, params: {id: some_process.id}, session: valid_session + expect(response).to be_successful + end + end + + describe "POST #create" do + before(:each) do + sign_in users(:prof) + Current.user = users(:prof) + end + + context "with valid params" do + it "creates a new SeiProcess" do
              1. Similar code found in 4 nodes Locations: 0 1 2 3
              + expect { + post :create, params: {sei_process: valid_prof_params}, session: valid_session + }.to change(SeiProcess, :count).by(1) + end + + it "redirects to the sei processes list" do + post :create, params: {sei_process: valid_prof_params}, session: valid_session + expect(response).to redirect_to(sei_processes_url) + end + + it "corrects invalid parameters during creation" do + post :create, params: {sei_process: invalid_status_params}, session: valid_session + expect(SeiProcess.last.status).to eq(valid_prof_params[:status]) + end + end + + context "with invalid params" do + it "do not creates a new SeiProcess due to lack of documents" do
              1. Similar code found in 4 nodes Locations: 0 1 2 3
              + expect { + post :create, params: {sei_process: invalid_docs_params_by_prof}, session: valid_session + }.to change(SeiProcess, :count).by(0) + end + end + end + + describe "PUT #update" do + let(:approval_param) { + {status: 'Aprovado'} + } + + let(:rejection_param) { + {status: 'Rejeitado'} + } + + context "when user has permission" do + before(:each) do + sign_in users(:admin) + Current.user = users(:admin) + end + + it "updates the requested sei_process" do
              1. Similar code found in 2 nodes Locations: 0 1
              2. describe(PUT #update)::context(when user has permission)::it#updates the requested sei_process has a flog score of 28
              + put :update, params: {id: some_process.id, sei_process: rejection_param}, session: valid_session + some_process.reload + expect(some_process.status).to eq(rejection_param[:status]) + end + + it "redirects to the sei processes list" do + put :update, params: {id: some_process.id, sei_process: rejection_param}, session: valid_session + expect(response).to redirect_to(sei_processes_url) + end + + it "creates an accreditation when a process is approved" do + expect { + put :update, params: {id: some_process.id, sei_process: approval_param}, session: valid_session + }.to change(Accreditation, :count).by(1) + end + end + + context "when user does not have permission" do + before(:each) do + sign_in users(:prof) + Current.user = users(:prof) + end + + it "does not update the requested sei_process" do
              1. Similar code found in 2 nodes Locations: 0 1
              2. describe(PUT #update)::context(when user does not have permission)::it#does not update the requested sei_process has a flog score of 28
              + put :update, params: {id: some_process.id, sei_process: approval_param}, session: valid_session + some_process.reload + expect(some_process.status).to_not eq(approval_param[:status]) + end + end + end + + describe "DELETE #destroy" do + context "when user has permission" do + before(:each) do + sign_in users(:admin) + Current.user = users(:admin) + end + + it "destroys the requested sei_process" do + process = SeiProcess.create!(valid_admin_params) + process.update_attributes(user_id: users(:prof)) + + expect { + delete :destroy, params: {id: process.to_param}, session: valid_session + }.to change(SeiProcess, :count).by(-1) + end + + it "redirects to the sei_processes list" do + process = SeiProcess.create!(valid_admin_params) + process.update_attributes(user_id: users(:prof)) + + delete :destroy, params: {id: process.to_param}, session: valid_session + expect(response).to redirect_to(sei_processes_url) + end + end + + context "when user does not have permission" do + before(:each) do + sign_in users(:prof) + Current.user = users(:prof) + end + + it "does not destroys the requested sei_process" do
              1. Similar code found in 3 nodes Locations: 0 1 2
              + process = SeiProcess.create!(valid_prof_params) + expect { + delete :destroy, params: {id: process.to_param}, session: valid_session + }.to change(SeiProcess, :count).by(0) + end + end + end +end +
              +
              +
              + +
              +
              +
              + + + + + + + + + + + + + diff --git a/ABC_Score/spec/helpers/home_helper_spec.html b/ABC_Score/spec/helpers/home_helper_spec.html new file mode 100644 index 00000000..ac17d367 --- /dev/null +++ b/ABC_Score/spec/helpers/home_helper_spec.html @@ -0,0 +1,134 @@ + + + + + + Ruby Critic - Home + + + + + + + + + + + + +
              + + + +
              +
              +
              + +
              +
              + + + Updated + + +
              +
              +

              spec/helpers / home_helper_spec.rb

              +
              +
              + +
              + +
              +
              +
              +
              +
              + A +
              +
              +
              +
              +
              15 lines of codes
              +
              0 methods
              +
              +
              +
              N/A complexity/method
              +
              4 churn
              +
              +
              +
              0.0 complexity
              +
              0 duplications
              +
              +
              +
              +
              +
              +
              + +
              +
              +
              + + # require 'rails_helper' + +# # Specs in this file have access to a helper object that includes +# # the HomeHelper. For example: +# # +# # describe HomeHelper do +# # describe "string concat" do +# # it "concats two strings with spaces" do +# # expect(helper.concat_strings("this","that")).to eq("this that") +# # end +# # end +# # end +# RSpec.describe HomeHelper, type: :helper do +# pending "add some examples to (or delete) #{__FILE__}" +# end + +
              +
              + +
              +
              +
              + + + + + + + + + + + + + diff --git a/ABC_Score/spec/models/accreditation_spec.html b/ABC_Score/spec/models/accreditation_spec.html new file mode 100644 index 00000000..e2853d7d --- /dev/null +++ b/ABC_Score/spec/models/accreditation_spec.html @@ -0,0 +1,185 @@ + + + + + + Ruby Critic - Home + + + + + + + + + + + + +
              + + + +
              +
              +
              + +
              +
              + + + Updated + + +
              +
              +

              spec/models / accreditation_spec.rb

              +
              +
              + +
              + +
              +
              +
              +
              +
              + C +
              +
              +
              +
              +
              66 lines of codes
              +
              0 methods
              +
              +
              +
              N/A complexity/method
              +
              6 churn
              +
              +
              +
              98.6 complexity
              +
              25 duplications
              +
              +
              +
              +
              +
              +
              + +
              +
              +
              + + require 'rails_helper' + +RSpec.describe Accreditation, type: :model do + fixtures :users + + let(:file) { + fixture_file_upload(Rails.root.join('public', 'TestImage.png'), 'image/png') + } + + let(:valid_prof_params) { + {user_id: users(:admin).id, status: 'Espera', code: 0, documents: [file]} + } + + let(:valid_attributes) { + {user_id: users(:admin).id, sei_process_id: @process.id} + } + + before(:each) do
              1. Similar code found in 4 nodes Locations: 0 1 2 3
              + sign_in users(:prof) + Current.user = users(:prof) + @process = SeiProcess.create! valid_prof_params + + sign_out users(:prof) + sign_in users(:admin) + Current.user = users(:admin) + end + + context "valid record" do + it "has valid attributes" do + expect( + Accreditation.new(valid_attributes) + ).to be_valid + end + end + + context "invalid record" do + it "has no user" do + expect( + Accreditation.new(sei_process_id: @process.id) + ).to_not be_valid + end + + it "has no process" do + expect( + Accreditation.new(user_id: users(:admin).id) + ).to_not be_valid + end + + it "has an unavailable process" do + Accreditation.create!(valid_attributes) + expect( + Accreditation.new(valid_attributes) + ).to_not be_valid + end + + it "has been created by a non-admin user" do + sign_out users(:admin) + sign_in users(:prof) + Current.user = users(:prof) + + expect( + Accreditation.new(valid_attributes) + ).to_not be_valid + end + end +end +
              +
              +
              + +
              +
              +
              + + + + + + + + + + + + + diff --git a/ABC_Score/spec/models/requirement_spec.html b/ABC_Score/spec/models/requirement_spec.html new file mode 100644 index 00000000..30011755 --- /dev/null +++ b/ABC_Score/spec/models/requirement_spec.html @@ -0,0 +1,146 @@ + + + + + + Ruby Critic - Home + + + + + + + + + + + + +
              + + + +
              +
              +
              + +
              +
              + + + Updated + + +
              +
              +

              spec/models / requirement_spec.rb

              +
              +
              + +
              + +
              +
              +
              +
              +
              + A +
              +
              +
              +
              +
              27 lines of codes
              +
              0 methods
              +
              +
              +
              N/A complexity/method
              +
              7 churn
              +
              +
              +
              38.05 complexity
              +
              0 duplications
              +
              +
              +
              +
              +
              +
              + +
              +
              +
              + + require 'rails_helper' + +RSpec.describe Requirement, type: :model do + fixtures :users + + before(:each) do + sign_in users(:admin) + Current.user = users(:admin) + end + + describe "Title validation" do + it "is valid with valid attributes" do + expect(Requirement.new({"title" => "testing"})).to be_valid + end + + it "is not valid without a title" do + file = fixture_file_upload(Rails.root.join('public', 'TestImage.png'), 'image/png') + expect(Requirement.new({"content" => "", "documents" => [file]})).to_not be_valid + end + + it "is not equal to previous requirement title" do + Requirement.create! title: "testing" + expect(Requirement.new({"title" => "testing"})).to_not be_valid + end + end + +end + +
              +
              + +
              +
              +
              + + + + + + + + + + + + + diff --git a/ABC_Score/spec/models/sei_process_spec.html b/ABC_Score/spec/models/sei_process_spec.html new file mode 100644 index 00000000..1a26ad79 --- /dev/null +++ b/ABC_Score/spec/models/sei_process_spec.html @@ -0,0 +1,206 @@ + + + + + + Ruby Critic - Home + + + + + + + + + + + + +
              + + + +
              +
              +
              + +
              +
              + + + Updated + + +
              +
              +

              spec/models / sei_process_spec.rb

              +
              +
              + +
              + +
              +
              +
              +
              +
              + C +
              +
              +
              +
              +
              87 lines of codes
              +
              0 methods
              +
              +
              +
              N/A complexity/method
              +
              6 churn
              +
              +
              +
              98.34 complexity
              +
              70 duplications
              +
              +
              +
              +
              +
              +
              + +
              +
              +
              + + require 'rails_helper' + +RSpec.describe SeiProcess, type: :model do + fixtures :users + + let(:file) { + fixture_file_upload(Rails.root.join('public', 'TestImage.png'), 'image/png') + } + + let(:valid_admin_params) { + {user_id: users(:admin).id, status: 'Espera', code: 0, documents: [file]} + } + + let(:valid_prof_params) { + {user_id: users(:prof).id, status: 'Espera', code: 0, documents: [file]} + } + + let(:invalid_status_params) { + {user_id: users(:prof).id, status: 'Aprovado', code: 0, documents: [file]} + } + + let(:invalid_docs_params_by_admin) { + {user_id: users(:admin).id, status: 'Espera', code: 0} + } + + let(:invalid_docs_params_by_prof) { + {user_id: users(:prof).id, status: 'Espera', code: 0} + } + + describe 'checks an admins creation' do
              1. Similar code found in 2 nodes Locations: 0 1
              + before(:each) do + Current.user = users(:admin) + end + + context 'when a valid record' do + it 'has valid attributes' do + expect( + SeiProcess.new(valid_admin_params) + ).to be_valid + end + end + + context 'when an invalid record' do + it 'has no attached documents' do + expect( + SeiProcess.new(invalid_docs_params_by_admin) + ).to_not be_valid + end + end + end + + describe 'checks a non-admins creation' do
              1. Similar code found in 2 nodes Locations: 0 1
              + before(:each) do + Current.user = users(:prof) + end + + context 'when a valid record' do + it 'has valid attributes' do + expect( + SeiProcess.new(valid_prof_params) + ).to be_valid + end + end + + context 'when an invalid record' do + it 'has no attached documents' do + expect( + SeiProcess.new(invalid_docs_params_by_prof) + ).to_not be_valid + end + end + end + + describe 'checks a not signed in users creation' do + before(:each) do + Current.user = nil + end + + context 'when an invalid record' do + it 'comes from not signed in user' do + expect( + SeiProcess.new(valid_admin_params) + ).to_not be_valid + end + end + end +end +
              +
              +
              + +
              +
              +
              + + + + + + + + + + + + + diff --git a/ABC_Score/spec/models/user_spec.html b/ABC_Score/spec/models/user_spec.html new file mode 100644 index 00000000..27a26a27 --- /dev/null +++ b/ABC_Score/spec/models/user_spec.html @@ -0,0 +1,124 @@ + + + + + + Ruby Critic - Home + + + + + + + + + + + + +
              + + + +
              +
              +
              + +
              +
              + + + Updated + + +
              +
              +

              spec/models / user_spec.rb

              +
              +
              + +
              + +
              +
              +
              +
              +
              + A +
              +
              +
              +
              +
              5 lines of codes
              +
              0 methods
              +
              +
              +
              N/A complexity/method
              +
              4 churn
              +
              +
              +
              0.0 complexity
              +
              0 duplications
              +
              +
              +
              +
              +
              +
              + +
              +
              +
              + + # require 'rails_helper' + +# RSpec.describe User, type: :model do +# pending "add some examples to (or delete) #{__FILE__}" +# end + +
              +
              + +
              +
              +
              + + + + + + + + + + + + + diff --git a/ABC_Score/spec/rails_helper.html b/ABC_Score/spec/rails_helper.html new file mode 100644 index 00000000..9767b910 --- /dev/null +++ b/ABC_Score/spec/rails_helper.html @@ -0,0 +1,198 @@ + + + + + + Ruby Critic - Home + + + + + + + + + + + + +
              + + + +
              +
              +
              + +
              +
              + + + Updated + + +
              +
              +

              spec / rails_helper.rb

              +
              +
              + +
              + +
              +
              +
              +
              +
              + A +
              +
              +
              +
              +
              79 lines of codes
              +
              0 methods
              +
              +
              +
              N/A complexity/method
              +
              17 churn
              +
              +
              +
              0.0 complexity
              +
              0 duplications
              +
              +
              +
              +
              +
              +
              + +
              +
              +
              + + require 'simplecov' +SimpleCov.start +# This file is copied to spec/ when you run 'rails generate rspec:install' +require 'spec_helper' +ENV['RAILS_ENV'] ||= 'test' +require File.expand_path('../config/environment', __dir__) +# Prevent database truncation if the environment is production +abort("The Rails environment is running in production mode!") if Rails.env.production? +require 'rspec/rails' +# note: require 'devise' after require 'rspec/rails' +require 'devise' +# Add additional requires below this line. Rails is not loaded until this point! + +# Requires supporting ruby files with custom matchers and macros, etc, in +# spec/support/ and its subdirectories. Files matching `spec/**/*_spec.rb` are +# run as spec files by default. This means that files in spec/support that end +# in _spec.rb will both be required and run as specs, causing the specs to be +# run twice. It is recommended that you do not name files matching this glob to +# end with _spec.rb. You can configure this pattern with the --pattern +# option on the command line or in ~/.rspec, .rspec or `.rspec-local`. +# +# The following line is provided for convenience purposes. It has the downside +# of increasing the boot-up time by auto-requiring all files in the support +# directory. Alternatively, in the individual `*_spec.rb` files, manually +# require only the support files necessary. +# +# Dir[Rails.root.join('spec', 'support', '**', '*.rb')].sort.each { |f| require f } + +# Checks for pending migrations and applies them before tests are run. +# If you are not using ActiveRecord, you can remove these lines. +begin + ActiveRecord::Migration.maintain_test_schema! +rescue ActiveRecord::PendingMigrationError => e + puts e.to_s.strip + exit 1 +end +RSpec.configure do |config| + # For Devise > 4.1.1 + config.include Devise::Test::ControllerHelpers, type: :controller + config.include Devise::Test::IntegrationHelpers, type: :model + config.include Devise::Test::IntegrationHelpers, type: :request + # Use the following instead if you are on Devise <= 4.1.1 + # config.include Devise::TestHelpers, :type => :controller + + # Remove this line if you're not using ActiveRecord or ActiveRecord fixtures + config.fixture_path = "#{::Rails.root}/spec/fixtures" + + # If you're not using ActiveRecord, or you'd prefer not to run each of your + # examples within a transaction, remove the following line or assign false + # instead of true. + config.use_transactional_fixtures = true + + # You can uncomment this line to turn off ActiveRecord support entirely. + # config.use_active_record = false + + # RSpec Rails can automatically mix in different behaviours to your tests + # based on their file location, for example enabling you to call `get` and + # `post` in specs under `spec/controllers`. + # + # You can disable this behaviour by removing the line below, and instead + # explicitly tag your specs with their type, e.g.: + # + # RSpec.describe UsersController, type: :controller do + # # ... + # end + # + # The different available types are documented in the features, such as in + # https://relishapp.com/rspec/rspec-rails/docs + config.infer_spec_type_from_file_location! + + # Filter lines from Rails gems in backtraces. + config.filter_rails_from_backtrace! + # arbitrary gems may also be filtered via: + # config.filter_gems_from_backtrace("gem name") +end + +module Current
              1. Current has no descriptive comment
              + thread_mattr_accessor :user +end +
              +
              +
              + +
              +
              +
              + + + + + + + + + + + + + diff --git a/ABC_Score/spec/routing/accreditations_routing_spec.html b/ABC_Score/spec/routing/accreditations_routing_spec.html new file mode 100644 index 00000000..fd24ecb2 --- /dev/null +++ b/ABC_Score/spec/routing/accreditations_routing_spec.html @@ -0,0 +1,157 @@ + + + + + + Ruby Critic - Home + + + + + + + + + + + + +
              + + + +
              +
              +
              + +
              +
              + + + Updated + + +
              +
              +

              spec/routing / accreditations_routing_spec.rb

              +
              +
              + +
              + +
              +
              +
              +
              +
              + D +
              +
              +
              +
              +
              38 lines of codes
              +
              0 methods
              +
              +
              +
              N/A complexity/method
              +
              2 churn
              +
              +
              +
              46.0 complexity
              +
              106 duplications
              +
              +
              +
              +
              +
              +
              + +
              +
              +
              + + require "rails_helper" + +RSpec.describe AccreditationsController, type: :routing do
              1. Similar code found in 3 nodes Locations: 0 1 2
              + describe "routing" do + it "routes to #index" do + expect(get: "/accreditations").to route_to("accreditations#index") + end + + it "routes to #new" do + expect(get: "/accreditations/new").to route_to("accreditations#new") + end + + it "routes to #show" do + expect(get: "/accreditations/1").to route_to("accreditations#show", id: "1") + end + + it "routes to #edit" do + expect(get: "/accreditations/1/edit").to route_to("accreditations#edit", id: "1") + end + + + it "routes to #create" do + expect(post: "/accreditations").to route_to("accreditations#create") + end + + it "routes to #update via PUT" do + expect(put: "/accreditations/1").to route_to("accreditations#update", id: "1") + end + + it "routes to #update via PATCH" do + expect(patch: "/accreditations/1").to route_to("accreditations#update", id: "1") + end + + it "routes to #destroy" do + expect(delete: "/accreditations/1").to route_to("accreditations#destroy", id: "1") + end + end +end +
              +
              +
              + +
              +
              +
              + + + + + + + + + + + + + diff --git a/ABC_Score/spec/routing/requirements_routing_spec.html b/ABC_Score/spec/routing/requirements_routing_spec.html new file mode 100644 index 00000000..571aab55 --- /dev/null +++ b/ABC_Score/spec/routing/requirements_routing_spec.html @@ -0,0 +1,157 @@ + + + + + + Ruby Critic - Home + + + + + + + + + + + + +
              + + + +
              +
              +
              + +
              +
              + + + Updated + + +
              +
              +

              spec/routing / requirements_routing_spec.rb

              +
              +
              + +
              + +
              +
              +
              +
              +
              + D +
              +
              +
              +
              +
              38 lines of codes
              +
              0 methods
              +
              +
              +
              N/A complexity/method
              +
              2 churn
              +
              +
              +
              46.0 complexity
              +
              106 duplications
              +
              +
              +
              +
              +
              +
              + +
              +
              +
              + + require "rails_helper" + +RSpec.describe RequirementsController, type: :routing do
              1. Similar code found in 3 nodes Locations: 0 1 2
              + describe "routing" do + it "routes to #index" do + expect(:get => "/requirements").to route_to("requirements#index") + end + + it "routes to #new" do + expect(:get => "/requirements/new").to route_to("requirements#new") + end + + it "routes to #show" do + expect(:get => "/requirements/1").to route_to("requirements#show", :id => "1") + end + + it "routes to #edit" do + expect(:get => "/requirements/1/edit").to route_to("requirements#edit", :id => "1") + end + + + it "routes to #create" do + expect(:post => "/requirements").to route_to("requirements#create") + end + + it "routes to #update via PUT" do + expect(:put => "/requirements/1").to route_to("requirements#update", :id => "1") + end + + it "routes to #update via PATCH" do + expect(:patch => "/requirements/1").to route_to("requirements#update", :id => "1") + end + + it "routes to #destroy" do + expect(:delete => "/requirements/1").to route_to("requirements#destroy", :id => "1") + end + end +end +
              +
              +
              + +
              +
              +
              + + + + + + + + + + + + + diff --git a/ABC_Score/spec/routing/sei_processes_routing_spec.html b/ABC_Score/spec/routing/sei_processes_routing_spec.html new file mode 100644 index 00000000..b1fc8084 --- /dev/null +++ b/ABC_Score/spec/routing/sei_processes_routing_spec.html @@ -0,0 +1,157 @@ + + + + + + Ruby Critic - Home + + + + + + + + + + + + +
              + + + +
              +
              +
              + +
              +
              + + + Updated + + +
              +
              +

              spec/routing / sei_processes_routing_spec.rb

              +
              +
              + +
              + +
              +
              +
              +
              +
              + D +
              +
              +
              +
              +
              38 lines of codes
              +
              0 methods
              +
              +
              +
              N/A complexity/method
              +
              1 churn
              +
              +
              +
              46.0 complexity
              +
              106 duplications
              +
              +
              +
              +
              +
              +
              + +
              +
              +
              + + require "rails_helper" + +RSpec.describe SeiProcessesController, type: :routing do
              1. Similar code found in 3 nodes Locations: 0 1 2
              + describe "routing" do + it "routes to #index" do + expect(:get => "/sei_processes").to route_to("sei_processes#index") + end + + it "routes to #new" do + expect(:get => "/sei_processes/new").to route_to("sei_processes#new") + end + + it "routes to #show" do + expect(:get => "/sei_processes/1").to route_to("sei_processes#show", :id => "1") + end + + it "routes to #edit" do + expect(:get => "/sei_processes/1/edit").to route_to("sei_processes#edit", :id => "1") + end + + + it "routes to #create" do + expect(:post => "/sei_processes").to route_to("sei_processes#create") + end + + it "routes to #update via PUT" do + expect(:put => "/sei_processes/1").to route_to("sei_processes#update", :id => "1") + end + + it "routes to #update via PATCH" do + expect(:patch => "/sei_processes/1").to route_to("sei_processes#update", :id => "1") + end + + it "routes to #destroy" do + expect(:delete => "/sei_processes/1").to route_to("sei_processes#destroy", :id => "1") + end + end +end +
              +
              +
              + +
              +
              +
              + + + + + + + + + + + + + diff --git a/ABC_Score/spec/spec_helper.html b/ABC_Score/spec/spec_helper.html new file mode 100644 index 00000000..0f929235 --- /dev/null +++ b/ABC_Score/spec/spec_helper.html @@ -0,0 +1,219 @@ + + + + + + Ruby Critic - Home + + + + + + + + + + + + +
              + + + +
              +
              +
              + +
              +
              + + + Updated + + +
              +
              +

              spec / spec_helper.rb

              +
              +
              + +
              + +
              +
              +
              +
              +
              + A +
              +
              +
              +
              +
              100 lines of codes
              +
              0 methods
              +
              +
              +
              N/A complexity/method
              +
              8 churn
              +
              +
              +
              0.0 complexity
              +
              0 duplications
              +
              +
              +
              +
              +
              +
              + +
              +
              +
              + + # This file was generated by the `rails generate rspec:install` command. Conventionally, all +# specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`. +# The generated `.rspec` file contains `--require spec_helper` which will cause +# this file to always be loaded, without a need to explicitly require it in any +# files. +# +# Given that it is always loaded, you are encouraged to keep this file as +# light-weight as possible. Requiring heavyweight dependencies from this file +# will add to the boot time of your test suite on EVERY test run, even for an +# individual file that may not need all of that loaded. Instead, consider making +# a separate helper file that requires the additional dependencies and performs +# the additional setup, and require it from the spec files that actually need +# it. +# +# See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration +RSpec.configure do |config| + # rspec-expectations config goes here. You can use an alternate + # assertion/expectation library such as wrong or the stdlib/minitest + # assertions if you prefer. + config.expect_with :rspec do |expectations| + # This option will default to `true` in RSpec 4. It makes the `description` + # and `failure_message` of custom matchers include text for helper methods + # defined using `chain`, e.g.: + # be_bigger_than(2).and_smaller_than(4).description + # # => "be bigger than 2 and smaller than 4" + # ...rather than: + # # => "be bigger than 2" + expectations.include_chain_clauses_in_custom_matcher_descriptions = true + end + + # rspec-mocks config goes here. You can use an alternate test double + # library (such as bogus or mocha) by changing the `mock_with` option here. + config.mock_with :rspec do |mocks| + # Prevents you from mocking or stubbing a method that does not exist on + # a real object. This is generally recommended, and will default to + # `true` in RSpec 4. + mocks.verify_partial_doubles = true + end + + # This option will default to `:apply_to_host_groups` in RSpec 4 (and will + # have no way to turn it off -- the option exists only for backwards + # compatibility in RSpec 3). It causes shared context metadata to be + # inherited by the metadata hash of host groups and examples, rather than + # triggering implicit auto-inclusion in groups with matching metadata. + config.shared_context_metadata_behavior = :apply_to_host_groups + +# The settings below are suggested to provide a good initial experience +# with RSpec, but feel free to customize to your heart's content. +=begin + # This allows you to limit a spec run to individual examples or groups + # you care about by tagging them with `:focus` metadata. When nothing + # is tagged with `:focus`, all examples get run. RSpec also provides + # aliases for `it`, `describe`, and `context` that include `:focus` + # metadata: `fit`, `fdescribe` and `fcontext`, respectively. + config.filter_run_when_matching :focus + + # Allows RSpec to persist some state between runs in order to support + # the `--only-failures` and `--next-failure` CLI options. We recommend + # you configure your source control system to ignore this file. + config.example_status_persistence_file_path = "spec/examples.txt" + + # Limits the available syntax to the non-monkey patched syntax that is + # recommended. For more details, see: + # - http://rspec.info/blog/2012/06/rspecs-new-expectation-syntax/ + # - http://www.teaisaweso.me/blog/2013/05/27/rspecs-new-message-expectation-syntax/ + # - http://rspec.info/blog/2014/05/notable-changes-in-rspec-3/#zero-monkey-patching-mode + config.disable_monkey_patching! + + # This setting enables warnings. It's recommended, but in some cases may + # be too noisy due to issues in dependencies. + config.warnings = true + + # Many RSpec users commonly either run the entire suite or an individual + # file, and it's useful to allow more verbose output when running an + # individual spec file. + if config.files_to_run.one? + # Use the documentation formatter for detailed output, + # unless a formatter has already been configured + # (e.g. via a command-line flag). + config.default_formatter = "doc" + end + + # Print the 10 slowest examples and example groups at the + # end of the spec run, to help surface which specs are running + # particularly slow. + config.profile_examples = 10 + + # Run specs in random order to surface order dependencies. If you find an + # order dependency and want to debug it, you can fix the order by providing + # the seed, which is printed after each run. + # --seed 1234 + config.order = :random + + # Seed global randomization in this process using the `--seed` CLI option. + # Setting this allows you to use `--seed` to deterministically reproduce + # test failures related to randomization by passing the same `--seed` value + # as the one that triggered the failure. + Kernel.srand config.seed +=end +end + +
              +
              + +
              +
              +
              + + + + + + + + + + + + + diff --git a/ABC_Score/spec/views/home/index.html.erb_spec.html b/ABC_Score/spec/views/home/index.html.erb_spec.html new file mode 100644 index 00000000..aee42409 --- /dev/null +++ b/ABC_Score/spec/views/home/index.html.erb_spec.html @@ -0,0 +1,124 @@ + + + + + + Ruby Critic - Home + + + + + + + + + + + + +
              + + + +
              +
              +
              + +
              +
              + + + Updated + + +
              +
              +

              spec/views/home / index.html.erb_spec.rb

              +
              +
              + +
              + +
              +
              +
              +
              +
              + A +
              +
              +
              +
              +
              5 lines of codes
              +
              0 methods
              +
              +
              +
              N/A complexity/method
              +
              4 churn
              +
              +
              +
              0.0 complexity
              +
              0 duplications
              +
              +
              +
              +
              +
              +
              + +
              +
              +
              + + # require 'rails_helper' + +# RSpec.describe "home/index.html.erb", type: :view do +# pending "add some examples to (or delete) #{__FILE__}" +# end + +
              +
              + +
              +
              +
              + + + + + + + + + + + + + diff --git a/ABC_Score/spike.html b/ABC_Score/spike.html new file mode 100644 index 00000000..79c464f1 --- /dev/null +++ b/ABC_Score/spike.html @@ -0,0 +1,140 @@ + + + + + + Ruby Critic - Home + + + + + + + + + + + + +
              + + + +
              +
              +
              + +
              +
              + + + Updated + + +
              +
              +

              . / spike.rb

              +
              +
              + +
              + +
              +
              +
              +
              +
              + A +
              +
              +
              +
              +
              21 lines of codes
              +
              1 methods
              +
              +
              +
              1.6 complexity/method
              +
              8 churn
              +
              +
              +
              1.56 complexity
              +
              0 duplications
              +
              +
              +
              +
              +
              +
              + +
              +
              +
              + + require 'date' + +datedate = (Date.today+5).strftime("%Y-%0m-%0e") +p datedate + +val0 = 0 +val1 = 1 + +p val0 && val1 +p val0 || val1 + +def metodo (var=nil) + p var +end +metodo(13) +metodo + +h1 = {"user_id"=>"", "status"=>"3", "code"=>"0"} +h2 = {"user_id"=>"1", "status"=>"2"} +h1.merge!(h2) +p h1 + +
              +
              + +
              +
              +
              + + + + + + + + + + + + + diff --git a/ABC_Score/test/application_system_test_case.html b/ABC_Score/test/application_system_test_case.html new file mode 100644 index 00000000..9f3ffd0f --- /dev/null +++ b/ABC_Score/test/application_system_test_case.html @@ -0,0 +1,124 @@ + + + + + + Ruby Critic - Home + + + + + + + + + + + + +
              + + + +
              +
              +
              + +
              +
              + + + Updated + + +
              +
              +

              test / application_system_test_case.rb

              +
              +
              + +
              + +
              +
              +
              +
              +
              + A +
              +
              +
              +
              +
              5 lines of codes
              +
              0 methods
              +
              +
              +
              N/A complexity/method
              +
              1 churn
              +
              +
              +
              0.0 complexity
              +
              0 duplications
              +
              +
              +
              +
              +
              +
              + +
              +
              +
              + + require "test_helper" + +class ApplicationSystemTestCase < ActionDispatch::SystemTestCase
              1. ApplicationSystemTestCase has no descriptive comment
              + driven_by :selenium, using: :chrome, screen_size: [1400, 1400] +end +
              +
              +
              + +
              +
              +
              + + + + + + + + + + + + + diff --git a/ABC_Score/test/test_helper.html b/ABC_Score/test/test_helper.html new file mode 100644 index 00000000..017c6828 --- /dev/null +++ b/ABC_Score/test/test_helper.html @@ -0,0 +1,129 @@ + + + + + + Ruby Critic - Home + + + + + + + + + + + + +
              + + + +
              +
              +
              + +
              +
              + + + Updated + + +
              +
              +

              test / test_helper.rb

              +
              +
              + +
              + +
              +
              +
              +
              +
              + A +
              +
              +
              +
              +
              10 lines of codes
              +
              0 methods
              +
              +
              +
              N/A complexity/method
              +
              5 churn
              +
              +
              +
              0.0 complexity
              +
              0 duplications
              +
              +
              +
              +
              +
              +
              + +
              +
              +
              + + ENV['RAILS_ENV'] ||= 'test' +require_relative '../config/environment' +require 'rails/test_help' + +class ActiveSupport::TestCase
              1. ActiveSupport::TestCase has no descriptive comment
              + # Setup all fixtures in test/fixtures/*.yml for all tests in alphabetical order. + fixtures :all + + # Add more helper methods to be used by all tests here... +end +
              +
              +
              + +
              +
              +
              + + + + + + + + + + + + + diff --git a/doc/AccreditationsController.html b/doc/AccreditationsController.html index 087c5e60..67816a3a 100644 --- a/doc/AccreditationsController.html +++ b/doc/AccreditationsController.html @@ -75,16 +75,12 @@

              Methods