diff --git a/analysis/regime_optimize.Rmd b/analysis/regime_optimize.Rmd index 84e078c..8c0d89f 100644 --- a/analysis/regime_optimize.Rmd +++ b/analysis/regime_optimize.Rmd @@ -232,7 +232,7 @@ check_importance <- function(model, train_data, test_data, features, type = c("f type = "ratio", pred_wrapper = function(object, newdata) { pred <- predict(object, newdata) - pred$.pred + pred[1, ] }, nsim = nsim, metric = "rmse", @@ -856,10 +856,12 @@ importance_shap2_plot <- importance_shap2 + plot.margin = margin(0, 0, 0, 10) ) + all <- (importance_firm_plot / importance_firm2_plot + plot_layout(tag_level = "new")) | - (importance_perm_plot / importance_perm2_plot + plot_layout(tag_level = "new")) | + (importance_perm_plot / importance_firm2_plot + plot_layout(tag_level = "new")) | (importance_shap_plot / importance_shap2_plot + plot_layout(tag_level = "new")) + plot_layout(guides = "collect") + all + plot_annotation( title = "Variable importances", tag_levels = c("A", "1"), @@ -876,6 +878,7 @@ Fig. \@ref(fig:importanceshap) and \@ref(fig:importanceshap2) show the effect of ```{r importanceshap, message=FALSE, fig.height = 6, fig.width= 10, out.width="100%", cache=FALSE} #| fig.cap="This shows the effect each variable has on FLOSS score. This plot doesn't take into account the #| variable interactions." + t1 <- autoplot(shap_fastshap_all_test, type = "dependence", X = testing_data, feature = predictors_names[2], alpha = 0.2 diff --git a/analysis/report.Rmd b/analysis/report.Rmd index a7ad826..a6fd047 100644 --- a/analysis/report.Rmd +++ b/analysis/report.Rmd @@ -1,7 +1,7 @@ --- title: "Report" author: "Francisco Bischoff" -date: "on Jan 31, 2022" +date: "on Jun 06, 2023" output: bookdown::html_document2: base_format: workflowr::wflow_html @@ -29,14 +29,6 @@ if (knitr::is_latex_output()) { } else { knitr::opts_chunk$set(dev = "svg") } -library(here) -library(glue) -library(visNetwork) -library(tibble) -library(kableExtra) -library(gridExtra) -# library(targets) -library(ggplot2) my_graphics <- function(image_name, base_path = here::here("docs", "figure")) { file_path <- glue::glue("{base_path}/{image_name}") @@ -68,8 +60,112 @@ my_kable <- function(title, label, content) { attr(out, "format") <- "html" out } + +tkplot <- function(object, interactive = FALSE, res = 50) { + ecg <- read_ecg_with_atr(here::here("inst/extdata/afib_regimes", object$record), resample_from = 200, resample_to = res) + value <- ecg[[1]]$II + prop <- 250 / res + mask <- seq.int(50, 100) + value[1:5] <- median(value[mask]) + value[(length(value) - 5):length(value)] <- median(value[mask]) + time <- seq(1, floor(length(value) * prop), length.out = length(value)) + data <- tibble::tibble(time = time, value = value) + min_data <- min(data$value) + max_data <- max(data$value) + truth <- clean_truth(floor(attr(ecg[[1]], "regimes") * prop), floor(length(value) * prop)) # object$truth[[1]] + preds <- object$pred[[1]] + + title <- glue::glue( + "Recording: {object$record} ", + "#truth: {length(truth)}, ", + "#preds: {length(preds)}, ", + "length: {floor(length(value)*prop)} ", + "FLOSS Score: {round(object$score, 3)}" + ) + + subtitle <- glue::glue( + "Parameters: ", + "MP window: {object$window_size}, ", + "MP threshold: {object$mp_threshold}, ", + "Time constraint: {object$time_constraint}, ", + "Regime threshold: {object$regime_threshold}, ", + "Regime landmark: {object$regime_landmark}" + ) + + + plot <- data %>% + timetk::plot_time_series( + time, value, + .title = glue::glue(title, "
{subtitle}"), + .interactive = interactive, + .smooth = FALSE, + .line_alpha = 0.3, + .line_size = 0.2, + .plotly_slider = interactive + ) + + if (interactive) { + plot <- plot %>% + plotly::add_segments( + x = preds, xend = preds, y = min_data, + yend = max_data * 1.1, + line = list(width = 2.5, color = "#0108c77f"), + name = "Predicted" + ) %>% + plotly::add_segments( + x = truth, xend = truth, y = min_data, + yend = max_data, + line = list(width = 2.5, color = "#ff00007f"), + name = "Truth" + ) + } else { + plot <- plot + + ggplot2::geom_segment( + data = tibble::tibble(tru = truth), + aes( + x = tru, xend = tru, + y = min_data, yend = max_data - (max_data - min_data) * 0.1 + ), linewidth = 2, color = "#ff00007f" + ) + + ggplot2::geom_segment( + data = tibble::tibble(pre = preds), + aes( + x = pre, xend = pre, + y = min_data, yend = max_data + ), linewidth = 1, color = "#0108c77f" + ) + + ggplot2::theme_bw() + + ggplot2::theme( + legend.position = "none", + plot.margin = margin(0, 0, 0, 10) + ) + + ggplot2::labs(title = title, subtitle = subtitle, y = ggplot2::element_blank()) + } + plot +} + +options(dplyr.summarise.inform = FALSE) + +# tinytex::tlmgr_install("tabu") +library(here) +library(glue) +library(visNetwork) +library(tibble) +library(kableExtra) +library(patchwork) +library(targets) +library(ggplot2) + +source(here::here("scripts", "common", "read_ecg.R")) + +# knitr::opts_knit$set( +# root.dir = here("docs"), +# base.dir = here("protocol"), +# verbose = TRUE +# ) ``` +Last Updated: 2023-06-12 12:51:54 UTC # Objectives and the research question @@ -186,7 +282,7 @@ the Matrix Profile Foundation as a co-founder with contributors from Python and This implementation in R is being used for computing the MP and MP-based algorithms of this thesis. -## The data +## The data {#the-data} The current dataset used is the CinC/Physionet Challenge 2015 public dataset, modified to include only the actual data and the header files in order to be read by the pipeline and is hosted by @@ -483,6 +579,7 @@ size_h <- 5 if (file.exists(here("output/createfilter.rds"))) { data <- readRDS(here("output/createfilter.rds")) } else { + cli::cli_abort("File not found.") data <- read_ecg_csv(here(glue("inst/extdata/physionet/{file}.hea"))) data <- data[[file]]$II saveRDS(data, here("output/createfilter.rds"), compress = "xz") @@ -632,7 +729,7 @@ my_graphics("contrast", "figure") After extracting candidates for each class signature, a classification algorithm will be fitted and evaluated using the criteria explained on section \@ref(evaluation). -### Summary of the methodology +### Summary of the methodology {#methodology} To summarize the steps taken on this thesis to accomplish the main objective, Figs. \@ref(fig:regimedetection), \@ref(fig:shapelets) and \@ref(fig:fullmodel) show the @@ -787,7 +884,7 @@ TODO: review the problem when there are too many detections my_graphics("floss_eval", "figure") ``` -### Classification +### Classification {#classification-criteria} As described in section \@ref(classregime), the model for classification will use a set of shapelets to identify if we have a `TRUE` (life-threatening) regime or a `FALSE` (non-life-threatening) regime. @@ -879,9 +976,49 @@ the FLOSS evaluation. ## Regime change detection -The current status of the regime change detection pipeline is the implementation of the resampling -strategies and evaluation to start the parameter tuning. An example of the current implementation is -shown on Fig. \@ref(fig:flossregime). +As we have seen previously, the FLOSS algorithm is built on top of the Matrix Profile (MP). Thus, +we have proposed several parameters that may or not impact the FLOSS prediction performance. + +The variables for building the MP are: + +- **`mp_threshold`**: the minimum similarity value to be considered for 1-NN. +- **`time_constraint`**: the maximum distance to look for the nearest neighbor. +- **`window_size`**: the default parameter always used to build an MP. + +Later, the FLOSS algorithm also has a parameter that needs tuning to optimize the prediction: + +- **`regime_threshold`**: the threshold below which a regime change is considered. +- **`regime_landmark`**: the point in time where the regime threshold is applied. + +Using the `tidymodels` framework, we performed a basic grid search on all these parameters. + +Fig. \@ref(fig:thepipeline) shows the workflow using Nested resamplig as described on section \@ref(methodology). +Fig. \@ref(fig:flossregime) shows an example of the regime change detection pipeline. The graph on top shows + the ECG streaming; the blue line marks the ten seconds before the original alarm was fired; the red line + marks the time constraint used on the example; the dark red line marks the limit for taking a decision + in this case of Asystole; The blue horizontal line represents the size of the sliding window. The graph + on the middle shows the Arc counts as seen by the algorithm (with the corrected distribution); the red + line marks the current minimum value and its index; the blue horizontal line shows the minimum value + seen until then. The graph on the bottom shows the computed Arc counts (raw) and the red line is the + theoretical distribution used for correction. + +```{r floss_cached, echo=FALSE, cache=FALSE} +network <- readRDS(here::here("output", "regime_network.rds")) +net <- network |> + visNetwork::visPhysics(hierarchicalRepulsion = list( + springLength = 1, + avoidOverlap = 0.5, + nodeDistance = 120 + )) +``` + +```{r thepipeline, out.width="90%", fig.cap="FLOSS pipeline."} +if (knitr::is_latex_output()) { + my_graphics("the-network") +} else { + visNetwork::visInteraction(net, hover = TRUE, multiselect = TRUE, tooltipDelay = 100) +} +``` ```{r flossregime, echo=FALSE, out.height="80%", out.width="80%"} #| fig.cap="Regime change detection example. @@ -897,29 +1034,842 @@ shown on Fig. \@ref(fig:flossregime). my_graphics("floss_regime", "figure") ``` +The dataset used for working with the Regime Change algorithm was the "Paroxysmal Atrial Fibrillation Events Detection from Dynamic ECG Recordings: The 4th China Physiological Signal Challenge 2021" hosted by Zenodo [@bischoff2021afib] under the same license as Physionet. + +The selected records were those that contain paroxysmal atrial fibrillation events, a total of 229 records. The records were split in a proportion of 3/4 for the training set (inner resampling) and 1/4 for the test set (outer resampling). The inner resampling was performed using a 5-fold cross-validation, which accounts for 137 records for fitting the models and 92 records for assessing them in the inner resampling. + +The following parameters were used: + +- The MP parameters were explored using the following values: + - **`mp_threshold`**: 0.0 to 0.9, by 0.1 steps; + - **`time_constraint`**: 0, 800 and 1500; + - **`window_size`**: 25 to 350, by 25 steps; +- The FLOSS parameters were explored using the following values: + - **`regime_threshold`**: 0.05 to 0.90, by 0.05 steps; + - **`regime_landmark`**: 1 to 10, by 0.5 steps. + +### Parameters analysis + +The above process was an example of parameter tuning seeking the best model for a given set of parameters. It used a nested cross-validation procedure that aims to find the best combination of parameters and avoid overfitting. + +While this process is powerful and robust, it does not show us the importance of each parameter. At least one parameter has been introduced by reasoning about the problem (`mp_threshold`), but how important it (and other parameters) is for predicting regime changes? + +For example, the process above took 4 days, 20 hours, and 15 minutes to complete the grid search using an Intel(R) Xeon(R) Silver 4210R \@ 2.40 GHz server. Notice that about 133 different combinations of parameters were tested on computing the MP (not FLOSS, the `regime_threshold`), 5 folds, 2 times each. That sums up about 35.2 x 10^9^ all-pairs Euclidean distances computed on less than 5 days (on CPU, not GPU). Not bad. + +Another side note on the above process, it is not a "release" environment, so we must consider lots of overhead in computation and memory usage that must be taken into account during these five days of grid search. Thus, much time can be saved if we know what parameters are essential for the problem. + +In order to check the effect of the parameters on the model, we need to compute the *importance* of each parameter. + +Wei *et al.* published a comprehensive review on variable importance analysis [@Wei2015]. + +Our case is not a typical case of variable importance analysis, where a set of *features* are tested against an *outcome*. Instead, we have to proxy our analysis by using as *outcome* the FLOSS performance score and as *features* (or *predictors*) the tuning parameters that lead to that score. + +That is accomplished by fitting a model using the tuning parameters to predict the FLOSS score and then applying the techniques to compute the importance of each parameter. + +For this matter, a Bayesian Additive Regression Trees (BART) model was chosen after an experimental trial with a set of regression models (including glmnet, gbm, mlp) and for its inherent characteristics, which allows being used for model-free variable selection [@Chipman2010]. The best BART model was selected using 10-fold cross-validation repeated 3 times, having great predictive power with an RMSE around 0.2 and an R^2^ around 0.99. With this fitted model, we could evaluate each parameter's importance. + +### Interactions + +Before starting the parameter importance analysis, we need to consider the parameter interactions since this is usually the weak spot of the analysis techniques. + +The first BART model was fitted using the following parameters: + +$$ +\begin{aligned} +E( score ) &= \alpha + time\_constraint\\ + &\quad + mp\_threshold + window\_size\\ + &\quad + regime\_threshold + regime\_landmark +\end{aligned} \tag{7} \label{eq-first} +$$ + +After checking the interactions, this is the refitted model: + +$$ +\begin{aligned} +E( score ) &= \alpha + time\_constraint\\ +&\quad + mp\_threshold + window\_size\\ +&\quad + regime\_threshold + regime\_landmark\\ +&\quad + \left(regime\_threshold \times regime\_landmark\right)\\ +&\quad + \left(mp\_threshold \times regime\_landmark\right)\\ +&\quad + \left(mp\_threshold \times window\_size\right) +\end{aligned} \tag{8} \label{eq-fitted} +$$ + +Fig. \@ref(fig:interaction) shows the variable interaction strength between pairs of variables. That allows us to verify if there are any significant interactions between the variables. Using the information from the first model fit, equation $\eqref{eq-first}$, we see that `regime_threshold` interacts strongly with `regime_landmark`. This interaction was already expected, and we see that even after refitting the model, equation $\eqref{eq-fitted}$, this interaction is still strong. + +This is not a problem *per se* but a signal we must be aware of when exploring the parameters. + +```{r interaction, fig.height = 7, fig.width= 8, out.width="100%"} +#| fig.cap="Variable interactions strength using feature importance ranking measure (FIRM) approach [@Greenwell2018]. +#| A) Shows strong interaction between `regime_threshold` and `regime_landmark`, `mp_threshold` and `window_size`, +#| `mp_threshold` and `regime_landmark`. +#| B) Refitting the model with these interactions taken into account, the strength is substantially reduced, except +#| for the first, showing that indeed there is a strong correlation between those variables." + +interactions <- readRDS(here("output", "importances_lmk.rds")) +importance_firm <- interactions$importance_firm +importance_perm <- interactions$importance_perm +importance_shap <- interactions$importance_shap +shap_html_test <- interactions$shap_html_test +shap_fastshap_all_test <- interactions$shap_fastshap_all_test +interactions <- interactions$interactions + +interactions2 <- readRDS(here("output", "importances2_lmk.rds")) +importance_firm2 <- interactions2$importance_firm2 +importance_perm2 <- interactions2$importance_perm2 +importance_shap2 <- interactions2$importance_shap2 +shap_fastshap_all_test2 <- interactions2$shap_fastshap_all_test2 +shap_html_test2 <- interactions2$shap_html_test2 +interactions2 <- interactions2$interactions2 + +interactions_plot <- ggplot2::ggplot(interactions, ggplot2::aes( + x = reorder(Variables, Interaction), + y = Interaction, fill = Variables +)) + + ggplot2::geom_col(color = "grey35", linewidth = 0.2) + + ggplot2::coord_flip() + + ggplot2::labs( + title = "Normal fit", + y = ggplot2::element_blank(), + x = ggplot2::element_blank() + ) + + ggplot2::ylim(0, 1.65) + + ggplot2::theme_bw() + + ggplot2::theme(legend.position = "none") + +interactions2_plot <- ggplot2::ggplot(interactions2, ggplot2::aes( + x = reorder(Variables, Interaction), + y = Interaction, fill = Variables +)) + + ggplot2::geom_col(color = "grey35", linewidth = 0.2) + + ggplot2::coord_flip() + + ggplot2::labs( + title = "Taking into account the interactions", + y = "Interaction strength", + x = ggplot2::element_blank() + ) + + ggplot2::ylim(0, 1.65) + + ggplot2::theme_bw() + + ggplot2::theme(legend.position = "none") + +inter <- interactions_plot / interactions2_plot +inter + plot_annotation( + title = "Variable Interaction Strength", + tag_levels = c("A", "1"), + theme = ggplot2::theme_bw() +) +``` + +### Importance + +After evaluating the interactions, we then can perform the analysis of the variable importance. The goal is to understand how the FLOSS score behaves when we change the parameters. + +Here is a brief overview of the different techniques: + +#### Feature Importance Ranking Measure (FIRM) + +The FIRM is a variance-based method. This implementation uses the ICE curves to quantify each feature effect which is more robust than partial dependance plots (PDP) [@Greenwell2020]. + +It is also helpful to inspect the ICE curves to uncover some heterogeneous relationships with the outcome [@Molnar2022]. + +**Advantages:** + +- Has a causal interpretation (for the model, not for the real world) +- ICE curves can uncover heterogeneous relationships + +**Disadvantages:** + +- The method does not take into account interactions. + +#### Permutation + +The Permutation method was introduced by Breiman in 2001 [@Breiman2001] for Random Forest, and the implementation used here is a model-agnostic version introduced by Fisher *et al.* in 2019 [@Fisher2018]. A feature is "unimportant" if shuffling its values leaves the model error unchanged, assuming that the model has ignored the feature for the prediction. + +**Advantages:** + +- Easy interpretation: the importance is the increase in model error when the feature's information is destroyed. +- No interactions: the interaction effects are also destroyed by permuting the feature values. + +**Disadvantages:** + +- It is linked to the model error: not a disadvantage *per se*, but may lead to misinterpretation if the goal is to understand how the output varies, regardless of the model's performance. For example, if we want to measure the robustness of the model when someone tampers the features, we want to know the *model variance* explained by the features. Model variance (explained by the features) and feature importance correlate strongly when the model generalizes well (it is not overfitting). +- Correlations: If features are correlated, the permutation feature importance can be biased by unrealistic data instances. Thus we need to be careful if there are strong correlations between features. + +#### SHAP + +The SHAP feature importance [@Lundberg2017] is an alternative to permutation feature importance. The difference between both is that Permutation feature importance is based on the decrease in model performance, while SHAP is based on the magnitude of feature attributions. + +**Advantages:** + +- It is not linked to the model error: as the underlying concept of SHAP is the Shapley value, the value attributed to each feature is related to its contribution to the output value. If a feature is important, its addition will significantly affect the output. + +**Disadvantages:** + +- Computer time: Shapley value is a computationally expensive method and usually is computed using Montecarlo simulations. +- The Shapley value can be misinterpreted: The Shapley value of a feature value **is not** the difference of the predicted value after removing the feature from the model training. The interpretation of the Shapley value is: "Given the current set of feature values, the contribution of a feature value to the difference between the actual prediction and the mean prediction is the estimated Shapley value" [@Molnar2022]. +- Correlations: As with other permutation methods, the SHAP feature importance can be biased by unrealistic data instances when features are correlated. + +### Importance analysis + +Using the three techniques simultaneously allows a broad comparison of the model behavior [@Greenwell2020]. All three methods are model-agnostic (separates interpretation from the model), but as we have seen, each method has its advantages and disadvantages [@Molnar2022]. + +Fig. \@ref(fig:importance) then shows the variable importance using three methods: Feature Importance Ranking Measure (FIRM) using Individual Conditional Expectation (ICE), Permutation-based, and Shapley Additive explanations (SHAP). The first line of this figure shows an interesting result that probably comes from the main disadvantage of the FIRM method: *the method does not take into account interactions*. We see that FIRM is the only one that disagrees with the other two methods, giving much importance to `window_size`. + +In the second line, taking into account the interactions, we see that all methods somewhat agree with each other, accentuating the importance of `regime_threshold`, which makes sense as it is the most evident parameter we need to set to determine if the *Arc Counts* are low enough to indicate a regime change. + +```{r importance, fig.height = 7, fig.width= 15, out.width="100%"} +#| fig.cap="Variables importances using three different methods. A) Feature Importance Ranking Measure +#| using ICE curves. B) Permutation method. C) SHAP (400 iterations). Line 1 refers to the original +#| fit, and line 2 to the re-fit, taking into account the interactions between variables +#| (@fig-interaction)." + + +importance_firm_plot <- ggplot2::ggplot(importance_firm, aes( + x = reorder(Variable, Importance), + y = Importance, fill = Variable +)) + + ggplot2::geom_col(colour = "grey35", linewidth = 0.8, show.legend = FALSE) + + ggplot2::coord_flip() + + ggplot2::labs( + title = "Feature Importance Ranking Measure", + subtitle = "Individual Conditional Expectation", + x = "", + y = ggplot2::element_blank() + ) + + ggplot2::ylim(0, 3.5) + + ggplot2::theme_bw() + + ggplot2::theme( + legend.position = "none", + plot.margin = margin(0, 0, 0, 10) + ) + +importance_perm_plot <- ggplot2::ggplot(importance_perm, aes( + x = reorder(Variable, Importance), + y = Importance, fill = Variable +)) + + ggplot2::geom_boxplot(colour = "grey35", linewidth = 0.5, show.legend = FALSE) + + ggplot2::coord_flip() + + ggplot2::labs( + title = "Permutation-based (100x)", + x = "", + y = ggplot2::element_blank() + ) + + ggplot2::ylim(2, 15) + + ggplot2::theme_bw() + + ggplot2::theme( + legend.position = "none", + plot.margin = margin(0, 0, 0, 10) + ) + +importance_shap_plot <- ggplot2::ggplot(importance_shap, aes( + x = reorder(Variable, Importance), + y = Importance, fill = Variable +)) + + ggplot2::geom_col(colour = "grey35", linewidth = 0.8, show.legend = FALSE) + + ggplot2::coord_flip() + + ggplot2::labs( + title = "SHAP (400 iterations)", + x = "", + y = ggplot2::element_blank() + ) + + ggplot2::ylim(0, 1.6) + + ggplot2::theme_bw() + + ggplot2::theme( + legend.position = "none", + plot.margin = margin(0, 0, 0, 10) + ) + +importance_firm2_plot <- ggplot2::ggplot(importance_firm2, aes( + x = reorder(Variable, Importance), + y = Importance, fill = Variable +)) + + ggplot2::geom_col(colour = "grey35", linewidth = 0.8, show.legend = FALSE) + + ggplot2::coord_flip() + + ggplot2::labs( + x = "", + y = "Importance" + ) + + ggplot2::ylim(0, 3.5) + + ggplot2::theme_bw() + + ggplot2::theme( + legend.position = "none", + plot.margin = margin(0, 0, 0, 10) + ) + +importance_perm2_plot <- ggplot2::ggplot(importance_perm2, aes( + x = reorder(Variable, Importance), + y = Importance, fill = Variable +)) + + ggplot2::geom_boxplot(colour = "grey35", linewidth = 0.5, show.legend = FALSE) + + ggplot2::coord_flip() + + ggplot2::labs( + x = "", + y = "Importance" + ) + + ggplot2::ylim(2, 15) + + ggplot2::theme_bw() + + ggplot2::theme( + legend.position = "none", + plot.margin = margin(0, 0, 0, 10) + ) + +importance_shap2_plot <- ggplot2::ggplot(importance_shap2, aes( + x = reorder(Variable, Importance), + y = Importance, fill = Variable +)) + + ggplot2::geom_col(colour = "grey35", linewidth = 0.8, show.legend = FALSE) + + ggplot2::coord_flip() + + ggplot2::labs( + x = "", + y = "Importance" + ) + + ggplot2::ylim(0, 1.6) + + ggplot2::theme_bw() + + ggplot2::theme( + legend.position = "none", + plot.margin = margin(0, 0, 0, 10) + ) + + +all <- (importance_firm_plot / importance_firm2_plot + plot_layout(tag_level = "new")) | + (importance_perm_plot / importance_perm2_plot + plot_layout(tag_level = "new")) | + (importance_shap_plot / importance_shap2_plot + plot_layout(tag_level = "new")) + + plot_layout(guides = "collect") +all + plot_annotation( + title = "Variable importances", + tag_levels = c("A", "1"), + theme = ggplot2::theme_bw() + ggplot2::theme( + plot.title = ggplot2::element_text(size = 20) + ) +) +``` + +Fig. \@ref(fig:importanceshap) and Fig. \@ref(fig:importanceshap2) show the effect of each feature on the FLOSS score. The more evident difference is the shape of the effect of `time_constraint` that initially suggested better results with larger values. However, removing the interactions seems to be a flat line. + +Based on Fig. \@ref(fig:importance) and Fig. \@ref(fig:importanceshap2) we can infer that: + +- **`regime_threshold`**: is the most important feature, has an optimal value to be set, and since the high interaction with the `regime_landmark`, both must be tuned simultaneously. In this setting, high thresholds significantly impact the score, probably due to an increase in false positives starting on \>0.65 the overall impact is mostly negative. + +- **`regime_landmark`**: is not as important as the `regime_threshold,` but since there is a high interaction, it must not be underestimated. It is known that the *Arc Counts* have more uncertainty as we approach the margin of the streaming, and this becomes evident looking at how the score is negatively affected for values below 3.5s. + +- **`window_size`**: has a near zero impact on the score when correctly set. Nevertheless, for higher window values, the score is negatively affected. This high value probably depends on the data domain. In this setting, the model is being tuned towards the changes from atrial fibrillation/non-fibrillation; thus, the "shape of interest" is small compared to the whole heartbeat waveform. Window sizes smaller than 150 are more suitable in this case. As Beyer *et al.* noted, "as dimensionality increases, the distance to the nearest data point approaches the distance to the farthest data point" [@Beyer1999], which means that the bigger the window size, the smaller will be the contrast between different regimes. + +- **`mp_threshold`**: has a fair impact on the score, but primarily by *not using it*. We start to see a negative impact on the score with values above 0.60, while a constant positive impact with lower values. + +- **`time_constraint`**: is a parameter that must be interpreted cautiously. The 0 (zero) value means **no constraint**, which is equivalent to the size of the FLOSS history buffer (in our setting, 5000). We can see that this parameter's impact throughout the possible values is constantly near zero. + +In short, for the MP computation, the parameter that is worth tuning is the `window_size`, while for the FLOSS computation, both `regime_threshold` (mainly) and `regime_landmark` shall be tuned. + +```{r importanceshap, message=FALSE, fig.height = 6, fig.width= 10, out.width="100%"} +#| fig.cap="This shows the effect each variable has on the FLOSS score. This plot doesn't take into account the +#| variable interactions." + +trained_model <- readRDS(here("output", "dbarts_fitted_lmk.rds")) +train_data <- trained_model$training_data +testing_data <- trained_model$testing_data +predictors_names <- c("time_constraint", "regime_threshold", "mp_threshold", "window_size", "regime_landmark") +outcome_name <- "mean" + +testing_data2 <- testing_data %>% + dplyr::mutate( + int_rt_rl = regime_threshold * regime_landmark, + int_mp_w = mp_threshold * window_size, + int_mp_rl = mp_threshold * regime_landmark, + # int_mp_rt = mp_threshold * regime_threshold + # int_mp_tc = mp_threshold * time_constraint + .before = mean + ) + +layout <- " +AABB +CCDD +#EE# +" +# all <- t1 + t2 + t3 + t4 + t5 + +# plot_layout(design = layout, guides = "collect") + +# all + plot_annotation( +# title = "Shapley value vs. variable values", +# subtitle = "Original fit", +# theme = ggplot2::theme_bw() +# ) + +d1 <- shapviz::shapviz(shap_fastshap_all_test, X = testing_data[, predictors_names], baseline = mean(testing_data[, outcome_name]$mean)) +a1 <- shapviz::sv_dependence(d1, "window_size", color_var = "auto") + + ggplot2::geom_smooth(method = loess, colour = "#0000ff44", alpha = 0.2) + + ggplot2::labs(y = ggplot2::element_blank()) + + ggplot2::theme_bw() +a2 <- shapviz::sv_dependence(d1, "regime_threshold", color_var = "auto") + + ggplot2::geom_smooth(method = loess, colour = "#0000ff44", alpha = 0.2) + + ggplot2::labs(y = ggplot2::element_blank()) + + ggplot2::theme_bw() +a3 <- shapviz::sv_dependence(d1, "regime_landmark", color_var = "auto") + + ggplot2::geom_smooth(method = loess, colour = "#0000ff44", alpha = 0.2) + + ggplot2::labs(y = ggplot2::element_blank()) + + ggplot2::theme_bw() +a4 <- shapviz::sv_dependence(d1, "mp_threshold", color_var = "auto") + + ggplot2::geom_smooth(method = loess, colour = "#0000ff44", alpha = 0.2) + + ggplot2::labs(y = ggplot2::element_blank()) + + ggplot2::theme_bw() +a5 <- shapviz::sv_dependence(d1, "time_constraint", color_var = "auto") + + ggplot2::geom_smooth(method = loess, colour = "#0000ff44", alpha = 0.2) + + ggplot2::labs(y = ggplot2::element_blank()) + + ggplot2::theme_bw() + +all2 <- ((a1 + a5 + a3 + a4 + + plot_layout(guides = "collect")) + + (a2 + plot_layout(guides = "collect"))) +all2 + plot_layout(design = layout) + plot_annotation( + title = "Shapley value vs. variable values", + theme = ggplot2::theme_bw() +) +``` + +```{r importanceshap2, message=FALSE, fig.height = 6, fig.width= 10, out.width="100%"} +#| fig.cap="This shows the effect each variable has on the FLOSS score, taking into account the interactions." + +# t1 <- autoplot(shap_fastshap_all_test2, +# type = "dependence", +# X = testing_data2, feature = predictors_names[2], alpha = 0.2 +# ) + ggplot2::geom_smooth(method = loess) + ggplot2::labs(y = ggplot2::element_blank()) + ggplot2::theme_bw() +# t2 <- autoplot(shap_fastshap_all_test2, +# type = "dependence", +# X = testing_data2, feature = predictors_names[1], alpha = 0.2 +# ) + ggplot2::geom_smooth(method = loess) + ggplot2::labs(y = ggplot2::element_blank()) + ggplot2::theme_bw() +# t3 <- autoplot(shap_fastshap_all_test2, +# type = "dependence", +# X = testing_data2, feature = predictors_names[4], alpha = 0.2 +# ) + ggplot2::geom_smooth(method = loess) + ggplot2::labs(y = ggplot2::element_blank()) + ggplot2::theme_bw() +# t4 <- autoplot(shap_fastshap_all_test2, +# type = "dependence", +# X = testing_data2, feature = predictors_names[3], alpha = 0.2 +# ) + ggplot2::geom_smooth(method = loess) + ggplot2::labs(y = ggplot2::element_blank()) + ggplot2::theme_bw() +# t5 <- autoplot(shap_fastshap_all_test, +# type = "dependence", +# X = testing_data2, feature = predictors_names[5], alpha = 0.2 +# ) + ggplot2::geom_smooth(method = loess) + ggplot2::labs(y = ggplot2::element_blank()) + ggplot2::theme_bw() + + +layout <- " +AABB +CCDD +#EE# +" + + +d1 <- shapviz::shapviz(shap_fastshap_all_test2, X = testing_data2[, predictors_names], baseline = mean(testing_data2[, outcome_name]$mean)) +a1 <- shapviz::sv_dependence(d1, "window_size", color_var = "auto") + + ggplot2::geom_smooth(method = loess, colour = "#0000ff44", alpha = 0.2) + + ggplot2::labs(y = ggplot2::element_blank()) + + ggplot2::theme_bw() +a2 <- shapviz::sv_dependence(d1, "regime_threshold", color_var = "auto") + + ggplot2::geom_smooth(method = loess, colour = "#0000ff44", alpha = 0.2) + + ggplot2::labs(y = ggplot2::element_blank()) + + ggplot2::theme_bw() +a3 <- shapviz::sv_dependence(d1, "regime_landmark", color_var = "auto") + + ggplot2::geom_smooth(method = loess, colour = "#0000ff44", alpha = 0.2) + + ggplot2::labs(y = ggplot2::element_blank()) + + ggplot2::theme_bw() +a4 <- shapviz::sv_dependence(d1, "mp_threshold", color_var = "auto") + + ggplot2::geom_smooth(method = loess, colour = "#0000ff44", alpha = 0.2) + + ggplot2::labs(y = ggplot2::element_blank()) + + ggplot2::theme_bw() +a5 <- shapviz::sv_dependence(d1, "time_constraint", color_var = "auto") + + ggplot2::geom_smooth(method = loess, colour = "#0000ff44", alpha = 0.2) + + ggplot2::labs(y = ggplot2::element_blank()) + + ggplot2::theme_bw() + +all2 <- ((a1 + a5 + a3 + a4 + + plot_layout(guides = "collect")) + + (a2 + plot_layout(guides = "collect"))) +all2 + plot_layout(design = layout) + plot_annotation( + title = "Shapley value vs. variable values", + theme = ggplot2::theme_bw() +) +``` + +According to the FLOSS paper [@gharghabi2018], the `window_size` is indeed a feature that can be tuned; nevertheless, the results appear to be similar in a reasonably wide range of window sizes, up to a limit, consistent with our findings. + +### Visualizing the predictions + +At this point, the grid search tested a total of 23,389 models with resulting (individual) scores from 0.0002 to 1669.83 (Q25: 0.9838, Q50: 1.8093, Q75: 3.3890). + +#### By recording + +First, we will visualize how the models (in general) performed throughout the individual recordings. + +Fig. \@ref(fig:global) shows a violin plot of equal areas clipped to the minimum value. The blue color indicates the recordings with a small IQR (interquartile range) of model scores. We see on the left half 10% of the recordings with the worst minimum score, and on the right half, 10% of the recordings with the best minimum score. + +Next, we will visualize some of these predictions to understand why some recordings were difficult to segment. For us to have a simple baseline: a recording with just one regime change, and the model predicts exactly one regime change, but far from the truth, the score will be roughly 1. + +```{r global, eval=TRUE, fig.height=5, fig.width=10, out.width="100%"} +#| fig.cap="Violin plot showing the distribution of the FLOSS score achieved by all tested models by +#| recording. The left half shows the recordings that were difficult to predict (10% overall), whereas +#| the right half shows the recordings that at least one model could achieve a good prediction (10% +#| overall). The recordings are sorted (left-right) by the minimum (best) score achieved in descending +#| order, and ties are sorted by the median of all recording scores. The blue color highlights +#| recordings where models had an IQR variability of less than one. As a simple example, a recording +#| with just one regime change, and the model predicts exactly one change, far from the truth, the +#| score will be roughly 1." + +all_scores <- readRDS(here::here("output/regime_outputs_lmk.rds")) + +scores_stats <- all_scores %>% + dplyr::select(record, score) %>% + dplyr::group_by(record) %>% + dplyr::reframe( + score = score, min = min(score), q25 = quantile(score, 0.25), + median = quantile(score, 0.5), q75 = quantile(score, 0.75), + mean = mean(score), max = max(score) + ) + +records_factors <- forcats::as_factor(scores_stats$record) + +scores_stats$id <- sprintf("%03d", (as.numeric(records_factors))) + +scores_stats %>% + dplyr::mutate(low_iqr = q75 - q25 < 1) %>% + dplyr::filter(min > quantile(min, 0.9) | min < quantile(min, 0.1)) %>% + ggplot2::ggplot(aes(x = reorder(reorder(id, -median), -min), y = score, colour = low_iqr)) + + ggplot2::geom_violin() + + ggplot2::coord_cartesian(ylim = c(0, 5)) + + ggplot2::theme_bw() + + ggplot2::labs(title = "Scores by recording", colour = "IQR < 1", x = "Recording ID", y = "Score distribution") +``` + +Fig. \@ref(fig:worst) shows the best effort in predicting the most complex recordings. One information not declared before is that if the model does not predict any change, it will put a mark on the zero position. On the other side, the truth markers positioned at the beginning and the end of the recording were removed, as these locations lack information and do not represent a streaming setting. + +```{r worst, eval=TRUE, fig.height=15, fig.width=12, out.width="100%", dev="png"} +#| fig.cap="Prediction of the worst 10% of recordings (red is the truth, blue are the predictions)." + +worst <- scores_stats %>% + dplyr::filter(min > quantile(min, 0.9)) %>% + dplyr::group_by(record) %>% + dplyr::slice_head() %>% + dplyr::ungroup() %>% + dplyr::arrange(desc(min), desc(median)) %>% + dplyr::slice_head(n = 10) %>% + dplyr::pull(record) +# "data_25_1.par" "data_32_12.par" "data_85_1.par" "data_90_1.par" "data_68_2.par" + +worst_data <- all_scores %>% + dplyr::filter(record %in% worst) %>% + dplyr::group_by(record) %>% + dplyr::slice_min(n = 1, order_by = score, with_ties = FALSE) %>% + dplyr::arrange(desc(score)) %>% + dplyr::ungroup() + +plots <- list() +for (i in seq_len(nrow(worst_data))) { + plots[[i]] <- tkplot(worst_data[i, ], FALSE, 50) +} + +wrap_plots(plots, ncol = 1) +``` + +Fig. \@ref(fig:best) shows the best performances of the best recordings. Notice that there are recordings with a significant duration and few regime changes, making it hard for a "trivial model" to predict randomly. + +```{r best, eval=TRUE, fig.height=15, fig.width=12, out.width="100%", dev="png"} +#| fig.cap="Prediction of the best 10% of recordings (red is the truth, blue are the predictions)." + +bests <- scores_stats %>% + dplyr::filter(min < quantile(min, 0.1)) %>% + dplyr::group_by(record) %>% + dplyr::slice_head() %>% + dplyr::ungroup() %>% + dplyr::arrange(desc(min), desc(median)) %>% + dplyr::slice_head(n = 10) %>% + dplyr::pull(record) + +bests_data <- all_scores %>% + dplyr::filter(record %in% bests) %>% + dplyr::group_by(record) %>% + dplyr::slice_min(n = 1, order_by = score, with_ties = FALSE) %>% + dplyr::arrange(desc(score)) %>% + dplyr::ungroup() + +plots <- list() +for (i in seq_len(nrow(bests_data))) { + plots[[i]] <- tkplot(bests_data[i, ], FALSE, 50) +} + +wrap_plots(plots, ncol = 1) +``` + +#### By model + +Fig. \@ref(fig:globalmodel) shows the distribution of the FLOSS score of the 10% worst (left side) and 10% best models across the recordings (right side). The bluish color highlights the models with SD below 3 and IQR below 1. + +```{r globalmodel, eval=TRUE, fig.height=5, fig.width=10, out.width="100%"} +#| fig.cap="Violin plot showing the distribution of the FLOSS score achieved by all tested models during the +#| inner ressample. The left half shows the models with the worst performances (10% overall), whereas +#| the right half shows the models with the best performances (10% overall). +#| The models are sorted (left-right) by the mean score (top) and by the median (below). Ties are +#| sorted by the SD and IQR, respectively. The bluish colors highlights models with an SD below 3 +#| and IQR below 1." + +# cores_stats_model <- all_scores %>% dplyr::mutate(across(all_of(predictors_names), as.factor, .unpack = FALSE)) + +if (file.exists(here("output", "scores_stats_model_rep.rds"))) { + scores_stats_model <- readRDS(here("output", "scores_stats_model_rep.rds")) +} else { + cli::cli_abort("File not found.") + scores_stats_model <- all_scores %>% + dplyr::group_by(across(all_of(predictors_names))) %>% + dplyr::mutate(model = glue("{window_size}_{time_constraint}_{mp_threshold}_{regime_threshold}_{regime_landmark}")) %>% + dplyr::reframe( + record = record, + model = model, + score = score, min = min(score), q25 = quantile(score, 0.25), + median = quantile(score, 0.5), q75 = quantile(score, 0.75), + iqr = q75 - q25, + mean = mean(score), max = max(score), + sd = sd(score) + ) + saveRDS(scores_stats_model, file = here("output", "scores_stats_model_rep.rds")) +} + + +scores_stats_model$id <- (sprintf("%05d", (as.numeric(as.factor(scores_stats_model$model))))) +scores_stats_model$id_text <- (sprintf("Model_%05d", (as.numeric(as.factor(scores_stats_model$model))))) +scores_stats_model$record <- (sprintf("%03d", (as.numeric(factor(scores_stats_model$record, labels = levels(records_factors)))))) +scores_stats_model <- scores_stats_model %>% dplyr::select(-model) + +low <- head(sort(unique(scores_stats_model$mean)), 20) +high <- tail(sort(unique(scores_stats_model$mean)), 20) + +model_mean <- scores_stats_model %>% + dplyr::mutate(low_sd = sd < 3) %>% + dplyr::filter(mean > high | mean < low) %>% + ggplot2::ggplot(aes(x = reorder(reorder(id, -sd), -mean), y = score, colour = low_sd)) + + ggplot2::scale_colour_manual(values = c("FALSE" = "#ff0000c2", "TRUE" = "#0000ffb5")) + + ggplot2::geom_violin() + + ggplot2::coord_cartesian(ylim = c(0, 3)) + + ggplot2::theme_bw() + + ggplot2::theme(axis.text.x = element_text(size = 8, angle = 90, vjust = 0.5, hjust = 1)) + + ggplot2::labs(subtitle = "Ordered by Mean and SD", colour = "SD < 3", x = ggplot2::element_blank(), y = "Score distribution") + +low <- head(sort(unique(scores_stats_model$median)), 20) +high <- tail(sort(unique(scores_stats_model$median)), 20) + +model_median <- scores_stats_model %>% + dplyr::mutate(low_iqr = q75 - q25 < 1) %>% + dplyr::filter(median > high | median < low) %>% + ggplot2::ggplot(aes(x = reorder(reorder(id, -iqr), -median), y = score, colour = low_iqr)) + + ggplot2::geom_violin() + + ggplot2::coord_cartesian(ylim = c(0, 3)) + + ggplot2::theme_bw() + + ggplot2::theme(axis.text.x = element_text(size = 8, angle = 90, vjust = 0.5, hjust = 1)) + + ggplot2::labs(subtitle = "Ordered by Median and IQR", colour = "IQR < 1", x = "Model ID", y = "Score distribution") + +(model_mean / model_median) + plot_layout(guides = "auto") + + plot_annotation( + title = "Scores grouped by model", + theme = ggplot2::theme_bw() + ) +``` + +Fig. \@ref(fig:bestmodels) the performance of the six best models. They are ordered from left to right, from the worst record to the best record. The top model is the one with the lowest mean across the scores. The blue line indicates the mean score, and the red line the median score. The scores above 3 are squished in the plot and colored according to the scale in the legend. + +```{r bestmodels, eval=TRUE, fig.height=22, fig.width=18, out.width="100%"} +#| fig.cap="Performances of the best 6 models across all inner resample of recordings. +#| The recordings are ordered by score, from the worst to the best. +#| Each plot shows one model, starting from the best one. +#| The red line indicates the median score of the model. The blue line indicates the mean score of the model. +#| The gray line limits the zero-score region. The plot is limited on the \"y\" axis, and the scores above this +#| limit are shown in color." + +best_models <- scores_stats_model %>% + dplyr::filter(mean < quantile(mean, 0.1)) %>% + dplyr::arrange(mean, sd) %>% + dplyr::pull(id_text) %>% + unique() %>% + .[1:6] + +plots <- list() +for (i in seq_len(length(best_models))) { + dd <- scores_stats_model %>% dplyr::filter(id_text == best_models[i]) + plots[[i]] <- ggplot2::ggplot(dd, aes(x = reorder(record, -score), y = score, colour = score)) + + ggplot2::geom_point(size = 2) + + ggplot2::geom_hline(aes(yintercept = median), colour = "red") + + ggplot2::geom_hline(aes(yintercept = mean), colour = "blue") + + ggplot2::geom_hline(aes(yintercept = 0), colour = "gray50") + + ggplot2::scale_y_continuous( + limits = c(0, 3), + oob = scales::oob_squish, + expand = c(0.1, 0.05, 0.1, -0.1) + ) + + ggplot2::scale_color_gradientn(colors = c("#ffd500db", "#ff8800", "#ff5e00", "#ff0000"), limits = c(3.1, 100)) + + ggplot2::theme_bw(base_size = 15) + + ggplot2::theme(axis.text.x = element_text(size = 9, angle = 90, vjust = 0.5, hjust = 1)) + + ggplot2::labs( + title = best_models[i], + colour = "Score out\nof bounds", + x = ifelse(i == length(best_models), "Record ID", ""), + y = ggplot2::element_blank() + ) +} + +wrap_plots(plots, ncol = 1, guides = "collect") + plot_annotation( + title = "Performances of the 6 best models", + theme = ggplot2::theme_bw() +) +``` + +#### The Holdout + +Finally, Table \@ref(tab:tblbestparam) shows a summary of the best five models across all the inner resample (cross-validation). The column `mean` +shows the average score, and column `std_err` shows the standard error of the mean. The column `holdout` shows the +final score of this model on the holdout set (outer resample). + + +```{r tblbestparam, echo=FALSE} +if (file.exists(here("output", "regime_outputs_holdout.rds"))) { + regime_outputs_holdout <- readRDS(here("output", "regime_outputs_holdout.rds")) + + best_parameters <- regime_outputs_holdout$combined %>% + dplyr::group_by( + window_size, regime_threshold, regime_landmark, .metric, .estimator + ) %>% + dplyr::summarise(mean = mean(.estimate), std_err = sd(.estimate), n = dplyr::n()) %>% + dplyr::ungroup() %>% + dplyr::arrange(mean, std_err) %>% + dplyr::slice_min(n = 5, order_by = mean) %>% + dplyr::select(-.metric, -.estimator, -n) + + holdout <- regime_outputs_holdout$results %>% + dplyr::select(.estimate) %>% + dplyr::rename(holdout = .estimate) + + best_parameters <- dplyr::bind_cols(best_parameters, holdout) + + kbl(best_parameters, + booktabs = TRUE, + longtable = TRUE, + caption = "Summary of the five best models. The `mean` shows the inner resample average score. The `holdout` shows the final score of the model on the holdout set (outer resample).", + align = "cccccc", + digits = 2, + position = "ht", + linesep = "" + ) %>% + row_spec(0, bold = TRUE) %>% + column_spec(6, bold = TRUE) |> + kable_styling(full_width = TRUE) +} +``` + + ## Classification -The current status on the classification pipeline is the implementation of the shapelets extraction -using the Contrast Profile. +As described in section \@ref(classregime), the classification algorithm is based on the Contrast Profile (CP) [@Mercer2021]. The CP allows us +to detect sequences that at the same time very *similar* to its neighbors in class *A* while is very *different* from the nearest neighbor from class *B*. -An example of candidates for ventricular tachycardia is presented in Fig. \@ref(fig:vtachy). +The variables parameters we can tune are the following: -```{r vtachy, echo=FALSE, out.width="90%", fig.cap="Shapelet candidates for Ventricular Tachycardia.", fig.height=9, fig.width=14} -def_par <- graphics::par(no.readonly = TRUE) -graphics::layout(matrix(1:6, ncol = 2, byrow = TRUE)) -graphics::par(mai = c(0.8, 0.5, 0.6, 0.5), cex = 1) +- **`shapelet_size`**: that we will use interchangeably with the term *window_size* as is defines the size of the rolling window used to compute the CP. It was used a series of shapelet sizes with exponential distribution, resulting on `20` values from `21` to `401`. +- **`top_k`**: how many shapelets we will select on each CP, being the first one the shapelet with the highest constrast value. It was chosen the default value of `10`. +- **`max_shapelets`**: the maximum number of shapelets we will allow on selecting the shapelet set. It was set as `20` to allow more freedom on the selection of shapelets. +- **`max_redundance`**: the maximum number of "redundance" we will allow on selecting the shapelet set. The redundance means more than one shapelet can classify correctly the same observation. It was set as `10`, to also allow more freedom on the selection of shapelets. -data <- readRDS(here("presentations/Report/contrast.rds")) +Fig. \@ref(fig:classthepipeline) shows the workflow using Nested resamplig as described on \@ref(methodology). -for (i in (1:6)) { - plot(tsmp:::znorm(data[[i]]$plato), type = "l", ylab = "", xlab = "samples (250hz)") - for (j in seq_along(data[[i]]$neighbors)) { - lines(tsmp:::znorm(data[[i]]$neighbors[[j]]$data), col = j + 1) - } +```{r class_cached, echo=FALSE, cache=FALSE} +network <- readRDS(here::here("output", "classification_network.rds")) +net <- visNetwork::visPhysics(network, hierarchicalRepulsion = list( + springLength = 1, + avoidOverlap = 0.5, + nodeDistance = 120 +)) +``` + +```{r classthepipeline, out.width="100%", fig.cap="Classification pipeline."} +if (knitr::is_latex_output()) { + my_graphics("theclass-network") +} else { + visNetwork::visInteraction(net, hover = TRUE, multiselect = TRUE, tooltipDelay = 100) } -graphics::par(def_par) ``` +The dataset used for working Classification algorithm was the CinC/Physionet Challenge 2015 was about "Reducing False Arrhythmia Alarms in the ICU [@Clifford2015]. + +The selected records were those that contain ventricular tachycardia. The last 10 seconds (at 250hz) of all records were selected and grouped as `TRUE` alarm and `FALSE` alarm. A total of 331 records were used, being 245 `FALSE` alarms, and 86 `TRUE` alarms. + +The records were split in a proportion of 3/4 (248) for the training set (inner resampling) and 1/4 (83) for the test set (outer resampling). The proportions of `TRUE` and `FALSE` alarms were similar to the original dataset: 184 `FALSE` alarms and 64 `TRUE` alarms in the training set, and 61 `FALSE` alarms and 22 `TRUE` alarms in the test set. The inner resampling was performed using a 5-fold cross-validation. + +In order to compute the Contrast Profile (CP), on each fold, the `TRUE` alarms were concatenated in one single time-series with a small gap of 300 observation of random noise in order to isolate each alarm. The same was done for the `FALSE` alarms. + +The following steps were performed for each fold: + +1. The CP was computed with several shapelet sizes (from 21 to 401), and top 10 best shapelet candidates were stored based on the CP values. +2. Every shapelet candidate was evaluated for the hability to classify as `TRUE` or `FALSE` alarm along all the concatenated time-series. + a. First, the distance profile of the shapelet was computed against the `FALSE` time-series, and threshold was set in order to not detect any `FALSE` alarm as `TRUE` alarm. + b. Second, the distance profile of the shapelet was computed against the `TRUE` time-series, and using the threshold computed in the previous step, the number of `TRUE` alarms detected was recorded and called the "coverage" of the shapelet. +3. With this information, a Beam Search was performed in order to select the best set of shapelets that maximize the coverage and minimize the number of shapelets. The set of shapelets may contain shapelets of different sizes. +4. The confusion matrix of these sets of shapelets was computed. Other metrics were also computed, such as the F1-score, the accuracy, the precision, the specificity, the MCC, the $\kappa_m$ and the Kappa. + +An example of candidates for ventricular tachycardia is presented on \@ref(fig:holdout). + +```{r holdout, echo=FALSE, out.width="70%", fig.height=8, fig.width=8} +#| fig-cap: "Set of shapelets for the classification task. Above shows the model number, the coverage (the proportion of true alarms that were detected) and redundancy during the analysis_split (inner resample), +#| The Precision, the Specificity, and the Km during the testing_split (outer resample)." + +data <- readRDS(here("output", "classification_holdout.rds")) + +data$plots[[4]] # + ggplot2::facet_wrap(~name, ncol = 1, scales = "free_y") +``` + + +After the Inner Resampling is done, the best sets of shapelets are selected and evaluated on the Test Set without retraining a new Contrast Profile. Thus assessing the generalization of the shapelet set on new data. + +The criteria to select the best sets of shapelets was described on section \@ref(classification-criteria) being the Precision the ranking criteria. It was also required that the set being present on more than one fold and in both repetitions. Also, the sets of shapelets that had a negative $\kappa_m$ were discarded. + +The following results were obtained: + +```{r tabmodel, echo=FALSE, out.width="70%"} +colnames <- c("tp", "fp", "tn", "fn", "precision", "recall", "specificity", "accuracy", "f1", "mcc", "km", "kappa") + +kbl(data$model %>% dplyr::select(dplyr::all_of(colnames)), + booktabs = TRUE, + longtable = TRUE, + caption = "Performance of the best five sets of shapelet on the inner resample.", + # align = "cccccccccc", + digits = 2, + position = "ht", + linesep = "" +) %>% + row_spec(0, bold = TRUE) |> + kable_styling(full_width = TRUE) +``` + +```{r tabmetric, echo=FALSE, out.width="70%"} +kbl(data$metric %>% dplyr::select(dplyr::all_of(colnames)), + booktabs = TRUE, + longtable = TRUE, + caption = "Performance of the best five sets of shapelet on outer resample.", + # align = "cccccccccc", + digits = 2, + position = "ht", + linesep = "" +) %>% + row_spec(0, bold = TRUE) |> + kable_styling(full_width = TRUE) +``` + +```{r taboverall, echo=FALSE, out.width="70%"} +colnames <- c("precision", "recall", "specificity", "accuracy", "f1_micro", "f1_macro", "mcc", "km", "kappa") + +kbl(data$overall %>% dplyr::select(dplyr::all_of(colnames)), + booktabs = TRUE, + longtable = TRUE, + caption = "The aggregated performance of the best five sets of shapelet on the outer resample. Median, Q25 and Q75", + # align = "cccccccccc", + digits = 2, + position = "ht", + linesep = "" +) %>% + row_spec(0, bold = TRUE) |> + kable_styling(full_width = TRUE) +``` ## Feasibility trial @@ -983,7 +1933,7 @@ more impact on these counts. The best ST threshold is still to be determined. \ $$ -CC = 1 - \frac{ED}{(2 \times WindowSize)} \tag{7} \label{edcc} +CC = 1 - \frac{ED}{(2 \times WindowSize)} \tag{9} \label{edcc} $$ \ @@ -1003,7 +1953,7 @@ theoretical distribution using the temporal constraint parameters beforehand. as \@ref(fig:distributions). That gives us enough data to evaluate a regime change accurately utilizing a minimum of $2 \times WindowSize$ datapoints. -```{r dist-data, message=FALSE, warning=FALSE, cache=TRUE, include=FALSE} +```{r dist-data, message=FALSE, warning=FALSE, include=FALSE} source(here("scripts", "common", "compute_floss.R")) get_dist <- function(mp_const = 1250, floss_const = 0) { @@ -1090,3 +2040,5 @@ In the end, this thesis will provide a framework for identifying life-threatenin biological streaming data on devices with low CPU and low memory specifications. We expect to achieve a high-quality model on identifying these pathological conditions maintaining their robustness in the presence of noise and artifacts seen on real-world applications. + +# References diff --git a/docs/figure/regime_filter.svg b/docs/figure/regime_filter.svg index f9f6460..b70fa37 100644 --- a/docs/figure/regime_filter.svg +++ b/docs/figure/regime_filter.svg @@ -36,21 +36,21 @@ -0 -20000 -40000 -60000 +0 +20000 +40000 +60000 --5 -0 -5 -10 +-5 +0 +5 +10 -index +index diff --git a/docs/figure/regime_optimize.Rmd/global-1.svg b/docs/figure/regime_optimize.Rmd/global-1.svg index 9db1819..078682f 100644 --- a/docs/figure/regime_optimize.Rmd/global-1.svg +++ b/docs/figure/regime_optimize.Rmd/global-1.svg @@ -636,165 +636,165 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - + + + @@ -861,8 +861,8 @@ - - + + @@ -910,7 +910,7 @@ - + @@ -923,11 +923,11 @@ - + - + @@ -935,7 +935,7 @@ - + @@ -952,7 +952,7 @@ - + @@ -970,7 +970,7 @@ - + @@ -982,7 +982,7 @@ - + @@ -1051,9 +1051,9 @@ - + - + diff --git a/docs/figure/regime_optimize.Rmd/globalmodel-1.svg b/docs/figure/regime_optimize.Rmd/globalmodel-1.svg index 272e5b2..8bfbc56 100644 --- a/docs/figure/regime_optimize.Rmd/globalmodel-1.svg +++ b/docs/figure/regime_optimize.Rmd/globalmodel-1.svg @@ -1239,247 +1239,247 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -1806,9 +1806,9 @@ - + - + @@ -2012,256 +2012,256 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -2599,9 +2599,9 @@ - + - + diff --git a/docs/figure/regime_optimize.Rmd/importance-1.svg b/docs/figure/regime_optimize.Rmd/importance-1.svg index 3347d4b..058602a 100644 --- a/docs/figure/regime_optimize.Rmd/importance-1.svg +++ b/docs/figure/regime_optimize.Rmd/importance-1.svg @@ -451,147 +451,156 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + + + + + + + + + @@ -647,10 +656,10 @@ - - - - + + + + @@ -864,10 +873,10 @@ - - - - + + + + @@ -1012,28 +1021,26 @@ - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + @@ -1152,107 +1159,97 @@ - + - + - + - + - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + - - - - - - - - - - - + + + + + + + + + + + + + + + - - - - - - - - - - - - + + + + + + + + + + + - - - - - - - - - - - - - - - + + + + + + + + + + + + @@ -1276,17 +1273,25 @@ - - - + + + + + + + + - + - + - + + + + @@ -1304,62 +1309,62 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - + + + + + @@ -1491,62 +1496,62 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - + + + + + diff --git a/docs/figure/regime_optimize.Rmd/interaction-1.svg b/docs/figure/regime_optimize.Rmd/interaction-1.svg index 2974d2e..9285608 100644 --- a/docs/figure/regime_optimize.Rmd/interaction-1.svg +++ b/docs/figure/regime_optimize.Rmd/interaction-1.svg @@ -383,12 +383,12 @@ - - - - - - + + + + + + @@ -691,12 +691,12 @@ - - - - - - + + + + + + diff --git a/docs/figure/regime_optimize.Rmd/marginalplot-1.svg b/docs/figure/regime_optimize.Rmd/marginalplot-1.svg index 47030c6..0189de9 100644 --- a/docs/figure/regime_optimize.Rmd/marginalplot-1.svg +++ b/docs/figure/regime_optimize.Rmd/marginalplot-1.svg @@ -738,8 +738,8 @@ - - + + @@ -749,8 +749,8 @@ - - + + @@ -766,8 +766,8 @@ - - + + @@ -785,8 +785,8 @@ - - + + @@ -805,20 +805,20 @@ - - + + - - + + - - + + @@ -838,8 +838,8 @@ - - + + @@ -863,8 +863,8 @@ - - + + @@ -875,8 +875,8 @@ - - + + @@ -942,32 +942,32 @@ - - + + - - + + - - + + - - + + @@ -978,20 +978,20 @@ - - + + - - + + - - + + @@ -1009,8 +1009,8 @@ - - + + @@ -1037,8 +1037,8 @@ - - + + @@ -1049,8 +1049,8 @@ - - + + @@ -1101,8 +1101,8 @@ - - + + @@ -1128,8 +1128,8 @@ - - + + @@ -1164,8 +1164,8 @@ - - + + @@ -1176,8 +1176,8 @@ - - + + @@ -1200,8 +1200,8 @@ - - + + @@ -1216,8 +1216,8 @@ - - + + @@ -1232,8 +1232,8 @@ - - + + @@ -1306,8 +1306,8 @@ - - + + @@ -1336,8 +1336,8 @@ - - + + @@ -1370,8 +1370,8 @@ - - + + @@ -1382,8 +1382,8 @@ - - + + @@ -1406,8 +1406,8 @@ - - + + @@ -1418,8 +1418,8 @@ - - + + @@ -1430,8 +1430,8 @@ - - + + @@ -1498,19 +1498,19 @@ - - + + - - + + - - + + @@ -1522,8 +1522,8 @@ - - + + @@ -1534,8 +1534,8 @@ - - + + @@ -1547,12 +1547,12 @@ - - + + - - + + @@ -1560,8 +1560,8 @@ - - + + @@ -1569,28 +1569,28 @@ - - + + - - + + - - + + - - + + @@ -1602,8 +1602,8 @@ - - + + @@ -1611,8 +1611,8 @@ - - + + @@ -1620,21 +1620,21 @@ - - + + - - + + - - + + @@ -1645,16 +1645,16 @@ - - + + - - + + - - + + @@ -1666,28 +1666,28 @@ - - + + - - + + - - + + - - + + - - + + @@ -1754,16 +1754,16 @@ - - + + - - + + - - + + @@ -1774,8 +1774,8 @@ - - + + @@ -1786,8 +1786,8 @@ - - + + @@ -1795,46 +1795,46 @@ - - + + - - + + - - + + - - + + - - + + - - + + - - + + @@ -1846,39 +1846,39 @@ - - + + - - + + - - + + - - + + - - + + @@ -1889,16 +1889,16 @@ - - + + - - + + - - + + @@ -1913,16 +1913,16 @@ - - + + - - + + @@ -1933,20 +1933,20 @@ - - + + - - + + - - + + @@ -2014,8 +2014,8 @@ - - + + @@ -2027,8 +2027,8 @@ - - + + @@ -2041,8 +2041,8 @@ - - + + @@ -2062,8 +2062,8 @@ - - + + @@ -2074,12 +2074,12 @@ - - + + - - + + @@ -2094,8 +2094,8 @@ - - + + @@ -2103,24 +2103,24 @@ - - + + - - + + - - + + - - + + @@ -2187,8 +2187,8 @@ - - + + @@ -2200,8 +2200,8 @@ - - + + @@ -2227,8 +2227,8 @@ - - + + @@ -2241,8 +2241,8 @@ - - + + @@ -2254,12 +2254,12 @@ - - + + - - + + @@ -2272,8 +2272,8 @@ - - + + @@ -2284,22 +2284,22 @@ - - + + - - + + - - + + - - + + diff --git a/docs/figure/regime_optimize_3.Rmd/global-1.svg b/docs/figure/regime_optimize_3.Rmd/global-1.svg index 8c237e2..4d53de0 100644 --- a/docs/figure/regime_optimize_3.Rmd/global-1.svg +++ b/docs/figure/regime_optimize_3.Rmd/global-1.svg @@ -462,82 +462,82 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -702,9 +702,9 @@ - + - + diff --git a/docs/figure/regime_optimize_3.Rmd/globalmodel-1.svg b/docs/figure/regime_optimize_3.Rmd/globalmodel-1.svg index f6f54b6..b2dc822 100644 --- a/docs/figure/regime_optimize_3.Rmd/globalmodel-1.svg +++ b/docs/figure/regime_optimize_3.Rmd/globalmodel-1.svg @@ -594,65 +594,65 @@ - + - + - + - + - + - + - + - + - - - - - - - - - - - + + + + + + + + + + + @@ -828,9 +828,9 @@ - + - + @@ -953,65 +953,65 @@ - + - + - + - + - + - + - + - + - - - - - - - - - - - + + + + + + + + + + + @@ -1198,9 +1198,9 @@ - + - + diff --git a/docs/figure/regime_optimize_3.Rmd/importance-1.svg b/docs/figure/regime_optimize_3.Rmd/importance-1.svg index 4539073..e7e900f 100644 --- a/docs/figure/regime_optimize_3.Rmd/importance-1.svg +++ b/docs/figure/regime_optimize_3.Rmd/importance-1.svg @@ -461,9 +461,9 @@ - - - + + + @@ -657,20 +657,20 @@ - - + + - - + + - - + + @@ -819,9 +819,9 @@ - - - + + + diff --git a/docs/figure/regime_optimize_3.Rmd/interaction-1.svg b/docs/figure/regime_optimize_3.Rmd/interaction-1.svg index 7372492..6c19190 100644 --- a/docs/figure/regime_optimize_3.Rmd/interaction-1.svg +++ b/docs/figure/regime_optimize_3.Rmd/interaction-1.svg @@ -188,9 +188,9 @@ - - - + + + diff --git a/docs/figure/regime_optimize_3_5.Rmd/global-1.svg b/docs/figure/regime_optimize_3_5.Rmd/global-1.svg index f8cdd44..7f96780 100644 --- a/docs/figure/regime_optimize_3_5.Rmd/global-1.svg +++ b/docs/figure/regime_optimize_3_5.Rmd/global-1.svg @@ -401,22 +401,22 @@ - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + @@ -582,9 +582,9 @@ - + - + diff --git a/docs/figure/regime_optimize_3_5.Rmd/globalmodel-1.svg b/docs/figure/regime_optimize_3_5.Rmd/globalmodel-1.svg index b014ab2..9956d30 100644 --- a/docs/figure/regime_optimize_3_5.Rmd/globalmodel-1.svg +++ b/docs/figure/regime_optimize_3_5.Rmd/globalmodel-1.svg @@ -24,29 +24,17 @@ - + - + - + - - - - - - - - - - - - @@ -259,181 +247,181 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -444,109 +432,109 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + - + @@ -583,131 +571,131 @@ - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + @@ -729,33 +717,24 @@ - + - - - - - - - - - - - - - + + + + + + + + + + + - - - - - - - - - - - + + + + @@ -785,109 +764,109 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + - + @@ -924,141 +903,141 @@ - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - - - - - + + + + + + + + @@ -1080,34 +1059,25 @@ - - - - - - - - - - - - - - - - + - - - - - - + + + + + + + + + + + + - - - - + + + + diff --git a/docs/figure/regime_optimize_3_5.Rmd/importance-1.svg b/docs/figure/regime_optimize_3_5.Rmd/importance-1.svg index 0a90648..83b976e 100644 --- a/docs/figure/regime_optimize_3_5.Rmd/importance-1.svg +++ b/docs/figure/regime_optimize_3_5.Rmd/importance-1.svg @@ -434,9 +434,9 @@ - - - + + + @@ -631,18 +631,18 @@ - - + + - - + + - - + + @@ -773,9 +773,9 @@ - - - + + + diff --git a/docs/figure/regime_optimize_3_5.Rmd/interaction-1.svg b/docs/figure/regime_optimize_3_5.Rmd/interaction-1.svg index 6d42dc7..ac0d129 100644 --- a/docs/figure/regime_optimize_3_5.Rmd/interaction-1.svg +++ b/docs/figure/regime_optimize_3_5.Rmd/interaction-1.svg @@ -185,9 +185,9 @@ - - - + + + diff --git a/docs/figure/regime_optimize_4.Rmd/global-1.svg b/docs/figure/regime_optimize_4.Rmd/global-1.svg index f9ba369..cb2911a 100644 --- a/docs/figure/regime_optimize_4.Rmd/global-1.svg +++ b/docs/figure/regime_optimize_4.Rmd/global-1.svg @@ -570,139 +570,139 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -907,9 +907,9 @@ - + - + diff --git a/docs/figure/regime_optimize_4.Rmd/globalmodel-1.svg b/docs/figure/regime_optimize_4.Rmd/globalmodel-1.svg index 7d3bb67..6858793 100644 --- a/docs/figure/regime_optimize_4.Rmd/globalmodel-1.svg +++ b/docs/figure/regime_optimize_4.Rmd/globalmodel-1.svg @@ -600,65 +600,65 @@ - + - + - + - + - + - + - + - + - - - - - - - - - - - + + + + + + + + + + + @@ -834,9 +834,9 @@ - + - + @@ -959,69 +959,69 @@ - + - + - + - + - + - + - + - + - - - - - - - - - - + + + + + + + + + + - + @@ -1209,9 +1209,9 @@ - + - + diff --git a/docs/figure/regime_optimize_4.Rmd/importance-1.svg b/docs/figure/regime_optimize_4.Rmd/importance-1.svg index 685acd6..de98205 100644 --- a/docs/figure/regime_optimize_4.Rmd/importance-1.svg +++ b/docs/figure/regime_optimize_4.Rmd/importance-1.svg @@ -440,9 +440,9 @@ - - - + + + @@ -623,16 +623,16 @@ - - + + - - + + - - + + @@ -773,9 +773,9 @@ - - - + + + diff --git a/docs/figure/regime_optimize_4.Rmd/interaction-1.svg b/docs/figure/regime_optimize_4.Rmd/interaction-1.svg index 082cffd..35e80dd 100644 --- a/docs/figure/regime_optimize_4.Rmd/interaction-1.svg +++ b/docs/figure/regime_optimize_4.Rmd/interaction-1.svg @@ -203,9 +203,9 @@ - - - + + + diff --git a/docs/figure/regime_optimize_4_5.Rmd/global-1.svg b/docs/figure/regime_optimize_4_5.Rmd/global-1.svg index 93d4755..fe018a4 100644 --- a/docs/figure/regime_optimize_4_5.Rmd/global-1.svg +++ b/docs/figure/regime_optimize_4_5.Rmd/global-1.svg @@ -431,30 +431,30 @@ - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + @@ -660,9 +660,9 @@ - + - + diff --git a/docs/figure/regime_optimize_4_5.Rmd/globalmodel-1.svg b/docs/figure/regime_optimize_4_5.Rmd/globalmodel-1.svg index 499dc4a..a7452ab 100644 --- a/docs/figure/regime_optimize_4_5.Rmd/globalmodel-1.svg +++ b/docs/figure/regime_optimize_4_5.Rmd/globalmodel-1.svg @@ -24,28 +24,28 @@ - + - + - + - + - + - + - + - + @@ -527,24 +527,24 @@ - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + @@ -729,33 +729,24 @@ - + - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + - - - - + + + + @@ -868,24 +859,24 @@ - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + @@ -1093,21 +1084,21 @@ - + - + - - - - - + + + + + - - - - + + + + diff --git a/docs/figure/regime_optimize_4_5.Rmd/importance-1.svg b/docs/figure/regime_optimize_4_5.Rmd/importance-1.svg index eae8a3f..37b13f1 100644 --- a/docs/figure/regime_optimize_4_5.Rmd/importance-1.svg +++ b/docs/figure/regime_optimize_4_5.Rmd/importance-1.svg @@ -452,9 +452,9 @@ - - - + + + @@ -651,21 +651,21 @@ - - + + - - + + - - + + @@ -803,9 +803,9 @@ - - - + + + diff --git a/docs/figure/regime_optimize_4_5.Rmd/interaction-1.svg b/docs/figure/regime_optimize_4_5.Rmd/interaction-1.svg index 1b7e43a..604116d 100644 --- a/docs/figure/regime_optimize_4_5.Rmd/interaction-1.svg +++ b/docs/figure/regime_optimize_4_5.Rmd/interaction-1.svg @@ -194,9 +194,9 @@ - - - + + + diff --git a/docs/figure/report.Rmd/best-1.png b/docs/figure/report.Rmd/best-1.png new file mode 100644 index 0000000..2184032 Binary files /dev/null and b/docs/figure/report.Rmd/best-1.png differ diff --git a/docs/figure/report.Rmd/bestmodels-1.svg b/docs/figure/report.Rmd/bestmodels-1.svg new file mode 100644 index 0000000..8aec5f9 --- /dev/null +++ b/docs/figure/report.Rmd/bestmodels-1.svg @@ -0,0 +1,11654 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/figure/report.Rmd/distributions-1.svg b/docs/figure/report.Rmd/distributions-1.svg index 497f0cb..cfde63f 100644 --- a/docs/figure/report.Rmd/distributions-1.svg +++ b/docs/figure/report.Rmd/distributions-1.svg @@ -490,7 +490,7 @@ - + diff --git a/docs/figure/report.Rmd/figholdout-1.svg b/docs/figure/report.Rmd/figholdout-1.svg new file mode 100644 index 0000000..9853f36 --- /dev/null +++ b/docs/figure/report.Rmd/figholdout-1.svg @@ -0,0 +1,1310 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/figure/report.Rmd/global-1.svg b/docs/figure/report.Rmd/global-1.svg new file mode 100644 index 0000000..5b12279 --- /dev/null +++ b/docs/figure/report.Rmd/global-1.svg @@ -0,0 +1,936 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/figure/report.Rmd/globalmodel-1.svg b/docs/figure/report.Rmd/globalmodel-1.svg new file mode 100644 index 0000000..35ccc0a --- /dev/null +++ b/docs/figure/report.Rmd/globalmodel-1.svg @@ -0,0 +1,2612 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/figure/report.Rmd/holdout-1.svg b/docs/figure/report.Rmd/holdout-1.svg new file mode 100644 index 0000000..05bd228 --- /dev/null +++ b/docs/figure/report.Rmd/holdout-1.svg @@ -0,0 +1,1310 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/figure/report.Rmd/importance-1.svg b/docs/figure/report.Rmd/importance-1.svg new file mode 100644 index 0000000..784fe2f --- /dev/null +++ b/docs/figure/report.Rmd/importance-1.svg @@ -0,0 +1,1743 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/figure/report.Rmd/importanceshap-1.svg b/docs/figure/report.Rmd/importanceshap-1.svg new file mode 100644 index 0000000..8df7d64 --- /dev/null +++ b/docs/figure/report.Rmd/importanceshap-1.svg @@ -0,0 +1,30448 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/figure/report.Rmd/importanceshap2-1.svg b/docs/figure/report.Rmd/importanceshap2-1.svg new file mode 100644 index 0000000..0b286c7 --- /dev/null +++ b/docs/figure/report.Rmd/importanceshap2-1.svg @@ -0,0 +1,30427 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/figure/report.Rmd/interaction-1.svg b/docs/figure/report.Rmd/interaction-1.svg new file mode 100644 index 0000000..4c01ae0 --- /dev/null +++ b/docs/figure/report.Rmd/interaction-1.svg @@ -0,0 +1,1255 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/figure/report.Rmd/vtachy-1.svg b/docs/figure/report.Rmd/vtachy-1.svg index ec49311..df12a25 100644 --- a/docs/figure/report.Rmd/vtachy-1.svg +++ b/docs/figure/report.Rmd/vtachy-1.svg @@ -115,7 +115,7 @@ - + diff --git a/docs/figure/report.Rmd/worst-1.png b/docs/figure/report.Rmd/worst-1.png new file mode 100644 index 0000000..679fe7e Binary files /dev/null and b/docs/figure/report.Rmd/worst-1.png differ diff --git a/docs/index.html b/docs/index.html index 49b51d0..da45a1a 100644 --- a/docs/index.html +++ b/docs/index.html @@ -30,12 +30,12 @@ code {color: inherit; background-color: rgba(0, 0, 0, 0.04);} pre:not([class]) { background-color: white } - + - - - + + + @@ -183,8 +183,8 @@ border-radius: 4px; } -.tabset-dropdown > .nav-tabs > li.active:before { - content: ""; +.tabset-dropdown > .nav-tabs > li.active:before, .tabset-dropdown > .nav-tabs.nav-tabs-open:before { + content: "\e259"; font-family: 'Glyphicons Halflings'; display: inline-block; padding: 10px; @@ -192,16 +192,9 @@ } .tabset-dropdown > .nav-tabs.nav-tabs-open > li.active:before { - content: ""; - border: none; -} - -.tabset-dropdown > .nav-tabs.nav-tabs-open:before { - content: ""; + content: "\e258"; font-family: 'Glyphicons Halflings'; - display: inline-block; - padding: 10px; - border-right: 1px solid #ddd; + border: none; } .tabset-dropdown > .nav-tabs > li.active { @@ -357,7 +350,7 @@

Home

Francisco Bischoff

-

on October 05, 2022

+

on August 13, 2023

@@ -386,7 +379,7 @@

on October 05, 2022

-Last updated: 2022-10-05 +Last updated: 2023-08-13

Checks: @@ -514,20 +507,20 @@

on October 05, 2022

-
+

Great! You are using Git for version control. Tracking code development and connecting the code version to the results is critical for reproducibility.

-The results in this page were generated with repository version b79f104. +The results in this page were generated with repository version 4437e7a. See the Past versions tab to see a history of the changes made to the R Markdown and HTML files.

@@ -549,6 +542,19 @@

on October 05, 2022

Ignored: .github/ISSUE_TEMPLATE/ Ignored: .httr-oauth Ignored: R/RcppExports.R + Ignored: _classifier/meta/process + Ignored: _classifier/meta/progress + Ignored: _classifier/objects/ + Ignored: _classifier/user/ + Ignored: _contrast_profile/meta/process + Ignored: _contrast_profile/meta/progress + Ignored: _contrast_profile/objects/ + Ignored: _contrast_profile/user/ + Ignored: _contrast_profile_ex/meta/process + Ignored: _contrast_profile_ex/meta/progress + Ignored: _contrast_profile_ex/objects/ + Ignored: _contrast_profile_ex/user/ + Ignored: _contrast_profile_ex/workspaces/ Ignored: _regime_change/meta/process Ignored: _regime_change/meta/progress Ignored: _regime_change/objects/ @@ -561,6 +567,10 @@

on October 05, 2022

Ignored: _regime_change3/meta/progress Ignored: _regime_change3/objects/ Ignored: _regime_change3/user/ + Ignored: _regime_change_2/meta/process + Ignored: _regime_change_2/meta/progress + Ignored: _regime_change_2/objects/ + Ignored: _regime_change_2/user/ Ignored: _regime_optimize/meta/meta2 Ignored: _regime_optimize/meta/process Ignored: _regime_optimize/meta/progress @@ -570,10 +580,14 @@

on October 05, 2022

Ignored: _targets/meta/progress Ignored: _targets/objects/ Ignored: _targets/user/ + Ignored: analysis/report_cache/ Ignored: analysis/shiny/rsconnect/ Ignored: analysis/shiny_land/rsconnect/ + Ignored: analysis/shiny_ventricular/rsconnect/ + Ignored: analysis/shiny_vtachy/rsconnect/ Ignored: dev/ Ignored: inst/extdata/ + Ignored: output/importancess.rds Ignored: papers/aime2021/aime2021.md Ignored: papers/epia2022/epia2022.md Ignored: presentations/MEDCIDS21/MEDCIDS21-10min_files/ @@ -582,8 +596,12 @@

on October 05, 2022

Ignored: presentations/Report/Midterm-Report_files/ Ignored: protocol/SecondReport_cache/ Ignored: protocol/SecondReport_files/ + Ignored: protocol/ThirdReport.tex + Ignored: protocol/ThirdReport_cache/ + Ignored: protocol/ThirdReport_files/ + Ignored: protocol/_extensions/ Ignored: protocol/_files/ - Ignored: renv/python/ + Ignored: protocol/figure/ Ignored: renv/staging/ Ignored: src/RcppExports.cpp Ignored: src/RcppExports.o @@ -601,6 +619,12 @@

on October 05, 2022

Ignored: thesis/_bookdown_files/ Ignored: tmp/ +Unstaged changes: + Modified: analysis/regime_optimize.Rmd + Modified: analysis/report.Rmd + Modified: output/importances.rds + Modified: output/importances2.rds +

Note that any generated files, e.g. HTML, png, CSS, etc., are not included in @@ -649,6 +673,40 @@

on October 05, 2022

Rmd +7bf2605 + + +GitHub + + +2023-08-13 + + +Feature/classification (#152) + + + + +html + + +f9f551d + + +Francisco Bischoff + + +2022-10-06 + + +Build site. + + + + +Rmd + + dbbd1d6 @@ -1376,7 +1434,7 @@

TLDR;

Use the big button above to navigate through the older commits.

Use the top menu for further information and the thesis itself.

Last Targets Run network:

-
+

@@ -1388,106 +1446,110 @@

TLDR;

─ Session info ───────────────────────────────────────────────────────────────
  setting  value
- version  R version 4.2.1 (2022-06-23)
- os       Ubuntu 20.04.5 LTS
+ version  R version 4.3.1 (2023-06-16)
+ os       Ubuntu 22.04.2 LTS
  system   x86_64, linux-gnu
  ui       X11
  language (EN)
  collate  en_US.UTF-8
  ctype    en_US.UTF-8
  tz       Europe/Lisbon
- date     2022-10-05
+ date     2023-08-13
  pandoc   2.17.0.1 @ /usr/bin/ (via rmarkdown)
 
 ─ Packages ───────────────────────────────────────────────────────────────────
- package     * version     date (UTC) lib source
- askpass       1.1         2019-01-13 [1] CRAN (R 4.2.0)
- assertthat    0.2.1       2019-03-21 [1] CRAN (R 4.2.0)
- backports     1.4.1       2021-12-13 [1] CRAN (R 4.2.0)
- base64url     1.4         2018-05-14 [1] CRAN (R 4.2.0)
- bookdown      0.29.2      2022-09-26 [1] Github (rstudio/bookdown@dfe92a2)
- bslib         0.4.0       2022-07-16 [1] CRAN (R 4.2.1)
- cachem        1.0.6       2021-08-19 [1] CRAN (R 4.2.0)
- callr         3.7.2       2022-08-22 [1] CRAN (R 4.2.1)
- cli           3.4.1       2022-09-23 [1] CRAN (R 4.2.1)
- codetools     0.2-18      2020-11-04 [2] CRAN (R 4.2.0)
- crayon        1.5.1       2022-03-26 [1] CRAN (R 4.2.0)
- credentials   1.3.2       2021-11-29 [1] CRAN (R 4.2.0)
- data.table    1.14.2      2021-09-27 [1] CRAN (R 4.2.0)
- DBI           1.1.3       2022-06-18 [1] CRAN (R 4.2.0)
- debugme       1.1.0       2017-10-22 [1] CRAN (R 4.2.0)
- devtools      2.4.4       2022-07-20 [1] CRAN (R 4.2.1)
- digest        0.6.29      2021-12-01 [1] CRAN (R 4.2.0)
- dplyr         1.0.10      2022-09-01 [1] CRAN (R 4.2.1)
- ellipsis      0.3.2       2021-04-29 [1] CRAN (R 4.2.0)
- evaluate      0.16        2022-08-09 [1] CRAN (R 4.2.1)
- fansi         1.0.3       2022-03-24 [1] CRAN (R 4.2.0)
- fastmap       1.1.0       2021-01-25 [1] CRAN (R 4.2.0)
- fs            1.5.2       2021-12-08 [1] CRAN (R 4.2.0)
- generics      0.1.3       2022-07-05 [1] CRAN (R 4.2.0)
- gert          1.9.0       2022-09-15 [1] CRAN (R 4.2.1)
- getPass       0.2-2       2017-07-21 [1] CRAN (R 4.2.0)
- git2r         0.30.1.9000 2022-04-29 [1] Github (ropensci/git2r@80ba185)
- gittargets  * 0.0.5.9000  2022-09-26 [1] Github (wlandau/gittargets@a50dd58)
- glue          1.6.2       2022-02-24 [1] CRAN (R 4.2.0)
- here        * 1.0.1       2020-12-13 [1] CRAN (R 4.2.0)
- htmltools     0.5.3       2022-07-18 [1] CRAN (R 4.2.1)
- htmlwidgets   1.5.4       2021-09-08 [1] CRAN (R 4.2.0)
- httpuv        1.6.6       2022-09-08 [1] CRAN (R 4.2.1)
- httr          1.4.4       2022-08-17 [1] CRAN (R 4.2.1)
- igraph        1.3.5       2022-09-22 [1] CRAN (R 4.2.1)
- jquerylib     0.1.4       2021-04-26 [1] CRAN (R 4.2.0)
- jsonlite      1.8.0       2022-02-22 [1] CRAN (R 4.2.0)
- knitr         1.40        2022-08-24 [1] CRAN (R 4.2.1)
- later         1.3.0       2021-08-18 [1] CRAN (R 4.2.0)
- lifecycle     1.0.2       2022-09-09 [1] CRAN (R 4.2.1)
- magrittr    * 2.0.3       2022-03-30 [1] CRAN (R 4.2.0)
- memoise       2.0.1       2021-11-26 [1] CRAN (R 4.2.0)
- mime          0.12        2021-09-28 [1] CRAN (R 4.2.0)
- miniUI        0.1.1.1     2018-05-18 [1] CRAN (R 4.2.0)
- openssl       2.0.3       2022-09-14 [1] CRAN (R 4.2.1)
- pillar        1.8.1       2022-08-19 [1] CRAN (R 4.2.1)
- pkgbuild      1.3.1       2021-12-20 [1] CRAN (R 4.2.0)
- pkgconfig     2.0.3       2019-09-22 [1] CRAN (R 4.2.0)
- pkgload       1.3.0       2022-06-27 [1] CRAN (R 4.2.0)
- prettyunits   1.1.1       2020-01-24 [1] CRAN (R 4.2.0)
- processx      3.7.0       2022-07-07 [1] CRAN (R 4.2.1)
- profvis       0.3.7       2020-11-02 [1] CRAN (R 4.2.1)
- promises      1.2.0.1     2021-02-11 [1] CRAN (R 4.2.0)
- ps            1.7.1       2022-06-18 [1] CRAN (R 4.2.0)
- purrr         0.3.4       2020-04-17 [1] CRAN (R 4.2.0)
- R6            2.5.1       2021-08-19 [1] CRAN (R 4.2.0)
- Rcpp          1.0.9       2022-07-08 [1] CRAN (R 4.2.1)
- remotes       2.4.2       2021-11-30 [1] CRAN (R 4.2.0)
- renv          0.15.5      2022-05-26 [1] CRAN (R 4.2.0)
- rlang         1.0.6       2022-09-24 [1] CRAN (R 4.2.1)
- rmarkdown     2.16.1      2022-09-26 [1] Github (rstudio/rmarkdown@9577707)
- rprojroot     2.0.3       2022-04-02 [1] CRAN (R 4.2.0)
- rstudioapi    0.14        2022-08-22 [1] CRAN (R 4.2.1)
- sass          0.4.2       2022-07-16 [1] CRAN (R 4.2.1)
- sessioninfo   1.2.2       2021-12-06 [1] CRAN (R 4.2.0)
- shiny         1.7.2       2022-07-19 [1] CRAN (R 4.2.1)
- stringi       1.7.8       2022-07-11 [1] CRAN (R 4.2.1)
- stringr       1.4.1       2022-08-20 [1] CRAN (R 4.2.1)
- sys           3.4         2020-07-23 [1] CRAN (R 4.2.0)
- tarchetypes * 0.7.1       2022-09-07 [1] CRAN (R 4.2.1)
- targets     * 0.13.4      2022-09-15 [1] CRAN (R 4.2.1)
- tibble        3.1.8       2022-07-22 [1] CRAN (R 4.2.1)
- tidyselect    1.1.2       2022-02-21 [1] CRAN (R 4.2.0)
- urlchecker    1.0.1       2021-11-30 [1] CRAN (R 4.2.1)
- usethis       2.1.6.9000  2022-10-03 [1] Github (r-lib/usethis@8ecb7ab)
- utf8          1.2.2       2021-07-24 [1] CRAN (R 4.2.0)
- uuid          1.1-0       2022-04-19 [1] CRAN (R 4.2.0)
- vctrs         0.4.1       2022-04-13 [1] CRAN (R 4.2.0)
- visNetwork    2.1.0       2021-09-29 [1] CRAN (R 4.2.0)
- whisker       0.4         2019-08-28 [1] CRAN (R 4.2.0)
- withr         2.5.0       2022-03-03 [1] CRAN (R 4.2.0)
- workflowr   * 1.7.0       2021-12-21 [1] CRAN (R 4.2.0)
- xfun          0.33        2022-09-12 [1] CRAN (R 4.2.1)
- xtable        1.8-4       2019-04-21 [1] CRAN (R 4.2.0)
- yaml          2.3.5       2022-02-21 [1] CRAN (R 4.2.0)
-
- [1] /workspace/.cache/R/renv/proj_libs/false.alarm-d6f1a0d1/R-4.2/x86_64-pc-linux-gnu
+ package      * version     date (UTC) lib source
+ askpass        1.1         2019-01-13 [1] CRAN (R 4.3.0)
+ backports      1.4.1       2021-12-13 [1] CRAN (R 4.3.1)
+ base64url      1.4         2018-05-14 [1] CRAN (R 4.3.0)
+ bookdown       0.35.1      2023-08-13 [1] Github (rstudio/bookdown@661567e)
+ bslib          0.5.1       2023-08-11 [1] CRAN (R 4.3.1)
+ cachem         1.0.8       2023-05-01 [1] CRAN (R 4.3.0)
+ callr          3.7.3       2022-11-02 [1] CRAN (R 4.3.1)
+ cli            3.6.1       2023-03-23 [1] CRAN (R 4.3.1)
+ codetools      0.2-19      2023-02-01 [2] CRAN (R 4.3.0)
+ crayon         1.5.2       2022-09-29 [1] CRAN (R 4.3.1)
+ credentials    1.3.2       2021-11-29 [1] CRAN (R 4.3.0)
+ data.table     1.14.8      2023-02-17 [1] CRAN (R 4.3.0)
+ debugme        1.1.0       2017-10-22 [1] CRAN (R 4.3.0)
+ devtools       2.4.5       2022-10-11 [1] CRAN (R 4.3.0)
+ digest         0.6.33      2023-07-07 [1] CRAN (R 4.3.1)
+ dplyr          1.1.2       2023-04-20 [1] CRAN (R 4.3.0)
+ ellipsis       0.3.2       2021-04-29 [1] CRAN (R 4.3.0)
+ evaluate       0.21        2023-05-05 [1] CRAN (R 4.3.0)
+ fansi          1.0.4       2023-01-22 [1] CRAN (R 4.3.0)
+ fastmap        1.1.1       2023-02-24 [1] CRAN (R 4.3.0)
+ fs             1.6.3       2023-07-20 [1] CRAN (R 4.3.1)
+ furrr          0.3.1       2022-08-15 [1] CRAN (R 4.3.0)
+ future         1.33.0      2023-07-01 [1] CRAN (R 4.3.1)
+ future.callr   0.8.2       2023-08-09 [1] CRAN (R 4.3.1)
+ generics       0.1.3       2022-07-05 [1] CRAN (R 4.3.0)
+ gert           1.9.3       2023-08-07 [1] CRAN (R 4.3.1)
+ getPass        0.2-2       2017-07-21 [1] CRAN (R 4.3.0)
+ git2r          0.32.0.9000 2023-06-30 [1] Github (ropensci/git2r@9c42d41)
+ gittargets   * 0.0.6.9000  2023-05-05 [1] Github (wlandau/gittargets@2d448ff)
+ globals        0.16.2      2022-11-21 [1] CRAN (R 4.3.0)
+ glue           1.6.2       2022-02-24 [1] CRAN (R 4.3.1)
+ here         * 1.0.1       2020-12-13 [1] CRAN (R 4.3.0)
+ htmltools      0.5.6       2023-08-10 [1] CRAN (R 4.3.1)
+ htmlwidgets    1.6.2       2023-03-17 [1] CRAN (R 4.3.0)
+ httpuv         1.6.11      2023-05-11 [1] CRAN (R 4.3.1)
+ httr           1.4.6       2023-05-08 [1] CRAN (R 4.3.1)
+ igraph         1.5.1       2023-08-10 [1] CRAN (R 4.3.1)
+ jquerylib      0.1.4       2021-04-26 [1] CRAN (R 4.3.0)
+ jsonlite       1.8.7       2023-06-29 [1] CRAN (R 4.3.0)
+ knitr          1.43        2023-05-25 [1] CRAN (R 4.3.0)
+ later          1.3.1       2023-05-02 [1] CRAN (R 4.3.1)
+ lifecycle      1.0.3       2022-10-07 [1] CRAN (R 4.3.1)
+ listenv        0.9.0       2022-12-16 [1] CRAN (R 4.3.0)
+ magrittr     * 2.0.3       2022-03-30 [1] CRAN (R 4.3.1)
+ memoise        2.0.1       2021-11-26 [1] CRAN (R 4.3.0)
+ mime           0.12        2021-09-28 [1] CRAN (R 4.3.0)
+ miniUI         0.1.1.1     2018-05-18 [1] CRAN (R 4.3.0)
+ openssl        2.1.0       2023-07-15 [1] CRAN (R 4.3.1)
+ parallelly     1.36.0      2023-05-26 [1] CRAN (R 4.3.1)
+ pillar         1.9.0       2023-03-22 [1] CRAN (R 4.3.0)
+ pkgbuild       1.4.2       2023-06-26 [1] CRAN (R 4.3.1)
+ pkgconfig      2.0.3       2019-09-22 [1] CRAN (R 4.3.0)
+ pkgload        1.3.2.1     2023-07-08 [1] CRAN (R 4.3.1)
+ prettyunits    1.1.1       2020-01-24 [1] CRAN (R 4.3.0)
+ processx       3.8.2       2023-06-30 [1] CRAN (R 4.3.1)
+ profvis        0.3.8       2023-05-02 [1] CRAN (R 4.3.1)
+ promises       1.2.1       2023-08-10 [1] CRAN (R 4.3.1)
+ ps             1.7.5       2023-04-18 [1] CRAN (R 4.3.1)
+ purrr          1.0.2       2023-08-10 [1] CRAN (R 4.3.1)
+ R6             2.5.1       2021-08-19 [1] CRAN (R 4.3.1)
+ Rcpp           1.0.11      2023-07-06 [1] CRAN (R 4.3.1)
+ remotes        2.4.2.1     2023-07-18 [1] CRAN (R 4.3.1)
+ renv           0.17.3      2023-04-06 [1] CRAN (R 4.3.1)
+ rlang          1.1.1       2023-04-28 [1] CRAN (R 4.3.0)
+ rmarkdown      2.23.4      2023-08-13 [1] Github (rstudio/rmarkdown@054d735)
+ rprojroot      2.0.3       2022-04-02 [1] CRAN (R 4.3.1)
+ rstudioapi     0.15.0      2023-07-07 [1] CRAN (R 4.3.1)
+ sass           0.4.7       2023-07-15 [1] CRAN (R 4.3.1)
+ sessioninfo    1.2.2       2021-12-06 [1] CRAN (R 4.3.0)
+ shiny          1.7.5       2023-08-12 [1] CRAN (R 4.3.1)
+ stringi        1.7.12      2023-01-11 [1] CRAN (R 4.3.1)
+ stringr        1.5.0       2022-12-02 [1] CRAN (R 4.3.1)
+ sys            3.4.2       2023-05-23 [1] CRAN (R 4.3.1)
+ tarchetypes  * 0.7.7       2023-06-15 [1] CRAN (R 4.3.1)
+ targets      * 1.2.2       2023-08-10 [1] CRAN (R 4.3.1)
+ tibble         3.2.1       2023-03-20 [1] CRAN (R 4.3.0)
+ tidyselect     1.2.0       2022-10-10 [1] CRAN (R 4.3.0)
+ urlchecker     1.0.1       2021-11-30 [1] CRAN (R 4.3.0)
+ usethis        2.2.2.9000  2023-07-17 [1] Github (r-lib/usethis@467ff57)
+ utf8           1.2.3       2023-01-31 [1] CRAN (R 4.3.0)
+ uuid           1.1-0       2022-04-19 [1] CRAN (R 4.3.0)
+ vctrs          0.6.3       2023-06-14 [1] CRAN (R 4.3.1)
+ visNetwork     2.1.2       2022-09-29 [1] CRAN (R 4.3.0)
+ whisker        0.4.1       2022-12-05 [1] CRAN (R 4.3.0)
+ withr          2.5.0       2022-03-03 [1] CRAN (R 4.3.1)
+ workflowr    * 1.7.0       2021-12-21 [1] CRAN (R 4.3.0)
+ xfun           0.40        2023-08-09 [1] CRAN (R 4.3.1)
+ xtable         1.8-4       2019-04-21 [1] CRAN (R 4.3.0)
+ yaml           2.3.7       2023-01-23 [1] CRAN (R 4.3.1)
+
+ [1] /workspace/.cache/R/renv/proj_libs/false.alarm-d6f1a0d1/R-4.3/x86_64-pc-linux-gnu
  [2] /usr/lib/R/library
 
 ──────────────────────────────────────────────────────────────────────────────
diff --git a/docs/regime_optimize.html b/docs/regime_optimize.html index c6249b1..2382b2f 100644 --- a/docs/regime_optimize.html +++ b/docs/regime_optimize.html @@ -30,14 +30,14 @@ code {color: inherit; background-color: rgba(0, 0, 0, 0.04);} pre:not([class]) { background-color: white } - + - + - - + + @@ -207,8 +207,8 @@ border-radius: 4px; } -.tabset-dropdown > .nav-tabs > li.active:before { - content: ""; +.tabset-dropdown > .nav-tabs > li.active:before, .tabset-dropdown > .nav-tabs.nav-tabs-open:before { + content: "\e259"; font-family: 'Glyphicons Halflings'; display: inline-block; padding: 10px; @@ -216,16 +216,9 @@ } .tabset-dropdown > .nav-tabs.nav-tabs-open > li.active:before { - content: ""; - border: none; -} - -.tabset-dropdown > .nav-tabs.nav-tabs-open:before { - content: ""; + content: "\e258"; font-family: 'Glyphicons Halflings'; - display: inline-block; - padding: 10px; - border-right: 1px solid #ddd; + border: none; } .tabset-dropdown > .nav-tabs > li.active { @@ -381,7 +374,7 @@

Regime changes

Francisco Bischoff

-

on October 05, 2022

+

on August 13, 2023

@@ -412,7 +405,7 @@

on October 05, 2022

@@ -422,7 +415,7 @@

on October 05, 2022

  • -Checks +Checks
  • @@ -432,14 +425,14 @@

    on October 05, 2022

    -Last updated: 2022-10-05 +Last updated: 2023-08-13

    Checks: -7 +6 -0 +1

    Knit directory: @@ -462,16 +455,21 @@

    on October 05, 2022

    -
    +
    -

    Great! Since the R Markdown file has been committed to the Git repository, you -know the exact version of the code that produced these results.

    +

    The R Markdown file has unstaged changes. +To know which version of the R Markdown file created these +results, you’ll want to first commit it to the Git repo. If +you’re still working on the analysis, you can ignore this +warning. When you’re finished, you can run +wflow_publish to commit the R Markdown file and +build the HTML.

    @@ -560,20 +558,20 @@

    on October 05, 2022

    -
    +

    Great! You are using Git for version control. Tracking code development and connecting the code version to the results is critical for reproducibility.

    -The results in this page were generated with repository version b79f104. +The results in this page were generated with repository version 4437e7a. See the Past versions tab to see a history of the changes made to the R Markdown and HTML files.

    @@ -595,6 +593,19 @@

    on October 05, 2022

    Ignored: .github/ISSUE_TEMPLATE/ Ignored: .httr-oauth Ignored: R/RcppExports.R + Ignored: _classifier/meta/process + Ignored: _classifier/meta/progress + Ignored: _classifier/objects/ + Ignored: _classifier/user/ + Ignored: _contrast_profile/meta/process + Ignored: _contrast_profile/meta/progress + Ignored: _contrast_profile/objects/ + Ignored: _contrast_profile/user/ + Ignored: _contrast_profile_ex/meta/process + Ignored: _contrast_profile_ex/meta/progress + Ignored: _contrast_profile_ex/objects/ + Ignored: _contrast_profile_ex/user/ + Ignored: _contrast_profile_ex/workspaces/ Ignored: _regime_change/meta/process Ignored: _regime_change/meta/progress Ignored: _regime_change/objects/ @@ -607,6 +618,10 @@

    on October 05, 2022

    Ignored: _regime_change3/meta/progress Ignored: _regime_change3/objects/ Ignored: _regime_change3/user/ + Ignored: _regime_change_2/meta/process + Ignored: _regime_change_2/meta/progress + Ignored: _regime_change_2/objects/ + Ignored: _regime_change_2/user/ Ignored: _regime_optimize/meta/meta2 Ignored: _regime_optimize/meta/process Ignored: _regime_optimize/meta/progress @@ -616,10 +631,15 @@

    on October 05, 2022

    Ignored: _targets/meta/progress Ignored: _targets/objects/ Ignored: _targets/user/ + Ignored: analysis/figure/ + Ignored: analysis/report_cache/ Ignored: analysis/shiny/rsconnect/ Ignored: analysis/shiny_land/rsconnect/ + Ignored: analysis/shiny_ventricular/rsconnect/ + Ignored: analysis/shiny_vtachy/rsconnect/ Ignored: dev/ Ignored: inst/extdata/ + Ignored: output/importancess.rds Ignored: papers/aime2021/aime2021.md Ignored: papers/epia2022/epia2022.md Ignored: presentations/MEDCIDS21/MEDCIDS21-10min_files/ @@ -628,8 +648,12 @@

    on October 05, 2022

    Ignored: presentations/Report/Midterm-Report_files/ Ignored: protocol/SecondReport_cache/ Ignored: protocol/SecondReport_files/ + Ignored: protocol/ThirdReport.tex + Ignored: protocol/ThirdReport_cache/ + Ignored: protocol/ThirdReport_files/ + Ignored: protocol/_extensions/ Ignored: protocol/_files/ - Ignored: renv/python/ + Ignored: protocol/figure/ Ignored: renv/staging/ Ignored: src/RcppExports.cpp Ignored: src/RcppExports.o @@ -647,6 +671,12 @@

    on October 05, 2022

    Ignored: thesis/_bookdown_files/ Ignored: tmp/ +Unstaged changes: + Modified: analysis/regime_optimize.Rmd + Modified: analysis/report.Rmd + Modified: output/importances.rds + Modified: output/importances2.rds +

    Note that any generated files, e.g. HTML, png, CSS, etc., are not included in @@ -692,6 +722,40 @@

    on October 05, 2022

    +Rmd + + +7bf2605 + + +GitHub + + +2023-08-13 + + +Feature/classification (#152) + + + + +html + + +f9f551d + + +Francisco Bischoff + + +2022-10-06 + + +Build site. + + + + html @@ -856,7 +920,7 @@

    1 Regime changes optimization

    1.1 Current pipeline

    -
    +

    Figure 1.1: FLOSS pipeline. @@ -1155,6 +1219,11 @@

    1.3.1 Interactions

    \tag{1.2} \end{equation}\]

    Fig. 1.4 shows the variable interaction strength between pairs of variables. That allows us to verify if there are any significant interactions between the variables. Using the information from the first model fit, equation (1.1), we see that mp_threshold interacts strongly with window_size. After refitting, taking into account this interaction, we see that the interaction strength graphic is much better, equation (1.2).

    +
    Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
    +ℹ Please use `linewidth` instead.
    +This warning is displayed once every 8 hours.
    +Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
    +generated.
    Variable interactions strenght using feature importance ranking measure (FIRM) approach [@Greenwell2018]. A) Shows strong interaction between `mp_threshold` and `window_size`. B) Refitting the model with this interaction taken into account, the strength is substantially reduced.

    @@ -1438,6 +1507,13 @@

    1.4.1 By recording

    First, we will visualize how the models (in general) performed throughout the individual recordings.

    Fig. 1.9 shows a violin plot of equal areas clipped to the minimum value. The blue color indicates the recordings with a small IQR (interquartile range) of model scores. We see on the left half 10% of the recordings with the worst minimum score, and on the right half, 10% of the recordings with the best minimum score.

    Next, we will visualize some of these predictions to understand why some recordings were difficult to segment. For us to have a simple baseline: a recording with just one regime change, and the model predicts exactly one regime change, but far from the truth, the score will be roughly 1.

    +
    Warning: Returning more (or less) than 1 row per `summarise()` group was deprecated in
    +dplyr 1.1.0.
    +ℹ Please use `reframe()` instead.
    +ℹ When switching from `summarise()` to `reframe()`, remember that `reframe()`
    +  always returns an ungrouped data frame and adjust accordingly.
    +Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
    +generated.
    Violin plot showing the distribution of the FLOSS score achieved by all tested models by recording.  The left half shows the recordings that were difficult to predict (10% overall), whereas the right half shows the recordings that at least one model could achieve a good prediction (10% overall).  The recordings are sorted (left-right) by the minimum (best) score achieved in descending order, and ties are sorted by the median of all recording scores.  The blue color highlights recordings where models had an IQR variability of less than one.  As a simple example, a recording with just one regime change, and the model predicts exactly one change, far from the truth, the score will be roughly 1.

    @@ -1512,6 +1588,17 @@

    1.4.1 By recording

    +f9f551d + + +Francisco Bischoff + + +2022-10-06 + + + + 3328477 @@ -1556,6 +1643,17 @@

    1.4.1 By recording

    +f9f551d + + +Francisco Bischoff + + +2022-10-06 + + + + 3328477 @@ -1575,6 +1673,13 @@

    1.4.1 By recording

    1.4.2 By model

    Fig. 1.12 shows the distribution of the FLOSS score of the 10% worst (left side) and 10% best models across the recordings (right side). The bluish color highlights the models with SD below 3 and IQR below 1.

    +
    Warning: Returning more (or less) than 1 row per `summarise()` group was deprecated in
    +dplyr 1.1.0.
    +ℹ Please use `reframe()` instead.
    +ℹ When switching from `summarise()` to `reframe()`, remember that `reframe()`
    +  always returns an ungrouped data frame and adjust accordingly.
    +Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
    +generated.
    Violin plot showing the distribution of the FLOSS score achieved by all tested models during the inner ressample.  The left half shows the models with the worst performances (10% overall), whereas the right half shows the models with the best performances (10% overall). The models are sorted (left-right) by the mean score (top) and by the median (below). Ties are sorted by the SD and IQR, respectively.  The bluish colors highlights models with an SD below 3 and IQR below 1.

    @@ -1605,6 +1710,17 @@

    1.4.2 By model

    +f9f551d + + +Francisco Bischoff + + +2022-10-06 + + + + 3328477 @@ -1649,6 +1765,17 @@

    1.4.2 By model

    +f9f551d + + +Francisco Bischoff + + +2022-10-06 + + + + 3328477 @@ -1715,174 +1842,175 @@

    References

    ─ Session info ───────────────────────────────────────────────────────────────
      setting  value
    - version  R version 4.2.1 (2022-06-23)
    - os       Ubuntu 20.04.5 LTS
    + version  R version 4.3.1 (2023-06-16)
    + os       Ubuntu 22.04.2 LTS
      system   x86_64, linux-gnu
      ui       X11
      language (EN)
      collate  en_US.UTF-8
      ctype    en_US.UTF-8
      tz       Europe/Lisbon
    - date     2022-10-05
    + date     2023-08-13
      pandoc   2.17.0.1 @ /usr/bin/ (via rmarkdown)
     
     ─ Packages ───────────────────────────────────────────────────────────────────
      package      * version     date (UTC) lib source
    - askpass        1.1         2019-01-13 [1] CRAN (R 4.2.0)
    - assertthat     0.2.1       2019-03-21 [1] CRAN (R 4.2.0)
    - backports      1.4.1       2021-12-13 [1] CRAN (R 4.2.0)
    - base64url      1.4         2018-05-14 [1] CRAN (R 4.2.0)
    - bit            4.0.4       2020-08-04 [1] CRAN (R 4.2.0)
    - bit64          4.0.5       2020-08-30 [1] CRAN (R 4.2.0)
    - bookdown       0.29.2      2022-09-26 [1] Github (rstudio/bookdown@dfe92a2)
    - bslib          0.4.0       2022-07-16 [1] CRAN (R 4.2.1)
    - cachem         1.0.6       2021-08-19 [1] CRAN (R 4.2.0)
    - callr          3.7.2       2022-08-22 [1] CRAN (R 4.2.1)
    - checkmate      2.1.0       2022-04-21 [1] CRAN (R 4.2.0)
    - class          7.3-20      2022-01-13 [2] CRAN (R 4.2.0)
    - cli            3.4.1       2022-09-23 [1] CRAN (R 4.2.1)
    - codetools      0.2-18      2020-11-04 [2] CRAN (R 4.2.0)
    - colorspace     2.0-3       2022-02-21 [1] CRAN (R 4.2.0)
    - crayon         1.5.1       2022-03-26 [1] CRAN (R 4.2.0)
    - credentials    1.3.2       2021-11-29 [1] CRAN (R 4.2.0)
    - data.table     1.14.2      2021-09-27 [1] CRAN (R 4.2.0)
    - dbarts         0.9-22      2022-03-29 [1] CRAN (R 4.2.0)
    - DBI            1.1.3       2022-06-18 [1] CRAN (R 4.2.0)
    - debugme        1.1.0       2017-10-22 [1] CRAN (R 4.2.0)
    - devtools       2.4.4       2022-07-20 [1] CRAN (R 4.2.1)
    - dials          1.0.0       2022-06-14 [1] CRAN (R 4.2.0)
    - DiceDesign     1.9         2021-02-13 [1] CRAN (R 4.2.0)
    - digest         0.6.29      2021-12-01 [1] CRAN (R 4.2.0)
    - dplyr          1.0.10      2022-09-01 [1] CRAN (R 4.2.1)
    - ellipsis       0.3.2       2021-04-29 [1] CRAN (R 4.2.0)
    - evaluate       0.16        2022-08-09 [1] CRAN (R 4.2.1)
    - fansi          1.0.3       2022-03-24 [1] CRAN (R 4.2.0)
    - farver         2.1.1       2022-07-06 [1] CRAN (R 4.2.0)
    - fastmap        1.1.0       2021-01-25 [1] CRAN (R 4.2.0)
    - fastshap       0.0.7       2021-12-06 [1] CRAN (R 4.2.0)
    - forcats        0.5.2       2022-08-19 [2] CRAN (R 4.2.1)
    - foreach        1.5.2       2022-02-02 [1] CRAN (R 4.2.0)
    - fs             1.5.2       2021-12-08 [1] CRAN (R 4.2.0)
    - furrr          0.3.1       2022-08-15 [1] CRAN (R 4.2.1)
    - future         1.28.0      2022-09-02 [1] CRAN (R 4.2.1)
    - future.apply   1.9.1       2022-09-07 [1] CRAN (R 4.2.1)
    - generics       0.1.3       2022-07-05 [1] CRAN (R 4.2.0)
    - gert           1.9.0       2022-09-15 [1] CRAN (R 4.2.1)
    - getPass        0.2-2       2017-07-21 [1] CRAN (R 4.2.0)
    - ggplot2      * 3.3.6       2022-05-03 [1] CRAN (R 4.2.0)
    - git2r          0.30.1.9000 2022-04-29 [1] Github (ropensci/git2r@80ba185)
    - gittargets   * 0.0.5.9000  2022-09-26 [1] Github (wlandau/gittargets@a50dd58)
    - globals        0.16.1      2022-08-28 [1] CRAN (R 4.2.1)
    - glue         * 1.6.2       2022-02-24 [1] CRAN (R 4.2.0)
    - gower          1.0.0       2022-02-03 [1] CRAN (R 4.2.0)
    - GPfit          1.0-8       2019-02-08 [1] CRAN (R 4.2.0)
    - gridExtra      2.3         2017-09-09 [1] CRAN (R 4.2.0)
    - gtable         0.3.1       2022-09-01 [1] CRAN (R 4.2.1)
    - hardhat        1.2.0       2022-06-30 [1] CRAN (R 4.2.0)
    - here         * 1.0.1       2020-12-13 [1] CRAN (R 4.2.0)
    - highr          0.9         2021-04-16 [1] CRAN (R 4.2.0)
    - hms            1.1.2       2022-08-19 [1] CRAN (R 4.2.1)
    - htmltools      0.5.3       2022-07-18 [1] CRAN (R 4.2.1)
    - htmlwidgets    1.5.4       2021-09-08 [1] CRAN (R 4.2.0)
    - httpuv         1.6.6       2022-09-08 [1] CRAN (R 4.2.1)
    - httr           1.4.4       2022-08-17 [1] CRAN (R 4.2.1)
    - igraph         1.3.5       2022-09-22 [1] CRAN (R 4.2.1)
    - ipred          0.9-13      2022-06-02 [1] CRAN (R 4.2.0)
    - iterators      1.0.14      2022-02-05 [1] CRAN (R 4.2.0)
    - jquerylib      0.1.4       2021-04-26 [1] CRAN (R 4.2.0)
    - jsonlite       1.8.0       2022-02-22 [1] CRAN (R 4.2.0)
    - kableExtra   * 1.3.4       2021-02-20 [1] CRAN (R 4.2.0)
    - knitr          1.40        2022-08-24 [1] CRAN (R 4.2.1)
    - labeling       0.4.2       2020-10-20 [1] CRAN (R 4.2.0)
    - later          1.3.0       2021-08-18 [1] CRAN (R 4.2.0)
    - lattice        0.20-45     2021-09-22 [2] CRAN (R 4.2.0)
    - lava           1.6.10      2021-09-02 [1] CRAN (R 4.2.0)
    - lhs            1.1.5       2022-03-22 [1] CRAN (R 4.2.0)
    - lifecycle      1.0.2       2022-09-09 [1] CRAN (R 4.2.1)
    - listenv        0.8.0       2019-12-05 [1] CRAN (R 4.2.0)
    - lubridate      1.8.0       2021-10-07 [1] CRAN (R 4.2.0)
    - magrittr       2.0.3       2022-03-30 [1] CRAN (R 4.2.0)
    - MASS           7.3-58.1    2022-08-03 [1] CRAN (R 4.2.1)
    - Matrix         1.5-1       2022-09-13 [2] CRAN (R 4.2.1)
    - memoise        2.0.1       2021-11-26 [1] CRAN (R 4.2.0)
    - mgcv           1.8-40      2022-03-29 [2] CRAN (R 4.2.0)
    - mime           0.12        2021-09-28 [1] CRAN (R 4.2.0)
    - miniUI         0.1.1.1     2018-05-18 [1] CRAN (R 4.2.0)
    - munsell        0.5.0       2018-06-12 [1] CRAN (R 4.2.0)
    - nlme           3.1-159     2022-08-09 [1] CRAN (R 4.2.1)
    - nnet           7.3-17      2022-01-13 [2] CRAN (R 4.2.0)
    - openssl        2.0.3       2022-09-14 [1] CRAN (R 4.2.1)
    - parallelly     1.32.1      2022-07-21 [1] CRAN (R 4.2.1)
    - parsnip        1.0.1       2022-08-18 [1] CRAN (R 4.2.1)
    - patchwork    * 1.1.2       2022-08-19 [1] CRAN (R 4.2.1)
    - pdp            0.8.1       2022-06-07 [1] CRAN (R 4.2.0)
    - pillar         1.8.1       2022-08-19 [1] CRAN (R 4.2.1)
    - pkgbuild       1.3.1       2021-12-20 [1] CRAN (R 4.2.0)
    - pkgconfig      2.0.3       2019-09-22 [1] CRAN (R 4.2.0)
    - pkgload        1.3.0       2022-06-27 [1] CRAN (R 4.2.0)
    - prettyunits    1.1.1       2020-01-24 [1] CRAN (R 4.2.0)
    - processx       3.7.0       2022-07-07 [1] CRAN (R 4.2.1)
    - prodlim        2019.11.13  2019-11-17 [1] CRAN (R 4.2.0)
    - profvis        0.3.7       2020-11-02 [1] CRAN (R 4.2.1)
    - promises       1.2.0.1     2021-02-11 [1] CRAN (R 4.2.0)
    - ps             1.7.1       2022-06-18 [1] CRAN (R 4.2.0)
    - purrr          0.3.4       2020-04-17 [1] CRAN (R 4.2.0)
    - R6             2.5.1       2021-08-19 [1] CRAN (R 4.2.0)
    - Rcpp           1.0.9       2022-07-08 [1] CRAN (R 4.2.1)
    - readr          2.1.2       2022-01-30 [1] CRAN (R 4.2.0)
    - recipes        1.0.1       2022-07-07 [1] CRAN (R 4.2.1)
    - remotes        2.4.2       2021-11-30 [1] CRAN (R 4.2.0)
    - renv           0.15.5      2022-05-26 [1] CRAN (R 4.2.0)
    - rlang          1.0.6       2022-09-24 [1] CRAN (R 4.2.1)
    - rmarkdown      2.16.1      2022-09-26 [1] Github (rstudio/rmarkdown@9577707)
    - rpart          4.1.16      2022-01-24 [2] CRAN (R 4.2.0)
    - rprojroot      2.0.3       2022-04-02 [1] CRAN (R 4.2.0)
    - rsample        1.1.0       2022-08-08 [1] CRAN (R 4.2.1)
    - rstudioapi     0.14        2022-08-22 [1] CRAN (R 4.2.1)
    - rvest          1.0.3       2022-08-19 [1] CRAN (R 4.2.1)
    - sass           0.4.2       2022-07-16 [1] CRAN (R 4.2.1)
    - scales         1.2.1       2022-08-20 [1] CRAN (R 4.2.1)
    - sessioninfo    1.2.2       2021-12-06 [1] CRAN (R 4.2.0)
    - shiny          1.7.2       2022-07-19 [1] CRAN (R 4.2.1)
    - signal         0.7-7       2021-05-25 [1] CRAN (R 4.2.0)
    - stringi        1.7.8       2022-07-11 [1] CRAN (R 4.2.1)
    - stringr        1.4.1       2022-08-20 [1] CRAN (R 4.2.1)
    - survival       3.4-0       2022-08-09 [2] CRAN (R 4.2.1)
    - svglite        2.1.0.9000  2022-09-26 [1] Github (r-lib/svglite@8f30fc6)
    - sys            3.4         2020-07-23 [1] CRAN (R 4.2.0)
    - systemfonts    1.0.4       2022-02-11 [1] CRAN (R 4.2.0)
    - tarchetypes  * 0.7.1       2022-09-07 [1] CRAN (R 4.2.1)
    - targets      * 0.13.4      2022-09-15 [1] CRAN (R 4.2.1)
    - tibble       * 3.1.8       2022-07-22 [1] CRAN (R 4.2.1)
    - tidyr          1.2.1       2022-09-08 [1] CRAN (R 4.2.1)
    - tidyselect     1.1.2       2022-02-21 [1] CRAN (R 4.2.0)
    - timeDate       4021.104    2022-07-19 [1] CRAN (R 4.2.1)
    - timetk         2.8.1       2022-05-31 [1] CRAN (R 4.2.0)
    - tune           1.0.0.9000  2022-07-22 [1] Github (franzbischoff/tune@539e1ee)
    - tzdb           0.3.0       2022-03-28 [1] CRAN (R 4.2.0)
    - urlchecker     1.0.1       2021-11-30 [1] CRAN (R 4.2.1)
    - usethis        2.1.6.9000  2022-10-03 [1] Github (r-lib/usethis@8ecb7ab)
    - utf8           1.2.2       2021-07-24 [1] CRAN (R 4.2.0)
    - uuid           1.1-0       2022-04-19 [1] CRAN (R 4.2.0)
    - vctrs          0.4.1       2022-04-13 [1] CRAN (R 4.2.0)
    - vip            0.3.2       2020-12-17 [1] CRAN (R 4.2.0)
    - viridisLite    0.4.1       2022-08-22 [1] CRAN (R 4.2.1)
    - visNetwork   * 2.1.0       2021-09-29 [1] CRAN (R 4.2.0)
    - vroom          1.5.7       2021-11-30 [1] CRAN (R 4.2.0)
    - webshot        0.5.3       2022-04-14 [1] CRAN (R 4.2.0)
    - whisker        0.4         2019-08-28 [1] CRAN (R 4.2.0)
    - withr          2.5.0       2022-03-03 [1] CRAN (R 4.2.0)
    - workflowr    * 1.7.0       2021-12-21 [1] CRAN (R 4.2.0)
    - workflows      1.1.0       2022-09-26 [1] CRAN (R 4.2.1)
    - xfun           0.33        2022-09-12 [1] CRAN (R 4.2.1)
    - xml2           1.3.3       2021-11-30 [1] CRAN (R 4.2.0)
    - xtable         1.8-4       2019-04-21 [1] CRAN (R 4.2.0)
    - xts            0.12.1      2020-09-09 [1] CRAN (R 4.2.0)
    - yaml           2.3.5       2022-02-21 [1] CRAN (R 4.2.0)
    - yardstick      1.1.0       2022-09-07 [1] CRAN (R 4.2.1)
    - zoo            1.8-11      2022-09-17 [1] CRAN (R 4.2.1)
    -
    - [1] /workspace/.cache/R/renv/proj_libs/false.alarm-d6f1a0d1/R-4.2/x86_64-pc-linux-gnu
    + askpass        1.1         2019-01-13 [1] CRAN (R 4.3.0)
    + backports      1.4.1       2021-12-13 [1] CRAN (R 4.3.1)
    + base64url      1.4         2018-05-14 [1] CRAN (R 4.3.0)
    + bit            4.0.5       2022-11-15 [1] CRAN (R 4.3.0)
    + bit64          4.0.5       2020-08-30 [1] CRAN (R 4.3.0)
    + bookdown       0.35.1      2023-08-13 [1] Github (rstudio/bookdown@661567e)
    + bslib          0.5.1       2023-08-11 [1] CRAN (R 4.3.1)
    + cachem         1.0.8       2023-05-01 [1] CRAN (R 4.3.0)
    + callr          3.7.3       2022-11-02 [1] CRAN (R 4.3.1)
    + checkmate      2.2.0       2023-04-27 [1] CRAN (R 4.3.0)
    + class          7.3-22      2023-05-03 [2] CRAN (R 4.3.1)
    + cli            3.6.1       2023-03-23 [1] CRAN (R 4.3.1)
    + codetools      0.2-19      2023-02-01 [2] CRAN (R 4.3.0)
    + colorspace     2.1-0       2023-01-23 [1] CRAN (R 4.3.0)
    + crayon         1.5.2       2022-09-29 [1] CRAN (R 4.3.1)
    + credentials    1.3.2       2021-11-29 [1] CRAN (R 4.3.0)
    + data.table     1.14.8      2023-02-17 [1] CRAN (R 4.3.0)
    + dbarts         0.9-23      2023-01-23 [1] CRAN (R 4.3.0)
    + debugme        1.1.0       2017-10-22 [1] CRAN (R 4.3.0)
    + devtools       2.4.5       2022-10-11 [1] CRAN (R 4.3.0)
    + dials          1.2.0       2023-04-03 [1] CRAN (R 4.3.0)
    + DiceDesign     1.9         2021-02-13 [1] CRAN (R 4.3.0)
    + digest         0.6.33      2023-07-07 [1] CRAN (R 4.3.1)
    + dplyr          1.1.2       2023-04-20 [1] CRAN (R 4.3.0)
    + ellipsis       0.3.2       2021-04-29 [1] CRAN (R 4.3.0)
    + evaluate       0.21        2023-05-05 [1] CRAN (R 4.3.0)
    + fansi          1.0.4       2023-01-22 [1] CRAN (R 4.3.0)
    + farver         2.1.1       2022-07-06 [1] CRAN (R 4.3.0)
    + fastmap        1.1.1       2023-02-24 [1] CRAN (R 4.3.0)
    + fastshap       0.0.7       2021-12-06 [1] CRAN (R 4.3.0)
    + forcats        1.0.0       2023-01-29 [1] CRAN (R 4.3.0)
    + foreach        1.5.2       2022-02-02 [1] CRAN (R 4.3.0)
    + fs             1.6.3       2023-07-20 [1] CRAN (R 4.3.1)
    + furrr          0.3.1       2022-08-15 [1] CRAN (R 4.3.0)
    + future         1.33.0      2023-07-01 [1] CRAN (R 4.3.1)
    + future.apply   1.11.0      2023-05-21 [1] CRAN (R 4.3.1)
    + future.callr   0.8.2       2023-08-09 [1] CRAN (R 4.3.1)
    + generics       0.1.3       2022-07-05 [1] CRAN (R 4.3.0)
    + gert           1.9.3       2023-08-07 [1] CRAN (R 4.3.1)
    + getPass        0.2-2       2017-07-21 [1] CRAN (R 4.3.0)
    + ggplot2      * 3.4.2       2023-04-03 [1] CRAN (R 4.3.0)
    + git2r          0.32.0.9000 2023-06-30 [1] Github (ropensci/git2r@9c42d41)
    + gittargets   * 0.0.6.9000  2023-05-05 [1] Github (wlandau/gittargets@2d448ff)
    + globals        0.16.2      2022-11-21 [1] CRAN (R 4.3.0)
    + glue         * 1.6.2       2022-02-24 [1] CRAN (R 4.3.1)
    + gower          1.0.1       2022-12-22 [1] CRAN (R 4.3.0)
    + GPfit          1.0-8       2019-02-08 [1] CRAN (R 4.3.0)
    + gridExtra      2.3         2017-09-09 [1] CRAN (R 4.3.0)
    + gtable         0.3.3       2023-03-21 [1] CRAN (R 4.3.0)
    + hardhat        1.3.0       2023-03-30 [1] CRAN (R 4.3.0)
    + here         * 1.0.1       2020-12-13 [1] CRAN (R 4.3.0)
    + highr          0.10        2022-12-22 [1] CRAN (R 4.3.1)
    + hms            1.1.3       2023-03-21 [1] CRAN (R 4.3.0)
    + htmltools      0.5.6       2023-08-10 [1] CRAN (R 4.3.1)
    + htmlwidgets    1.6.2       2023-03-17 [1] CRAN (R 4.3.0)
    + httpuv         1.6.11      2023-05-11 [1] CRAN (R 4.3.1)
    + httr           1.4.6       2023-05-08 [1] CRAN (R 4.3.1)
    + igraph         1.5.1       2023-08-10 [1] CRAN (R 4.3.1)
    + ipred          0.9-14      2023-03-09 [1] CRAN (R 4.3.0)
    + iterators      1.0.14      2022-02-05 [1] CRAN (R 4.3.0)
    + jquerylib      0.1.4       2021-04-26 [1] CRAN (R 4.3.0)
    + jsonlite       1.8.7       2023-06-29 [1] CRAN (R 4.3.0)
    + kableExtra   * 1.3.4       2021-02-20 [1] CRAN (R 4.3.0)
    + knitr          1.43        2023-05-25 [1] CRAN (R 4.3.0)
    + labeling       0.4.2       2020-10-20 [1] CRAN (R 4.3.0)
    + later          1.3.1       2023-05-02 [1] CRAN (R 4.3.1)
    + lattice        0.21-8      2023-04-05 [2] CRAN (R 4.3.0)
    + lava           1.7.2.1     2023-02-27 [1] CRAN (R 4.3.0)
    + lhs            1.1.6       2022-12-17 [1] CRAN (R 4.3.0)
    + lifecycle      1.0.3       2022-10-07 [1] CRAN (R 4.3.1)
    + listenv        0.9.0       2022-12-16 [1] CRAN (R 4.3.0)
    + lubridate      1.9.2       2023-02-10 [1] CRAN (R 4.3.0)
    + magrittr       2.0.3       2022-03-30 [1] CRAN (R 4.3.1)
    + MASS           7.3-60      2023-05-04 [2] CRAN (R 4.3.1)
    + Matrix         1.6-0       2023-07-08 [1] CRAN (R 4.3.1)
    + memoise        2.0.1       2021-11-26 [1] CRAN (R 4.3.0)
    + mgcv           1.9-0       2023-07-11 [1] CRAN (R 4.3.1)
    + mime           0.12        2021-09-28 [1] CRAN (R 4.3.0)
    + miniUI         0.1.1.1     2018-05-18 [1] CRAN (R 4.3.0)
    + modelenv       0.1.1       2023-03-08 [1] CRAN (R 4.3.0)
    + munsell        0.5.0       2018-06-12 [1] CRAN (R 4.3.0)
    + nlme           3.1-163     2023-08-09 [1] CRAN (R 4.3.1)
    + nnet           7.3-19      2023-05-03 [2] CRAN (R 4.3.1)
    + openssl        2.1.0       2023-07-15 [1] CRAN (R 4.3.1)
    + parallelly     1.36.0      2023-05-26 [1] CRAN (R 4.3.1)
    + parsnip        1.1.0       2023-04-12 [1] CRAN (R 4.3.0)
    + patchwork    * 1.1.2       2022-08-19 [1] CRAN (R 4.3.0)
    + pdp            0.8.1       2023-06-22 [1] Github (bgreenwell/pdp@4f22141)
    + pillar         1.9.0       2023-03-22 [1] CRAN (R 4.3.0)
    + pkgbuild       1.4.2       2023-06-26 [1] CRAN (R 4.3.1)
    + pkgconfig      2.0.3       2019-09-22 [1] CRAN (R 4.3.0)
    + pkgload        1.3.2.1     2023-07-08 [1] CRAN (R 4.3.1)
    + prettyunits    1.1.1       2020-01-24 [1] CRAN (R 4.3.0)
    + processx       3.8.2       2023-06-30 [1] CRAN (R 4.3.1)
    + prodlim        2023.03.31  2023-04-02 [1] CRAN (R 4.3.0)
    + profvis        0.3.8       2023-05-02 [1] CRAN (R 4.3.1)
    + promises       1.2.1       2023-08-10 [1] CRAN (R 4.3.1)
    + ps             1.7.5       2023-04-18 [1] CRAN (R 4.3.1)
    + purrr          1.0.2       2023-08-10 [1] CRAN (R 4.3.1)
    + R6             2.5.1       2021-08-19 [1] CRAN (R 4.3.1)
    + Rcpp           1.0.11      2023-07-06 [1] CRAN (R 4.3.1)
    + readr          2.1.4       2023-02-10 [1] CRAN (R 4.3.0)
    + recipes        1.0.7       2023-08-10 [1] CRAN (R 4.3.1)
    + remotes        2.4.2.1     2023-07-18 [1] CRAN (R 4.3.1)
    + renv           0.17.3      2023-04-06 [1] CRAN (R 4.3.1)
    + rlang          1.1.1       2023-04-28 [1] CRAN (R 4.3.0)
    + rmarkdown      2.23.4      2023-08-13 [1] Github (rstudio/rmarkdown@054d735)
    + rpart          4.1.19      2022-10-21 [2] CRAN (R 4.3.0)
    + rprojroot      2.0.3       2022-04-02 [1] CRAN (R 4.3.1)
    + rsample        1.1.1       2022-12-07 [1] CRAN (R 4.3.0)
    + rstudioapi     0.15.0      2023-07-07 [1] CRAN (R 4.3.1)
    + rvest          1.0.3       2022-08-19 [1] CRAN (R 4.3.0)
    + sass           0.4.7       2023-07-15 [1] CRAN (R 4.3.1)
    + scales         1.2.1       2022-08-20 [1] CRAN (R 4.3.0)
    + sessioninfo    1.2.2       2021-12-06 [1] CRAN (R 4.3.0)
    + shiny          1.7.5       2023-08-12 [1] CRAN (R 4.3.1)
    + signal         0.7-7       2021-05-25 [1] CRAN (R 4.3.0)
    + stringi        1.7.12      2023-01-11 [1] CRAN (R 4.3.1)
    + stringr        1.5.0       2022-12-02 [1] CRAN (R 4.3.1)
    + survival       3.5-5       2023-03-12 [2] CRAN (R 4.3.1)
    + svglite        2.1.1.9000  2023-05-05 [1] Github (r-lib/svglite@6c1d359)
    + sys            3.4.2       2023-05-23 [1] CRAN (R 4.3.1)
    + systemfonts    1.0.4       2022-02-11 [1] CRAN (R 4.3.0)
    + tarchetypes  * 0.7.7       2023-06-15 [1] CRAN (R 4.3.1)
    + targets      * 1.2.2       2023-08-10 [1] CRAN (R 4.3.1)
    + tibble       * 3.2.1       2023-03-20 [1] CRAN (R 4.3.0)
    + tidyr          1.3.0       2023-01-24 [1] CRAN (R 4.3.0)
    + tidyselect     1.2.0       2022-10-10 [1] CRAN (R 4.3.0)
    + timechange     0.2.0       2023-01-11 [1] CRAN (R 4.3.0)
    + timeDate       4022.108    2023-01-07 [1] CRAN (R 4.3.0)
    + timetk         2.8.3       2023-03-30 [1] CRAN (R 4.3.0)
    + tune           1.1.1       2023-04-11 [1] CRAN (R 4.3.0)
    + tzdb           0.4.0       2023-05-12 [1] CRAN (R 4.3.1)
    + urlchecker     1.0.1       2021-11-30 [1] CRAN (R 4.3.0)
    + usethis        2.2.2.9000  2023-07-17 [1] Github (r-lib/usethis@467ff57)
    + utf8           1.2.3       2023-01-31 [1] CRAN (R 4.3.0)
    + uuid           1.1-0       2022-04-19 [1] CRAN (R 4.3.0)
    + vctrs          0.6.3       2023-06-14 [1] CRAN (R 4.3.1)
    + vip            0.4.0       2023-07-19 [1] CRAN (R 4.3.1)
    + viridisLite    0.4.2       2023-05-02 [1] CRAN (R 4.3.1)
    + visNetwork   * 2.1.2       2022-09-29 [1] CRAN (R 4.3.0)
    + vroom          1.6.3       2023-04-28 [1] CRAN (R 4.3.1)
    + webshot        0.5.5       2023-06-26 [1] CRAN (R 4.3.1)
    + whisker        0.4.1       2022-12-05 [1] CRAN (R 4.3.0)
    + withr          2.5.0       2022-03-03 [1] CRAN (R 4.3.1)
    + workflowr    * 1.7.0       2021-12-21 [1] CRAN (R 4.3.0)
    + workflows      1.1.3       2023-02-22 [1] CRAN (R 4.3.0)
    + xfun           0.40        2023-08-09 [1] CRAN (R 4.3.1)
    + xml2           1.3.5       2023-07-06 [1] CRAN (R 4.3.1)
    + xtable         1.8-4       2019-04-21 [1] CRAN (R 4.3.0)
    + xts            0.13.1      2023-04-16 [1] CRAN (R 4.3.0)
    + yaml           2.3.7       2023-01-23 [1] CRAN (R 4.3.1)
    + yardstick      1.0.0.9000  2023-05-25 [1] Github (tidymodels/yardstick@90ab794)
    + zoo            1.8-12      2023-04-13 [1] CRAN (R 4.3.0)
    +
    + [1] /workspace/.cache/R/renv/proj_libs/false.alarm-d6f1a0d1/R-4.3/x86_64-pc-linux-gnu
      [2] /usr/lib/R/library
     
     ──────────────────────────────────────────────────────────────────────────────
    diff --git a/docs/regime_optimize_3.html b/docs/regime_optimize_3.html index baaaa26..7b43ed5 100644 --- a/docs/regime_optimize_3.html +++ b/docs/regime_optimize_3.html @@ -30,12 +30,12 @@ code {color: inherit; background-color: rgba(0, 0, 0, 0.04);} pre:not([class]) { background-color: white } - + - - - + + + @@ -205,8 +205,8 @@ border-radius: 4px; } -.tabset-dropdown > .nav-tabs > li.active:before { - content: ""; +.tabset-dropdown > .nav-tabs > li.active:before, .tabset-dropdown > .nav-tabs.nav-tabs-open:before { + content: "\e259"; font-family: 'Glyphicons Halflings'; display: inline-block; padding: 10px; @@ -214,16 +214,9 @@ } .tabset-dropdown > .nav-tabs.nav-tabs-open > li.active:before { - content: ""; - border: none; -} - -.tabset-dropdown > .nav-tabs.nav-tabs-open:before { - content: ""; + content: "\e258"; font-family: 'Glyphicons Halflings'; - display: inline-block; - padding: 10px; - border-right: 1px solid #ddd; + border: none; } .tabset-dropdown > .nav-tabs > li.active { @@ -379,7 +372,7 @@

    Regime changes 3.0 - malignantventricular dataset

    Francisco Bischoff

    -

    on October 09, 2022

    +

    on August 13, 2023

    @@ -429,7 +422,7 @@

    on October 09, 2022

    -Last updated: 2022-10-09 +Last updated: 2023-08-13

    Checks: @@ -557,20 +550,20 @@

    on October 09, 2022

    -
    +

    Great! You are using Git for version control. Tracking code development and connecting the code version to the results is critical for reproducibility.

    -The results in this page were generated with repository version e8ce96b. +The results in this page were generated with repository version 4437e7a. See the Past versions tab to see a history of the changes made to the R Markdown and HTML files.

    @@ -592,6 +585,19 @@

    on October 09, 2022

    Ignored: .github/ISSUE_TEMPLATE/ Ignored: .httr-oauth Ignored: R/RcppExports.R + Ignored: _classifier/meta/process + Ignored: _classifier/meta/progress + Ignored: _classifier/objects/ + Ignored: _classifier/user/ + Ignored: _contrast_profile/meta/process + Ignored: _contrast_profile/meta/progress + Ignored: _contrast_profile/objects/ + Ignored: _contrast_profile/user/ + Ignored: _contrast_profile_ex/meta/process + Ignored: _contrast_profile_ex/meta/progress + Ignored: _contrast_profile_ex/objects/ + Ignored: _contrast_profile_ex/user/ + Ignored: _contrast_profile_ex/workspaces/ Ignored: _regime_change/meta/process Ignored: _regime_change/meta/progress Ignored: _regime_change/objects/ @@ -604,6 +610,10 @@

    on October 09, 2022

    Ignored: _regime_change3/meta/progress Ignored: _regime_change3/objects/ Ignored: _regime_change3/user/ + Ignored: _regime_change_2/meta/process + Ignored: _regime_change_2/meta/progress + Ignored: _regime_change_2/objects/ + Ignored: _regime_change_2/user/ Ignored: _regime_optimize/meta/meta2 Ignored: _regime_optimize/meta/process Ignored: _regime_optimize/meta/progress @@ -620,6 +630,7 @@

    on October 09, 2022

    Ignored: analysis/shiny_vtachy/rsconnect/ Ignored: dev/ Ignored: inst/extdata/ + Ignored: output/importancess.rds Ignored: papers/aime2021/aime2021.md Ignored: papers/epia2022/epia2022.md Ignored: presentations/MEDCIDS21/MEDCIDS21-10min_files/ @@ -628,8 +639,12 @@

    on October 09, 2022

    Ignored: presentations/Report/Midterm-Report_files/ Ignored: protocol/SecondReport_cache/ Ignored: protocol/SecondReport_files/ + Ignored: protocol/ThirdReport.tex + Ignored: protocol/ThirdReport_cache/ + Ignored: protocol/ThirdReport_files/ + Ignored: protocol/_extensions/ Ignored: protocol/_files/ - Ignored: renv/python/ + Ignored: protocol/figure/ Ignored: renv/staging/ Ignored: src/RcppExports.cpp Ignored: src/RcppExports.o @@ -647,6 +662,12 @@

    on October 09, 2022

    Ignored: thesis/_bookdown_files/ Ignored: tmp/ +Unstaged changes: + Modified: analysis/regime_optimize.Rmd + Modified: analysis/report.Rmd + Modified: output/importances.rds + Modified: output/importances2.rds +

    Note that any generated files, e.g. HTML, png, CSS, etc., are not included in @@ -695,7 +716,24 @@

    on October 09, 2022

    Rmd -e8ce96b +d06c64f + + +Francisco Bischoff + + +2022-10-09 + + +Squashed commit of the following: + + + + +html + + +d06c64f Francisco Bischoff @@ -704,7 +742,7 @@

    on October 09, 2022

    2022-10-09 -update optimize +Squashed commit of the following: @@ -791,7 +829,7 @@

    1 Regime changes optimization (co

    1.1 Current pipeline

    -
    +

    Figure 1.1: FLOSS pipeline. @@ -846,6 +884,11 @@

    1.3.1 Interactions

    equation (1.1), we see the expected interactions between regime_threshold and regime_landmark and an interaction between window_size and regime_threshold. These interactions doen’t seem to be necessary to be accounted.

    +
    Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
    +ℹ Please use `linewidth` instead.
    +This warning is displayed once every 8 hours.
    +Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
    +generated.
    Variable interactions strength using feature importance ranking measure (FIRM) approach [@Greenwell2018]. Shows some interaction between `regime_threshold` and `regime_landmark` and `window_size` and `regime_threshold`.

    @@ -1010,6 +1053,13 @@

    1.4.1 By recording

    Next, we will visualize some of these predictions to understand why some recordings were difficult to segment. For us to have a simple baseline: a recording with just one regime change, and the model predicts exactly one regime change, but far from the truth, the score will be roughly 1.

    +
    Warning: Returning more (or less) than 1 row per `summarise()` group was deprecated in
    +dplyr 1.1.0.
    +ℹ Please use `reframe()` instead.
    +ℹ When switching from `summarise()` to `reframe()`, remember that `reframe()`
    +  always returns an ungrouped data frame and adjust accordingly.
    +Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
    +generated.
    Violin plot showing the distribution of the FLOSS score achieved by all tested models by recording.  The left half shows the recordings that were difficult to predict (50% overall), whereas the right half shows the recordings that at least one model could achieve a good prediction (50% overall).  The recordings are sorted (left-right) by the minimum (best) score achieved in descending order, and ties are sorted by the median of all recording scores.  The blue color highlights recordings where models had an IQR variability of less than one.  As a simple example, a recording with just one regime change, and the model predicts exactly one change, far from the truth, the score will be roughly 1.

    @@ -1153,6 +1203,13 @@

    1.4.2 By model

    across the recordings (right side). The bluish color highlights the models with SD below 3 and IQR below 1.

    Here again, we can compare with the previous article and see an improvement in the performance, as the models present lower SD and IQR.

    +
    Warning: Returning more (or less) than 1 row per `summarise()` group was deprecated in
    +dplyr 1.1.0.
    +ℹ Please use `reframe()` instead.
    +ℹ When switching from `summarise()` to `reframe()`, remember that `reframe()`
    +  always returns an ungrouped data frame and adjust accordingly.
    +Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
    +generated.
    Violin plot showing the distribution of the FLOSS score achieved by all tested models during the inner ressample.  The left half shows the models with the worst performances (top 10), whereas the right half shows the models with the best performances (top 10). The models are sorted (left-right) by the mean score (top) and by the median (below). Ties are sorted by the SD and IQR, respectively.  The bluish colors highlights models with an SD below 1 and IQR below 1.

    @@ -1272,176 +1329,177 @@

    References

    ─ Session info ───────────────────────────────────────────────────────────────
      setting  value
    - version  R version 4.2.1 (2022-06-23)
    - os       Ubuntu 20.04.5 LTS
    + version  R version 4.3.1 (2023-06-16)
    + os       Ubuntu 22.04.2 LTS
      system   x86_64, linux-gnu
      ui       X11
      language (EN)
      collate  en_US.UTF-8
      ctype    en_US.UTF-8
      tz       Europe/Lisbon
    - date     2022-10-09
    + date     2023-08-13
      pandoc   2.17.0.1 @ /usr/bin/ (via rmarkdown)
     
     ─ Packages ───────────────────────────────────────────────────────────────────
      package      * version     date (UTC) lib source
    - askpass        1.1         2019-01-13 [1] CRAN (R 4.2.0)
    - assertthat     0.2.1       2019-03-21 [1] CRAN (R 4.2.0)
    - backports      1.4.1       2021-12-13 [1] CRAN (R 4.2.0)
    - base64url      1.4         2018-05-14 [1] CRAN (R 4.2.0)
    - bit            4.0.4       2020-08-04 [1] CRAN (R 4.2.0)
    - bit64          4.0.5       2020-08-30 [1] CRAN (R 4.2.0)
    - bookdown       0.29.2      2022-09-26 [1] Github (rstudio/bookdown@dfe92a2)
    - bslib          0.4.0       2022-07-16 [1] CRAN (R 4.2.1)
    - cachem         1.0.6       2021-08-19 [1] CRAN (R 4.2.0)
    - callr          3.7.2       2022-08-22 [1] CRAN (R 4.2.1)
    - checkmate      2.1.0       2022-04-21 [1] CRAN (R 4.2.0)
    - class          7.3-20      2022-01-13 [2] CRAN (R 4.2.0)
    - cli            3.4.1       2022-09-23 [1] CRAN (R 4.2.1)
    - codetools      0.2-18      2020-11-04 [2] CRAN (R 4.2.0)
    - colorspace     2.0-3       2022-02-21 [1] CRAN (R 4.2.0)
    - crayon         1.5.1       2022-03-26 [1] CRAN (R 4.2.0)
    - credentials    1.3.2       2021-11-29 [1] CRAN (R 4.2.0)
    - data.table     1.14.2      2021-09-27 [1] CRAN (R 4.2.0)
    - dbarts         0.9-22      2022-03-29 [1] CRAN (R 4.2.0)
    - DBI            1.1.3       2022-06-18 [1] CRAN (R 4.2.0)
    - debugme        1.1.0       2017-10-22 [1] CRAN (R 4.2.0)
    - devtools       2.4.4       2022-07-20 [1] CRAN (R 4.2.1)
    - dials          1.0.0       2022-06-14 [1] CRAN (R 4.2.0)
    - DiceDesign     1.9         2021-02-13 [1] CRAN (R 4.2.0)
    - digest         0.6.29      2021-12-01 [1] CRAN (R 4.2.0)
    - dplyr          1.0.10      2022-09-01 [1] CRAN (R 4.2.1)
    - ellipsis       0.3.2       2021-04-29 [1] CRAN (R 4.2.0)
    - evaluate       0.16        2022-08-09 [1] CRAN (R 4.2.1)
    - fansi          1.0.3       2022-03-24 [1] CRAN (R 4.2.0)
    - farver         2.1.1       2022-07-06 [1] CRAN (R 4.2.0)
    - fastmap        1.1.0       2021-01-25 [1] CRAN (R 4.2.0)
    - fastshap       0.0.7       2021-12-06 [1] CRAN (R 4.2.0)
    - forcats        0.5.2       2022-08-19 [2] CRAN (R 4.2.1)
    - foreach        1.5.2       2022-02-02 [1] CRAN (R 4.2.0)
    - fs             1.5.2       2021-12-08 [1] CRAN (R 4.2.0)
    - furrr          0.3.1       2022-08-15 [1] CRAN (R 4.2.1)
    - future         1.28.0      2022-09-02 [1] CRAN (R 4.2.1)
    - future.apply   1.9.1       2022-09-07 [1] CRAN (R 4.2.1)
    - generics       0.1.3       2022-07-05 [1] CRAN (R 4.2.0)
    - gert           1.9.0       2022-09-15 [1] CRAN (R 4.2.1)
    - getPass        0.2-2       2017-07-21 [1] CRAN (R 4.2.0)
    - ggplot2      * 3.3.6       2022-05-03 [1] CRAN (R 4.2.0)
    - git2r          0.30.1.9000 2022-04-29 [1] Github (ropensci/git2r@80ba185)
    - gittargets   * 0.0.5.9000  2022-09-26 [1] Github (wlandau/gittargets@a50dd58)
    - globals        0.16.1      2022-08-28 [1] CRAN (R 4.2.1)
    - glue         * 1.6.2       2022-02-24 [1] CRAN (R 4.2.0)
    - gower          1.0.0       2022-02-03 [1] CRAN (R 4.2.0)
    - GPfit          1.0-8       2019-02-08 [1] CRAN (R 4.2.0)
    - gridExtra      2.3         2017-09-09 [1] CRAN (R 4.2.0)
    - gtable         0.3.1       2022-09-01 [1] CRAN (R 4.2.1)
    - hardhat        1.2.0       2022-06-30 [1] CRAN (R 4.2.0)
    - here         * 1.0.1       2020-12-13 [1] CRAN (R 4.2.0)
    - highr          0.9         2021-04-16 [1] CRAN (R 4.2.0)
    - hms            1.1.2       2022-08-19 [1] CRAN (R 4.2.1)
    - htmltools      0.5.3       2022-07-18 [1] CRAN (R 4.2.1)
    - htmlwidgets    1.5.4       2021-09-08 [1] CRAN (R 4.2.0)
    - httpuv         1.6.6       2022-09-08 [1] CRAN (R 4.2.1)
    - httr           1.4.4       2022-08-17 [1] CRAN (R 4.2.1)
    - igraph         1.3.5       2022-09-22 [1] CRAN (R 4.2.1)
    - ipred          0.9-13      2022-06-02 [1] CRAN (R 4.2.0)
    - iterators      1.0.14      2022-02-05 [1] CRAN (R 4.2.0)
    - jquerylib      0.1.4       2021-04-26 [1] CRAN (R 4.2.0)
    - jsonlite       1.8.0       2022-02-22 [1] CRAN (R 4.2.0)
    - kableExtra   * 1.3.4       2021-02-20 [1] CRAN (R 4.2.0)
    - knitr          1.40        2022-08-24 [1] CRAN (R 4.2.1)
    - labeling       0.4.2       2020-10-20 [1] CRAN (R 4.2.0)
    - later          1.3.0       2021-08-18 [1] CRAN (R 4.2.0)
    - lattice        0.20-45     2021-09-22 [2] CRAN (R 4.2.0)
    - lava           1.6.10      2021-09-02 [1] CRAN (R 4.2.0)
    - lhs            1.1.5       2022-03-22 [1] CRAN (R 4.2.0)
    - lifecycle      1.0.2       2022-09-09 [1] CRAN (R 4.2.1)
    - listenv        0.8.0       2019-12-05 [1] CRAN (R 4.2.0)
    - lubridate      1.8.0       2021-10-07 [1] CRAN (R 4.2.0)
    - magrittr       2.0.3       2022-03-30 [1] CRAN (R 4.2.0)
    - MASS           7.3-58.1    2022-08-03 [1] CRAN (R 4.2.1)
    - Matrix         1.5-1       2022-09-13 [2] CRAN (R 4.2.1)
    - memoise        2.0.1       2021-11-26 [1] CRAN (R 4.2.0)
    - mgcv           1.8-40      2022-03-29 [2] CRAN (R 4.2.0)
    - mime           0.12        2021-09-28 [1] CRAN (R 4.2.0)
    - miniUI         0.1.1.1     2018-05-18 [1] CRAN (R 4.2.0)
    - munsell        0.5.0       2018-06-12 [1] CRAN (R 4.2.0)
    - nlme           3.1-159     2022-08-09 [1] CRAN (R 4.2.1)
    - nnet           7.3-18      2022-09-28 [2] CRAN (R 4.2.1)
    - openssl        2.0.3       2022-09-14 [1] CRAN (R 4.2.1)
    - parallelly     1.32.1      2022-07-21 [1] CRAN (R 4.2.1)
    - parsnip        1.0.1       2022-08-18 [1] CRAN (R 4.2.1)
    - patchwork    * 1.1.2       2022-08-19 [1] CRAN (R 4.2.1)
    - pdp            0.8.1       2022-06-07 [1] CRAN (R 4.2.0)
    - pillar         1.8.1       2022-08-19 [1] CRAN (R 4.2.1)
    - pkgbuild       1.3.1       2021-12-20 [1] CRAN (R 4.2.0)
    - pkgconfig      2.0.3       2019-09-22 [1] CRAN (R 4.2.0)
    - pkgload        1.3.0       2022-06-27 [1] CRAN (R 4.2.0)
    - prettyunits    1.1.1       2020-01-24 [1] CRAN (R 4.2.0)
    - processx       3.7.0       2022-07-07 [1] CRAN (R 4.2.1)
    - prodlim        2019.11.13  2019-11-17 [1] CRAN (R 4.2.0)
    - profvis        0.3.7       2020-11-02 [1] CRAN (R 4.2.1)
    - promises       1.2.0.1     2021-02-11 [1] CRAN (R 4.2.0)
    - ps             1.7.1       2022-06-18 [1] CRAN (R 4.2.0)
    - purrr          0.3.4       2020-04-17 [1] CRAN (R 4.2.0)
    - R6             2.5.1       2021-08-19 [1] CRAN (R 4.2.0)
    - Rcpp           1.0.9       2022-07-08 [1] CRAN (R 4.2.1)
    - readr          2.1.2       2022-01-30 [1] CRAN (R 4.2.0)
    - recipes        1.0.1       2022-07-07 [1] CRAN (R 4.2.1)
    - remotes        2.4.2       2021-11-30 [1] CRAN (R 4.2.0)
    - renv           0.15.5      2022-05-26 [1] CRAN (R 4.2.0)
    - rlang          1.0.6       2022-09-24 [1] CRAN (R 4.2.1)
    - rmarkdown      2.16.1      2022-09-26 [1] Github (rstudio/rmarkdown@9577707)
    - rpart          4.1.16      2022-01-24 [2] CRAN (R 4.2.0)
    - rprojroot      2.0.3       2022-04-02 [1] CRAN (R 4.2.0)
    - rsample        1.1.0       2022-08-08 [1] CRAN (R 4.2.1)
    - rstudioapi     0.14        2022-08-22 [1] CRAN (R 4.2.1)
    - rvest          1.0.3       2022-08-19 [1] CRAN (R 4.2.1)
    - sass           0.4.2       2022-07-16 [1] CRAN (R 4.2.1)
    - scales         1.2.1       2022-08-20 [1] CRAN (R 4.2.1)
    - sessioninfo    1.2.2       2021-12-06 [1] CRAN (R 4.2.0)
    - shapviz        0.2.1       2022-08-11 [1] CRAN (R 4.2.1)
    - shiny          1.7.2       2022-07-19 [1] CRAN (R 4.2.1)
    - signal         0.7-7       2021-05-25 [1] CRAN (R 4.2.0)
    - stringi        1.7.8       2022-07-11 [1] CRAN (R 4.2.1)
    - stringr        1.4.1       2022-08-20 [1] CRAN (R 4.2.1)
    - survival       3.4-0       2022-08-09 [2] CRAN (R 4.2.1)
    - svglite        2.1.0.9000  2022-09-26 [1] Github (r-lib/svglite@8f30fc6)
    - sys            3.4         2020-07-23 [1] CRAN (R 4.2.0)
    - systemfonts    1.0.4       2022-02-11 [1] CRAN (R 4.2.0)
    - tarchetypes  * 0.7.1       2022-09-07 [1] CRAN (R 4.2.1)
    - targets      * 0.13.4      2022-09-15 [1] CRAN (R 4.2.1)
    - tibble       * 3.1.8       2022-07-22 [1] CRAN (R 4.2.1)
    - tidyr          1.2.1       2022-09-08 [1] CRAN (R 4.2.1)
    - tidyselect     1.1.2       2022-02-21 [1] CRAN (R 4.2.0)
    - timeDate       4021.104    2022-07-19 [1] CRAN (R 4.2.1)
    - timetk         2.8.1       2022-05-31 [1] CRAN (R 4.2.0)
    - tune           1.0.0.9000  2022-07-22 [1] Github (franzbischoff/tune@539e1ee)
    - tzdb           0.3.0       2022-03-28 [1] CRAN (R 4.2.0)
    - urlchecker     1.0.1       2021-11-30 [1] CRAN (R 4.2.1)
    - usethis        2.1.6.9000  2022-10-03 [1] Github (r-lib/usethis@8ecb7ab)
    - utf8           1.2.2       2021-07-24 [1] CRAN (R 4.2.0)
    - uuid           1.1-0       2022-04-19 [1] CRAN (R 4.2.0)
    - vctrs          0.4.1       2022-04-13 [1] CRAN (R 4.2.0)
    - vip            0.3.2       2020-12-17 [1] CRAN (R 4.2.0)
    - viridisLite    0.4.1       2022-08-22 [1] CRAN (R 4.2.1)
    - visNetwork   * 2.1.0       2021-09-29 [1] CRAN (R 4.2.0)
    - vroom          1.5.7       2021-11-30 [1] CRAN (R 4.2.0)
    - webshot        0.5.3       2022-04-14 [1] CRAN (R 4.2.0)
    - whisker        0.4         2019-08-28 [1] CRAN (R 4.2.0)
    - withr          2.5.0       2022-03-03 [1] CRAN (R 4.2.0)
    - workflowr    * 1.7.0       2021-12-21 [1] CRAN (R 4.2.0)
    - workflows      1.1.0       2022-09-26 [1] CRAN (R 4.2.1)
    - xfun           0.33        2022-09-12 [1] CRAN (R 4.2.1)
    - xgboost        1.6.0.1     2022-04-16 [1] CRAN (R 4.2.0)
    - xml2           1.3.3       2021-11-30 [1] CRAN (R 4.2.0)
    - xtable         1.8-4       2019-04-21 [1] CRAN (R 4.2.0)
    - xts            0.12.1      2020-09-09 [1] CRAN (R 4.2.0)
    - yaml           2.3.5       2022-02-21 [1] CRAN (R 4.2.0)
    - yardstick      1.1.0       2022-09-07 [1] CRAN (R 4.2.1)
    - zoo            1.8-11      2022-09-17 [1] CRAN (R 4.2.1)
    -
    - [1] /workspace/.cache/R/renv/proj_libs/false.alarm-d6f1a0d1/R-4.2/x86_64-pc-linux-gnu
    + askpass        1.1         2019-01-13 [1] CRAN (R 4.3.0)
    + backports      1.4.1       2021-12-13 [1] CRAN (R 4.3.1)
    + base64url      1.4         2018-05-14 [1] CRAN (R 4.3.0)
    + bit            4.0.5       2022-11-15 [1] CRAN (R 4.3.0)
    + bit64          4.0.5       2020-08-30 [1] CRAN (R 4.3.0)
    + bookdown       0.35.1      2023-08-13 [1] Github (rstudio/bookdown@661567e)
    + bslib          0.5.1       2023-08-11 [1] CRAN (R 4.3.1)
    + cachem         1.0.8       2023-05-01 [1] CRAN (R 4.3.0)
    + callr          3.7.3       2022-11-02 [1] CRAN (R 4.3.1)
    + checkmate      2.2.0       2023-04-27 [1] CRAN (R 4.3.0)
    + class          7.3-22      2023-05-03 [2] CRAN (R 4.3.1)
    + cli            3.6.1       2023-03-23 [1] CRAN (R 4.3.1)
    + codetools      0.2-19      2023-02-01 [2] CRAN (R 4.3.0)
    + colorspace     2.1-0       2023-01-23 [1] CRAN (R 4.3.0)
    + crayon         1.5.2       2022-09-29 [1] CRAN (R 4.3.1)
    + credentials    1.3.2       2021-11-29 [1] CRAN (R 4.3.0)
    + data.table     1.14.8      2023-02-17 [1] CRAN (R 4.3.0)
    + dbarts         0.9-23      2023-01-23 [1] CRAN (R 4.3.0)
    + debugme        1.1.0       2017-10-22 [1] CRAN (R 4.3.0)
    + devtools       2.4.5       2022-10-11 [1] CRAN (R 4.3.0)
    + dials          1.2.0       2023-04-03 [1] CRAN (R 4.3.0)
    + DiceDesign     1.9         2021-02-13 [1] CRAN (R 4.3.0)
    + digest         0.6.33      2023-07-07 [1] CRAN (R 4.3.1)
    + dplyr          1.1.2       2023-04-20 [1] CRAN (R 4.3.0)
    + ellipsis       0.3.2       2021-04-29 [1] CRAN (R 4.3.0)
    + evaluate       0.21        2023-05-05 [1] CRAN (R 4.3.0)
    + fansi          1.0.4       2023-01-22 [1] CRAN (R 4.3.0)
    + farver         2.1.1       2022-07-06 [1] CRAN (R 4.3.0)
    + fastmap        1.1.1       2023-02-24 [1] CRAN (R 4.3.0)
    + fastshap       0.0.7       2021-12-06 [1] CRAN (R 4.3.0)
    + forcats        1.0.0       2023-01-29 [1] CRAN (R 4.3.0)
    + foreach        1.5.2       2022-02-02 [1] CRAN (R 4.3.0)
    + fs             1.6.3       2023-07-20 [1] CRAN (R 4.3.1)
    + furrr          0.3.1       2022-08-15 [1] CRAN (R 4.3.0)
    + future         1.33.0      2023-07-01 [1] CRAN (R 4.3.1)
    + future.apply   1.11.0      2023-05-21 [1] CRAN (R 4.3.1)
    + future.callr   0.8.2       2023-08-09 [1] CRAN (R 4.3.1)
    + generics       0.1.3       2022-07-05 [1] CRAN (R 4.3.0)
    + gert           1.9.3       2023-08-07 [1] CRAN (R 4.3.1)
    + getPass        0.2-2       2017-07-21 [1] CRAN (R 4.3.0)
    + ggplot2      * 3.4.2       2023-04-03 [1] CRAN (R 4.3.0)
    + git2r          0.32.0.9000 2023-06-30 [1] Github (ropensci/git2r@9c42d41)
    + gittargets   * 0.0.6.9000  2023-05-05 [1] Github (wlandau/gittargets@2d448ff)
    + globals        0.16.2      2022-11-21 [1] CRAN (R 4.3.0)
    + glue         * 1.6.2       2022-02-24 [1] CRAN (R 4.3.1)
    + gower          1.0.1       2022-12-22 [1] CRAN (R 4.3.0)
    + GPfit          1.0-8       2019-02-08 [1] CRAN (R 4.3.0)
    + gridExtra      2.3         2017-09-09 [1] CRAN (R 4.3.0)
    + gtable         0.3.3       2023-03-21 [1] CRAN (R 4.3.0)
    + hardhat        1.3.0       2023-03-30 [1] CRAN (R 4.3.0)
    + here         * 1.0.1       2020-12-13 [1] CRAN (R 4.3.0)
    + highr          0.10        2022-12-22 [1] CRAN (R 4.3.1)
    + hms            1.1.3       2023-03-21 [1] CRAN (R 4.3.0)
    + htmltools      0.5.6       2023-08-10 [1] CRAN (R 4.3.1)
    + htmlwidgets    1.6.2       2023-03-17 [1] CRAN (R 4.3.0)
    + httpuv         1.6.11      2023-05-11 [1] CRAN (R 4.3.1)
    + httr           1.4.6       2023-05-08 [1] CRAN (R 4.3.1)
    + igraph         1.5.1       2023-08-10 [1] CRAN (R 4.3.1)
    + ipred          0.9-14      2023-03-09 [1] CRAN (R 4.3.0)
    + iterators      1.0.14      2022-02-05 [1] CRAN (R 4.3.0)
    + jquerylib      0.1.4       2021-04-26 [1] CRAN (R 4.3.0)
    + jsonlite       1.8.7       2023-06-29 [1] CRAN (R 4.3.0)
    + kableExtra   * 1.3.4       2021-02-20 [1] CRAN (R 4.3.0)
    + knitr          1.43        2023-05-25 [1] CRAN (R 4.3.0)
    + labeling       0.4.2       2020-10-20 [1] CRAN (R 4.3.0)
    + later          1.3.1       2023-05-02 [1] CRAN (R 4.3.1)
    + lattice        0.21-8      2023-04-05 [2] CRAN (R 4.3.0)
    + lava           1.7.2.1     2023-02-27 [1] CRAN (R 4.3.0)
    + lhs            1.1.6       2022-12-17 [1] CRAN (R 4.3.0)
    + lifecycle      1.0.3       2022-10-07 [1] CRAN (R 4.3.1)
    + listenv        0.9.0       2022-12-16 [1] CRAN (R 4.3.0)
    + lubridate      1.9.2       2023-02-10 [1] CRAN (R 4.3.0)
    + magrittr       2.0.3       2022-03-30 [1] CRAN (R 4.3.1)
    + MASS           7.3-60      2023-05-04 [2] CRAN (R 4.3.1)
    + Matrix         1.6-0       2023-07-08 [1] CRAN (R 4.3.1)
    + memoise        2.0.1       2021-11-26 [1] CRAN (R 4.3.0)
    + mgcv           1.9-0       2023-07-11 [1] CRAN (R 4.3.1)
    + mime           0.12        2021-09-28 [1] CRAN (R 4.3.0)
    + miniUI         0.1.1.1     2018-05-18 [1] CRAN (R 4.3.0)
    + modelenv       0.1.1       2023-03-08 [1] CRAN (R 4.3.0)
    + munsell        0.5.0       2018-06-12 [1] CRAN (R 4.3.0)
    + nlme           3.1-163     2023-08-09 [1] CRAN (R 4.3.1)
    + nnet           7.3-19      2023-05-03 [2] CRAN (R 4.3.1)
    + openssl        2.1.0       2023-07-15 [1] CRAN (R 4.3.1)
    + parallelly     1.36.0      2023-05-26 [1] CRAN (R 4.3.1)
    + parsnip        1.1.0       2023-04-12 [1] CRAN (R 4.3.0)
    + patchwork    * 1.1.2       2022-08-19 [1] CRAN (R 4.3.0)
    + pdp            0.8.1       2023-06-22 [1] Github (bgreenwell/pdp@4f22141)
    + pillar         1.9.0       2023-03-22 [1] CRAN (R 4.3.0)
    + pkgbuild       1.4.2       2023-06-26 [1] CRAN (R 4.3.1)
    + pkgconfig      2.0.3       2019-09-22 [1] CRAN (R 4.3.0)
    + pkgload        1.3.2.1     2023-07-08 [1] CRAN (R 4.3.1)
    + prettyunits    1.1.1       2020-01-24 [1] CRAN (R 4.3.0)
    + processx       3.8.2       2023-06-30 [1] CRAN (R 4.3.1)
    + prodlim        2023.03.31  2023-04-02 [1] CRAN (R 4.3.0)
    + profvis        0.3.8       2023-05-02 [1] CRAN (R 4.3.1)
    + promises       1.2.1       2023-08-10 [1] CRAN (R 4.3.1)
    + ps             1.7.5       2023-04-18 [1] CRAN (R 4.3.1)
    + purrr          1.0.2       2023-08-10 [1] CRAN (R 4.3.1)
    + R6             2.5.1       2021-08-19 [1] CRAN (R 4.3.1)
    + Rcpp           1.0.11      2023-07-06 [1] CRAN (R 4.3.1)
    + readr          2.1.4       2023-02-10 [1] CRAN (R 4.3.0)
    + recipes        1.0.7       2023-08-10 [1] CRAN (R 4.3.1)
    + remotes        2.4.2.1     2023-07-18 [1] CRAN (R 4.3.1)
    + renv           0.17.3      2023-04-06 [1] CRAN (R 4.3.1)
    + rlang          1.1.1       2023-04-28 [1] CRAN (R 4.3.0)
    + rmarkdown      2.23.4      2023-08-13 [1] Github (rstudio/rmarkdown@054d735)
    + rpart          4.1.19      2022-10-21 [2] CRAN (R 4.3.0)
    + rprojroot      2.0.3       2022-04-02 [1] CRAN (R 4.3.1)
    + rsample        1.1.1       2022-12-07 [1] CRAN (R 4.3.0)
    + rstudioapi     0.15.0      2023-07-07 [1] CRAN (R 4.3.1)
    + rvest          1.0.3       2022-08-19 [1] CRAN (R 4.3.0)
    + sass           0.4.7       2023-07-15 [1] CRAN (R 4.3.1)
    + scales         1.2.1       2022-08-20 [1] CRAN (R 4.3.0)
    + sessioninfo    1.2.2       2021-12-06 [1] CRAN (R 4.3.0)
    + shapviz        0.9.1       2023-07-18 [1] CRAN (R 4.3.1)
    + shiny          1.7.5       2023-08-12 [1] CRAN (R 4.3.1)
    + signal         0.7-7       2021-05-25 [1] CRAN (R 4.3.0)
    + stringi        1.7.12      2023-01-11 [1] CRAN (R 4.3.1)
    + stringr        1.5.0       2022-12-02 [1] CRAN (R 4.3.1)
    + survival       3.5-5       2023-03-12 [2] CRAN (R 4.3.1)
    + svglite        2.1.1.9000  2023-05-05 [1] Github (r-lib/svglite@6c1d359)
    + sys            3.4.2       2023-05-23 [1] CRAN (R 4.3.1)
    + systemfonts    1.0.4       2022-02-11 [1] CRAN (R 4.3.0)
    + tarchetypes  * 0.7.7       2023-06-15 [1] CRAN (R 4.3.1)
    + targets      * 1.2.2       2023-08-10 [1] CRAN (R 4.3.1)
    + tibble       * 3.2.1       2023-03-20 [1] CRAN (R 4.3.0)
    + tidyr          1.3.0       2023-01-24 [1] CRAN (R 4.3.0)
    + tidyselect     1.2.0       2022-10-10 [1] CRAN (R 4.3.0)
    + timechange     0.2.0       2023-01-11 [1] CRAN (R 4.3.0)
    + timeDate       4022.108    2023-01-07 [1] CRAN (R 4.3.0)
    + timetk         2.8.3       2023-03-30 [1] CRAN (R 4.3.0)
    + tune           1.1.1       2023-04-11 [1] CRAN (R 4.3.0)
    + tzdb           0.4.0       2023-05-12 [1] CRAN (R 4.3.1)
    + urlchecker     1.0.1       2021-11-30 [1] CRAN (R 4.3.0)
    + usethis        2.2.2.9000  2023-07-17 [1] Github (r-lib/usethis@467ff57)
    + utf8           1.2.3       2023-01-31 [1] CRAN (R 4.3.0)
    + uuid           1.1-0       2022-04-19 [1] CRAN (R 4.3.0)
    + vctrs          0.6.3       2023-06-14 [1] CRAN (R 4.3.1)
    + vip            0.4.0       2023-07-19 [1] CRAN (R 4.3.1)
    + viridisLite    0.4.2       2023-05-02 [1] CRAN (R 4.3.1)
    + visNetwork   * 2.1.2       2022-09-29 [1] CRAN (R 4.3.0)
    + vroom          1.6.3       2023-04-28 [1] CRAN (R 4.3.1)
    + webshot        0.5.5       2023-06-26 [1] CRAN (R 4.3.1)
    + whisker        0.4.1       2022-12-05 [1] CRAN (R 4.3.0)
    + withr          2.5.0       2022-03-03 [1] CRAN (R 4.3.1)
    + workflowr    * 1.7.0       2021-12-21 [1] CRAN (R 4.3.0)
    + workflows      1.1.3       2023-02-22 [1] CRAN (R 4.3.0)
    + xfun           0.40        2023-08-09 [1] CRAN (R 4.3.1)
    + xgboost        1.7.5.1     2023-03-30 [1] CRAN (R 4.3.0)
    + xml2           1.3.5       2023-07-06 [1] CRAN (R 4.3.1)
    + xtable         1.8-4       2019-04-21 [1] CRAN (R 4.3.0)
    + xts            0.13.1      2023-04-16 [1] CRAN (R 4.3.0)
    + yaml           2.3.7       2023-01-23 [1] CRAN (R 4.3.1)
    + yardstick      1.0.0.9000  2023-05-25 [1] Github (tidymodels/yardstick@90ab794)
    + zoo            1.8-12      2023-04-13 [1] CRAN (R 4.3.0)
    +
    + [1] /workspace/.cache/R/renv/proj_libs/false.alarm-d6f1a0d1/R-4.3/x86_64-pc-linux-gnu
      [2] /usr/lib/R/library
     
     ──────────────────────────────────────────────────────────────────────────────
    diff --git a/docs/regime_optimize_3_5.html b/docs/regime_optimize_3_5.html index b45d4b4..e30129d 100644 --- a/docs/regime_optimize_3_5.html +++ b/docs/regime_optimize_3_5.html @@ -30,12 +30,12 @@ code {color: inherit; background-color: rgba(0, 0, 0, 0.04);} pre:not([class]) { background-color: white } - + - - - + + + @@ -205,8 +205,8 @@ border-radius: 4px; } -.tabset-dropdown > .nav-tabs > li.active:before { - content: ""; +.tabset-dropdown > .nav-tabs > li.active:before, .tabset-dropdown > .nav-tabs.nav-tabs-open:before { + content: "\e259"; font-family: 'Glyphicons Halflings'; display: inline-block; padding: 10px; @@ -214,16 +214,9 @@ } .tabset-dropdown > .nav-tabs.nav-tabs-open > li.active:before { - content: ""; - border: none; -} - -.tabset-dropdown > .nav-tabs.nav-tabs-open:before { - content: ""; + content: "\e258"; font-family: 'Glyphicons Halflings'; - display: inline-block; - padding: 10px; - border-right: 1px solid #ddd; + border: none; } .tabset-dropdown > .nav-tabs > li.active { @@ -379,7 +372,7 @@

    Regime changes 3.5 - malignantventricular with PR

    Francisco Bischoff

    -

    on October 09, 2022

    +

    on August 13, 2023

    @@ -429,7 +422,7 @@

    on October 09, 2022

    -Last updated: 2022-10-09 +Last updated: 2023-08-13

    Checks: @@ -557,20 +550,20 @@

    on October 09, 2022

    -
    +

    Great! You are using Git for version control. Tracking code development and connecting the code version to the results is critical for reproducibility.

    -The results in this page were generated with repository version e8ce96b. +The results in this page were generated with repository version 4437e7a. See the Past versions tab to see a history of the changes made to the R Markdown and HTML files.

    @@ -592,6 +585,19 @@

    on October 09, 2022

    Ignored: .github/ISSUE_TEMPLATE/ Ignored: .httr-oauth Ignored: R/RcppExports.R + Ignored: _classifier/meta/process + Ignored: _classifier/meta/progress + Ignored: _classifier/objects/ + Ignored: _classifier/user/ + Ignored: _contrast_profile/meta/process + Ignored: _contrast_profile/meta/progress + Ignored: _contrast_profile/objects/ + Ignored: _contrast_profile/user/ + Ignored: _contrast_profile_ex/meta/process + Ignored: _contrast_profile_ex/meta/progress + Ignored: _contrast_profile_ex/objects/ + Ignored: _contrast_profile_ex/user/ + Ignored: _contrast_profile_ex/workspaces/ Ignored: _regime_change/meta/process Ignored: _regime_change/meta/progress Ignored: _regime_change/objects/ @@ -604,6 +610,10 @@

    on October 09, 2022

    Ignored: _regime_change3/meta/progress Ignored: _regime_change3/objects/ Ignored: _regime_change3/user/ + Ignored: _regime_change_2/meta/process + Ignored: _regime_change_2/meta/progress + Ignored: _regime_change_2/objects/ + Ignored: _regime_change_2/user/ Ignored: _regime_optimize/meta/meta2 Ignored: _regime_optimize/meta/process Ignored: _regime_optimize/meta/progress @@ -620,6 +630,7 @@

    on October 09, 2022

    Ignored: analysis/shiny_vtachy/rsconnect/ Ignored: dev/ Ignored: inst/extdata/ + Ignored: output/importancess.rds Ignored: papers/aime2021/aime2021.md Ignored: papers/epia2022/epia2022.md Ignored: presentations/MEDCIDS21/MEDCIDS21-10min_files/ @@ -628,8 +639,12 @@

    on October 09, 2022

    Ignored: presentations/Report/Midterm-Report_files/ Ignored: protocol/SecondReport_cache/ Ignored: protocol/SecondReport_files/ + Ignored: protocol/ThirdReport.tex + Ignored: protocol/ThirdReport_cache/ + Ignored: protocol/ThirdReport_files/ + Ignored: protocol/_extensions/ Ignored: protocol/_files/ - Ignored: renv/python/ + Ignored: protocol/figure/ Ignored: renv/staging/ Ignored: src/RcppExports.cpp Ignored: src/RcppExports.o @@ -647,6 +662,12 @@

    on October 09, 2022

    Ignored: thesis/_bookdown_files/ Ignored: tmp/ +Unstaged changes: + Modified: analysis/regime_optimize.Rmd + Modified: analysis/report.Rmd + Modified: output/importances.rds + Modified: output/importances2.rds +

    Note that any generated files, e.g. HTML, png, CSS, etc., are not included in @@ -695,7 +716,24 @@

    on October 09, 2022

    Rmd -e8ce96b +d06c64f + + +Francisco Bischoff + + +2022-10-09 + + +Squashed commit of the following: + + + + +html + + +d06c64f Francisco Bischoff @@ -704,7 +742,7 @@

    on October 09, 2022

    2022-10-09 -update optimize +Squashed commit of the following: @@ -765,7 +803,7 @@

    1 Regime changes optimization (co

    1.1 Current pipeline

    -
    +

    Figure 1.1: FLOSS pipeline. @@ -818,6 +856,11 @@

    1.3.1 Interactions

    Fig. 1.2 shows the variable interaction strength between pairs of variables. That allows us to verify if there are any significant interactions between the variables. Here we see that the interaction between variables are minimal.

    +
    Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
    +ℹ Please use `linewidth` instead.
    +This warning is displayed once every 8 hours.
    +Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
    +generated.
    Variable interactions strength using feature importance ranking measure (FIRM) approach [@Greenwell2018]. Shows almost no interaction between the variables.

    @@ -848,6 +891,17 @@

    1.3.1 Interactions

    +d06c64f + + +Francisco Bischoff + + +2022-10-09 + + + + f9f551d @@ -906,6 +960,17 @@

    1.3.3 Importance analysis

    +d06c64f + + +Francisco Bischoff + + +2022-10-09 + + + + f9f551d @@ -956,6 +1021,17 @@

    1.3.3 Importance analysis

    +d06c64f + + +Francisco Bischoff + + +2022-10-09 + + + + f9f551d @@ -980,6 +1056,13 @@

    1.4.1 By recording

    recordings with a small IQR (interquartile range) of model scores. We see on the left half 50% of the recordings with the worst minimum score, and on the right half, 50% of the recordings with the best minimum score.

    Next, we will visualize some of these predictions to understand why some recordings were difficult to segment.

    +
    Warning: Returning more (or less) than 1 row per `summarise()` group was deprecated in
    +dplyr 1.1.0.
    +ℹ Please use `reframe()` instead.
    +ℹ When switching from `summarise()` to `reframe()`, remember that `reframe()`
    +  always returns an ungrouped data frame and adjust accordingly.
    +Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
    +generated.
    Violin plot showing the distribution of the FLOSS score achieved by all tested models by recording.  The left half shows the recordings that were difficult to predict (50% overall), whereas the right half shows the recordings that at least one model could achieve a good prediction (50% overall).  The recordings are sorted (left-right) by the minimum (best) score achieved in descending order, and ties are sorted by the median of all recording scores.  The blue color highlights recordings where models had an IQR variability of less than 0.5.

    @@ -1010,6 +1093,17 @@

    1.4.1 By recording

    +d06c64f + + +Francisco Bischoff + + +2022-10-09 + + + + f9f551d @@ -1057,6 +1151,17 @@

    1.4.1 By recording

    +d06c64f + + +Francisco Bischoff + + +2022-10-09 + + + + f9f551d @@ -1101,6 +1206,17 @@

    1.4.1 By recording

    +d06c64f + + +Francisco Bischoff + + +2022-10-09 + + + + f9f551d @@ -1121,6 +1237,13 @@

    1.4.1 By recording

    1.4.2 By model

    Fig. 1.8 shows the distribution of the FLOSS score of the 25% worst (left side) and 25% best models across the recordings (right side). The bluish color highlights the models with SD below 0.5 and IQR below 0.5.

    +
    Warning: Returning more (or less) than 1 row per `summarise()` group was deprecated in
    +dplyr 1.1.0.
    +ℹ Please use `reframe()` instead.
    +ℹ When switching from `summarise()` to `reframe()`, remember that `reframe()`
    +  always returns an ungrouped data frame and adjust accordingly.
    +Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
    +generated.
    Violin plot showing the distribution of the FLOSS score achieved by all tested models during the inner ressample.  The left half shows the models with the worst performances (top 25), whereas the right half shows the models with the best performances (top 25). The models are sorted (left-right) by the mean score (top) and by the median (below). Ties are sorted by the SD and IQR, respectively.  The bluish colors highlights models with an SD below 0.5 and IQR below 0.5.

    @@ -1151,6 +1274,17 @@

    1.4.2 By model

    +d06c64f + + +Francisco Bischoff + + +2022-10-09 + + + + f9f551d @@ -1198,6 +1332,17 @@

    1.4.2 By model

    +d06c64f + + +Francisco Bischoff + + +2022-10-09 + + + + f9f551d @@ -1240,176 +1385,177 @@

    References

    ─ Session info ───────────────────────────────────────────────────────────────
      setting  value
    - version  R version 4.2.1 (2022-06-23)
    - os       Ubuntu 20.04.5 LTS
    + version  R version 4.3.1 (2023-06-16)
    + os       Ubuntu 22.04.2 LTS
      system   x86_64, linux-gnu
      ui       X11
      language (EN)
      collate  en_US.UTF-8
      ctype    en_US.UTF-8
      tz       Europe/Lisbon
    - date     2022-10-09
    + date     2023-08-13
      pandoc   2.17.0.1 @ /usr/bin/ (via rmarkdown)
     
     ─ Packages ───────────────────────────────────────────────────────────────────
      package      * version     date (UTC) lib source
    - askpass        1.1         2019-01-13 [1] CRAN (R 4.2.0)
    - assertthat     0.2.1       2019-03-21 [1] CRAN (R 4.2.0)
    - backports      1.4.1       2021-12-13 [1] CRAN (R 4.2.0)
    - base64url      1.4         2018-05-14 [1] CRAN (R 4.2.0)
    - bit            4.0.4       2020-08-04 [1] CRAN (R 4.2.0)
    - bit64          4.0.5       2020-08-30 [1] CRAN (R 4.2.0)
    - bookdown       0.29.2      2022-09-26 [1] Github (rstudio/bookdown@dfe92a2)
    - bslib          0.4.0       2022-07-16 [1] CRAN (R 4.2.1)
    - cachem         1.0.6       2021-08-19 [1] CRAN (R 4.2.0)
    - callr          3.7.2       2022-08-22 [1] CRAN (R 4.2.1)
    - checkmate      2.1.0       2022-04-21 [1] CRAN (R 4.2.0)
    - class          7.3-20      2022-01-13 [2] CRAN (R 4.2.0)
    - cli            3.4.1       2022-09-23 [1] CRAN (R 4.2.1)
    - codetools      0.2-18      2020-11-04 [2] CRAN (R 4.2.0)
    - colorspace     2.0-3       2022-02-21 [1] CRAN (R 4.2.0)
    - crayon         1.5.1       2022-03-26 [1] CRAN (R 4.2.0)
    - credentials    1.3.2       2021-11-29 [1] CRAN (R 4.2.0)
    - data.table     1.14.2      2021-09-27 [1] CRAN (R 4.2.0)
    - dbarts         0.9-22      2022-03-29 [1] CRAN (R 4.2.0)
    - DBI            1.1.3       2022-06-18 [1] CRAN (R 4.2.0)
    - debugme        1.1.0       2017-10-22 [1] CRAN (R 4.2.0)
    - devtools       2.4.4       2022-07-20 [1] CRAN (R 4.2.1)
    - dials          1.0.0       2022-06-14 [1] CRAN (R 4.2.0)
    - DiceDesign     1.9         2021-02-13 [1] CRAN (R 4.2.0)
    - digest         0.6.29      2021-12-01 [1] CRAN (R 4.2.0)
    - dplyr          1.0.10      2022-09-01 [1] CRAN (R 4.2.1)
    - ellipsis       0.3.2       2021-04-29 [1] CRAN (R 4.2.0)
    - evaluate       0.16        2022-08-09 [1] CRAN (R 4.2.1)
    - fansi          1.0.3       2022-03-24 [1] CRAN (R 4.2.0)
    - farver         2.1.1       2022-07-06 [1] CRAN (R 4.2.0)
    - fastmap        1.1.0       2021-01-25 [1] CRAN (R 4.2.0)
    - fastshap       0.0.7       2021-12-06 [1] CRAN (R 4.2.0)
    - forcats        0.5.2       2022-08-19 [2] CRAN (R 4.2.1)
    - foreach        1.5.2       2022-02-02 [1] CRAN (R 4.2.0)
    - fs             1.5.2       2021-12-08 [1] CRAN (R 4.2.0)
    - furrr          0.3.1       2022-08-15 [1] CRAN (R 4.2.1)
    - future         1.28.0      2022-09-02 [1] CRAN (R 4.2.1)
    - future.apply   1.9.1       2022-09-07 [1] CRAN (R 4.2.1)
    - generics       0.1.3       2022-07-05 [1] CRAN (R 4.2.0)
    - gert           1.9.0       2022-09-15 [1] CRAN (R 4.2.1)
    - getPass        0.2-2       2017-07-21 [1] CRAN (R 4.2.0)
    - ggplot2      * 3.3.6       2022-05-03 [1] CRAN (R 4.2.0)
    - git2r          0.30.1.9000 2022-04-29 [1] Github (ropensci/git2r@80ba185)
    - gittargets   * 0.0.5.9000  2022-09-26 [1] Github (wlandau/gittargets@a50dd58)
    - globals        0.16.1      2022-08-28 [1] CRAN (R 4.2.1)
    - glue         * 1.6.2       2022-02-24 [1] CRAN (R 4.2.0)
    - gower          1.0.0       2022-02-03 [1] CRAN (R 4.2.0)
    - GPfit          1.0-8       2019-02-08 [1] CRAN (R 4.2.0)
    - gridExtra      2.3         2017-09-09 [1] CRAN (R 4.2.0)
    - gtable         0.3.1       2022-09-01 [1] CRAN (R 4.2.1)
    - hardhat        1.2.0       2022-06-30 [1] CRAN (R 4.2.0)
    - here         * 1.0.1       2020-12-13 [1] CRAN (R 4.2.0)
    - highr          0.9         2021-04-16 [1] CRAN (R 4.2.0)
    - hms            1.1.2       2022-08-19 [1] CRAN (R 4.2.1)
    - htmltools      0.5.3       2022-07-18 [1] CRAN (R 4.2.1)
    - htmlwidgets    1.5.4       2021-09-08 [1] CRAN (R 4.2.0)
    - httpuv         1.6.6       2022-09-08 [1] CRAN (R 4.2.1)
    - httr           1.4.4       2022-08-17 [1] CRAN (R 4.2.1)
    - igraph         1.3.5       2022-09-22 [1] CRAN (R 4.2.1)
    - ipred          0.9-13      2022-06-02 [1] CRAN (R 4.2.0)
    - iterators      1.0.14      2022-02-05 [1] CRAN (R 4.2.0)
    - jquerylib      0.1.4       2021-04-26 [1] CRAN (R 4.2.0)
    - jsonlite       1.8.0       2022-02-22 [1] CRAN (R 4.2.0)
    - kableExtra   * 1.3.4       2021-02-20 [1] CRAN (R 4.2.0)
    - knitr          1.40        2022-08-24 [1] CRAN (R 4.2.1)
    - labeling       0.4.2       2020-10-20 [1] CRAN (R 4.2.0)
    - later          1.3.0       2021-08-18 [1] CRAN (R 4.2.0)
    - lattice        0.20-45     2021-09-22 [2] CRAN (R 4.2.0)
    - lava           1.6.10      2021-09-02 [1] CRAN (R 4.2.0)
    - lhs            1.1.5       2022-03-22 [1] CRAN (R 4.2.0)
    - lifecycle      1.0.2       2022-09-09 [1] CRAN (R 4.2.1)
    - listenv        0.8.0       2019-12-05 [1] CRAN (R 4.2.0)
    - lubridate      1.8.0       2021-10-07 [1] CRAN (R 4.2.0)
    - magrittr       2.0.3       2022-03-30 [1] CRAN (R 4.2.0)
    - MASS           7.3-58.1    2022-08-03 [1] CRAN (R 4.2.1)
    - Matrix         1.5-1       2022-09-13 [2] CRAN (R 4.2.1)
    - memoise        2.0.1       2021-11-26 [1] CRAN (R 4.2.0)
    - mgcv           1.8-40      2022-03-29 [2] CRAN (R 4.2.0)
    - mime           0.12        2021-09-28 [1] CRAN (R 4.2.0)
    - miniUI         0.1.1.1     2018-05-18 [1] CRAN (R 4.2.0)
    - munsell        0.5.0       2018-06-12 [1] CRAN (R 4.2.0)
    - nlme           3.1-159     2022-08-09 [1] CRAN (R 4.2.1)
    - nnet           7.3-18      2022-09-28 [2] CRAN (R 4.2.1)
    - openssl        2.0.3       2022-09-14 [1] CRAN (R 4.2.1)
    - parallelly     1.32.1      2022-07-21 [1] CRAN (R 4.2.1)
    - parsnip        1.0.1       2022-08-18 [1] CRAN (R 4.2.1)
    - patchwork    * 1.1.2       2022-08-19 [1] CRAN (R 4.2.1)
    - pdp            0.8.1       2022-06-07 [1] CRAN (R 4.2.0)
    - pillar         1.8.1       2022-08-19 [1] CRAN (R 4.2.1)
    - pkgbuild       1.3.1       2021-12-20 [1] CRAN (R 4.2.0)
    - pkgconfig      2.0.3       2019-09-22 [1] CRAN (R 4.2.0)
    - pkgload        1.3.0       2022-06-27 [1] CRAN (R 4.2.0)
    - prettyunits    1.1.1       2020-01-24 [1] CRAN (R 4.2.0)
    - processx       3.7.0       2022-07-07 [1] CRAN (R 4.2.1)
    - prodlim        2019.11.13  2019-11-17 [1] CRAN (R 4.2.0)
    - profvis        0.3.7       2020-11-02 [1] CRAN (R 4.2.1)
    - promises       1.2.0.1     2021-02-11 [1] CRAN (R 4.2.0)
    - ps             1.7.1       2022-06-18 [1] CRAN (R 4.2.0)
    - purrr          0.3.4       2020-04-17 [1] CRAN (R 4.2.0)
    - R6             2.5.1       2021-08-19 [1] CRAN (R 4.2.0)
    - Rcpp           1.0.9       2022-07-08 [1] CRAN (R 4.2.1)
    - readr          2.1.2       2022-01-30 [1] CRAN (R 4.2.0)
    - recipes        1.0.1       2022-07-07 [1] CRAN (R 4.2.1)
    - remotes        2.4.2       2021-11-30 [1] CRAN (R 4.2.0)
    - renv           0.15.5      2022-05-26 [1] CRAN (R 4.2.0)
    - rlang          1.0.6       2022-09-24 [1] CRAN (R 4.2.1)
    - rmarkdown      2.16.1      2022-09-26 [1] Github (rstudio/rmarkdown@9577707)
    - rpart          4.1.16      2022-01-24 [2] CRAN (R 4.2.0)
    - rprojroot      2.0.3       2022-04-02 [1] CRAN (R 4.2.0)
    - rsample        1.1.0       2022-08-08 [1] CRAN (R 4.2.1)
    - rstudioapi     0.14        2022-08-22 [1] CRAN (R 4.2.1)
    - rvest          1.0.3       2022-08-19 [1] CRAN (R 4.2.1)
    - sass           0.4.2       2022-07-16 [1] CRAN (R 4.2.1)
    - scales         1.2.1       2022-08-20 [1] CRAN (R 4.2.1)
    - sessioninfo    1.2.2       2021-12-06 [1] CRAN (R 4.2.0)
    - shapviz        0.2.1       2022-08-11 [1] CRAN (R 4.2.1)
    - shiny          1.7.2       2022-07-19 [1] CRAN (R 4.2.1)
    - signal         0.7-7       2021-05-25 [1] CRAN (R 4.2.0)
    - stringi        1.7.8       2022-07-11 [1] CRAN (R 4.2.1)
    - stringr        1.4.1       2022-08-20 [1] CRAN (R 4.2.1)
    - survival       3.4-0       2022-08-09 [2] CRAN (R 4.2.1)
    - svglite        2.1.0.9000  2022-09-26 [1] Github (r-lib/svglite@8f30fc6)
    - sys            3.4         2020-07-23 [1] CRAN (R 4.2.0)
    - systemfonts    1.0.4       2022-02-11 [1] CRAN (R 4.2.0)
    - tarchetypes  * 0.7.1       2022-09-07 [1] CRAN (R 4.2.1)
    - targets      * 0.13.4      2022-09-15 [1] CRAN (R 4.2.1)
    - tibble       * 3.1.8       2022-07-22 [1] CRAN (R 4.2.1)
    - tidyr          1.2.1       2022-09-08 [1] CRAN (R 4.2.1)
    - tidyselect     1.1.2       2022-02-21 [1] CRAN (R 4.2.0)
    - timeDate       4021.104    2022-07-19 [1] CRAN (R 4.2.1)
    - timetk         2.8.1       2022-05-31 [1] CRAN (R 4.2.0)
    - tune           1.0.0.9000  2022-07-22 [1] Github (franzbischoff/tune@539e1ee)
    - tzdb           0.3.0       2022-03-28 [1] CRAN (R 4.2.0)
    - urlchecker     1.0.1       2021-11-30 [1] CRAN (R 4.2.1)
    - usethis        2.1.6.9000  2022-10-03 [1] Github (r-lib/usethis@8ecb7ab)
    - utf8           1.2.2       2021-07-24 [1] CRAN (R 4.2.0)
    - uuid           1.1-0       2022-04-19 [1] CRAN (R 4.2.0)
    - vctrs          0.4.1       2022-04-13 [1] CRAN (R 4.2.0)
    - vip            0.3.2       2020-12-17 [1] CRAN (R 4.2.0)
    - viridisLite    0.4.1       2022-08-22 [1] CRAN (R 4.2.1)
    - visNetwork   * 2.1.0       2021-09-29 [1] CRAN (R 4.2.0)
    - vroom          1.5.7       2021-11-30 [1] CRAN (R 4.2.0)
    - webshot        0.5.3       2022-04-14 [1] CRAN (R 4.2.0)
    - whisker        0.4         2019-08-28 [1] CRAN (R 4.2.0)
    - withr          2.5.0       2022-03-03 [1] CRAN (R 4.2.0)
    - workflowr    * 1.7.0       2021-12-21 [1] CRAN (R 4.2.0)
    - workflows      1.1.0       2022-09-26 [1] CRAN (R 4.2.1)
    - xfun           0.33        2022-09-12 [1] CRAN (R 4.2.1)
    - xgboost        1.6.0.1     2022-04-16 [1] CRAN (R 4.2.0)
    - xml2           1.3.3       2021-11-30 [1] CRAN (R 4.2.0)
    - xtable         1.8-4       2019-04-21 [1] CRAN (R 4.2.0)
    - xts            0.12.1      2020-09-09 [1] CRAN (R 4.2.0)
    - yaml           2.3.5       2022-02-21 [1] CRAN (R 4.2.0)
    - yardstick      1.1.0       2022-09-07 [1] CRAN (R 4.2.1)
    - zoo            1.8-11      2022-09-17 [1] CRAN (R 4.2.1)
    -
    - [1] /workspace/.cache/R/renv/proj_libs/false.alarm-d6f1a0d1/R-4.2/x86_64-pc-linux-gnu
    + askpass        1.1         2019-01-13 [1] CRAN (R 4.3.0)
    + backports      1.4.1       2021-12-13 [1] CRAN (R 4.3.1)
    + base64url      1.4         2018-05-14 [1] CRAN (R 4.3.0)
    + bit            4.0.5       2022-11-15 [1] CRAN (R 4.3.0)
    + bit64          4.0.5       2020-08-30 [1] CRAN (R 4.3.0)
    + bookdown       0.35.1      2023-08-13 [1] Github (rstudio/bookdown@661567e)
    + bslib          0.5.1       2023-08-11 [1] CRAN (R 4.3.1)
    + cachem         1.0.8       2023-05-01 [1] CRAN (R 4.3.0)
    + callr          3.7.3       2022-11-02 [1] CRAN (R 4.3.1)
    + checkmate      2.2.0       2023-04-27 [1] CRAN (R 4.3.0)
    + class          7.3-22      2023-05-03 [2] CRAN (R 4.3.1)
    + cli            3.6.1       2023-03-23 [1] CRAN (R 4.3.1)
    + codetools      0.2-19      2023-02-01 [2] CRAN (R 4.3.0)
    + colorspace     2.1-0       2023-01-23 [1] CRAN (R 4.3.0)
    + crayon         1.5.2       2022-09-29 [1] CRAN (R 4.3.1)
    + credentials    1.3.2       2021-11-29 [1] CRAN (R 4.3.0)
    + data.table     1.14.8      2023-02-17 [1] CRAN (R 4.3.0)
    + dbarts         0.9-23      2023-01-23 [1] CRAN (R 4.3.0)
    + debugme        1.1.0       2017-10-22 [1] CRAN (R 4.3.0)
    + devtools       2.4.5       2022-10-11 [1] CRAN (R 4.3.0)
    + dials          1.2.0       2023-04-03 [1] CRAN (R 4.3.0)
    + DiceDesign     1.9         2021-02-13 [1] CRAN (R 4.3.0)
    + digest         0.6.33      2023-07-07 [1] CRAN (R 4.3.1)
    + dplyr          1.1.2       2023-04-20 [1] CRAN (R 4.3.0)
    + ellipsis       0.3.2       2021-04-29 [1] CRAN (R 4.3.0)
    + evaluate       0.21        2023-05-05 [1] CRAN (R 4.3.0)
    + fansi          1.0.4       2023-01-22 [1] CRAN (R 4.3.0)
    + farver         2.1.1       2022-07-06 [1] CRAN (R 4.3.0)
    + fastmap        1.1.1       2023-02-24 [1] CRAN (R 4.3.0)
    + fastshap       0.0.7       2021-12-06 [1] CRAN (R 4.3.0)
    + forcats        1.0.0       2023-01-29 [1] CRAN (R 4.3.0)
    + foreach        1.5.2       2022-02-02 [1] CRAN (R 4.3.0)
    + fs             1.6.3       2023-07-20 [1] CRAN (R 4.3.1)
    + furrr          0.3.1       2022-08-15 [1] CRAN (R 4.3.0)
    + future         1.33.0      2023-07-01 [1] CRAN (R 4.3.1)
    + future.apply   1.11.0      2023-05-21 [1] CRAN (R 4.3.1)
    + future.callr   0.8.2       2023-08-09 [1] CRAN (R 4.3.1)
    + generics       0.1.3       2022-07-05 [1] CRAN (R 4.3.0)
    + gert           1.9.3       2023-08-07 [1] CRAN (R 4.3.1)
    + getPass        0.2-2       2017-07-21 [1] CRAN (R 4.3.0)
    + ggplot2      * 3.4.2       2023-04-03 [1] CRAN (R 4.3.0)
    + git2r          0.32.0.9000 2023-06-30 [1] Github (ropensci/git2r@9c42d41)
    + gittargets   * 0.0.6.9000  2023-05-05 [1] Github (wlandau/gittargets@2d448ff)
    + globals        0.16.2      2022-11-21 [1] CRAN (R 4.3.0)
    + glue         * 1.6.2       2022-02-24 [1] CRAN (R 4.3.1)
    + gower          1.0.1       2022-12-22 [1] CRAN (R 4.3.0)
    + GPfit          1.0-8       2019-02-08 [1] CRAN (R 4.3.0)
    + gridExtra      2.3         2017-09-09 [1] CRAN (R 4.3.0)
    + gtable         0.3.3       2023-03-21 [1] CRAN (R 4.3.0)
    + hardhat        1.3.0       2023-03-30 [1] CRAN (R 4.3.0)
    + here         * 1.0.1       2020-12-13 [1] CRAN (R 4.3.0)
    + highr          0.10        2022-12-22 [1] CRAN (R 4.3.1)
    + hms            1.1.3       2023-03-21 [1] CRAN (R 4.3.0)
    + htmltools      0.5.6       2023-08-10 [1] CRAN (R 4.3.1)
    + htmlwidgets    1.6.2       2023-03-17 [1] CRAN (R 4.3.0)
    + httpuv         1.6.11      2023-05-11 [1] CRAN (R 4.3.1)
    + httr           1.4.6       2023-05-08 [1] CRAN (R 4.3.1)
    + igraph         1.5.1       2023-08-10 [1] CRAN (R 4.3.1)
    + ipred          0.9-14      2023-03-09 [1] CRAN (R 4.3.0)
    + iterators      1.0.14      2022-02-05 [1] CRAN (R 4.3.0)
    + jquerylib      0.1.4       2021-04-26 [1] CRAN (R 4.3.0)
    + jsonlite       1.8.7       2023-06-29 [1] CRAN (R 4.3.0)
    + kableExtra   * 1.3.4       2021-02-20 [1] CRAN (R 4.3.0)
    + knitr          1.43        2023-05-25 [1] CRAN (R 4.3.0)
    + labeling       0.4.2       2020-10-20 [1] CRAN (R 4.3.0)
    + later          1.3.1       2023-05-02 [1] CRAN (R 4.3.1)
    + lattice        0.21-8      2023-04-05 [2] CRAN (R 4.3.0)
    + lava           1.7.2.1     2023-02-27 [1] CRAN (R 4.3.0)
    + lhs            1.1.6       2022-12-17 [1] CRAN (R 4.3.0)
    + lifecycle      1.0.3       2022-10-07 [1] CRAN (R 4.3.1)
    + listenv        0.9.0       2022-12-16 [1] CRAN (R 4.3.0)
    + lubridate      1.9.2       2023-02-10 [1] CRAN (R 4.3.0)
    + magrittr       2.0.3       2022-03-30 [1] CRAN (R 4.3.1)
    + MASS           7.3-60      2023-05-04 [2] CRAN (R 4.3.1)
    + Matrix         1.6-0       2023-07-08 [1] CRAN (R 4.3.1)
    + memoise        2.0.1       2021-11-26 [1] CRAN (R 4.3.0)
    + mgcv           1.9-0       2023-07-11 [1] CRAN (R 4.3.1)
    + mime           0.12        2021-09-28 [1] CRAN (R 4.3.0)
    + miniUI         0.1.1.1     2018-05-18 [1] CRAN (R 4.3.0)
    + modelenv       0.1.1       2023-03-08 [1] CRAN (R 4.3.0)
    + munsell        0.5.0       2018-06-12 [1] CRAN (R 4.3.0)
    + nlme           3.1-163     2023-08-09 [1] CRAN (R 4.3.1)
    + nnet           7.3-19      2023-05-03 [2] CRAN (R 4.3.1)
    + openssl        2.1.0       2023-07-15 [1] CRAN (R 4.3.1)
    + parallelly     1.36.0      2023-05-26 [1] CRAN (R 4.3.1)
    + parsnip        1.1.0       2023-04-12 [1] CRAN (R 4.3.0)
    + patchwork    * 1.1.2       2022-08-19 [1] CRAN (R 4.3.0)
    + pdp            0.8.1       2023-06-22 [1] Github (bgreenwell/pdp@4f22141)
    + pillar         1.9.0       2023-03-22 [1] CRAN (R 4.3.0)
    + pkgbuild       1.4.2       2023-06-26 [1] CRAN (R 4.3.1)
    + pkgconfig      2.0.3       2019-09-22 [1] CRAN (R 4.3.0)
    + pkgload        1.3.2.1     2023-07-08 [1] CRAN (R 4.3.1)
    + prettyunits    1.1.1       2020-01-24 [1] CRAN (R 4.3.0)
    + processx       3.8.2       2023-06-30 [1] CRAN (R 4.3.1)
    + prodlim        2023.03.31  2023-04-02 [1] CRAN (R 4.3.0)
    + profvis        0.3.8       2023-05-02 [1] CRAN (R 4.3.1)
    + promises       1.2.1       2023-08-10 [1] CRAN (R 4.3.1)
    + ps             1.7.5       2023-04-18 [1] CRAN (R 4.3.1)
    + purrr          1.0.2       2023-08-10 [1] CRAN (R 4.3.1)
    + R6             2.5.1       2021-08-19 [1] CRAN (R 4.3.1)
    + Rcpp           1.0.11      2023-07-06 [1] CRAN (R 4.3.1)
    + readr          2.1.4       2023-02-10 [1] CRAN (R 4.3.0)
    + recipes        1.0.7       2023-08-10 [1] CRAN (R 4.3.1)
    + remotes        2.4.2.1     2023-07-18 [1] CRAN (R 4.3.1)
    + renv           0.17.3      2023-04-06 [1] CRAN (R 4.3.1)
    + rlang          1.1.1       2023-04-28 [1] CRAN (R 4.3.0)
    + rmarkdown      2.23.4      2023-08-13 [1] Github (rstudio/rmarkdown@054d735)
    + rpart          4.1.19      2022-10-21 [2] CRAN (R 4.3.0)
    + rprojroot      2.0.3       2022-04-02 [1] CRAN (R 4.3.1)
    + rsample        1.1.1       2022-12-07 [1] CRAN (R 4.3.0)
    + rstudioapi     0.15.0      2023-07-07 [1] CRAN (R 4.3.1)
    + rvest          1.0.3       2022-08-19 [1] CRAN (R 4.3.0)
    + sass           0.4.7       2023-07-15 [1] CRAN (R 4.3.1)
    + scales         1.2.1       2022-08-20 [1] CRAN (R 4.3.0)
    + sessioninfo    1.2.2       2021-12-06 [1] CRAN (R 4.3.0)
    + shapviz        0.9.1       2023-07-18 [1] CRAN (R 4.3.1)
    + shiny          1.7.5       2023-08-12 [1] CRAN (R 4.3.1)
    + signal         0.7-7       2021-05-25 [1] CRAN (R 4.3.0)
    + stringi        1.7.12      2023-01-11 [1] CRAN (R 4.3.1)
    + stringr        1.5.0       2022-12-02 [1] CRAN (R 4.3.1)
    + survival       3.5-5       2023-03-12 [2] CRAN (R 4.3.1)
    + svglite        2.1.1.9000  2023-05-05 [1] Github (r-lib/svglite@6c1d359)
    + sys            3.4.2       2023-05-23 [1] CRAN (R 4.3.1)
    + systemfonts    1.0.4       2022-02-11 [1] CRAN (R 4.3.0)
    + tarchetypes  * 0.7.7       2023-06-15 [1] CRAN (R 4.3.1)
    + targets      * 1.2.2       2023-08-10 [1] CRAN (R 4.3.1)
    + tibble       * 3.2.1       2023-03-20 [1] CRAN (R 4.3.0)
    + tidyr          1.3.0       2023-01-24 [1] CRAN (R 4.3.0)
    + tidyselect     1.2.0       2022-10-10 [1] CRAN (R 4.3.0)
    + timechange     0.2.0       2023-01-11 [1] CRAN (R 4.3.0)
    + timeDate       4022.108    2023-01-07 [1] CRAN (R 4.3.0)
    + timetk         2.8.3       2023-03-30 [1] CRAN (R 4.3.0)
    + tune           1.1.1       2023-04-11 [1] CRAN (R 4.3.0)
    + tzdb           0.4.0       2023-05-12 [1] CRAN (R 4.3.1)
    + urlchecker     1.0.1       2021-11-30 [1] CRAN (R 4.3.0)
    + usethis        2.2.2.9000  2023-07-17 [1] Github (r-lib/usethis@467ff57)
    + utf8           1.2.3       2023-01-31 [1] CRAN (R 4.3.0)
    + uuid           1.1-0       2022-04-19 [1] CRAN (R 4.3.0)
    + vctrs          0.6.3       2023-06-14 [1] CRAN (R 4.3.1)
    + vip            0.4.0       2023-07-19 [1] CRAN (R 4.3.1)
    + viridisLite    0.4.2       2023-05-02 [1] CRAN (R 4.3.1)
    + visNetwork   * 2.1.2       2022-09-29 [1] CRAN (R 4.3.0)
    + vroom          1.6.3       2023-04-28 [1] CRAN (R 4.3.1)
    + webshot        0.5.5       2023-06-26 [1] CRAN (R 4.3.1)
    + whisker        0.4.1       2022-12-05 [1] CRAN (R 4.3.0)
    + withr          2.5.0       2022-03-03 [1] CRAN (R 4.3.1)
    + workflowr    * 1.7.0       2021-12-21 [1] CRAN (R 4.3.0)
    + workflows      1.1.3       2023-02-22 [1] CRAN (R 4.3.0)
    + xfun           0.40        2023-08-09 [1] CRAN (R 4.3.1)
    + xgboost        1.7.5.1     2023-03-30 [1] CRAN (R 4.3.0)
    + xml2           1.3.5       2023-07-06 [1] CRAN (R 4.3.1)
    + xtable         1.8-4       2019-04-21 [1] CRAN (R 4.3.0)
    + xts            0.13.1      2023-04-16 [1] CRAN (R 4.3.0)
    + yaml           2.3.7       2023-01-23 [1] CRAN (R 4.3.1)
    + yardstick      1.0.0.9000  2023-05-25 [1] Github (tidymodels/yardstick@90ab794)
    + zoo            1.8-12      2023-04-13 [1] CRAN (R 4.3.0)
    +
    + [1] /workspace/.cache/R/renv/proj_libs/false.alarm-d6f1a0d1/R-4.3/x86_64-pc-linux-gnu
      [2] /usr/lib/R/library
     
     ──────────────────────────────────────────────────────────────────────────────
    diff --git a/docs/regime_optimize_4.html b/docs/regime_optimize_4.html index d627597..1cd2cbb 100644 --- a/docs/regime_optimize_4.html +++ b/docs/regime_optimize_4.html @@ -30,12 +30,12 @@ code {color: inherit; background-color: rgba(0, 0, 0, 0.04);} pre:not([class]) { background-color: white } - + - - - + + + @@ -205,8 +205,8 @@ border-radius: 4px; } -.tabset-dropdown > .nav-tabs > li.active:before { - content: ""; +.tabset-dropdown > .nav-tabs > li.active:before, .tabset-dropdown > .nav-tabs.nav-tabs-open:before { + content: "\e259"; font-family: 'Glyphicons Halflings'; display: inline-block; padding: 10px; @@ -214,16 +214,9 @@ } .tabset-dropdown > .nav-tabs.nav-tabs-open > li.active:before { - content: ""; - border: none; -} - -.tabset-dropdown > .nav-tabs.nav-tabs-open:before { - content: ""; + content: "\e258"; font-family: 'Glyphicons Halflings'; - display: inline-block; - padding: 10px; - border-right: 1px solid #ddd; + border: none; } .tabset-dropdown > .nav-tabs > li.active { @@ -379,7 +372,7 @@

    Regime changes 4.0 - vtachyarrhythmias dataset

    Francisco Bischoff

    -

    on October 09, 2022

    +

    on August 13, 2023

    @@ -429,7 +422,7 @@

    on October 09, 2022

    -Last updated: 2022-10-09 +Last updated: 2023-08-13

    Checks: @@ -557,20 +550,20 @@

    on October 09, 2022

    -
    +

    Great! You are using Git for version control. Tracking code development and connecting the code version to the results is critical for reproducibility.

    -The results in this page were generated with repository version e8ce96b. +The results in this page were generated with repository version 4437e7a. See the Past versions tab to see a history of the changes made to the R Markdown and HTML files.

    @@ -592,6 +585,19 @@

    on October 09, 2022

    Ignored: .github/ISSUE_TEMPLATE/ Ignored: .httr-oauth Ignored: R/RcppExports.R + Ignored: _classifier/meta/process + Ignored: _classifier/meta/progress + Ignored: _classifier/objects/ + Ignored: _classifier/user/ + Ignored: _contrast_profile/meta/process + Ignored: _contrast_profile/meta/progress + Ignored: _contrast_profile/objects/ + Ignored: _contrast_profile/user/ + Ignored: _contrast_profile_ex/meta/process + Ignored: _contrast_profile_ex/meta/progress + Ignored: _contrast_profile_ex/objects/ + Ignored: _contrast_profile_ex/user/ + Ignored: _contrast_profile_ex/workspaces/ Ignored: _regime_change/meta/process Ignored: _regime_change/meta/progress Ignored: _regime_change/objects/ @@ -604,6 +610,10 @@

    on October 09, 2022

    Ignored: _regime_change3/meta/progress Ignored: _regime_change3/objects/ Ignored: _regime_change3/user/ + Ignored: _regime_change_2/meta/process + Ignored: _regime_change_2/meta/progress + Ignored: _regime_change_2/objects/ + Ignored: _regime_change_2/user/ Ignored: _regime_optimize/meta/meta2 Ignored: _regime_optimize/meta/process Ignored: _regime_optimize/meta/progress @@ -620,6 +630,7 @@

    on October 09, 2022

    Ignored: analysis/shiny_vtachy/rsconnect/ Ignored: dev/ Ignored: inst/extdata/ + Ignored: output/importancess.rds Ignored: papers/aime2021/aime2021.md Ignored: papers/epia2022/epia2022.md Ignored: presentations/MEDCIDS21/MEDCIDS21-10min_files/ @@ -628,8 +639,12 @@

    on October 09, 2022

    Ignored: presentations/Report/Midterm-Report_files/ Ignored: protocol/SecondReport_cache/ Ignored: protocol/SecondReport_files/ + Ignored: protocol/ThirdReport.tex + Ignored: protocol/ThirdReport_cache/ + Ignored: protocol/ThirdReport_files/ + Ignored: protocol/_extensions/ Ignored: protocol/_files/ - Ignored: renv/python/ + Ignored: protocol/figure/ Ignored: renv/staging/ Ignored: src/RcppExports.cpp Ignored: src/RcppExports.o @@ -647,6 +662,12 @@

    on October 09, 2022

    Ignored: thesis/_bookdown_files/ Ignored: tmp/ +Unstaged changes: + Modified: analysis/regime_optimize.Rmd + Modified: analysis/report.Rmd + Modified: output/importances.rds + Modified: output/importances2.rds +

    Note that any generated files, e.g. HTML, png, CSS, etc., are not included in @@ -695,7 +716,24 @@

    on October 09, 2022

    Rmd -e8ce96b +d06c64f + + +Francisco Bischoff + + +2022-10-09 + + +Squashed commit of the following: + + + + +html + + +d06c64f Francisco Bischoff @@ -704,7 +742,7 @@

    on October 09, 2022

    2022-10-09 -update optimize +Squashed commit of the following: @@ -825,8 +863,8 @@

    1 Regime changes optimization (co

    1.1 Current pipeline

    -
    - +
    +

    Figure 1.1: FLOSS pipeline.

    @@ -880,6 +918,11 @@

    1.3.1 Interactions

    equation (1.1), we see the expected interactions between regime_threshold and regime_landmark and an interaction between window_size and regime_threshold. These interactions doen’t seem to be necessary to be accounted.

    +
    Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
    +ℹ Please use `linewidth` instead.
    +This warning is displayed once every 8 hours.
    +Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
    +generated.
    Variable interactions strength using feature importance ranking measure (FIRM) approach [@Greenwell2018]. Shows some interaction between `regime_threshold` and `regime_landmark` and `window_size` and `regime_threshold`.

    @@ -1044,6 +1087,13 @@

    1.4.1 By recording

    Next, we will visualize some of these predictions to understand why some recordings were difficult to segment. For us to have a simple baseline: a recording with just one regime change, and the model predicts exactly one regime change, but far from the truth, the score will be roughly 1.

    +
    Warning: Returning more (or less) than 1 row per `summarise()` group was deprecated in
    +dplyr 1.1.0.
    +ℹ Please use `reframe()` instead.
    +ℹ When switching from `summarise()` to `reframe()`, remember that `reframe()`
    +  always returns an ungrouped data frame and adjust accordingly.
    +Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
    +generated.
    Violin plot showing the distribution of the FLOSS score achieved by all tested models by recording.  The left half shows the recordings that were difficult to predict (50% overall), whereas the right half shows the recordings that at least one model could achieve a good prediction (50% overall).  The recordings are sorted (left-right) by the minimum (best) score achieved in descending order, and ties are sorted by the median of all recording scores.  The blue color highlights recordings where models had an IQR variability of less than one.  As a simple example, a recording with just one regime change, and the model predicts exactly one change, far from the truth, the score will be roughly 1.

    @@ -1187,6 +1237,13 @@

    1.4.2 By model

    across the recordings (right side). The bluish color highlights the models with SD below 3 and IQR below 1.

    Here again, we can compare with the previous article and see an improvement in the performance, as the models present lower SD and IQR.

    +
    Warning: Returning more (or less) than 1 row per `summarise()` group was deprecated in
    +dplyr 1.1.0.
    +ℹ Please use `reframe()` instead.
    +ℹ When switching from `summarise()` to `reframe()`, remember that `reframe()`
    +  always returns an ungrouped data frame and adjust accordingly.
    +Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
    +generated.
    Violin plot showing the distribution of the FLOSS score achieved by all tested models during the inner ressample.  The left half shows the models with the worst performances (top 10), whereas the right half shows the models with the best performances (top 10). The models are sorted (left-right) by the mean score (top) and by the median (below). Ties are sorted by the SD and IQR, respectively.  The bluish colors highlights models with an SD below 1 and IQR below 1.

    @@ -1306,176 +1363,177 @@

    References

    ─ Session info ───────────────────────────────────────────────────────────────
      setting  value
    - version  R version 4.2.1 (2022-06-23)
    - os       Ubuntu 20.04.5 LTS
    + version  R version 4.3.1 (2023-06-16)
    + os       Ubuntu 22.04.2 LTS
      system   x86_64, linux-gnu
      ui       X11
      language (EN)
      collate  en_US.UTF-8
      ctype    en_US.UTF-8
      tz       Europe/Lisbon
    - date     2022-10-09
    + date     2023-08-13
      pandoc   2.17.0.1 @ /usr/bin/ (via rmarkdown)
     
     ─ Packages ───────────────────────────────────────────────────────────────────
      package      * version     date (UTC) lib source
    - askpass        1.1         2019-01-13 [1] CRAN (R 4.2.0)
    - assertthat     0.2.1       2019-03-21 [1] CRAN (R 4.2.0)
    - backports      1.4.1       2021-12-13 [1] CRAN (R 4.2.0)
    - base64url      1.4         2018-05-14 [1] CRAN (R 4.2.0)
    - bit            4.0.4       2020-08-04 [1] CRAN (R 4.2.0)
    - bit64          4.0.5       2020-08-30 [1] CRAN (R 4.2.0)
    - bookdown       0.29.2      2022-09-26 [1] Github (rstudio/bookdown@dfe92a2)
    - bslib          0.4.0       2022-07-16 [1] CRAN (R 4.2.1)
    - cachem         1.0.6       2021-08-19 [1] CRAN (R 4.2.0)
    - callr          3.7.2       2022-08-22 [1] CRAN (R 4.2.1)
    - checkmate      2.1.0       2022-04-21 [1] CRAN (R 4.2.0)
    - class          7.3-20      2022-01-13 [2] CRAN (R 4.2.0)
    - cli            3.4.1       2022-09-23 [1] CRAN (R 4.2.1)
    - codetools      0.2-18      2020-11-04 [2] CRAN (R 4.2.0)
    - colorspace     2.0-3       2022-02-21 [1] CRAN (R 4.2.0)
    - crayon         1.5.1       2022-03-26 [1] CRAN (R 4.2.0)
    - credentials    1.3.2       2021-11-29 [1] CRAN (R 4.2.0)
    - data.table     1.14.2      2021-09-27 [1] CRAN (R 4.2.0)
    - dbarts         0.9-22      2022-03-29 [1] CRAN (R 4.2.0)
    - DBI            1.1.3       2022-06-18 [1] CRAN (R 4.2.0)
    - debugme        1.1.0       2017-10-22 [1] CRAN (R 4.2.0)
    - devtools       2.4.4       2022-07-20 [1] CRAN (R 4.2.1)
    - dials          1.0.0       2022-06-14 [1] CRAN (R 4.2.0)
    - DiceDesign     1.9         2021-02-13 [1] CRAN (R 4.2.0)
    - digest         0.6.29      2021-12-01 [1] CRAN (R 4.2.0)
    - dplyr          1.0.10      2022-09-01 [1] CRAN (R 4.2.1)
    - ellipsis       0.3.2       2021-04-29 [1] CRAN (R 4.2.0)
    - evaluate       0.16        2022-08-09 [1] CRAN (R 4.2.1)
    - fansi          1.0.3       2022-03-24 [1] CRAN (R 4.2.0)
    - farver         2.1.1       2022-07-06 [1] CRAN (R 4.2.0)
    - fastmap        1.1.0       2021-01-25 [1] CRAN (R 4.2.0)
    - fastshap       0.0.7       2021-12-06 [1] CRAN (R 4.2.0)
    - forcats        0.5.2       2022-08-19 [2] CRAN (R 4.2.1)
    - foreach        1.5.2       2022-02-02 [1] CRAN (R 4.2.0)
    - fs             1.5.2       2021-12-08 [1] CRAN (R 4.2.0)
    - furrr          0.3.1       2022-08-15 [1] CRAN (R 4.2.1)
    - future         1.28.0      2022-09-02 [1] CRAN (R 4.2.1)
    - future.apply   1.9.1       2022-09-07 [1] CRAN (R 4.2.1)
    - generics       0.1.3       2022-07-05 [1] CRAN (R 4.2.0)
    - gert           1.9.0       2022-09-15 [1] CRAN (R 4.2.1)
    - getPass        0.2-2       2017-07-21 [1] CRAN (R 4.2.0)
    - ggplot2      * 3.3.6       2022-05-03 [1] CRAN (R 4.2.0)
    - git2r          0.30.1.9000 2022-04-29 [1] Github (ropensci/git2r@80ba185)
    - gittargets   * 0.0.5.9000  2022-09-26 [1] Github (wlandau/gittargets@a50dd58)
    - globals        0.16.1      2022-08-28 [1] CRAN (R 4.2.1)
    - glue         * 1.6.2       2022-02-24 [1] CRAN (R 4.2.0)
    - gower          1.0.0       2022-02-03 [1] CRAN (R 4.2.0)
    - GPfit          1.0-8       2019-02-08 [1] CRAN (R 4.2.0)
    - gridExtra      2.3         2017-09-09 [1] CRAN (R 4.2.0)
    - gtable         0.3.1       2022-09-01 [1] CRAN (R 4.2.1)
    - hardhat        1.2.0       2022-06-30 [1] CRAN (R 4.2.0)
    - here         * 1.0.1       2020-12-13 [1] CRAN (R 4.2.0)
    - highr          0.9         2021-04-16 [1] CRAN (R 4.2.0)
    - hms            1.1.2       2022-08-19 [1] CRAN (R 4.2.1)
    - htmltools      0.5.3       2022-07-18 [1] CRAN (R 4.2.1)
    - htmlwidgets    1.5.4       2021-09-08 [1] CRAN (R 4.2.0)
    - httpuv         1.6.6       2022-09-08 [1] CRAN (R 4.2.1)
    - httr           1.4.4       2022-08-17 [1] CRAN (R 4.2.1)
    - igraph         1.3.5       2022-09-22 [1] CRAN (R 4.2.1)
    - ipred          0.9-13      2022-06-02 [1] CRAN (R 4.2.0)
    - iterators      1.0.14      2022-02-05 [1] CRAN (R 4.2.0)
    - jquerylib      0.1.4       2021-04-26 [1] CRAN (R 4.2.0)
    - jsonlite       1.8.0       2022-02-22 [1] CRAN (R 4.2.0)
    - kableExtra   * 1.3.4       2021-02-20 [1] CRAN (R 4.2.0)
    - knitr          1.40        2022-08-24 [1] CRAN (R 4.2.1)
    - labeling       0.4.2       2020-10-20 [1] CRAN (R 4.2.0)
    - later          1.3.0       2021-08-18 [1] CRAN (R 4.2.0)
    - lattice        0.20-45     2021-09-22 [2] CRAN (R 4.2.0)
    - lava           1.6.10      2021-09-02 [1] CRAN (R 4.2.0)
    - lhs            1.1.5       2022-03-22 [1] CRAN (R 4.2.0)
    - lifecycle      1.0.2       2022-09-09 [1] CRAN (R 4.2.1)
    - listenv        0.8.0       2019-12-05 [1] CRAN (R 4.2.0)
    - lubridate      1.8.0       2021-10-07 [1] CRAN (R 4.2.0)
    - magrittr       2.0.3       2022-03-30 [1] CRAN (R 4.2.0)
    - MASS           7.3-58.1    2022-08-03 [1] CRAN (R 4.2.1)
    - Matrix         1.5-1       2022-09-13 [2] CRAN (R 4.2.1)
    - memoise        2.0.1       2021-11-26 [1] CRAN (R 4.2.0)
    - mgcv           1.8-40      2022-03-29 [2] CRAN (R 4.2.0)
    - mime           0.12        2021-09-28 [1] CRAN (R 4.2.0)
    - miniUI         0.1.1.1     2018-05-18 [1] CRAN (R 4.2.0)
    - munsell        0.5.0       2018-06-12 [1] CRAN (R 4.2.0)
    - nlme           3.1-159     2022-08-09 [1] CRAN (R 4.2.1)
    - nnet           7.3-18      2022-09-28 [2] CRAN (R 4.2.1)
    - openssl        2.0.3       2022-09-14 [1] CRAN (R 4.2.1)
    - parallelly     1.32.1      2022-07-21 [1] CRAN (R 4.2.1)
    - parsnip        1.0.1       2022-08-18 [1] CRAN (R 4.2.1)
    - patchwork    * 1.1.2       2022-08-19 [1] CRAN (R 4.2.1)
    - pdp            0.8.1       2022-06-07 [1] CRAN (R 4.2.0)
    - pillar         1.8.1       2022-08-19 [1] CRAN (R 4.2.1)
    - pkgbuild       1.3.1       2021-12-20 [1] CRAN (R 4.2.0)
    - pkgconfig      2.0.3       2019-09-22 [1] CRAN (R 4.2.0)
    - pkgload        1.3.0       2022-06-27 [1] CRAN (R 4.2.0)
    - prettyunits    1.1.1       2020-01-24 [1] CRAN (R 4.2.0)
    - processx       3.7.0       2022-07-07 [1] CRAN (R 4.2.1)
    - prodlim        2019.11.13  2019-11-17 [1] CRAN (R 4.2.0)
    - profvis        0.3.7       2020-11-02 [1] CRAN (R 4.2.1)
    - promises       1.2.0.1     2021-02-11 [1] CRAN (R 4.2.0)
    - ps             1.7.1       2022-06-18 [1] CRAN (R 4.2.0)
    - purrr          0.3.4       2020-04-17 [1] CRAN (R 4.2.0)
    - R6             2.5.1       2021-08-19 [1] CRAN (R 4.2.0)
    - Rcpp           1.0.9       2022-07-08 [1] CRAN (R 4.2.1)
    - readr          2.1.2       2022-01-30 [1] CRAN (R 4.2.0)
    - recipes        1.0.1       2022-07-07 [1] CRAN (R 4.2.1)
    - remotes        2.4.2       2021-11-30 [1] CRAN (R 4.2.0)
    - renv           0.15.5      2022-05-26 [1] CRAN (R 4.2.0)
    - rlang          1.0.6       2022-09-24 [1] CRAN (R 4.2.1)
    - rmarkdown      2.16.1      2022-09-26 [1] Github (rstudio/rmarkdown@9577707)
    - rpart          4.1.16      2022-01-24 [2] CRAN (R 4.2.0)
    - rprojroot      2.0.3       2022-04-02 [1] CRAN (R 4.2.0)
    - rsample        1.1.0       2022-08-08 [1] CRAN (R 4.2.1)
    - rstudioapi     0.14        2022-08-22 [1] CRAN (R 4.2.1)
    - rvest          1.0.3       2022-08-19 [1] CRAN (R 4.2.1)
    - sass           0.4.2       2022-07-16 [1] CRAN (R 4.2.1)
    - scales         1.2.1       2022-08-20 [1] CRAN (R 4.2.1)
    - sessioninfo    1.2.2       2021-12-06 [1] CRAN (R 4.2.0)
    - shapviz        0.2.1       2022-08-11 [1] CRAN (R 4.2.1)
    - shiny          1.7.2       2022-07-19 [1] CRAN (R 4.2.1)
    - signal         0.7-7       2021-05-25 [1] CRAN (R 4.2.0)
    - stringi        1.7.8       2022-07-11 [1] CRAN (R 4.2.1)
    - stringr        1.4.1       2022-08-20 [1] CRAN (R 4.2.1)
    - survival       3.4-0       2022-08-09 [2] CRAN (R 4.2.1)
    - svglite        2.1.0.9000  2022-09-26 [1] Github (r-lib/svglite@8f30fc6)
    - sys            3.4         2020-07-23 [1] CRAN (R 4.2.0)
    - systemfonts    1.0.4       2022-02-11 [1] CRAN (R 4.2.0)
    - tarchetypes  * 0.7.1       2022-09-07 [1] CRAN (R 4.2.1)
    - targets      * 0.13.4      2022-09-15 [1] CRAN (R 4.2.1)
    - tibble       * 3.1.8       2022-07-22 [1] CRAN (R 4.2.1)
    - tidyr          1.2.1       2022-09-08 [1] CRAN (R 4.2.1)
    - tidyselect     1.1.2       2022-02-21 [1] CRAN (R 4.2.0)
    - timeDate       4021.104    2022-07-19 [1] CRAN (R 4.2.1)
    - timetk         2.8.1       2022-05-31 [1] CRAN (R 4.2.0)
    - tune           1.0.0.9000  2022-07-22 [1] Github (franzbischoff/tune@539e1ee)
    - tzdb           0.3.0       2022-03-28 [1] CRAN (R 4.2.0)
    - urlchecker     1.0.1       2021-11-30 [1] CRAN (R 4.2.1)
    - usethis        2.1.6.9000  2022-10-03 [1] Github (r-lib/usethis@8ecb7ab)
    - utf8           1.2.2       2021-07-24 [1] CRAN (R 4.2.0)
    - uuid           1.1-0       2022-04-19 [1] CRAN (R 4.2.0)
    - vctrs          0.4.1       2022-04-13 [1] CRAN (R 4.2.0)
    - vip            0.3.2       2020-12-17 [1] CRAN (R 4.2.0)
    - viridisLite    0.4.1       2022-08-22 [1] CRAN (R 4.2.1)
    - visNetwork   * 2.1.0       2021-09-29 [1] CRAN (R 4.2.0)
    - vroom          1.5.7       2021-11-30 [1] CRAN (R 4.2.0)
    - webshot        0.5.3       2022-04-14 [1] CRAN (R 4.2.0)
    - whisker        0.4         2019-08-28 [1] CRAN (R 4.2.0)
    - withr          2.5.0       2022-03-03 [1] CRAN (R 4.2.0)
    - workflowr    * 1.7.0       2021-12-21 [1] CRAN (R 4.2.0)
    - workflows      1.1.0       2022-09-26 [1] CRAN (R 4.2.1)
    - xfun           0.33        2022-09-12 [1] CRAN (R 4.2.1)
    - xgboost        1.6.0.1     2022-04-16 [1] CRAN (R 4.2.0)
    - xml2           1.3.3       2021-11-30 [1] CRAN (R 4.2.0)
    - xtable         1.8-4       2019-04-21 [1] CRAN (R 4.2.0)
    - xts            0.12.1      2020-09-09 [1] CRAN (R 4.2.0)
    - yaml           2.3.5       2022-02-21 [1] CRAN (R 4.2.0)
    - yardstick      1.1.0       2022-09-07 [1] CRAN (R 4.2.1)
    - zoo            1.8-11      2022-09-17 [1] CRAN (R 4.2.1)
    -
    - [1] /workspace/.cache/R/renv/proj_libs/false.alarm-d6f1a0d1/R-4.2/x86_64-pc-linux-gnu
    + askpass        1.1         2019-01-13 [1] CRAN (R 4.3.0)
    + backports      1.4.1       2021-12-13 [1] CRAN (R 4.3.1)
    + base64url      1.4         2018-05-14 [1] CRAN (R 4.3.0)
    + bit            4.0.5       2022-11-15 [1] CRAN (R 4.3.0)
    + bit64          4.0.5       2020-08-30 [1] CRAN (R 4.3.0)
    + bookdown       0.35.1      2023-08-13 [1] Github (rstudio/bookdown@661567e)
    + bslib          0.5.1       2023-08-11 [1] CRAN (R 4.3.1)
    + cachem         1.0.8       2023-05-01 [1] CRAN (R 4.3.0)
    + callr          3.7.3       2022-11-02 [1] CRAN (R 4.3.1)
    + checkmate      2.2.0       2023-04-27 [1] CRAN (R 4.3.0)
    + class          7.3-22      2023-05-03 [2] CRAN (R 4.3.1)
    + cli            3.6.1       2023-03-23 [1] CRAN (R 4.3.1)
    + codetools      0.2-19      2023-02-01 [2] CRAN (R 4.3.0)
    + colorspace     2.1-0       2023-01-23 [1] CRAN (R 4.3.0)
    + crayon         1.5.2       2022-09-29 [1] CRAN (R 4.3.1)
    + credentials    1.3.2       2021-11-29 [1] CRAN (R 4.3.0)
    + data.table     1.14.8      2023-02-17 [1] CRAN (R 4.3.0)
    + dbarts         0.9-23      2023-01-23 [1] CRAN (R 4.3.0)
    + debugme        1.1.0       2017-10-22 [1] CRAN (R 4.3.0)
    + devtools       2.4.5       2022-10-11 [1] CRAN (R 4.3.0)
    + dials          1.2.0       2023-04-03 [1] CRAN (R 4.3.0)
    + DiceDesign     1.9         2021-02-13 [1] CRAN (R 4.3.0)
    + digest         0.6.33      2023-07-07 [1] CRAN (R 4.3.1)
    + dplyr          1.1.2       2023-04-20 [1] CRAN (R 4.3.0)
    + ellipsis       0.3.2       2021-04-29 [1] CRAN (R 4.3.0)
    + evaluate       0.21        2023-05-05 [1] CRAN (R 4.3.0)
    + fansi          1.0.4       2023-01-22 [1] CRAN (R 4.3.0)
    + farver         2.1.1       2022-07-06 [1] CRAN (R 4.3.0)
    + fastmap        1.1.1       2023-02-24 [1] CRAN (R 4.3.0)
    + fastshap       0.0.7       2021-12-06 [1] CRAN (R 4.3.0)
    + forcats        1.0.0       2023-01-29 [1] CRAN (R 4.3.0)
    + foreach        1.5.2       2022-02-02 [1] CRAN (R 4.3.0)
    + fs             1.6.3       2023-07-20 [1] CRAN (R 4.3.1)
    + furrr          0.3.1       2022-08-15 [1] CRAN (R 4.3.0)
    + future         1.33.0      2023-07-01 [1] CRAN (R 4.3.1)
    + future.apply   1.11.0      2023-05-21 [1] CRAN (R 4.3.1)
    + future.callr   0.8.2       2023-08-09 [1] CRAN (R 4.3.1)
    + generics       0.1.3       2022-07-05 [1] CRAN (R 4.3.0)
    + gert           1.9.3       2023-08-07 [1] CRAN (R 4.3.1)
    + getPass        0.2-2       2017-07-21 [1] CRAN (R 4.3.0)
    + ggplot2      * 3.4.2       2023-04-03 [1] CRAN (R 4.3.0)
    + git2r          0.32.0.9000 2023-06-30 [1] Github (ropensci/git2r@9c42d41)
    + gittargets   * 0.0.6.9000  2023-05-05 [1] Github (wlandau/gittargets@2d448ff)
    + globals        0.16.2      2022-11-21 [1] CRAN (R 4.3.0)
    + glue         * 1.6.2       2022-02-24 [1] CRAN (R 4.3.1)
    + gower          1.0.1       2022-12-22 [1] CRAN (R 4.3.0)
    + GPfit          1.0-8       2019-02-08 [1] CRAN (R 4.3.0)
    + gridExtra      2.3         2017-09-09 [1] CRAN (R 4.3.0)
    + gtable         0.3.3       2023-03-21 [1] CRAN (R 4.3.0)
    + hardhat        1.3.0       2023-03-30 [1] CRAN (R 4.3.0)
    + here         * 1.0.1       2020-12-13 [1] CRAN (R 4.3.0)
    + highr          0.10        2022-12-22 [1] CRAN (R 4.3.1)
    + hms            1.1.3       2023-03-21 [1] CRAN (R 4.3.0)
    + htmltools      0.5.6       2023-08-10 [1] CRAN (R 4.3.1)
    + htmlwidgets    1.6.2       2023-03-17 [1] CRAN (R 4.3.0)
    + httpuv         1.6.11      2023-05-11 [1] CRAN (R 4.3.1)
    + httr           1.4.6       2023-05-08 [1] CRAN (R 4.3.1)
    + igraph         1.5.1       2023-08-10 [1] CRAN (R 4.3.1)
    + ipred          0.9-14      2023-03-09 [1] CRAN (R 4.3.0)
    + iterators      1.0.14      2022-02-05 [1] CRAN (R 4.3.0)
    + jquerylib      0.1.4       2021-04-26 [1] CRAN (R 4.3.0)
    + jsonlite       1.8.7       2023-06-29 [1] CRAN (R 4.3.0)
    + kableExtra   * 1.3.4       2021-02-20 [1] CRAN (R 4.3.0)
    + knitr          1.43        2023-05-25 [1] CRAN (R 4.3.0)
    + labeling       0.4.2       2020-10-20 [1] CRAN (R 4.3.0)
    + later          1.3.1       2023-05-02 [1] CRAN (R 4.3.1)
    + lattice        0.21-8      2023-04-05 [2] CRAN (R 4.3.0)
    + lava           1.7.2.1     2023-02-27 [1] CRAN (R 4.3.0)
    + lhs            1.1.6       2022-12-17 [1] CRAN (R 4.3.0)
    + lifecycle      1.0.3       2022-10-07 [1] CRAN (R 4.3.1)
    + listenv        0.9.0       2022-12-16 [1] CRAN (R 4.3.0)
    + lubridate      1.9.2       2023-02-10 [1] CRAN (R 4.3.0)
    + magrittr       2.0.3       2022-03-30 [1] CRAN (R 4.3.1)
    + MASS           7.3-60      2023-05-04 [2] CRAN (R 4.3.1)
    + Matrix         1.6-0       2023-07-08 [1] CRAN (R 4.3.1)
    + memoise        2.0.1       2021-11-26 [1] CRAN (R 4.3.0)
    + mgcv           1.9-0       2023-07-11 [1] CRAN (R 4.3.1)
    + mime           0.12        2021-09-28 [1] CRAN (R 4.3.0)
    + miniUI         0.1.1.1     2018-05-18 [1] CRAN (R 4.3.0)
    + modelenv       0.1.1       2023-03-08 [1] CRAN (R 4.3.0)
    + munsell        0.5.0       2018-06-12 [1] CRAN (R 4.3.0)
    + nlme           3.1-163     2023-08-09 [1] CRAN (R 4.3.1)
    + nnet           7.3-19      2023-05-03 [2] CRAN (R 4.3.1)
    + openssl        2.1.0       2023-07-15 [1] CRAN (R 4.3.1)
    + parallelly     1.36.0      2023-05-26 [1] CRAN (R 4.3.1)
    + parsnip        1.1.0       2023-04-12 [1] CRAN (R 4.3.0)
    + patchwork    * 1.1.2       2022-08-19 [1] CRAN (R 4.3.0)
    + pdp            0.8.1       2023-06-22 [1] Github (bgreenwell/pdp@4f22141)
    + pillar         1.9.0       2023-03-22 [1] CRAN (R 4.3.0)
    + pkgbuild       1.4.2       2023-06-26 [1] CRAN (R 4.3.1)
    + pkgconfig      2.0.3       2019-09-22 [1] CRAN (R 4.3.0)
    + pkgload        1.3.2.1     2023-07-08 [1] CRAN (R 4.3.1)
    + prettyunits    1.1.1       2020-01-24 [1] CRAN (R 4.3.0)
    + processx       3.8.2       2023-06-30 [1] CRAN (R 4.3.1)
    + prodlim        2023.03.31  2023-04-02 [1] CRAN (R 4.3.0)
    + profvis        0.3.8       2023-05-02 [1] CRAN (R 4.3.1)
    + promises       1.2.1       2023-08-10 [1] CRAN (R 4.3.1)
    + ps             1.7.5       2023-04-18 [1] CRAN (R 4.3.1)
    + purrr          1.0.2       2023-08-10 [1] CRAN (R 4.3.1)
    + R6             2.5.1       2021-08-19 [1] CRAN (R 4.3.1)
    + Rcpp           1.0.11      2023-07-06 [1] CRAN (R 4.3.1)
    + readr          2.1.4       2023-02-10 [1] CRAN (R 4.3.0)
    + recipes        1.0.7       2023-08-10 [1] CRAN (R 4.3.1)
    + remotes        2.4.2.1     2023-07-18 [1] CRAN (R 4.3.1)
    + renv           0.17.3      2023-04-06 [1] CRAN (R 4.3.1)
    + rlang          1.1.1       2023-04-28 [1] CRAN (R 4.3.0)
    + rmarkdown      2.23.4      2023-08-13 [1] Github (rstudio/rmarkdown@054d735)
    + rpart          4.1.19      2022-10-21 [2] CRAN (R 4.3.0)
    + rprojroot      2.0.3       2022-04-02 [1] CRAN (R 4.3.1)
    + rsample        1.1.1       2022-12-07 [1] CRAN (R 4.3.0)
    + rstudioapi     0.15.0      2023-07-07 [1] CRAN (R 4.3.1)
    + rvest          1.0.3       2022-08-19 [1] CRAN (R 4.3.0)
    + sass           0.4.7       2023-07-15 [1] CRAN (R 4.3.1)
    + scales         1.2.1       2022-08-20 [1] CRAN (R 4.3.0)
    + sessioninfo    1.2.2       2021-12-06 [1] CRAN (R 4.3.0)
    + shapviz        0.9.1       2023-07-18 [1] CRAN (R 4.3.1)
    + shiny          1.7.5       2023-08-12 [1] CRAN (R 4.3.1)
    + signal         0.7-7       2021-05-25 [1] CRAN (R 4.3.0)
    + stringi        1.7.12      2023-01-11 [1] CRAN (R 4.3.1)
    + stringr        1.5.0       2022-12-02 [1] CRAN (R 4.3.1)
    + survival       3.5-5       2023-03-12 [2] CRAN (R 4.3.1)
    + svglite        2.1.1.9000  2023-05-05 [1] Github (r-lib/svglite@6c1d359)
    + sys            3.4.2       2023-05-23 [1] CRAN (R 4.3.1)
    + systemfonts    1.0.4       2022-02-11 [1] CRAN (R 4.3.0)
    + tarchetypes  * 0.7.7       2023-06-15 [1] CRAN (R 4.3.1)
    + targets      * 1.2.2       2023-08-10 [1] CRAN (R 4.3.1)
    + tibble       * 3.2.1       2023-03-20 [1] CRAN (R 4.3.0)
    + tidyr          1.3.0       2023-01-24 [1] CRAN (R 4.3.0)
    + tidyselect     1.2.0       2022-10-10 [1] CRAN (R 4.3.0)
    + timechange     0.2.0       2023-01-11 [1] CRAN (R 4.3.0)
    + timeDate       4022.108    2023-01-07 [1] CRAN (R 4.3.0)
    + timetk         2.8.3       2023-03-30 [1] CRAN (R 4.3.0)
    + tune           1.1.1       2023-04-11 [1] CRAN (R 4.3.0)
    + tzdb           0.4.0       2023-05-12 [1] CRAN (R 4.3.1)
    + urlchecker     1.0.1       2021-11-30 [1] CRAN (R 4.3.0)
    + usethis        2.2.2.9000  2023-07-17 [1] Github (r-lib/usethis@467ff57)
    + utf8           1.2.3       2023-01-31 [1] CRAN (R 4.3.0)
    + uuid           1.1-0       2022-04-19 [1] CRAN (R 4.3.0)
    + vctrs          0.6.3       2023-06-14 [1] CRAN (R 4.3.1)
    + vip            0.4.0       2023-07-19 [1] CRAN (R 4.3.1)
    + viridisLite    0.4.2       2023-05-02 [1] CRAN (R 4.3.1)
    + visNetwork   * 2.1.2       2022-09-29 [1] CRAN (R 4.3.0)
    + vroom          1.6.3       2023-04-28 [1] CRAN (R 4.3.1)
    + webshot        0.5.5       2023-06-26 [1] CRAN (R 4.3.1)
    + whisker        0.4.1       2022-12-05 [1] CRAN (R 4.3.0)
    + withr          2.5.0       2022-03-03 [1] CRAN (R 4.3.1)
    + workflowr    * 1.7.0       2021-12-21 [1] CRAN (R 4.3.0)
    + workflows      1.1.3       2023-02-22 [1] CRAN (R 4.3.0)
    + xfun           0.40        2023-08-09 [1] CRAN (R 4.3.1)
    + xgboost        1.7.5.1     2023-03-30 [1] CRAN (R 4.3.0)
    + xml2           1.3.5       2023-07-06 [1] CRAN (R 4.3.1)
    + xtable         1.8-4       2019-04-21 [1] CRAN (R 4.3.0)
    + xts            0.13.1      2023-04-16 [1] CRAN (R 4.3.0)
    + yaml           2.3.7       2023-01-23 [1] CRAN (R 4.3.1)
    + yardstick      1.0.0.9000  2023-05-25 [1] Github (tidymodels/yardstick@90ab794)
    + zoo            1.8-12      2023-04-13 [1] CRAN (R 4.3.0)
    +
    + [1] /workspace/.cache/R/renv/proj_libs/false.alarm-d6f1a0d1/R-4.3/x86_64-pc-linux-gnu
      [2] /usr/lib/R/library
     
     ──────────────────────────────────────────────────────────────────────────────
    diff --git a/docs/regime_optimize_4_5.html b/docs/regime_optimize_4_5.html index 5140208..adc4d82 100644 --- a/docs/regime_optimize_4_5.html +++ b/docs/regime_optimize_4_5.html @@ -30,12 +30,12 @@ code {color: inherit; background-color: rgba(0, 0, 0, 0.04);} pre:not([class]) { background-color: white } - + - - - + + + @@ -205,8 +205,8 @@ border-radius: 4px; } -.tabset-dropdown > .nav-tabs > li.active:before { - content: ""; +.tabset-dropdown > .nav-tabs > li.active:before, .tabset-dropdown > .nav-tabs.nav-tabs-open:before { + content: "\e259"; font-family: 'Glyphicons Halflings'; display: inline-block; padding: 10px; @@ -214,16 +214,9 @@ } .tabset-dropdown > .nav-tabs.nav-tabs-open > li.active:before { - content: ""; - border: none; -} - -.tabset-dropdown > .nav-tabs.nav-tabs-open:before { - content: ""; + content: "\e258"; font-family: 'Glyphicons Halflings'; - display: inline-block; - padding: 10px; - border-right: 1px solid #ddd; + border: none; } .tabset-dropdown > .nav-tabs > li.active { @@ -379,7 +372,7 @@

    Regime changes 4.5 - vtachyarrhythmias with PR

    Francisco Bischoff

    -

    on October 09, 2022

    +

    on August 13, 2023

    @@ -429,7 +422,7 @@

    on October 09, 2022

    -Last updated: 2022-10-09 +Last updated: 2023-08-13

    Checks: @@ -557,20 +550,20 @@

    on October 09, 2022

    -
    +

    Great! You are using Git for version control. Tracking code development and connecting the code version to the results is critical for reproducibility.

    -The results in this page were generated with repository version e8ce96b. +The results in this page were generated with repository version 4437e7a. See the Past versions tab to see a history of the changes made to the R Markdown and HTML files.

    @@ -592,6 +585,19 @@

    on October 09, 2022

    Ignored: .github/ISSUE_TEMPLATE/ Ignored: .httr-oauth Ignored: R/RcppExports.R + Ignored: _classifier/meta/process + Ignored: _classifier/meta/progress + Ignored: _classifier/objects/ + Ignored: _classifier/user/ + Ignored: _contrast_profile/meta/process + Ignored: _contrast_profile/meta/progress + Ignored: _contrast_profile/objects/ + Ignored: _contrast_profile/user/ + Ignored: _contrast_profile_ex/meta/process + Ignored: _contrast_profile_ex/meta/progress + Ignored: _contrast_profile_ex/objects/ + Ignored: _contrast_profile_ex/user/ + Ignored: _contrast_profile_ex/workspaces/ Ignored: _regime_change/meta/process Ignored: _regime_change/meta/progress Ignored: _regime_change/objects/ @@ -604,6 +610,10 @@

    on October 09, 2022

    Ignored: _regime_change3/meta/progress Ignored: _regime_change3/objects/ Ignored: _regime_change3/user/ + Ignored: _regime_change_2/meta/process + Ignored: _regime_change_2/meta/progress + Ignored: _regime_change_2/objects/ + Ignored: _regime_change_2/user/ Ignored: _regime_optimize/meta/meta2 Ignored: _regime_optimize/meta/process Ignored: _regime_optimize/meta/progress @@ -620,6 +630,7 @@

    on October 09, 2022

    Ignored: analysis/shiny_vtachy/rsconnect/ Ignored: dev/ Ignored: inst/extdata/ + Ignored: output/importancess.rds Ignored: papers/aime2021/aime2021.md Ignored: papers/epia2022/epia2022.md Ignored: presentations/MEDCIDS21/MEDCIDS21-10min_files/ @@ -628,8 +639,12 @@

    on October 09, 2022

    Ignored: presentations/Report/Midterm-Report_files/ Ignored: protocol/SecondReport_cache/ Ignored: protocol/SecondReport_files/ + Ignored: protocol/ThirdReport.tex + Ignored: protocol/ThirdReport_cache/ + Ignored: protocol/ThirdReport_files/ + Ignored: protocol/_extensions/ Ignored: protocol/_files/ - Ignored: renv/python/ + Ignored: protocol/figure/ Ignored: renv/staging/ Ignored: src/RcppExports.cpp Ignored: src/RcppExports.o @@ -647,6 +662,12 @@

    on October 09, 2022

    Ignored: thesis/_bookdown_files/ Ignored: tmp/ +Unstaged changes: + Modified: analysis/regime_optimize.Rmd + Modified: analysis/report.Rmd + Modified: output/importances.rds + Modified: output/importances2.rds +

    Note that any generated files, e.g. HTML, png, CSS, etc., are not included in @@ -695,7 +716,24 @@

    on October 09, 2022

    Rmd -e8ce96b +d06c64f + + +Francisco Bischoff + + +2022-10-09 + + +Squashed commit of the following: + + + + +html + + +d06c64f Francisco Bischoff @@ -704,7 +742,7 @@

    on October 09, 2022

    2022-10-09 -update optimize +Squashed commit of the following: @@ -765,8 +803,8 @@

    1 Regime changes optimization (co

    1.1 Current pipeline

    -
    - +
    +

    Figure 1.1: FLOSS pipeline.

    @@ -818,6 +856,11 @@

    1.3.1 Interactions

    Fig. 1.2 shows the variable interaction strength between pairs of variables. That allows us to verify if there are any significant interactions between the variables. Here we see that the interaction between variables are minimal.

    +
    Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
    +ℹ Please use `linewidth` instead.
    +This warning is displayed once every 8 hours.
    +Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
    +generated.
    Variable interactions strength using feature importance ranking measure (FIRM) approach [@Greenwell2018]. Shows almost no interaction between the variables.

    @@ -848,6 +891,17 @@

    1.3.1 Interactions

    +d06c64f + + +Francisco Bischoff + + +2022-10-09 + + + + f9f551d @@ -906,6 +960,17 @@

    1.3.3 Importance analysis

    +d06c64f + + +Francisco Bischoff + + +2022-10-09 + + + + f9f551d @@ -956,6 +1021,17 @@

    1.3.3 Importance analysis

    +d06c64f + + +Francisco Bischoff + + +2022-10-09 + + + + f9f551d @@ -980,6 +1056,13 @@

    1.4.1 By recording

    recordings with a small IQR (interquartile range) of model scores. We see on the left half 50% of the recordings with the worst minimum score, and on the right half, 50% of the recordings with the best minimum score.

    Next, we will visualize some of these predictions to understand why some recordings were difficult to segment.

    +
    Warning: Returning more (or less) than 1 row per `summarise()` group was deprecated in
    +dplyr 1.1.0.
    +ℹ Please use `reframe()` instead.
    +ℹ When switching from `summarise()` to `reframe()`, remember that `reframe()`
    +  always returns an ungrouped data frame and adjust accordingly.
    +Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
    +generated.
    Violin plot showing the distribution of the FLOSS score achieved by all tested models by recording.  The left half shows the recordings that were difficult to predict (50% overall), whereas the right half shows the recordings that at least one model could achieve a good prediction (50% overall).  The recordings are sorted (left-right) by the minimum (best) score achieved in descending order, and ties are sorted by the median of all recording scores.  The blue color highlights recordings where models had an IQR variability of less than 0.5.

    @@ -1010,6 +1093,17 @@

    1.4.1 By recording

    +d06c64f + + +Francisco Bischoff + + +2022-10-09 + + + + f9f551d @@ -1057,6 +1151,17 @@

    1.4.1 By recording

    +d06c64f + + +Francisco Bischoff + + +2022-10-09 + + + + f9f551d @@ -1101,6 +1206,17 @@

    1.4.1 By recording

    +d06c64f + + +Francisco Bischoff + + +2022-10-09 + + + + f9f551d @@ -1121,6 +1237,13 @@

    1.4.1 By recording

    1.4.2 By model

    Fig. 1.8 shows the distribution of the FLOSS score of the 25% worst (left side) and 25% best models across the recordings (right side). The bluish color highlights the models with SD below 0.5 and IQR below 0.5.

    +
    Warning: Returning more (or less) than 1 row per `summarise()` group was deprecated in
    +dplyr 1.1.0.
    +ℹ Please use `reframe()` instead.
    +ℹ When switching from `summarise()` to `reframe()`, remember that `reframe()`
    +  always returns an ungrouped data frame and adjust accordingly.
    +Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
    +generated.
    Violin plot showing the distribution of the FLOSS score achieved by all tested models during the inner ressample.  The left half shows the models with the worst performances (top 25), whereas the right half shows the models with the best performances (top 25). The models are sorted (left-right) by the mean score (top) and by the median (below). Ties are sorted by the SD and IQR, respectively.  The bluish colors highlights models with an SD below 0.5 and IQR below 0.5.

    @@ -1151,6 +1274,17 @@

    1.4.2 By model

    +d06c64f + + +Francisco Bischoff + + +2022-10-09 + + + + f9f551d @@ -1198,6 +1332,17 @@

    1.4.2 By model

    +d06c64f + + +Francisco Bischoff + + +2022-10-09 + + + + f9f551d @@ -1240,176 +1385,177 @@

    References

    ─ Session info ───────────────────────────────────────────────────────────────
      setting  value
    - version  R version 4.2.1 (2022-06-23)
    - os       Ubuntu 20.04.5 LTS
    + version  R version 4.3.1 (2023-06-16)
    + os       Ubuntu 22.04.2 LTS
      system   x86_64, linux-gnu
      ui       X11
      language (EN)
      collate  en_US.UTF-8
      ctype    en_US.UTF-8
      tz       Europe/Lisbon
    - date     2022-10-09
    + date     2023-08-13
      pandoc   2.17.0.1 @ /usr/bin/ (via rmarkdown)
     
     ─ Packages ───────────────────────────────────────────────────────────────────
      package      * version     date (UTC) lib source
    - askpass        1.1         2019-01-13 [1] CRAN (R 4.2.0)
    - assertthat     0.2.1       2019-03-21 [1] CRAN (R 4.2.0)
    - backports      1.4.1       2021-12-13 [1] CRAN (R 4.2.0)
    - base64url      1.4         2018-05-14 [1] CRAN (R 4.2.0)
    - bit            4.0.4       2020-08-04 [1] CRAN (R 4.2.0)
    - bit64          4.0.5       2020-08-30 [1] CRAN (R 4.2.0)
    - bookdown       0.29.2      2022-09-26 [1] Github (rstudio/bookdown@dfe92a2)
    - bslib          0.4.0       2022-07-16 [1] CRAN (R 4.2.1)
    - cachem         1.0.6       2021-08-19 [1] CRAN (R 4.2.0)
    - callr          3.7.2       2022-08-22 [1] CRAN (R 4.2.1)
    - checkmate      2.1.0       2022-04-21 [1] CRAN (R 4.2.0)
    - class          7.3-20      2022-01-13 [2] CRAN (R 4.2.0)
    - cli            3.4.1       2022-09-23 [1] CRAN (R 4.2.1)
    - codetools      0.2-18      2020-11-04 [2] CRAN (R 4.2.0)
    - colorspace     2.0-3       2022-02-21 [1] CRAN (R 4.2.0)
    - crayon         1.5.1       2022-03-26 [1] CRAN (R 4.2.0)
    - credentials    1.3.2       2021-11-29 [1] CRAN (R 4.2.0)
    - data.table     1.14.2      2021-09-27 [1] CRAN (R 4.2.0)
    - dbarts         0.9-22      2022-03-29 [1] CRAN (R 4.2.0)
    - DBI            1.1.3       2022-06-18 [1] CRAN (R 4.2.0)
    - debugme        1.1.0       2017-10-22 [1] CRAN (R 4.2.0)
    - devtools       2.4.4       2022-07-20 [1] CRAN (R 4.2.1)
    - dials          1.0.0       2022-06-14 [1] CRAN (R 4.2.0)
    - DiceDesign     1.9         2021-02-13 [1] CRAN (R 4.2.0)
    - digest         0.6.29      2021-12-01 [1] CRAN (R 4.2.0)
    - dplyr          1.0.10      2022-09-01 [1] CRAN (R 4.2.1)
    - ellipsis       0.3.2       2021-04-29 [1] CRAN (R 4.2.0)
    - evaluate       0.16        2022-08-09 [1] CRAN (R 4.2.1)
    - fansi          1.0.3       2022-03-24 [1] CRAN (R 4.2.0)
    - farver         2.1.1       2022-07-06 [1] CRAN (R 4.2.0)
    - fastmap        1.1.0       2021-01-25 [1] CRAN (R 4.2.0)
    - fastshap       0.0.7       2021-12-06 [1] CRAN (R 4.2.0)
    - forcats        0.5.2       2022-08-19 [2] CRAN (R 4.2.1)
    - foreach        1.5.2       2022-02-02 [1] CRAN (R 4.2.0)
    - fs             1.5.2       2021-12-08 [1] CRAN (R 4.2.0)
    - furrr          0.3.1       2022-08-15 [1] CRAN (R 4.2.1)
    - future         1.28.0      2022-09-02 [1] CRAN (R 4.2.1)
    - future.apply   1.9.1       2022-09-07 [1] CRAN (R 4.2.1)
    - generics       0.1.3       2022-07-05 [1] CRAN (R 4.2.0)
    - gert           1.9.0       2022-09-15 [1] CRAN (R 4.2.1)
    - getPass        0.2-2       2017-07-21 [1] CRAN (R 4.2.0)
    - ggplot2      * 3.3.6       2022-05-03 [1] CRAN (R 4.2.0)
    - git2r          0.30.1.9000 2022-04-29 [1] Github (ropensci/git2r@80ba185)
    - gittargets   * 0.0.5.9000  2022-09-26 [1] Github (wlandau/gittargets@a50dd58)
    - globals        0.16.1      2022-08-28 [1] CRAN (R 4.2.1)
    - glue         * 1.6.2       2022-02-24 [1] CRAN (R 4.2.0)
    - gower          1.0.0       2022-02-03 [1] CRAN (R 4.2.0)
    - GPfit          1.0-8       2019-02-08 [1] CRAN (R 4.2.0)
    - gridExtra      2.3         2017-09-09 [1] CRAN (R 4.2.0)
    - gtable         0.3.1       2022-09-01 [1] CRAN (R 4.2.1)
    - hardhat        1.2.0       2022-06-30 [1] CRAN (R 4.2.0)
    - here         * 1.0.1       2020-12-13 [1] CRAN (R 4.2.0)
    - highr          0.9         2021-04-16 [1] CRAN (R 4.2.0)
    - hms            1.1.2       2022-08-19 [1] CRAN (R 4.2.1)
    - htmltools      0.5.3       2022-07-18 [1] CRAN (R 4.2.1)
    - htmlwidgets    1.5.4       2021-09-08 [1] CRAN (R 4.2.0)
    - httpuv         1.6.6       2022-09-08 [1] CRAN (R 4.2.1)
    - httr           1.4.4       2022-08-17 [1] CRAN (R 4.2.1)
    - igraph         1.3.5       2022-09-22 [1] CRAN (R 4.2.1)
    - ipred          0.9-13      2022-06-02 [1] CRAN (R 4.2.0)
    - iterators      1.0.14      2022-02-05 [1] CRAN (R 4.2.0)
    - jquerylib      0.1.4       2021-04-26 [1] CRAN (R 4.2.0)
    - jsonlite       1.8.0       2022-02-22 [1] CRAN (R 4.2.0)
    - kableExtra   * 1.3.4       2021-02-20 [1] CRAN (R 4.2.0)
    - knitr          1.40        2022-08-24 [1] CRAN (R 4.2.1)
    - labeling       0.4.2       2020-10-20 [1] CRAN (R 4.2.0)
    - later          1.3.0       2021-08-18 [1] CRAN (R 4.2.0)
    - lattice        0.20-45     2021-09-22 [2] CRAN (R 4.2.0)
    - lava           1.6.10      2021-09-02 [1] CRAN (R 4.2.0)
    - lhs            1.1.5       2022-03-22 [1] CRAN (R 4.2.0)
    - lifecycle      1.0.2       2022-09-09 [1] CRAN (R 4.2.1)
    - listenv        0.8.0       2019-12-05 [1] CRAN (R 4.2.0)
    - lubridate      1.8.0       2021-10-07 [1] CRAN (R 4.2.0)
    - magrittr       2.0.3       2022-03-30 [1] CRAN (R 4.2.0)
    - MASS           7.3-58.1    2022-08-03 [1] CRAN (R 4.2.1)
    - Matrix         1.5-1       2022-09-13 [2] CRAN (R 4.2.1)
    - memoise        2.0.1       2021-11-26 [1] CRAN (R 4.2.0)
    - mgcv           1.8-40      2022-03-29 [2] CRAN (R 4.2.0)
    - mime           0.12        2021-09-28 [1] CRAN (R 4.2.0)
    - miniUI         0.1.1.1     2018-05-18 [1] CRAN (R 4.2.0)
    - munsell        0.5.0       2018-06-12 [1] CRAN (R 4.2.0)
    - nlme           3.1-159     2022-08-09 [1] CRAN (R 4.2.1)
    - nnet           7.3-18      2022-09-28 [2] CRAN (R 4.2.1)
    - openssl        2.0.3       2022-09-14 [1] CRAN (R 4.2.1)
    - parallelly     1.32.1      2022-07-21 [1] CRAN (R 4.2.1)
    - parsnip        1.0.1       2022-08-18 [1] CRAN (R 4.2.1)
    - patchwork    * 1.1.2       2022-08-19 [1] CRAN (R 4.2.1)
    - pdp            0.8.1       2022-06-07 [1] CRAN (R 4.2.0)
    - pillar         1.8.1       2022-08-19 [1] CRAN (R 4.2.1)
    - pkgbuild       1.3.1       2021-12-20 [1] CRAN (R 4.2.0)
    - pkgconfig      2.0.3       2019-09-22 [1] CRAN (R 4.2.0)
    - pkgload        1.3.0       2022-06-27 [1] CRAN (R 4.2.0)
    - prettyunits    1.1.1       2020-01-24 [1] CRAN (R 4.2.0)
    - processx       3.7.0       2022-07-07 [1] CRAN (R 4.2.1)
    - prodlim        2019.11.13  2019-11-17 [1] CRAN (R 4.2.0)
    - profvis        0.3.7       2020-11-02 [1] CRAN (R 4.2.1)
    - promises       1.2.0.1     2021-02-11 [1] CRAN (R 4.2.0)
    - ps             1.7.1       2022-06-18 [1] CRAN (R 4.2.0)
    - purrr          0.3.4       2020-04-17 [1] CRAN (R 4.2.0)
    - R6             2.5.1       2021-08-19 [1] CRAN (R 4.2.0)
    - Rcpp           1.0.9       2022-07-08 [1] CRAN (R 4.2.1)
    - readr          2.1.2       2022-01-30 [1] CRAN (R 4.2.0)
    - recipes        1.0.1       2022-07-07 [1] CRAN (R 4.2.1)
    - remotes        2.4.2       2021-11-30 [1] CRAN (R 4.2.0)
    - renv           0.15.5      2022-05-26 [1] CRAN (R 4.2.0)
    - rlang          1.0.6       2022-09-24 [1] CRAN (R 4.2.1)
    - rmarkdown      2.16.1      2022-09-26 [1] Github (rstudio/rmarkdown@9577707)
    - rpart          4.1.16      2022-01-24 [2] CRAN (R 4.2.0)
    - rprojroot      2.0.3       2022-04-02 [1] CRAN (R 4.2.0)
    - rsample        1.1.0       2022-08-08 [1] CRAN (R 4.2.1)
    - rstudioapi     0.14        2022-08-22 [1] CRAN (R 4.2.1)
    - rvest          1.0.3       2022-08-19 [1] CRAN (R 4.2.1)
    - sass           0.4.2       2022-07-16 [1] CRAN (R 4.2.1)
    - scales         1.2.1       2022-08-20 [1] CRAN (R 4.2.1)
    - sessioninfo    1.2.2       2021-12-06 [1] CRAN (R 4.2.0)
    - shapviz        0.2.1       2022-08-11 [1] CRAN (R 4.2.1)
    - shiny          1.7.2       2022-07-19 [1] CRAN (R 4.2.1)
    - signal         0.7-7       2021-05-25 [1] CRAN (R 4.2.0)
    - stringi        1.7.8       2022-07-11 [1] CRAN (R 4.2.1)
    - stringr        1.4.1       2022-08-20 [1] CRAN (R 4.2.1)
    - survival       3.4-0       2022-08-09 [2] CRAN (R 4.2.1)
    - svglite        2.1.0.9000  2022-09-26 [1] Github (r-lib/svglite@8f30fc6)
    - sys            3.4         2020-07-23 [1] CRAN (R 4.2.0)
    - systemfonts    1.0.4       2022-02-11 [1] CRAN (R 4.2.0)
    - tarchetypes  * 0.7.1       2022-09-07 [1] CRAN (R 4.2.1)
    - targets      * 0.13.4      2022-09-15 [1] CRAN (R 4.2.1)
    - tibble       * 3.1.8       2022-07-22 [1] CRAN (R 4.2.1)
    - tidyr          1.2.1       2022-09-08 [1] CRAN (R 4.2.1)
    - tidyselect     1.1.2       2022-02-21 [1] CRAN (R 4.2.0)
    - timeDate       4021.104    2022-07-19 [1] CRAN (R 4.2.1)
    - timetk         2.8.1       2022-05-31 [1] CRAN (R 4.2.0)
    - tune           1.0.0.9000  2022-07-22 [1] Github (franzbischoff/tune@539e1ee)
    - tzdb           0.3.0       2022-03-28 [1] CRAN (R 4.2.0)
    - urlchecker     1.0.1       2021-11-30 [1] CRAN (R 4.2.1)
    - usethis        2.1.6.9000  2022-10-03 [1] Github (r-lib/usethis@8ecb7ab)
    - utf8           1.2.2       2021-07-24 [1] CRAN (R 4.2.0)
    - uuid           1.1-0       2022-04-19 [1] CRAN (R 4.2.0)
    - vctrs          0.4.1       2022-04-13 [1] CRAN (R 4.2.0)
    - vip            0.3.2       2020-12-17 [1] CRAN (R 4.2.0)
    - viridisLite    0.4.1       2022-08-22 [1] CRAN (R 4.2.1)
    - visNetwork   * 2.1.0       2021-09-29 [1] CRAN (R 4.2.0)
    - vroom          1.5.7       2021-11-30 [1] CRAN (R 4.2.0)
    - webshot        0.5.3       2022-04-14 [1] CRAN (R 4.2.0)
    - whisker        0.4         2019-08-28 [1] CRAN (R 4.2.0)
    - withr          2.5.0       2022-03-03 [1] CRAN (R 4.2.0)
    - workflowr    * 1.7.0       2021-12-21 [1] CRAN (R 4.2.0)
    - workflows      1.1.0       2022-09-26 [1] CRAN (R 4.2.1)
    - xfun           0.33        2022-09-12 [1] CRAN (R 4.2.1)
    - xgboost        1.6.0.1     2022-04-16 [1] CRAN (R 4.2.0)
    - xml2           1.3.3       2021-11-30 [1] CRAN (R 4.2.0)
    - xtable         1.8-4       2019-04-21 [1] CRAN (R 4.2.0)
    - xts            0.12.1      2020-09-09 [1] CRAN (R 4.2.0)
    - yaml           2.3.5       2022-02-21 [1] CRAN (R 4.2.0)
    - yardstick      1.1.0       2022-09-07 [1] CRAN (R 4.2.1)
    - zoo            1.8-11      2022-09-17 [1] CRAN (R 4.2.1)
    -
    - [1] /workspace/.cache/R/renv/proj_libs/false.alarm-d6f1a0d1/R-4.2/x86_64-pc-linux-gnu
    + askpass        1.1         2019-01-13 [1] CRAN (R 4.3.0)
    + backports      1.4.1       2021-12-13 [1] CRAN (R 4.3.1)
    + base64url      1.4         2018-05-14 [1] CRAN (R 4.3.0)
    + bit            4.0.5       2022-11-15 [1] CRAN (R 4.3.0)
    + bit64          4.0.5       2020-08-30 [1] CRAN (R 4.3.0)
    + bookdown       0.35.1      2023-08-13 [1] Github (rstudio/bookdown@661567e)
    + bslib          0.5.1       2023-08-11 [1] CRAN (R 4.3.1)
    + cachem         1.0.8       2023-05-01 [1] CRAN (R 4.3.0)
    + callr          3.7.3       2022-11-02 [1] CRAN (R 4.3.1)
    + checkmate      2.2.0       2023-04-27 [1] CRAN (R 4.3.0)
    + class          7.3-22      2023-05-03 [2] CRAN (R 4.3.1)
    + cli            3.6.1       2023-03-23 [1] CRAN (R 4.3.1)
    + codetools      0.2-19      2023-02-01 [2] CRAN (R 4.3.0)
    + colorspace     2.1-0       2023-01-23 [1] CRAN (R 4.3.0)
    + crayon         1.5.2       2022-09-29 [1] CRAN (R 4.3.1)
    + credentials    1.3.2       2021-11-29 [1] CRAN (R 4.3.0)
    + data.table     1.14.8      2023-02-17 [1] CRAN (R 4.3.0)
    + dbarts         0.9-23      2023-01-23 [1] CRAN (R 4.3.0)
    + debugme        1.1.0       2017-10-22 [1] CRAN (R 4.3.0)
    + devtools       2.4.5       2022-10-11 [1] CRAN (R 4.3.0)
    + dials          1.2.0       2023-04-03 [1] CRAN (R 4.3.0)
    + DiceDesign     1.9         2021-02-13 [1] CRAN (R 4.3.0)
    + digest         0.6.33      2023-07-07 [1] CRAN (R 4.3.1)
    + dplyr          1.1.2       2023-04-20 [1] CRAN (R 4.3.0)
    + ellipsis       0.3.2       2021-04-29 [1] CRAN (R 4.3.0)
    + evaluate       0.21        2023-05-05 [1] CRAN (R 4.3.0)
    + fansi          1.0.4       2023-01-22 [1] CRAN (R 4.3.0)
    + farver         2.1.1       2022-07-06 [1] CRAN (R 4.3.0)
    + fastmap        1.1.1       2023-02-24 [1] CRAN (R 4.3.0)
    + fastshap       0.0.7       2021-12-06 [1] CRAN (R 4.3.0)
    + forcats        1.0.0       2023-01-29 [1] CRAN (R 4.3.0)
    + foreach        1.5.2       2022-02-02 [1] CRAN (R 4.3.0)
    + fs             1.6.3       2023-07-20 [1] CRAN (R 4.3.1)
    + furrr          0.3.1       2022-08-15 [1] CRAN (R 4.3.0)
    + future         1.33.0      2023-07-01 [1] CRAN (R 4.3.1)
    + future.apply   1.11.0      2023-05-21 [1] CRAN (R 4.3.1)
    + future.callr   0.8.2       2023-08-09 [1] CRAN (R 4.3.1)
    + generics       0.1.3       2022-07-05 [1] CRAN (R 4.3.0)
    + gert           1.9.3       2023-08-07 [1] CRAN (R 4.3.1)
    + getPass        0.2-2       2017-07-21 [1] CRAN (R 4.3.0)
    + ggplot2      * 3.4.2       2023-04-03 [1] CRAN (R 4.3.0)
    + git2r          0.32.0.9000 2023-06-30 [1] Github (ropensci/git2r@9c42d41)
    + gittargets   * 0.0.6.9000  2023-05-05 [1] Github (wlandau/gittargets@2d448ff)
    + globals        0.16.2      2022-11-21 [1] CRAN (R 4.3.0)
    + glue         * 1.6.2       2022-02-24 [1] CRAN (R 4.3.1)
    + gower          1.0.1       2022-12-22 [1] CRAN (R 4.3.0)
    + GPfit          1.0-8       2019-02-08 [1] CRAN (R 4.3.0)
    + gridExtra      2.3         2017-09-09 [1] CRAN (R 4.3.0)
    + gtable         0.3.3       2023-03-21 [1] CRAN (R 4.3.0)
    + hardhat        1.3.0       2023-03-30 [1] CRAN (R 4.3.0)
    + here         * 1.0.1       2020-12-13 [1] CRAN (R 4.3.0)
    + highr          0.10        2022-12-22 [1] CRAN (R 4.3.1)
    + hms            1.1.3       2023-03-21 [1] CRAN (R 4.3.0)
    + htmltools      0.5.6       2023-08-10 [1] CRAN (R 4.3.1)
    + htmlwidgets    1.6.2       2023-03-17 [1] CRAN (R 4.3.0)
    + httpuv         1.6.11      2023-05-11 [1] CRAN (R 4.3.1)
    + httr           1.4.6       2023-05-08 [1] CRAN (R 4.3.1)
    + igraph         1.5.1       2023-08-10 [1] CRAN (R 4.3.1)
    + ipred          0.9-14      2023-03-09 [1] CRAN (R 4.3.0)
    + iterators      1.0.14      2022-02-05 [1] CRAN (R 4.3.0)
    + jquerylib      0.1.4       2021-04-26 [1] CRAN (R 4.3.0)
    + jsonlite       1.8.7       2023-06-29 [1] CRAN (R 4.3.0)
    + kableExtra   * 1.3.4       2021-02-20 [1] CRAN (R 4.3.0)
    + knitr          1.43        2023-05-25 [1] CRAN (R 4.3.0)
    + labeling       0.4.2       2020-10-20 [1] CRAN (R 4.3.0)
    + later          1.3.1       2023-05-02 [1] CRAN (R 4.3.1)
    + lattice        0.21-8      2023-04-05 [2] CRAN (R 4.3.0)
    + lava           1.7.2.1     2023-02-27 [1] CRAN (R 4.3.0)
    + lhs            1.1.6       2022-12-17 [1] CRAN (R 4.3.0)
    + lifecycle      1.0.3       2022-10-07 [1] CRAN (R 4.3.1)
    + listenv        0.9.0       2022-12-16 [1] CRAN (R 4.3.0)
    + lubridate      1.9.2       2023-02-10 [1] CRAN (R 4.3.0)
    + magrittr       2.0.3       2022-03-30 [1] CRAN (R 4.3.1)
    + MASS           7.3-60      2023-05-04 [2] CRAN (R 4.3.1)
    + Matrix         1.6-0       2023-07-08 [1] CRAN (R 4.3.1)
    + memoise        2.0.1       2021-11-26 [1] CRAN (R 4.3.0)
    + mgcv           1.9-0       2023-07-11 [1] CRAN (R 4.3.1)
    + mime           0.12        2021-09-28 [1] CRAN (R 4.3.0)
    + miniUI         0.1.1.1     2018-05-18 [1] CRAN (R 4.3.0)
    + modelenv       0.1.1       2023-03-08 [1] CRAN (R 4.3.0)
    + munsell        0.5.0       2018-06-12 [1] CRAN (R 4.3.0)
    + nlme           3.1-163     2023-08-09 [1] CRAN (R 4.3.1)
    + nnet           7.3-19      2023-05-03 [2] CRAN (R 4.3.1)
    + openssl        2.1.0       2023-07-15 [1] CRAN (R 4.3.1)
    + parallelly     1.36.0      2023-05-26 [1] CRAN (R 4.3.1)
    + parsnip        1.1.0       2023-04-12 [1] CRAN (R 4.3.0)
    + patchwork    * 1.1.2       2022-08-19 [1] CRAN (R 4.3.0)
    + pdp            0.8.1       2023-06-22 [1] Github (bgreenwell/pdp@4f22141)
    + pillar         1.9.0       2023-03-22 [1] CRAN (R 4.3.0)
    + pkgbuild       1.4.2       2023-06-26 [1] CRAN (R 4.3.1)
    + pkgconfig      2.0.3       2019-09-22 [1] CRAN (R 4.3.0)
    + pkgload        1.3.2.1     2023-07-08 [1] CRAN (R 4.3.1)
    + prettyunits    1.1.1       2020-01-24 [1] CRAN (R 4.3.0)
    + processx       3.8.2       2023-06-30 [1] CRAN (R 4.3.1)
    + prodlim        2023.03.31  2023-04-02 [1] CRAN (R 4.3.0)
    + profvis        0.3.8       2023-05-02 [1] CRAN (R 4.3.1)
    + promises       1.2.1       2023-08-10 [1] CRAN (R 4.3.1)
    + ps             1.7.5       2023-04-18 [1] CRAN (R 4.3.1)
    + purrr          1.0.2       2023-08-10 [1] CRAN (R 4.3.1)
    + R6             2.5.1       2021-08-19 [1] CRAN (R 4.3.1)
    + Rcpp           1.0.11      2023-07-06 [1] CRAN (R 4.3.1)
    + readr          2.1.4       2023-02-10 [1] CRAN (R 4.3.0)
    + recipes        1.0.7       2023-08-10 [1] CRAN (R 4.3.1)
    + remotes        2.4.2.1     2023-07-18 [1] CRAN (R 4.3.1)
    + renv           0.17.3      2023-04-06 [1] CRAN (R 4.3.1)
    + rlang          1.1.1       2023-04-28 [1] CRAN (R 4.3.0)
    + rmarkdown      2.23.4      2023-08-13 [1] Github (rstudio/rmarkdown@054d735)
    + rpart          4.1.19      2022-10-21 [2] CRAN (R 4.3.0)
    + rprojroot      2.0.3       2022-04-02 [1] CRAN (R 4.3.1)
    + rsample        1.1.1       2022-12-07 [1] CRAN (R 4.3.0)
    + rstudioapi     0.15.0      2023-07-07 [1] CRAN (R 4.3.1)
    + rvest          1.0.3       2022-08-19 [1] CRAN (R 4.3.0)
    + sass           0.4.7       2023-07-15 [1] CRAN (R 4.3.1)
    + scales         1.2.1       2022-08-20 [1] CRAN (R 4.3.0)
    + sessioninfo    1.2.2       2021-12-06 [1] CRAN (R 4.3.0)
    + shapviz        0.9.1       2023-07-18 [1] CRAN (R 4.3.1)
    + shiny          1.7.5       2023-08-12 [1] CRAN (R 4.3.1)
    + signal         0.7-7       2021-05-25 [1] CRAN (R 4.3.0)
    + stringi        1.7.12      2023-01-11 [1] CRAN (R 4.3.1)
    + stringr        1.5.0       2022-12-02 [1] CRAN (R 4.3.1)
    + survival       3.5-5       2023-03-12 [2] CRAN (R 4.3.1)
    + svglite        2.1.1.9000  2023-05-05 [1] Github (r-lib/svglite@6c1d359)
    + sys            3.4.2       2023-05-23 [1] CRAN (R 4.3.1)
    + systemfonts    1.0.4       2022-02-11 [1] CRAN (R 4.3.0)
    + tarchetypes  * 0.7.7       2023-06-15 [1] CRAN (R 4.3.1)
    + targets      * 1.2.2       2023-08-10 [1] CRAN (R 4.3.1)
    + tibble       * 3.2.1       2023-03-20 [1] CRAN (R 4.3.0)
    + tidyr          1.3.0       2023-01-24 [1] CRAN (R 4.3.0)
    + tidyselect     1.2.0       2022-10-10 [1] CRAN (R 4.3.0)
    + timechange     0.2.0       2023-01-11 [1] CRAN (R 4.3.0)
    + timeDate       4022.108    2023-01-07 [1] CRAN (R 4.3.0)
    + timetk         2.8.3       2023-03-30 [1] CRAN (R 4.3.0)
    + tune           1.1.1       2023-04-11 [1] CRAN (R 4.3.0)
    + tzdb           0.4.0       2023-05-12 [1] CRAN (R 4.3.1)
    + urlchecker     1.0.1       2021-11-30 [1] CRAN (R 4.3.0)
    + usethis        2.2.2.9000  2023-07-17 [1] Github (r-lib/usethis@467ff57)
    + utf8           1.2.3       2023-01-31 [1] CRAN (R 4.3.0)
    + uuid           1.1-0       2022-04-19 [1] CRAN (R 4.3.0)
    + vctrs          0.6.3       2023-06-14 [1] CRAN (R 4.3.1)
    + vip            0.4.0       2023-07-19 [1] CRAN (R 4.3.1)
    + viridisLite    0.4.2       2023-05-02 [1] CRAN (R 4.3.1)
    + visNetwork   * 2.1.2       2022-09-29 [1] CRAN (R 4.3.0)
    + vroom          1.6.3       2023-04-28 [1] CRAN (R 4.3.1)
    + webshot        0.5.5       2023-06-26 [1] CRAN (R 4.3.1)
    + whisker        0.4.1       2022-12-05 [1] CRAN (R 4.3.0)
    + withr          2.5.0       2022-03-03 [1] CRAN (R 4.3.1)
    + workflowr    * 1.7.0       2021-12-21 [1] CRAN (R 4.3.0)
    + workflows      1.1.3       2023-02-22 [1] CRAN (R 4.3.0)
    + xfun           0.40        2023-08-09 [1] CRAN (R 4.3.1)
    + xgboost        1.7.5.1     2023-03-30 [1] CRAN (R 4.3.0)
    + xml2           1.3.5       2023-07-06 [1] CRAN (R 4.3.1)
    + xtable         1.8-4       2019-04-21 [1] CRAN (R 4.3.0)
    + xts            0.13.1      2023-04-16 [1] CRAN (R 4.3.0)
    + yaml           2.3.7       2023-01-23 [1] CRAN (R 4.3.1)
    + yardstick      1.0.0.9000  2023-05-25 [1] Github (tidymodels/yardstick@90ab794)
    + zoo            1.8-12      2023-04-13 [1] CRAN (R 4.3.0)
    +
    + [1] /workspace/.cache/R/renv/proj_libs/false.alarm-d6f1a0d1/R-4.3/x86_64-pc-linux-gnu
      [2] /usr/lib/R/library
     
     ──────────────────────────────────────────────────────────────────────────────
    diff --git a/docs/report.html b/docs/report.html index 99de4d4..1f5efda 100644 --- a/docs/report.html +++ b/docs/report.html @@ -32,8 +32,12 @@ - - + + + + + + @@ -203,8 +207,8 @@ border-radius: 4px; } -.tabset-dropdown > .nav-tabs > li.active:before { - content: ""; +.tabset-dropdown > .nav-tabs > li.active:before, .tabset-dropdown > .nav-tabs.nav-tabs-open:before { + content: "\e259"; font-family: 'Glyphicons Halflings'; display: inline-block; padding: 10px; @@ -212,16 +216,9 @@ } .tabset-dropdown > .nav-tabs.nav-tabs-open > li.active:before { - content: ""; - border: none; -} - -.tabset-dropdown > .nav-tabs.nav-tabs-open:before { - content: ""; + content: "\e258"; font-family: 'Glyphicons Halflings'; - display: inline-block; - padding: 10px; - border-right: 1px solid #ddd; + border: none; } .tabset-dropdown > .nav-tabs > li.active { @@ -377,7 +374,7 @@

    Report

    Francisco Bischoff

    -

    on Jan 31, 2022

    +

    on Jun 06, 2023

    @@ -406,19 +403,26 @@

    on Jan 31, 2022

  • 3.4.3 Preparing the data
  • 3.4.4 Detecting regime changes
  • 3.4.5 Classification of the new regime
  • -
  • 3.4.6 Summary of the methodology
  • +
  • 3.4.6 Summary of the methodology
  • 3.5 Evaluation of the algorithms
  • 4 Current results
  • 5 Scientific contributions @@ -428,6 +432,7 @@

    on Jan 31, 2022

  • 6 Scientific outcomes
  • 7 Expected results and outcomes
  • +
  • 8 References
  • @@ -435,7 +440,7 @@

    on Jan 31, 2022

    @@ -445,7 +450,7 @@

    on Jan 31, 2022

  • -Checks +Checks
  • @@ -455,14 +460,14 @@

    on Jan 31, 2022

    -Last updated: 2022-10-05 +Last updated: 2023-08-13

    Checks: -7 +5 -0 +2

    Knit directory: @@ -485,16 +490,21 @@

    on Jan 31, 2022

    -
    +
    -

    Great! Since the R Markdown file has been committed to the Git repository, you -know the exact version of the code that produced these results.

    +

    The R Markdown file has unstaged changes. +To know which version of the R Markdown file created these +results, you’ll want to first commit it to the Git repo. If +you’re still working on the analysis, you can ignore this +warning. When you’re finished, you can run +wflow_publish to commit the R Markdown file and +build the HTML.

    @@ -551,16 +561,25 @@

    on Jan 31, 2022

    -
    +
    -

    Nice! There were no cached chunks for this analysis, so you can be confident -that you successfully produced the results during this run.

    +The following chunks had caches available: +
      +
    • +dist-data +
    • +
    +

    To ensure reproducibility of the results, delete the cache directory +report_cache +and re-run the analysis. To have workflowr automatically delete the cache +directory prior to building the file, set delete_cache = TRUE +when running wflow_build() or wflow_publish().

    @@ -583,20 +602,20 @@

    on Jan 31, 2022

    -
    +

    Great! You are using Git for version control. Tracking code development and connecting the code version to the results is critical for reproducibility.

    -The results in this page were generated with repository version b79f104. +The results in this page were generated with repository version 4437e7a. See the Past versions tab to see a history of the changes made to the R Markdown and HTML files.

    @@ -618,6 +637,19 @@

    on Jan 31, 2022

    Ignored: .github/ISSUE_TEMPLATE/ Ignored: .httr-oauth Ignored: R/RcppExports.R + Ignored: _classifier/meta/process + Ignored: _classifier/meta/progress + Ignored: _classifier/objects/ + Ignored: _classifier/user/ + Ignored: _contrast_profile/meta/process + Ignored: _contrast_profile/meta/progress + Ignored: _contrast_profile/objects/ + Ignored: _contrast_profile/user/ + Ignored: _contrast_profile_ex/meta/process + Ignored: _contrast_profile_ex/meta/progress + Ignored: _contrast_profile_ex/objects/ + Ignored: _contrast_profile_ex/user/ + Ignored: _contrast_profile_ex/workspaces/ Ignored: _regime_change/meta/process Ignored: _regime_change/meta/progress Ignored: _regime_change/objects/ @@ -630,6 +662,10 @@

    on Jan 31, 2022

    Ignored: _regime_change3/meta/progress Ignored: _regime_change3/objects/ Ignored: _regime_change3/user/ + Ignored: _regime_change_2/meta/process + Ignored: _regime_change_2/meta/progress + Ignored: _regime_change_2/objects/ + Ignored: _regime_change_2/user/ Ignored: _regime_optimize/meta/meta2 Ignored: _regime_optimize/meta/process Ignored: _regime_optimize/meta/progress @@ -639,8 +675,11 @@

    on Jan 31, 2022

    Ignored: _targets/meta/progress Ignored: _targets/objects/ Ignored: _targets/user/ + Ignored: analysis/report_cache/ Ignored: analysis/shiny/rsconnect/ Ignored: analysis/shiny_land/rsconnect/ + Ignored: analysis/shiny_ventricular/rsconnect/ + Ignored: analysis/shiny_vtachy/rsconnect/ Ignored: dev/ Ignored: inst/extdata/ Ignored: papers/aime2021/aime2021.md @@ -651,8 +690,12 @@

    on Jan 31, 2022

    Ignored: presentations/Report/Midterm-Report_files/ Ignored: protocol/SecondReport_cache/ Ignored: protocol/SecondReport_files/ + Ignored: protocol/ThirdReport.tex + Ignored: protocol/ThirdReport_cache/ + Ignored: protocol/ThirdReport_files/ + Ignored: protocol/_extensions/ Ignored: protocol/_files/ - Ignored: renv/python/ + Ignored: protocol/figure/ Ignored: renv/staging/ Ignored: src/RcppExports.cpp Ignored: src/RcppExports.o @@ -670,6 +713,10 @@

    on Jan 31, 2022

    Ignored: thesis/_bookdown_files/ Ignored: tmp/ +Unstaged changes: + Modified: analysis/regime_optimize.Rmd + Modified: analysis/report.Rmd +

    Note that any generated files, e.g. HTML, png, CSS, etc., are not included in @@ -715,6 +762,40 @@

    on Jan 31, 2022

    +Rmd + + +7bf2605 + + +GitHub + + +2023-08-13 + + +Feature/classification (#152) + + + + +html + + +f9f551d + + +Francisco Bischoff + + +2022-10-06 + + +Build site. + + + + html @@ -1451,6 +1532,7 @@

    on Jan 31, 2022

    +

    Last Updated: 2023-06-12 12:51:54 UTC

    1 Objectives and the research question

    While this research was inspired by the CinC/Physionet Challenge 2015, its purpose is not to beat @@ -2657,7 +2739,7 @@

    3.4.5 Classification of the new r

    After extracting candidates for each class signature, a classification algorithm will be fitted and evaluated using the criteria explained on section 3.5.

    -
    +

    3.4.6 Summary of the methodology

    To summarize the steps taken on this thesis to accomplish the main objective, Figs. 3.13, 3.14 and 3.15 show the @@ -2959,7 +3041,7 @@

    3.5.1 Regime change

    -
    +

    3.5.2 Classification

    As described in section 3.4.5, the model for classification will use a set of shapelets to identify if we have a TRUE (life-threatening) regime or a FALSE (non-life-threatening) regime.

    @@ -3036,13 +3118,40 @@

    3.5.3 Full model (streaming setti

    4 Current results

    4.1 Regime change detection

    -

    The current status of the regime change detection pipeline is the implementation of the resampling -strategies and evaluation to start the parameter tuning. An example of the current implementation is -shown on Fig. 4.1.

    +

    As we have seen previously, the FLOSS algorithm is built on top of the Matrix Profile (MP). Thus, +we have proposed several parameters that may or not impact the FLOSS prediction performance.

    +

    The variables for building the MP are:

    +
      +
    • mp_threshold: the minimum similarity value to be considered for 1-NN.
    • +
    • time_constraint: the maximum distance to look for the nearest neighbor.
    • +
    • window_size: the default parameter always used to build an MP.
    • +
    +

    Later, the FLOSS algorithm also has a parameter that needs tuning to optimize the prediction:

    +
      +
    • regime_threshold: the threshold below which a regime change is considered.
    • +
    • regime_landmark: the point in time where the regime threshold is applied.
    • +
    +

    Using the tidymodels framework, we performed a basic grid search on all these parameters.

    +

    Fig. 4.1 shows the workflow using Nested resamplig as described on section 3.4.6. +Fig. 4.2 shows an example of the regime change detection pipeline. The graph on top shows +the ECG streaming; the blue line marks the ten seconds before the original alarm was fired; the red line +marks the time constraint used on the example; the dark red line marks the limit for taking a decision +in this case of Asystole; The blue horizontal line represents the size of the sliding window. The graph +on the middle shows the Arc counts as seen by the algorithm (with the corrected distribution); the red +line marks the current minimum value and its index; the blue horizontal line shows the minimum value +seen until then. The graph on the bottom shows the computed Arc counts (raw) and the red line is the +theoretical distribution used for correction.

    +
    +
    + +

    +Figure 4.1: FLOSS pipeline. +

    +
    Regime change detection example. The graph on top shows the ECG streaming; the blue line marks the ten seconds before the original alarm was fired; the red line marks the time constraint of 1250; the dark red line marks the limit for taking a decision in this case of Asystole the blue horizontal line represents the size of the sliding window. The graph on the middle shows the Arc counts as seen by the algorithm (with the corrected distribution); the red line marks the current minimum value and its index; the blue horizontal line shows the minimum value seen until then. The graph on the bottom shows the computed Arc counts (raw), and the red line is the theoretical distribution used for correction.

    -Figure 4.1: Regime change detection example. The graph on top shows the ECG streaming; the blue line marks the ten seconds before the original alarm was fired; the red line marks the time constraint of 1250; the dark red line marks the limit for taking a decision in this case of Asystole the blue horizontal line represents the size of the sliding window. The graph on the middle shows the Arc counts as seen by the algorithm (with the corrected distribution); the red line marks the current minimum value and its index; the blue horizontal line shows the minimum value seen until then. The graph on the bottom shows the computed Arc counts (raw), and the red line is the theoretical distribution used for correction. +Figure 4.2: Regime change detection example. The graph on top shows the ECG streaming; the blue line marks the ten seconds before the original alarm was fired; the red line marks the time constraint of 1250; the dark red line marks the limit for taking a decision in this case of Asystole the blue horizontal line represents the size of the sliding window. The graph on the middle shows the Arc counts as seen by the algorithm (with the corrected distribution); the red line marks the current minimum value and its index; the blue horizontal line shows the minimum value seen until then. The graph on the bottom shows the computed Arc counts (raw), and the red line is the theoretical distribution used for correction.

    @@ -3082,49 +3191,323 @@

    4.1 Regime change detection

    +

    The dataset used for working with the Regime Change algorithm was the “Paroxysmal Atrial Fibrillation Events Detection from Dynamic ECG Recordings: The 4th China Physiological Signal Challenge 2021” hosted by Zenodo57 under the same license as Physionet.

    +

    The selected records were those that contain paroxysmal atrial fibrillation events, a total of 229 records. The records were split in a proportion of 3/4 for the training set (inner resampling) and 1/4 for the test set (outer resampling). The inner resampling was performed using a 5-fold cross-validation, which accounts for 137 records for fitting the models and 92 records for assessing them in the inner resampling.

    +

    The following parameters were used:

    +
      +
    • The MP parameters were explored using the following values: +
        +
      • mp_threshold: 0.0 to 0.9, by 0.1 steps;
      • +
      • time_constraint: 0, 800 and 1500;
      • +
      • window_size: 25 to 350, by 25 steps;
      • +
    • +
    • The FLOSS parameters were explored using the following values: +
        +
      • regime_threshold: 0.05 to 0.90, by 0.05 steps;
      • +
      • regime_landmark: 1 to 10, by 0.5 steps.
      • +
    • +
    +
    +

    4.1.1 Parameters analysis

    +

    The above process was an example of parameter tuning seeking the best model for a given set of parameters. It used a nested cross-validation procedure that aims to find the best combination of parameters and avoid overfitting.

    +

    While this process is powerful and robust, it does not show us the importance of each parameter. At least one parameter has been introduced by reasoning about the problem (mp_threshold), but how important it (and other parameters) is for predicting regime changes?

    +

    For example, the process above took 4 days, 20 hours, and 15 minutes to complete the grid search using an Intel(R) Xeon(R) Silver 4210R @ 2.40 GHz server. Notice that about 133 different combinations of parameters were tested on computing the MP (not FLOSS, the regime_threshold), 5 folds, 2 times each. That sums up about 35.2 x 109 all-pairs Euclidean distances computed on less than 5 days (on CPU, not GPU). Not bad.

    +

    Another side note on the above process, it is not a “release” environment, so we must consider lots of overhead in computation and memory usage that must be taken into account during these five days of grid search. Thus, much time can be saved if we know what parameters are essential for the problem.

    +

    In order to check the effect of the parameters on the model, we need to compute the importance of each parameter.

    +

    Wei et al. published a comprehensive review on variable importance analysis58.

    +

    Our case is not a typical case of variable importance analysis, where a set of features are tested against an outcome. Instead, we have to proxy our analysis by using as outcome the FLOSS performance score and as features (or predictors) the tuning parameters that lead to that score.

    +

    That is accomplished by fitting a model using the tuning parameters to predict the FLOSS score and then applying the techniques to compute the importance of each parameter.

    +

    For this matter, a Bayesian Additive Regression Trees (BART) model was chosen after an experimental trial with a set of regression models (including glmnet, gbm, mlp) and for its inherent characteristics, which allows being used for model-free variable selection59. The best BART model was selected using 10-fold cross-validation repeated 3 times, having great predictive power with an RMSE around 0.2 and an R2 around 0.99. With this fitted model, we could evaluate each parameter’s importance.

    +
    +
    +

    4.1.2 Interactions

    +

    Before starting the parameter importance analysis, we need to consider the parameter interactions since this is usually the weak spot of the analysis techniques.

    +

    The first BART model was fitted using the following parameters:

    +

    \[ +\begin{aligned} +E( score ) &= \alpha + time\_constraint\\ +&\quad + mp\_threshold + window\_size\\ +&\quad + regime\_threshold + regime\_landmark +\end{aligned} \tag{7} \label{eq-first} +\]

    +

    After checking the interactions, this is the refitted model:

    +

    \[ +\begin{aligned} +E( score ) &= \alpha + time\_constraint\\ +&\quad + mp\_threshold + window\_size\\ +&\quad + regime\_threshold + regime\_landmark\\ +&\quad + \left(regime\_threshold \times regime\_landmark\right)\\ +&\quad + \left(mp\_threshold \times regime\_landmark\right)\\ +&\quad + \left(mp\_threshold \times window\_size\right) +\end{aligned} \tag{8} \label{eq-fitted} +\]

    +

    Fig. 4.3 shows the variable interaction strength between pairs of variables. That allows us to verify if there are any significant interactions between the variables. Using the information from the first model fit, equation \(\eqref{eq-first}\), we see that regime_threshold interacts strongly with regime_landmark. This interaction was already expected, and we see that even after refitting the model, equation \(\eqref{eq-fitted}\), this interaction is still strong.

    +

    This is not a problem per se but a signal we must be aware of when exploring the parameters.

    +
    +Variable interactions strength using feature importance ranking measure (FIRM) approach [@Greenwell2018]. A) Shows strong interaction between `regime_threshold` and `regime_landmark`, `mp_threshold` and `window_size`,    `mp_threshold` and `regime_landmark`. B) Refitting the model with these interactions taken into account, the strength is substantially reduced, except    for the first, showing that indeed there is a strong correlation between those variables. +

    +Figure 4.3: Variable interactions strength using feature importance ranking measure (FIRM) approach60. A) Shows strong interaction between regime_threshold and regime_landmark, mp_threshold and window_size, mp_threshold and regime_landmark. B) Refitting the model with these interactions taken into account, the strength is substantially reduced, except for the first, showing that indeed there is a strong correlation between those variables. +

    -
    -

    4.2 Classification

    -

    The current status on the classification pipeline is the implementation of the shapelets extraction -using the Contrast Profile.

    -

    An example of candidates for ventricular tachycardia is presented in Fig. 4.2.

    -
    -Shapelet candidates for Ventricular Tachycardia. +
    +
    +

    4.1.3 Importance

    +

    After evaluating the interactions, we then can perform the analysis of the variable importance. The goal is to understand how the FLOSS score behaves when we change the parameters.

    +

    Here is a brief overview of the different techniques:

    +
    +

    4.1.3.1 Feature Importance Ranking Measure (FIRM)

    +

    The FIRM is a variance-based method. This implementation uses the ICE curves to quantify each feature effect which is more robust than partial dependance plots (PDP)61.

    +

    It is also helpful to inspect the ICE curves to uncover some heterogeneous relationships with the outcome62.

    +

    Advantages:

    +
      +
    • Has a causal interpretation (for the model, not for the real world)
    • +
    • ICE curves can uncover heterogeneous relationships
    • +
    +

    Disadvantages:

    +
      +
    • The method does not take into account interactions.
    • +
    +
    +
    +

    4.1.3.2 Permutation

    +

    The Permutation method was introduced by Breiman in 200163 for Random Forest, and the implementation used here is a model-agnostic version introduced by Fisher et al. in 201964. A feature is “unimportant” if shuffling its values leaves the model error unchanged, assuming that the model has ignored the feature for the prediction.

    +

    Advantages:

    +
      +
    • Easy interpretation: the importance is the increase in model error when the feature’s information is destroyed.
    • +
    • No interactions: the interaction effects are also destroyed by permuting the feature values.
    • +
    +

    Disadvantages:

    +
      +
    • It is linked to the model error: not a disadvantage per se, but may lead to misinterpretation if the goal is to understand how the output varies, regardless of the model’s performance. For example, if we want to measure the robustness of the model when someone tampers the features, we want to know the model variance explained by the features. Model variance (explained by the features) and feature importance correlate strongly when the model generalizes well (it is not overfitting).
    • +
    • Correlations: If features are correlated, the permutation feature importance can be biased by unrealistic data instances. Thus we need to be careful if there are strong correlations between features.
    • +
    +
    +
    +

    4.1.3.3 SHAP

    +

    The SHAP feature importance65 is an alternative to permutation feature importance. The difference between both is that Permutation feature importance is based on the decrease in model performance, while SHAP is based on the magnitude of feature attributions.

    +

    Advantages:

    +
      +
    • It is not linked to the model error: as the underlying concept of SHAP is the Shapley value, the value attributed to each feature is related to its contribution to the output value. If a feature is important, its addition will significantly affect the output.
    • +
    +

    Disadvantages:

    +
      +
    • Computer time: Shapley value is a computationally expensive method and usually is computed using Montecarlo simulations.
    • +
    • The Shapley value can be misinterpreted: The Shapley value of a feature value is not the difference of the predicted value after removing the feature from the model training. The interpretation of the Shapley value is: “Given the current set of feature values, the contribution of a feature value to the difference between the actual prediction and the mean prediction is the estimated Shapley value”62.
    • +
    • Correlations: As with other permutation methods, the SHAP feature importance can be biased by unrealistic data instances when features are correlated.
    • +
    +
    +
    +
    +

    4.1.4 Importance analysis

    +

    Using the three techniques simultaneously allows a broad comparison of the model behavior61. All three methods are model-agnostic (separates interpretation from the model), but as we have seen, each method has its advantages and disadvantages62.

    +

    Fig. 4.4 then shows the variable importance using three methods: Feature Importance Ranking Measure (FIRM) using Individual Conditional Expectation (ICE), Permutation-based, and Shapley Additive explanations (SHAP). The first line of this figure shows an interesting result that probably comes from the main disadvantage of the FIRM method: the method does not take into account interactions. We see that FIRM is the only one that disagrees with the other two methods, giving much importance to window_size.

    +

    In the second line, taking into account the interactions, we see that all methods somewhat agree with each other, accentuating the importance of regime_threshold, which makes sense as it is the most evident parameter we need to set to determine if the Arc Counts are low enough to indicate a regime change.

    +
    +Variables importances using three different methods. A) Feature Importance Ranking Measure using ICE curves. B) Permutation method. C) SHAP (400 iterations). Line 1 refers to the original fit, and line 2 to the re-fit, taking into account the interactions between variables (@fig-interaction).

    -Figure 4.2: Shapelet candidates for Ventricular Tachycardia. +Figure 4.4: Variables importances using three different methods. A) Feature Importance Ranking Measure using ICE curves. B) Permutation method. C) SHAP (400 iterations). Line 1 refers to the original fit, and line 2 to the re-fit, taking into account the interactions between variables (fig-interaction?).

    -

    - +

    Fig. 4.5 and Fig. 4.6 show the effect of each feature on the FLOSS score. The more evident difference is the shape of the effect of time_constraint that initially suggested better results with larger values. However, removing the interactions seems to be a flat line.

    +

    Based on Fig. 4.4 and Fig. 4.6 we can infer that:

    +
      +
    • regime_threshold: is the most important feature, has an optimal value to be set, and since the high interaction with the regime_landmark, both must be tuned simultaneously. In this setting, high thresholds significantly impact the score, probably due to an increase in false positives starting on >0.65 the overall impact is mostly negative.

    • +
    • regime_landmark: is not as important as the regime_threshold, but since there is a high interaction, it must not be underestimated. It is known that the Arc Counts have more uncertainty as we approach the margin of the streaming, and this becomes evident looking at how the score is negatively affected for values below 3.5s.

    • +
    • window_size: has a near zero impact on the score when correctly set. Nevertheless, for higher window values, the score is negatively affected. This high value probably depends on the data domain. In this setting, the model is being tuned towards the changes from atrial fibrillation/non-fibrillation; thus, the “shape of interest” is small compared to the whole heartbeat waveform. Window sizes smaller than 150 are more suitable in this case. As Beyer et al. noted, “as dimensionality increases, the distance to the nearest data point approaches the distance to the farthest data point”66, which means that the bigger the window size, the smaller will be the contrast between different regimes.

    • +
    • mp_threshold: has a fair impact on the score, but primarily by not using it. We start to see a negative impact on the score with values above 0.60, while a constant positive impact with lower values.

    • +
    • time_constraint: is a parameter that must be interpreted cautiously. The 0 (zero) value means no constraint, which is equivalent to the size of the FLOSS history buffer (in our setting, 5000). We can see that this parameter’s impact throughout the possible values is constantly near zero.

    • +
    +

    In short, for the MP computation, the parameter that is worth tuning is the window_size, while for the FLOSS computation, both regime_threshold (mainly) and regime_landmark shall be tuned.

    +
    +This shows the effect each variable has on the FLOSS score. This plot doesn't take into account the variable interactions. +

    +Figure 4.5: This shows the effect each variable has on the FLOSS score. This plot doesn’t take into account the variable interactions.

    -
    -
    - + +
    +This shows the effect each variable has on the FLOSS score, taking into account the interactions. +

    +Figure 4.6: This shows the effect each variable has on the FLOSS score, taking into account the interactions. +

    +
    +

    According to the FLOSS paper41, the window_size is indeed a feature that can be tuned; nevertheless, the results appear to be similar in a reasonably wide range of window sizes, up to a limit, consistent with our findings.

    + +
    +

    4.1.5 Visualizing the predictions

    +

    At this point, the grid search tested a total of 23,389 models with resulting (individual) scores from 0.0002 to 1669.83 (Q25: 0.9838, Q50: 1.8093, Q75: 3.3890).

    +
    +

    4.1.5.1 By recording

    +

    First, we will visualize how the models (in general) performed throughout the individual recordings.

    +

    Fig. 4.7 shows a violin plot of equal areas clipped to the minimum value. The blue color indicates the recordings with a small IQR (interquartile range) of model scores. We see on the left half 10% of the recordings with the worst minimum score, and on the right half, 10% of the recordings with the best minimum score.

    +

    Next, we will visualize some of these predictions to understand why some recordings were difficult to segment. For us to have a simple baseline: a recording with just one regime change, and the model predicts exactly one regime change, but far from the truth, the score will be roughly 1.

    +
    +Violin plot showing the distribution of the FLOSS score achieved by all tested models by recording.  The left half shows the recordings that were difficult to predict (10% overall), whereas the right half shows the recordings that at least one model could achieve a good prediction (10% overall).  The recordings are sorted (left-right) by the minimum (best) score achieved in descending order, and ties are sorted by the median of all recording scores.  The blue color highlights recordings where models had an IQR variability of less than one.  As a simple example, a recording with just one regime change, and the model predicts exactly one change, far from the truth, the score will be roughly 1. +

    +Figure 4.7: Violin plot showing the distribution of the FLOSS score achieved by all tested models by recording. The left half shows the recordings that were difficult to predict (10% overall), whereas the right half shows the recordings that at least one model could achieve a good prediction (10% overall). The recordings are sorted (left-right) by the minimum (best) score achieved in descending order, and ties are sorted by the median of all recording scores. The blue color highlights recordings where models had an IQR variability of less than one. As a simple example, a recording with just one regime change, and the model predicts exactly one change, far from the truth, the score will be roughly 1. +

    +
    +

    Fig. 4.8 shows the best effort in predicting the most complex recordings. One information not declared before is that if the model does not predict any change, it will put a mark on the zero position. On the other side, the truth markers positioned at the beginning and the end of the recording were removed, as these locations lack information and do not represent a streaming setting.

    +
    +Prediction of the worst 10% of recordings (red is the truth, blue are the predictions). +

    +Figure 4.8: Prediction of the worst 10% of recordings (red is the truth, blue are the predictions). +

    +
    +

    Fig. 4.9 shows the best performances of the best recordings. Notice that there are recordings with a significant duration and few regime changes, making it hard for a “trivial model” to predict randomly.

    +
    +Prediction of the best 10% of recordings (red is the truth, blue are the predictions). +

    +Figure 4.9: Prediction of the best 10% of recordings (red is the truth, blue are the predictions). +

    +
    +
    +
    +

    4.1.5.2 By model

    +

    Fig. 4.10 shows the distribution of the FLOSS score of the 10% worst (left side) and 10% best models across the recordings (right side). The bluish color highlights the models with SD below 3 and IQR below 1.

    +
    +Violin plot showing the distribution of the FLOSS score achieved by all tested models during the inner ressample.  The left half shows the models with the worst performances (10% overall), whereas the right half shows the models with the best performances (10% overall). The models are sorted (left-right) by the mean score (top) and by the median (below). Ties are sorted by the SD and IQR, respectively.  The bluish colors highlights models with an SD below 3 and IQR below 1. +

    +Figure 4.10: Violin plot showing the distribution of the FLOSS score achieved by all tested models during the inner ressample. The left half shows the models with the worst performances (10% overall), whereas the right half shows the models with the best performances (10% overall). The models are sorted (left-right) by the mean score (top) and by the median (below). Ties are sorted by the SD and IQR, respectively. The bluish colors highlights models with an SD below 3 and IQR below 1. +

    +
    +

    Fig. 4.11 the performance of the six best models. They are ordered from left to right, from the worst record to the best record. The top model is the one with the lowest mean across the scores. The blue line indicates the mean score, and the red line the median score. The scores above 3 are squished in the plot and colored according to the scale in the legend.

    +
    +Performances of the best 6 models across all inner resample of recordings. The recordings are ordered by score, from the worst to the best. Each plot shows one model, starting from the best one. The red line indicates the median score of the model. The blue line indicates the mean score of the model. The gray line limits the zero-score region. The plot is limited on the "y" axis, and the scores above this limit are shown in color. +

    +Figure 4.11: Performances of the best 6 models across all inner resample of recordings. The recordings are ordered by score, from the worst to the best. Each plot shows one model, starting from the best one. The red line indicates the median score of the model. The blue line indicates the mean score of the model. The gray line limits the zero-score region. The plot is limited on the “y” axis, and the scores above this limit are shown in color. +

    +
    +
    +
    +

    4.1.5.3 The Holdout

    +

    Finally, Table 4.1 shows a summary of the best five models across all the inner resample (cross-validation). The column mean +shows the average score, and column std_err shows the standard error of the mean. The column holdout shows the +final score of this model on the holdout set (outer resample).

    +
    + - - - + + + - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -3132,19 +3515,663 @@

    4.2 Classification

    +
    +

    4.2 Classification

    +

    As described in section 3.4.5, the classification algorithm is based on the Contrast Profile (CP)48. The CP allows us +to detect sequences that at the same time very similar to its neighbors in class A while is very different from the nearest neighbor from class B.

    +

    The variables parameters we can tune are the following:

    +
      +
    • shapelet_size: that we will use interchangeably with the term window_size as is defines the size of the rolling window used to compute the CP. It was used a series of shapelet sizes with exponential distribution, resulting on 20 values from 21 to 401.
    • +
    • top_k: how many shapelets we will select on each CP, being the first one the shapelet with the highest constrast value. It was chosen the default value of 10.
    • +
    • max_shapelets: the maximum number of shapelets we will allow on selecting the shapelet set. It was set as 20 to allow more freedom on the selection of shapelets.
    • +
    • max_redundance: the maximum number of “redundance” we will allow on selecting the shapelet set. The redundance means more than one shapelet can classify correctly the same observation. It was set as 10, to also allow more freedom on the selection of shapelets.
    • +
    +

    Fig. 4.12 shows the workflow using Nested resamplig as described on 3.4.6.

    +
    +
    + +

    +Figure 4.12: Classification pipeline. +

    +
    +

    The dataset used for working Classification algorithm was the CinC/Physionet Challenge 2015 was about “Reducing False Arrhythmia Alarms in the ICU22.

    +

    The selected records were those that contain ventricular tachycardia. The last 10 seconds (at 250hz) of all records were selected and grouped as TRUE alarm and FALSE alarm. A total of 331 records were used, being 245 FALSE alarms, and 86 TRUE alarms.

    +

    The records were split in a proportion of 3/4 (248) for the training set (inner resampling) and 1/4 (83) for the test set (outer resampling). The proportions of TRUE and FALSE alarms were similar to the original dataset: 184 FALSE alarms and 64 TRUE alarms in the training set, and 61 FALSE alarms and 22 TRUE alarms in the test set. The inner resampling was performed using a 5-fold cross-validation.

    +

    In order to compute the Contrast Profile (CP), on each fold, the TRUE alarms were concatenated in one single time-series with a small gap of 300 observation of random noise in order to isolate each alarm. The same was done for the FALSE alarms.

    +

    The following steps were performed for each fold:

    +
      +
    1. The CP was computed with several shapelet sizes (from 21 to 401), and top 10 best shapelet candidates were stored based on the CP values.
    2. +
    3. Every shapelet candidate was evaluated for the hability to classify as TRUE or FALSE alarm along all the concatenated time-series. +
        +
      1. First, the distance profile of the shapelet was computed against the FALSE time-series, and threshold was set in order to not detect any FALSE alarm as TRUE alarm.
      2. +
      3. Second, the distance profile of the shapelet was computed against the TRUE time-series, and using the threshold computed in the previous step, the number of TRUE alarms detected was recorded and called the “coverage” of the shapelet.
      4. +
    4. +
    5. With this information, a Beam Search was performed in order to select the best set of shapelets that maximize the coverage and minimize the number of shapelets. The set of shapelets may contain shapelets of different sizes.
    6. +
    7. The confusion matrix of these sets of shapelets was computed. Other metrics were also computed, such as the F1-score, the accuracy, the precision, the specificity, the MCC, the \(\kappa_m\) and the Kappa.
    8. +
    +

    An example of candidates for ventricular tachycardia is presented on 4.13.

    +
    +Set of shapelets for the classification task. Above shows the model number, the coverage (the proportion of true alarms that were detected) and redundancy during the analysis_split (inner resample), The Precision, the Specificity, and the Km during the testing_split (outer resample). +

    +Figure 4.13: Set of shapelets for the classification task. Above shows the model number, the coverage (the proportion of true alarms that were detected) and redundancy during the analysis_split (inner resample), The Precision, the Specificity, and the Km during the testing_split (outer resample). +

    +
    +

    After the Inner Resampling is done, the best sets of shapelets are selected and evaluated on the Test Set without retraining a new Contrast Profile. Thus assessing the generalization of the shapelet set on new data.

    +

    The criteria to select the best sets of shapelets was described on section 3.5.2 being the Precision the ranking criteria. It was also required that the set being present on more than one fold and in both repetitions. Also, the sets of shapelets that had a negative \(\kappa_m\) were discarded.

    +

    The following results were obtained:

    +
    +Table 4.1: Summary of the five best models. The mean shows the inner resample average score. The holdout shows the final score of the model on the holdout set (outer resample). +
    -Version + +window_size -Author + +regime_threshold -Date + +regime_landmark + +mean + +std_err + +holdout
    -0efd716 + +150 -Francisco Bischoff + +0.45 -2022-02-02 + +9.0 + +1.08 + +0.49 + +0.66 +
    +150 + +0.35 + +5.0 + +1.10 + +0.57 + +0.80 +
    +100 + +0.50 + +9.5 + +1.10 + +0.48 + +0.62 +
    +125 + +0.45 + +7.5 + +1.11 + +0.55 + +0.57 +
    +125 + +0.45 + +7.0 + +1.11 + +0.54 + +0.61
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Table 4.2: Performance of the best five sets of shapelet on the inner resample. +
    +tp + +fp + +tn + +fn + +precision + +recall + +specificity + +accuracy + +f1 + +mcc + +km + +kappa +
    +11 + +1 + +30 + +7 + +0.92 + +0.61 + +0.97 + +0.84 + +0.73 + +0.65 + +0.56 + +0.62 +
    +11 + +1 + +30 + +7 + +0.92 + +0.61 + +0.97 + +0.84 + +0.73 + +0.65 + +0.56 + +0.62 +
    +10 + +1 + +30 + +8 + +0.91 + +0.56 + +0.97 + +0.82 + +0.69 + +0.60 + +0.50 + +0.57 +
    +13 + +2 + +29 + +5 + +0.87 + +0.72 + +0.94 + +0.86 + +0.79 + +0.69 + +0.61 + +0.68 +
    +13 + +3 + +28 + +5 + +0.81 + +0.72 + +0.90 + +0.84 + +0.76 + +0.64 + +0.56 + +0.64 +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Table 4.3: Performance of the best five sets of shapelet on outer resample. +
    +tp + +fp + +tn + +fn + +precision + +recall + +specificity + +accuracy + +f1 + +mcc + +km + +kappa +
    +9 + +3 + +58 + +13 + +0.75 + +0.41 + +0.95 + +0.81 + +0.53 + +0.45 + +0.27 + +0.42 +
    +10 + +1 + +60 + +12 + +0.91 + +0.45 + +0.98 + +0.84 + +0.61 + +0.57 + +0.41 + +0.52 +
    +8 + +5 + +56 + +14 + +0.62 + +0.36 + +0.92 + +0.77 + +0.46 + +0.34 + +0.14 + +0.32 +
    +10 + +3 + +58 + +12 + +0.77 + +0.45 + +0.95 + +0.82 + +0.57 + +0.49 + +0.32 + +0.47 +
    +11 + +5 + +56 + +11 + +0.69 + +0.50 + +0.92 + +0.81 + +0.58 + +0.47 + +0.27 + +0.46 +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Table 4.4: The aggregated performance of the best five sets of shapelet on the outer resample. Median, Q25 and Q75 +
    +precision + +recall + +specificity + +accuracy + +f1_micro + +f1_macro + +mcc + +km + +kappa +
    +0.75 + +0.46 + +0.95 + +0.81 + +0.72 + +0.55 + +0.47 + +0.27 + +0.46 +
    +0.69 + +0.41 + +0.92 + +0.81 + +0.72 + +0.55 + +0.45 + +0.27 + +0.42 +
    +0.77 + +0.46 + +0.95 + +0.82 + +0.72 + +0.55 + +0.49 + +0.32 + +0.47 +
    +

    4.3 Feasibility trial

    A side-project called “false.alarm.io” has been derived from this work (an unfortunate mix of -“false.alarm” and “PlatformIO”57, the IDE chosen to interface the panoply of embedded +“false.alarm” and “PlatformIO”67, the IDE chosen to interface the panoply of embedded systems we can experiment with). The current results of this side-project are very enlightening and show that the final algorithm can indeed be used in small hardware. Further data will be available in the future.

    A brief mentioning, linking back to the objectives of this work, an initial trial was done using an -ESP32 MCU (Fig. 4.3) in order to be sure if such a small device can handle the task.

    +ESP32 MCU (Fig. 4.14) in order to be sure if such a small device can handle the task.

    ESP32 MCU.

    -Figure 4.3: ESP32 MCU. +Figure 4.14: ESP32 MCU.

    @@ -3196,8 +4223,8 @@

    5.1 Matrix Profile

    Since the first paper that presented this new concept13, many investigations have been made to speed its computation. It is notable how all computations are not dependent on the rolling window size as previous works not using Matrix Profile. Aside from this, we can see that the first -STAMP13 algorithm has the time complexity of \(O(n^2log{n})\) while STOMP58 -\(O(n^2)\) (a significant improvement), but STOMP lacks the “any-time” property. Later SCRIMP59 solves this problem keeping the same time complexity of \(O(n^2)\). Here we are in the +STAMP13 algorithm has the time complexity of \(O(n^2log{n})\) while STOMP68 +\(O(n^2)\) (a significant improvement), but STOMP lacks the “any-time” property. Later SCRIMP69 solves this problem keeping the same time complexity of \(O(n^2)\). Here we are in the “exact” algorithms domain, and we will not extend the scope for conciseness.

    The main issue with the algorithms above is the dependency on a fast Fourier transform (FFT) library. FFT has been extensively optimized and architecture/CPU bounded to exploit the most of @@ -3207,7 +4234,7 @@

    5.1 Matrix Profile

    gives us a hint that computing FFT on 4096 data in an ESP32 takes about 21ms (~47 computations in 1 second). This means ~79 seconds for computing all FFT’s (~3797) required for STAMP using a window of 300. Currently, we can compute a full matrix of 5k data in about 9 seconds in an ESP32 MCU (Fig. -4.3), and keep updating it as fast as 1 min of data (at 250hz) in just 6 seconds.

    +4.14), and keep updating it as fast as 1 min of data (at 250hz) in just 6 seconds.

    Recent works using exact algorithms are using an unpublished algorithm called MPX, which computes the Matrix Profile using cross-correlation methods ending up faster and is easily portable.

    @@ -3226,7 +4253,7 @@

    5.1 Matrix Profile

    more impact on these counts. The best ST threshold is still to be determined.


    \[ -CC = 1 - \frac{ED}{(2 \times WindowSize)} \tag{7} \label{edcc} +CC = 1 - \frac{ED}{(2 \times WindowSize)} \tag{9} \label{edcc} \]

    @@ -3338,7 +4365,7 @@

    6 Scientific outcomes

    first package is called tsmp, and a paper was also published in the R Journal18 (Journal Impact Factor™, 2020 of 3.984). The second package is called matrixprofiler and enhances the first one, using low-level language to improve computational speed. The author has also joined -the Matrix Profile Foundation is a co-founder with contributors from Python and Go languages19,20. The benchmarks of the R implementation are available online60.

    +the Matrix Profile Foundation is a co-founder with contributors from Python and Go languages19,20. The benchmarks of the R implementation are available online70.

    Additionally to the above publication and the publication of the ongoing literature survey, two articles about this thesis subject will be published. The first regards the application of the FLOSS algorithm on real-time ECG showing its potential on using on low-power devices. The second is @@ -3350,6 +4377,9 @@

    7 Expected results and outcomes +

    +
    +

    8 References

    1.
    Research compendium. Published 2019. Accessed April 8, 2021. https://research-compendium.science
    @@ -3519,17 +4549,47 @@

    7 Expected results and outcomes
    56.
    Delgado R, Tibau X-A. Why Cohen’s Kappa should be avoided as performance measure in classification. Gu Q, ed. PLOS ONE. 2019;14(9):e0222916. doi:10.1371/journal.pone.0222916

    +
    +
    57.
    Paroxysmal Atrial Fibrillation Events Detection from Dynamic ECG Recordings - The 4th China Physiological Signal Challenge 2021. Published online May 2021. doi:10.5281/zenodo.6879232
    +
    +
    +
    58.
    Wei P, Lu Z, Song J. Variable importance analysis: A comprehensive review. Reliability Engineering & System Safety. 2015;142:399-432. doi:10.1016/j.ress.2015.05.018
    +
    +
    +
    59.
    Chipman HA, George EI, McCulloch RE. BART: Bayesian additive regression trees. The Annals of Applied Statistics. 2010;4(1):266-298. doi:10.1214/09-AOAS285
    +
    +
    +
    60.
    Greenwell BM, Boehmke BC, McCarthy AJ. A simple and effective model-based variable importance measure. Published online 2018. doi:10.48550/arxiv.1805.04755
    +
    +
    +
    61.
    Greenwell BM, Boehmke BC. Variable Importance Plots-An Introduction to the vip Package. R Journal. 2020;12(1):343-366. doi:10.32614/rj-2020-013
    +
    +
    +
    62.
    Molnar C. Interpretable Machine Learning. A Guide for Making Black Box Models Explainable. 2nd ed.; 2022:329. https://christophm.github.io/interpretable-ml-book
    +
    +
    +
    63.
    Breiman L. Random Forests. Machine Learning. 2001;45(1):5-32. doi:10.1023/A:1010933404324
    +
    +
    +
    64.
    Fisher A, Rudin C, Dominici F. All Models are Wrong, but Many are Useful: Learning a Variable’s Importance by Studying an Entire Class of Prediction Models Simultaneously. Journal of machine learning research : JMLR. 2019;20(Vi). http://arxiv.org/abs/1801.01489 http://www.ncbi.nlm.nih.gov/pubmed/34335110 http://www.pubmedcentral.nih.gov/articlerender.fcgi?artid=PMC8323609
    +
    +
    +
    65.
    Lundberg SM, Lee SI. A unified approach to interpreting model predictions. In: Advances in Neural Information Processing Systems. Vol 2017-Decem.; 2017:4766-4775. https://arxiv.org/abs/1705.07874
    +
    +
    +
    66.
    Beyer K, Goldstein J, Ramakrishnan R, Shaft U. When Is “Nearest Neighbor” Meaningful? In: Lecture Notes in Computer Science (Including Subseries Lecture Notes in Artificial Intelligence and Lecture Notes in Bioinformatics). Vol 1540.; 1999:217-235. doi:10.1007/3-540-49257-7_15
    +
    -
    57.
    PlatformIO, a professional collaborative platform for embedded development. Accessed January 5, 2022. https://platformio.org/
    +
    67.
    PlatformIO, a professional collaborative platform for embedded development. Accessed January 5, 2022. https://platformio.org/
    -
    58.
    Zhu Y, Zimmerman Z, Senobari NS, et al. 2016 IEEE 16th international conference on data mining (ICDM). In: IEEE; 2016. doi:10.1109/icdm.2016.0085
    +
    68.
    Zhu Y, Zimmerman Z, Senobari NS, et al. 2016 IEEE 16th international conference on data mining (ICDM). In: IEEE; 2016. doi:10.1109/icdm.2016.0085
    -
    59.
    Zhu Y, Yeh C-CM, Zimmerman Z, Kamgar K, Keogh E. 2018 IEEE international conference on data mining (ICDM). In: IEEE; 2018. doi:10.1109/icdm.2018.00099
    +
    69.
    Zhu Y, Yeh C-CM, Zimmerman Z, Kamgar K, Keogh E. 2018 IEEE international conference on data mining (ICDM). In: IEEE; 2018. doi:10.1109/icdm.2018.00099
    -
    60.
    Bischoff F. RPubs - MatrixProfileR - benchmarks. Published 2021. Accessed January 12, 2022. https://rpubs.com/franzbischoff/matrixprofiler
    +
    70.
    Bischoff F. RPubs - MatrixProfileR - benchmarks. Published 2021. Accessed January 12, 2022. https://rpubs.com/franzbischoff/matrixprofiler

    @@ -3542,124 +4602,174 @@

    7 Expected results and outcomes
    ─ Session info ───────────────────────────────────────────────────────────────
      setting  value
    - version  R version 4.2.1 (2022-06-23)
    - os       Ubuntu 20.04.5 LTS
    + version  R version 4.3.1 (2023-06-16)
    + os       Ubuntu 22.04.2 LTS
      system   x86_64, linux-gnu
      ui       X11
      language (EN)
      collate  en_US.UTF-8
      ctype    en_US.UTF-8
      tz       Europe/Lisbon
    - date     2022-10-05
    + date     2023-08-13
      pandoc   2.17.0.1 @ /usr/bin/ (via rmarkdown)
     
     ─ Packages ───────────────────────────────────────────────────────────────────
      package      * version     date (UTC) lib source
    - askpass        1.1         2019-01-13 [1] CRAN (R 4.2.0)
    - assertthat     0.2.1       2019-03-21 [1] CRAN (R 4.2.0)
    - backports      1.4.1       2021-12-13 [1] CRAN (R 4.2.0)
    - base64url      1.4         2018-05-14 [1] CRAN (R 4.2.0)
    - bookdown       0.29.2      2022-09-26 [1] Github (rstudio/bookdown@dfe92a2)
    - bslib          0.4.0       2022-07-16 [1] CRAN (R 4.2.1)
    - cachem         1.0.6       2021-08-19 [1] CRAN (R 4.2.0)
    - callr          3.7.2       2022-08-22 [1] CRAN (R 4.2.1)
    - cli            3.4.1       2022-09-23 [1] CRAN (R 4.2.1)
    - codetools      0.2-18      2020-11-04 [2] CRAN (R 4.2.0)
    - colorspace     2.0-3       2022-02-21 [1] CRAN (R 4.2.0)
    - crayon         1.5.1       2022-03-26 [1] CRAN (R 4.2.0)
    - credentials    1.3.2       2021-11-29 [1] CRAN (R 4.2.0)
    - data.table     1.14.2      2021-09-27 [1] CRAN (R 4.2.0)
    - DBI            1.1.3       2022-06-18 [1] CRAN (R 4.2.0)
    - debugme        1.1.0       2017-10-22 [1] CRAN (R 4.2.0)
    - devtools       2.4.4       2022-07-20 [1] CRAN (R 4.2.1)
    - digest         0.6.29      2021-12-01 [1] CRAN (R 4.2.0)
    - dplyr          1.0.10      2022-09-01 [1] CRAN (R 4.2.1)
    - ellipsis       0.3.2       2021-04-29 [1] CRAN (R 4.2.0)
    - evaluate       0.16        2022-08-09 [1] CRAN (R 4.2.1)
    - fansi          1.0.3       2022-03-24 [1] CRAN (R 4.2.0)
    - farver         2.1.1       2022-07-06 [1] CRAN (R 4.2.0)
    - fastmap        1.1.0       2021-01-25 [1] CRAN (R 4.2.0)
    - fs             1.5.2       2021-12-08 [1] CRAN (R 4.2.0)
    - generics       0.1.3       2022-07-05 [1] CRAN (R 4.2.0)
    - gert           1.9.0       2022-09-15 [1] CRAN (R 4.2.1)
    - getPass        0.2-2       2017-07-21 [1] CRAN (R 4.2.0)
    - ggplot2      * 3.3.6       2022-05-03 [1] CRAN (R 4.2.0)
    - git2r          0.30.1.9000 2022-04-29 [1] Github (ropensci/git2r@80ba185)
    - gittargets   * 0.0.5.9000  2022-09-26 [1] Github (wlandau/gittargets@a50dd58)
    - glue         * 1.6.2       2022-02-24 [1] CRAN (R 4.2.0)
    - gridExtra    * 2.3         2017-09-09 [1] CRAN (R 4.2.0)
    - gtable         0.3.1       2022-09-01 [1] CRAN (R 4.2.1)
    - here         * 1.0.1       2020-12-13 [1] CRAN (R 4.2.0)
    - highr          0.9         2021-04-16 [1] CRAN (R 4.2.0)
    - htmltools      0.5.3       2022-07-18 [1] CRAN (R 4.2.1)
    - htmlwidgets    1.5.4       2021-09-08 [1] CRAN (R 4.2.0)
    - httpuv         1.6.6       2022-09-08 [1] CRAN (R 4.2.1)
    - httr           1.4.4       2022-08-17 [1] CRAN (R 4.2.1)
    - igraph         1.3.5       2022-09-22 [1] CRAN (R 4.2.1)
    - jquerylib      0.1.4       2021-04-26 [1] CRAN (R 4.2.0)
    - jsonlite       1.8.0       2022-02-22 [1] CRAN (R 4.2.0)
    - kableExtra   * 1.3.4       2021-02-20 [1] CRAN (R 4.2.0)
    - knitr          1.40        2022-08-24 [1] CRAN (R 4.2.1)
    - labeling       0.4.2       2020-10-20 [1] CRAN (R 4.2.0)
    - later          1.3.0       2021-08-18 [1] CRAN (R 4.2.0)
    - lifecycle      1.0.2       2022-09-09 [1] CRAN (R 4.2.1)
    - magrittr       2.0.3       2022-03-30 [1] CRAN (R 4.2.0)
    - memoise        2.0.1       2021-11-26 [1] CRAN (R 4.2.0)
    - mime           0.12        2021-09-28 [1] CRAN (R 4.2.0)
    - miniUI         0.1.1.1     2018-05-18 [1] CRAN (R 4.2.0)
    - munsell        0.5.0       2018-06-12 [1] CRAN (R 4.2.0)
    - openssl        2.0.3       2022-09-14 [1] CRAN (R 4.2.1)
    - pillar         1.8.1       2022-08-19 [1] CRAN (R 4.2.1)
    - pkgbuild       1.3.1       2021-12-20 [1] CRAN (R 4.2.0)
    - pkgconfig      2.0.3       2019-09-22 [1] CRAN (R 4.2.0)
    - pkgload        1.3.0       2022-06-27 [1] CRAN (R 4.2.0)
    - prettyunits    1.1.1       2020-01-24 [1] CRAN (R 4.2.0)
    - processx       3.7.0       2022-07-07 [1] CRAN (R 4.2.1)
    - profvis        0.3.7       2020-11-02 [1] CRAN (R 4.2.1)
    - promises       1.2.0.1     2021-02-11 [1] CRAN (R 4.2.0)
    - ps             1.7.1       2022-06-18 [1] CRAN (R 4.2.0)
    - purrr          0.3.4       2020-04-17 [1] CRAN (R 4.2.0)
    - R6             2.5.1       2021-08-19 [1] CRAN (R 4.2.0)
    - Rcpp           1.0.9       2022-07-08 [1] CRAN (R 4.2.1)
    - RcppParallel   5.1.5       2022-01-05 [1] CRAN (R 4.2.0)
    - remotes        2.4.2       2021-11-30 [1] CRAN (R 4.2.0)
    - renv           0.15.5      2022-05-26 [1] CRAN (R 4.2.0)
    - rlang          1.0.6       2022-09-24 [1] CRAN (R 4.2.1)
    - rmarkdown      2.16.1      2022-09-26 [1] Github (rstudio/rmarkdown@9577707)
    - rprojroot      2.0.3       2022-04-02 [1] CRAN (R 4.2.0)
    - rstudioapi     0.14        2022-08-22 [1] CRAN (R 4.2.1)
    - rvest          1.0.3       2022-08-19 [1] CRAN (R 4.2.1)
    - sass           0.4.2       2022-07-16 [1] CRAN (R 4.2.1)
    - scales         1.2.1       2022-08-20 [1] CRAN (R 4.2.1)
    - sessioninfo    1.2.2       2021-12-06 [1] CRAN (R 4.2.0)
    - shiny          1.7.2       2022-07-19 [1] CRAN (R 4.2.1)
    - stringi        1.7.8       2022-07-11 [1] CRAN (R 4.2.1)
    - stringr        1.4.1       2022-08-20 [1] CRAN (R 4.2.1)
    - svglite        2.1.0.9000  2022-09-26 [1] Github (r-lib/svglite@8f30fc6)
    - sys            3.4         2020-07-23 [1] CRAN (R 4.2.0)
    - systemfonts    1.0.4       2022-02-11 [1] CRAN (R 4.2.0)
    - tarchetypes  * 0.7.1       2022-09-07 [1] CRAN (R 4.2.1)
    - targets      * 0.13.4      2022-09-15 [1] CRAN (R 4.2.1)
    - tibble       * 3.1.8       2022-07-22 [1] CRAN (R 4.2.1)
    - tidyselect     1.1.2       2022-02-21 [1] CRAN (R 4.2.0)
    - tsmp           0.4.15      2022-08-20 [1] CRAN (R 4.2.1)
    - urlchecker     1.0.1       2021-11-30 [1] CRAN (R 4.2.1)
    - usethis        2.1.6.9000  2022-10-03 [1] Github (r-lib/usethis@8ecb7ab)
    - utf8           1.2.2       2021-07-24 [1] CRAN (R 4.2.0)
    - uuid           1.1-0       2022-04-19 [1] CRAN (R 4.2.0)
    - vctrs          0.4.1       2022-04-13 [1] CRAN (R 4.2.0)
    - viridisLite    0.4.1       2022-08-22 [1] CRAN (R 4.2.1)
    - visNetwork   * 2.1.0       2021-09-29 [1] CRAN (R 4.2.0)
    - webshot        0.5.3       2022-04-14 [1] CRAN (R 4.2.0)
    - whisker        0.4         2019-08-28 [1] CRAN (R 4.2.0)
    - withr          2.5.0       2022-03-03 [1] CRAN (R 4.2.0)
    - workflowr    * 1.7.0       2021-12-21 [1] CRAN (R 4.2.0)
    - xfun           0.33        2022-09-12 [1] CRAN (R 4.2.1)
    - xml2           1.3.3       2021-11-30 [1] CRAN (R 4.2.0)
    - xtable         1.8-4       2019-04-21 [1] CRAN (R 4.2.0)
    - yaml           2.3.5       2022-02-21 [1] CRAN (R 4.2.0)
    -
    - [1] /workspace/.cache/R/renv/proj_libs/false.alarm-d6f1a0d1/R-4.2/x86_64-pc-linux-gnu
    + askpass        1.1         2019-01-13 [1] CRAN (R 4.3.0)
    + backports      1.4.1       2021-12-13 [1] CRAN (R 4.3.1)
    + base64url      1.4         2018-05-14 [1] CRAN (R 4.3.0)
    + bit            4.0.5       2022-11-15 [1] CRAN (R 4.3.0)
    + bit64          4.0.5       2020-08-30 [1] CRAN (R 4.3.0)
    + bookdown       0.35.1      2023-08-13 [1] Github (rstudio/bookdown@661567e)
    + bslib          0.5.1       2023-08-11 [1] CRAN (R 4.3.1)
    + cachem         1.0.8       2023-05-01 [1] CRAN (R 4.3.0)
    + callr          3.7.3       2022-11-02 [1] CRAN (R 4.3.1)
    + checkmate      2.2.0       2023-04-27 [1] CRAN (R 4.3.0)
    + class          7.3-22      2023-05-03 [2] CRAN (R 4.3.1)
    + cli            3.6.1       2023-03-23 [1] CRAN (R 4.3.1)
    + codetools      0.2-19      2023-02-01 [2] CRAN (R 4.3.0)
    + colorspace     2.1-0       2023-01-23 [1] CRAN (R 4.3.0)
    + crayon         1.5.2       2022-09-29 [1] CRAN (R 4.3.1)
    + credentials    1.3.2       2021-11-29 [1] CRAN (R 4.3.0)
    + data.table     1.14.8      2023-02-17 [1] CRAN (R 4.3.0)
    + debugme        1.1.0       2017-10-22 [1] CRAN (R 4.3.0)
    + devtools       2.4.5       2022-10-11 [1] CRAN (R 4.3.0)
    + dials          1.2.0       2023-04-03 [1] CRAN (R 4.3.0)
    + DiceDesign     1.9         2021-02-13 [1] CRAN (R 4.3.0)
    + digest         0.6.33      2023-07-07 [1] CRAN (R 4.3.1)
    + dplyr          1.1.2       2023-04-20 [1] CRAN (R 4.3.0)
    + ellipsis       0.3.2       2021-04-29 [1] CRAN (R 4.3.0)
    + evaluate       0.21        2023-05-05 [1] CRAN (R 4.3.0)
    + fansi          1.0.4       2023-01-22 [1] CRAN (R 4.3.0)
    + farver         2.1.1       2022-07-06 [1] CRAN (R 4.3.0)
    + fastmap        1.1.1       2023-02-24 [1] CRAN (R 4.3.0)
    + forcats        1.0.0       2023-01-29 [1] CRAN (R 4.3.0)
    + foreach        1.5.2       2022-02-02 [1] CRAN (R 4.3.0)
    + fs             1.6.3       2023-07-20 [1] CRAN (R 4.3.1)
    + furrr          0.3.1       2022-08-15 [1] CRAN (R 4.3.0)
    + future         1.33.0      2023-07-01 [1] CRAN (R 4.3.1)
    + future.apply   1.11.0      2023-05-21 [1] CRAN (R 4.3.1)
    + future.callr   0.8.2       2023-08-09 [1] CRAN (R 4.3.1)
    + generics       0.1.3       2022-07-05 [1] CRAN (R 4.3.0)
    + gert           1.9.3       2023-08-07 [1] CRAN (R 4.3.1)
    + getPass        0.2-2       2017-07-21 [1] CRAN (R 4.3.0)
    + ggplot2      * 3.4.2       2023-04-03 [1] CRAN (R 4.3.0)
    + git2r          0.32.0.9000 2023-06-30 [1] Github (ropensci/git2r@9c42d41)
    + gittargets   * 0.0.6.9000  2023-05-05 [1] Github (wlandau/gittargets@2d448ff)
    + globals        0.16.2      2022-11-21 [1] CRAN (R 4.3.0)
    + glue         * 1.6.2       2022-02-24 [1] CRAN (R 4.3.1)
    + gower          1.0.1       2022-12-22 [1] CRAN (R 4.3.0)
    + GPfit          1.0-8       2019-02-08 [1] CRAN (R 4.3.0)
    + gridExtra      2.3         2017-09-09 [1] CRAN (R 4.3.0)
    + gtable         0.3.3       2023-03-21 [1] CRAN (R 4.3.0)
    + hardhat        1.3.0       2023-03-30 [1] CRAN (R 4.3.0)
    + here         * 1.0.1       2020-12-13 [1] CRAN (R 4.3.0)
    + highr          0.10        2022-12-22 [1] CRAN (R 4.3.1)
    + hms            1.1.3       2023-03-21 [1] CRAN (R 4.3.0)
    + htmltools      0.5.6       2023-08-10 [1] CRAN (R 4.3.1)
    + htmlwidgets    1.6.2       2023-03-17 [1] CRAN (R 4.3.0)
    + httpuv         1.6.11      2023-05-11 [1] CRAN (R 4.3.1)
    + httr           1.4.6       2023-05-08 [1] CRAN (R 4.3.1)
    + igraph         1.5.1       2023-08-10 [1] CRAN (R 4.3.1)
    + ipred          0.9-14      2023-03-09 [1] CRAN (R 4.3.0)
    + iterators      1.0.14      2022-02-05 [1] CRAN (R 4.3.0)
    + jquerylib      0.1.4       2021-04-26 [1] CRAN (R 4.3.0)
    + jsonlite       1.8.7       2023-06-29 [1] CRAN (R 4.3.0)
    + kableExtra   * 1.3.4       2021-02-20 [1] CRAN (R 4.3.0)
    + knitr          1.43        2023-05-25 [1] CRAN (R 4.3.0)
    + labeling       0.4.2       2020-10-20 [1] CRAN (R 4.3.0)
    + later          1.3.1       2023-05-02 [1] CRAN (R 4.3.1)
    + lattice        0.21-8      2023-04-05 [2] CRAN (R 4.3.0)
    + lava           1.7.2.1     2023-02-27 [1] CRAN (R 4.3.0)
    + lhs            1.1.6       2022-12-17 [1] CRAN (R 4.3.0)
    + lifecycle      1.0.3       2022-10-07 [1] CRAN (R 4.3.1)
    + listenv        0.9.0       2022-12-16 [1] CRAN (R 4.3.0)
    + lubridate      1.9.2       2023-02-10 [1] CRAN (R 4.3.0)
    + magrittr       2.0.3       2022-03-30 [1] CRAN (R 4.3.1)
    + MASS           7.3-60      2023-05-04 [2] CRAN (R 4.3.1)
    + Matrix         1.6-0       2023-07-08 [1] CRAN (R 4.3.1)
    + memoise        2.0.1       2021-11-26 [1] CRAN (R 4.3.0)
    + mgcv           1.9-0       2023-07-11 [1] CRAN (R 4.3.1)
    + mime           0.12        2021-09-28 [1] CRAN (R 4.3.0)
    + miniUI         0.1.1.1     2018-05-18 [1] CRAN (R 4.3.0)
    + munsell        0.5.0       2018-06-12 [1] CRAN (R 4.3.0)
    + nlme           3.1-163     2023-08-09 [1] CRAN (R 4.3.1)
    + nnet           7.3-19      2023-05-03 [2] CRAN (R 4.3.1)
    + openssl        2.1.0       2023-07-15 [1] CRAN (R 4.3.1)
    + parallelly     1.36.0      2023-05-26 [1] CRAN (R 4.3.1)
    + parsnip        1.1.0       2023-04-12 [1] CRAN (R 4.3.0)
    + patchwork    * 1.1.2       2022-08-19 [1] CRAN (R 4.3.0)
    + pillar         1.9.0       2023-03-22 [1] CRAN (R 4.3.0)
    + pkgbuild       1.4.2       2023-06-26 [1] CRAN (R 4.3.1)
    + pkgconfig      2.0.3       2019-09-22 [1] CRAN (R 4.3.0)
    + pkgload        1.3.2.1     2023-07-08 [1] CRAN (R 4.3.1)
    + prettyunits    1.1.1       2020-01-24 [1] CRAN (R 4.3.0)
    + processx       3.8.2       2023-06-30 [1] CRAN (R 4.3.1)
    + prodlim        2023.03.31  2023-04-02 [1] CRAN (R 4.3.0)
    + profvis        0.3.8       2023-05-02 [1] CRAN (R 4.3.1)
    + promises       1.2.1       2023-08-10 [1] CRAN (R 4.3.1)
    + ps             1.7.5       2023-04-18 [1] CRAN (R 4.3.1)
    + purrr          1.0.2       2023-08-10 [1] CRAN (R 4.3.1)
    + R6             2.5.1       2021-08-19 [1] CRAN (R 4.3.1)
    + Rcpp           1.0.11      2023-07-06 [1] CRAN (R 4.3.1)
    + RcppParallel   5.1.7       2023-02-27 [1] CRAN (R 4.3.0)
    + readr          2.1.4       2023-02-10 [1] CRAN (R 4.3.0)
    + recipes        1.0.7       2023-08-10 [1] CRAN (R 4.3.1)
    + remotes        2.4.2.1     2023-07-18 [1] CRAN (R 4.3.1)
    + renv           0.17.3      2023-04-06 [1] CRAN (R 4.3.1)
    + rlang          1.1.1       2023-04-28 [1] CRAN (R 4.3.0)
    + rmarkdown      2.23.4      2023-08-13 [1] Github (rstudio/rmarkdown@054d735)
    + rpart          4.1.19      2022-10-21 [2] CRAN (R 4.3.0)
    + rprojroot      2.0.3       2022-04-02 [1] CRAN (R 4.3.1)
    + rsample        1.1.1       2022-12-07 [1] CRAN (R 4.3.0)
    + rstudioapi     0.15.0      2023-07-07 [1] CRAN (R 4.3.1)
    + rvest          1.0.3       2022-08-19 [1] CRAN (R 4.3.0)
    + sass           0.4.7       2023-07-15 [1] CRAN (R 4.3.1)
    + scales         1.2.1       2022-08-20 [1] CRAN (R 4.3.0)
    + sessioninfo    1.2.2       2021-12-06 [1] CRAN (R 4.3.0)
    + shapviz        0.9.1       2023-07-18 [1] CRAN (R 4.3.1)
    + shiny          1.7.5       2023-08-12 [1] CRAN (R 4.3.1)
    + signal         0.7-7       2021-05-25 [1] CRAN (R 4.3.0)
    + stringi        1.7.12      2023-01-11 [1] CRAN (R 4.3.1)
    + stringr        1.5.0       2022-12-02 [1] CRAN (R 4.3.1)
    + survival       3.5-5       2023-03-12 [2] CRAN (R 4.3.1)
    + svglite        2.1.1.9000  2023-05-05 [1] Github (r-lib/svglite@6c1d359)
    + sys            3.4.2       2023-05-23 [1] CRAN (R 4.3.1)
    + systemfonts    1.0.4       2022-02-11 [1] CRAN (R 4.3.0)
    + tarchetypes  * 0.7.7       2023-06-15 [1] CRAN (R 4.3.1)
    + targets      * 1.2.2       2023-08-10 [1] CRAN (R 4.3.1)
    + tibble       * 3.2.1       2023-03-20 [1] CRAN (R 4.3.0)
    + tidyr          1.3.0       2023-01-24 [1] CRAN (R 4.3.0)
    + tidyselect     1.2.0       2022-10-10 [1] CRAN (R 4.3.0)
    + timechange     0.2.0       2023-01-11 [1] CRAN (R 4.3.0)
    + timeDate       4022.108    2023-01-07 [1] CRAN (R 4.3.0)
    + timetk         2.8.3       2023-03-30 [1] CRAN (R 4.3.0)
    + tsmp           0.4.15      2022-08-20 [1] CRAN (R 4.3.0)
    + tune           1.1.1       2023-04-11 [1] CRAN (R 4.3.0)
    + tzdb           0.4.0       2023-05-12 [1] CRAN (R 4.3.1)
    + urlchecker     1.0.1       2021-11-30 [1] CRAN (R 4.3.0)
    + usethis        2.2.2.9000  2023-07-17 [1] Github (r-lib/usethis@467ff57)
    + utf8           1.2.3       2023-01-31 [1] CRAN (R 4.3.0)
    + uuid           1.1-0       2022-04-19 [1] CRAN (R 4.3.0)
    + vctrs          0.6.3       2023-06-14 [1] CRAN (R 4.3.1)
    + viridisLite    0.4.2       2023-05-02 [1] CRAN (R 4.3.1)
    + visNetwork   * 2.1.2       2022-09-29 [1] CRAN (R 4.3.0)
    + vroom          1.6.3       2023-04-28 [1] CRAN (R 4.3.1)
    + webshot        0.5.5       2023-06-26 [1] CRAN (R 4.3.1)
    + whisker        0.4.1       2022-12-05 [1] CRAN (R 4.3.0)
    + withr          2.5.0       2022-03-03 [1] CRAN (R 4.3.1)
    + workflowr    * 1.7.0       2021-12-21 [1] CRAN (R 4.3.0)
    + workflows      1.1.3       2023-02-22 [1] CRAN (R 4.3.0)
    + xfun           0.40        2023-08-09 [1] CRAN (R 4.3.1)
    + xgboost        1.7.5.1     2023-03-30 [1] CRAN (R 4.3.0)
    + xml2           1.3.5       2023-07-06 [1] CRAN (R 4.3.1)
    + xtable         1.8-4       2019-04-21 [1] CRAN (R 4.3.0)
    + xts            0.13.1      2023-04-16 [1] CRAN (R 4.3.0)
    + yaml           2.3.7       2023-01-23 [1] CRAN (R 4.3.1)
    + yardstick      1.0.0.9000  2023-05-25 [1] Github (tidymodels/yardstick@90ab794)
    + zoo            1.8-12      2023-04-13 [1] CRAN (R 4.3.0)
    +
    + [1] /workspace/.cache/R/renv/proj_libs/false.alarm-d6f1a0d1/R-4.3/x86_64-pc-linux-gnu
      [2] /usr/lib/R/library
     
     ──────────────────────────────────────────────────────────────────────────────
    diff --git a/docs/site_libs/font-awesome-6.4.0/css/all.css b/docs/site_libs/font-awesome-6.4.0/css/all.css new file mode 100644 index 0000000..9615471 --- /dev/null +++ b/docs/site_libs/font-awesome-6.4.0/css/all.css @@ -0,0 +1,7953 @@ +/*! + * Font Awesome Free 6.4.0 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + * Copyright 2023 Fonticons, Inc. + */ +.fa { + font-family: var(--fa-style-family, "Font Awesome 6 Free"); + font-weight: var(--fa-style, 900); } + +.fa, +.fa-classic, +.fa-sharp, +.fas, +.fa-solid, +.far, +.fa-regular, +.fab, +.fa-brands { + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + display: var(--fa-display, inline-block); + font-style: normal; + font-variant: normal; + line-height: 1; + text-rendering: auto; } + +.fas, +.fa-classic, +.fa-solid, +.far, +.fa-regular { + font-family: 'Font Awesome 6 Free'; } + +.fab, +.fa-brands { + font-family: 'Font Awesome 6 Brands'; } + +.fa-1x { + font-size: 1em; } + +.fa-2x { + font-size: 2em; } + +.fa-3x { + font-size: 3em; } + +.fa-4x { + font-size: 4em; } + +.fa-5x { + font-size: 5em; } + +.fa-6x { + font-size: 6em; } + +.fa-7x { + font-size: 7em; } + +.fa-8x { + font-size: 8em; } + +.fa-9x { + font-size: 9em; } + +.fa-10x { + font-size: 10em; } + +.fa-2xs { + font-size: 0.625em; + line-height: 0.1em; + vertical-align: 0.225em; } + +.fa-xs { + font-size: 0.75em; + line-height: 0.08333em; + vertical-align: 0.125em; } + +.fa-sm { + font-size: 0.875em; + line-height: 0.07143em; + vertical-align: 0.05357em; } + +.fa-lg { + font-size: 1.25em; + line-height: 0.05em; + vertical-align: -0.075em; } + +.fa-xl { + font-size: 1.5em; + line-height: 0.04167em; + vertical-align: -0.125em; } + +.fa-2xl { + font-size: 2em; + line-height: 0.03125em; + vertical-align: -0.1875em; } + +.fa-fw { + text-align: center; + width: 1.25em; } + +.fa-ul { + list-style-type: none; + margin-left: var(--fa-li-margin, 2.5em); + padding-left: 0; } + .fa-ul > li { + position: relative; } + +.fa-li { + left: calc(var(--fa-li-width, 2em) * -1); + position: absolute; + text-align: center; + width: var(--fa-li-width, 2em); + line-height: inherit; } + +.fa-border { + border-color: var(--fa-border-color, #eee); + border-radius: var(--fa-border-radius, 0.1em); + border-style: var(--fa-border-style, solid); + border-width: var(--fa-border-width, 0.08em); + padding: var(--fa-border-padding, 0.2em 0.25em 0.15em); } + +.fa-pull-left { + float: left; + margin-right: var(--fa-pull-margin, 0.3em); } + +.fa-pull-right { + float: right; + margin-left: var(--fa-pull-margin, 0.3em); } + +.fa-beat { + -webkit-animation-name: fa-beat; + animation-name: fa-beat; + -webkit-animation-delay: var(--fa-animation-delay, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, ease-in-out); + animation-timing-function: var(--fa-animation-timing, ease-in-out); } + +.fa-bounce { + -webkit-animation-name: fa-bounce; + animation-name: fa-bounce; + -webkit-animation-delay: var(--fa-animation-delay, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.28, 0.84, 0.42, 1)); + animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.28, 0.84, 0.42, 1)); } + +.fa-fade { + -webkit-animation-name: fa-fade; + animation-name: fa-fade; + -webkit-animation-delay: var(--fa-animation-delay, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); + animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); } + +.fa-beat-fade { + -webkit-animation-name: fa-beat-fade; + animation-name: fa-beat-fade; + -webkit-animation-delay: var(--fa-animation-delay, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); + animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); } + +.fa-flip { + -webkit-animation-name: fa-flip; + animation-name: fa-flip; + -webkit-animation-delay: var(--fa-animation-delay, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, ease-in-out); + animation-timing-function: var(--fa-animation-timing, ease-in-out); } + +.fa-shake { + -webkit-animation-name: fa-shake; + animation-name: fa-shake; + -webkit-animation-delay: var(--fa-animation-delay, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, linear); + animation-timing-function: var(--fa-animation-timing, linear); } + +.fa-spin { + -webkit-animation-name: fa-spin; + animation-name: fa-spin; + -webkit-animation-delay: var(--fa-animation-delay, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 2s); + animation-duration: var(--fa-animation-duration, 2s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, linear); + animation-timing-function: var(--fa-animation-timing, linear); } + +.fa-spin-reverse { + --fa-animation-direction: reverse; } + +.fa-pulse, +.fa-spin-pulse { + -webkit-animation-name: fa-spin; + animation-name: fa-spin; + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, steps(8)); + animation-timing-function: var(--fa-animation-timing, steps(8)); } + +@media (prefers-reduced-motion: reduce) { + .fa-beat, + .fa-bounce, + .fa-fade, + .fa-beat-fade, + .fa-flip, + .fa-pulse, + .fa-shake, + .fa-spin, + .fa-spin-pulse { + -webkit-animation-delay: -1ms; + animation-delay: -1ms; + -webkit-animation-duration: 1ms; + animation-duration: 1ms; + -webkit-animation-iteration-count: 1; + animation-iteration-count: 1; + -webkit-transition-delay: 0s; + transition-delay: 0s; + -webkit-transition-duration: 0s; + transition-duration: 0s; } } + +@-webkit-keyframes fa-beat { + 0%, 90% { + -webkit-transform: scale(1); + transform: scale(1); } + 45% { + -webkit-transform: scale(var(--fa-beat-scale, 1.25)); + transform: scale(var(--fa-beat-scale, 1.25)); } } + +@keyframes fa-beat { + 0%, 90% { + -webkit-transform: scale(1); + transform: scale(1); } + 45% { + -webkit-transform: scale(var(--fa-beat-scale, 1.25)); + transform: scale(var(--fa-beat-scale, 1.25)); } } + +@-webkit-keyframes fa-bounce { + 0% { + -webkit-transform: scale(1, 1) translateY(0); + transform: scale(1, 1) translateY(0); } + 10% { + -webkit-transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0); + transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0); } + 30% { + -webkit-transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em)); + transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em)); } + 50% { + -webkit-transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0); + transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0); } + 57% { + -webkit-transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em)); + transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em)); } + 64% { + -webkit-transform: scale(1, 1) translateY(0); + transform: scale(1, 1) translateY(0); } + 100% { + -webkit-transform: scale(1, 1) translateY(0); + transform: scale(1, 1) translateY(0); } } + +@keyframes fa-bounce { + 0% { + -webkit-transform: scale(1, 1) translateY(0); + transform: scale(1, 1) translateY(0); } + 10% { + -webkit-transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0); + transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0); } + 30% { + -webkit-transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em)); + transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em)); } + 50% { + -webkit-transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0); + transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0); } + 57% { + -webkit-transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em)); + transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em)); } + 64% { + -webkit-transform: scale(1, 1) translateY(0); + transform: scale(1, 1) translateY(0); } + 100% { + -webkit-transform: scale(1, 1) translateY(0); + transform: scale(1, 1) translateY(0); } } + +@-webkit-keyframes fa-fade { + 50% { + opacity: var(--fa-fade-opacity, 0.4); } } + +@keyframes fa-fade { + 50% { + opacity: var(--fa-fade-opacity, 0.4); } } + +@-webkit-keyframes fa-beat-fade { + 0%, 100% { + opacity: var(--fa-beat-fade-opacity, 0.4); + -webkit-transform: scale(1); + transform: scale(1); } + 50% { + opacity: 1; + -webkit-transform: scale(var(--fa-beat-fade-scale, 1.125)); + transform: scale(var(--fa-beat-fade-scale, 1.125)); } } + +@keyframes fa-beat-fade { + 0%, 100% { + opacity: var(--fa-beat-fade-opacity, 0.4); + -webkit-transform: scale(1); + transform: scale(1); } + 50% { + opacity: 1; + -webkit-transform: scale(var(--fa-beat-fade-scale, 1.125)); + transform: scale(var(--fa-beat-fade-scale, 1.125)); } } + +@-webkit-keyframes fa-flip { + 50% { + -webkit-transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg)); + transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg)); } } + +@keyframes fa-flip { + 50% { + -webkit-transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg)); + transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg)); } } + +@-webkit-keyframes fa-shake { + 0% { + -webkit-transform: rotate(-15deg); + transform: rotate(-15deg); } + 4% { + -webkit-transform: rotate(15deg); + transform: rotate(15deg); } + 8%, 24% { + -webkit-transform: rotate(-18deg); + transform: rotate(-18deg); } + 12%, 28% { + -webkit-transform: rotate(18deg); + transform: rotate(18deg); } + 16% { + -webkit-transform: rotate(-22deg); + transform: rotate(-22deg); } + 20% { + -webkit-transform: rotate(22deg); + transform: rotate(22deg); } + 32% { + -webkit-transform: rotate(-12deg); + transform: rotate(-12deg); } + 36% { + -webkit-transform: rotate(12deg); + transform: rotate(12deg); } + 40%, 100% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); } } + +@keyframes fa-shake { + 0% { + -webkit-transform: rotate(-15deg); + transform: rotate(-15deg); } + 4% { + -webkit-transform: rotate(15deg); + transform: rotate(15deg); } + 8%, 24% { + -webkit-transform: rotate(-18deg); + transform: rotate(-18deg); } + 12%, 28% { + -webkit-transform: rotate(18deg); + transform: rotate(18deg); } + 16% { + -webkit-transform: rotate(-22deg); + transform: rotate(-22deg); } + 20% { + -webkit-transform: rotate(22deg); + transform: rotate(22deg); } + 32% { + -webkit-transform: rotate(-12deg); + transform: rotate(-12deg); } + 36% { + -webkit-transform: rotate(12deg); + transform: rotate(12deg); } + 40%, 100% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); } } + +@-webkit-keyframes fa-spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); } + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); } } + +@keyframes fa-spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); } + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); } } + +.fa-rotate-90 { + -webkit-transform: rotate(90deg); + transform: rotate(90deg); } + +.fa-rotate-180 { + -webkit-transform: rotate(180deg); + transform: rotate(180deg); } + +.fa-rotate-270 { + -webkit-transform: rotate(270deg); + transform: rotate(270deg); } + +.fa-flip-horizontal { + -webkit-transform: scale(-1, 1); + transform: scale(-1, 1); } + +.fa-flip-vertical { + -webkit-transform: scale(1, -1); + transform: scale(1, -1); } + +.fa-flip-both, +.fa-flip-horizontal.fa-flip-vertical { + -webkit-transform: scale(-1, -1); + transform: scale(-1, -1); } + +.fa-rotate-by { + -webkit-transform: rotate(var(--fa-rotate-angle, none)); + transform: rotate(var(--fa-rotate-angle, none)); } + +.fa-stack { + display: inline-block; + height: 2em; + line-height: 2em; + position: relative; + vertical-align: middle; + width: 2.5em; } + +.fa-stack-1x, +.fa-stack-2x { + left: 0; + position: absolute; + text-align: center; + width: 100%; + z-index: var(--fa-stack-z-index, auto); } + +.fa-stack-1x { + line-height: inherit; } + +.fa-stack-2x { + font-size: 2em; } + +.fa-inverse { + color: var(--fa-inverse, #fff); } + +/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen +readers do not read off random characters that represent icons */ + +.fa-0::before { + content: "\30"; } + +.fa-1::before { + content: "\31"; } + +.fa-2::before { + content: "\32"; } + +.fa-3::before { + content: "\33"; } + +.fa-4::before { + content: "\34"; } + +.fa-5::before { + content: "\35"; } + +.fa-6::before { + content: "\36"; } + +.fa-7::before { + content: "\37"; } + +.fa-8::before { + content: "\38"; } + +.fa-9::before { + content: "\39"; } + +.fa-fill-drip::before { + content: "\f576"; } + +.fa-arrows-to-circle::before { + content: "\e4bd"; } + +.fa-circle-chevron-right::before { + content: "\f138"; } + +.fa-chevron-circle-right::before { + content: "\f138"; } + +.fa-at::before { + content: "\40"; } + +.fa-trash-can::before { + content: "\f2ed"; } + +.fa-trash-alt::before { + content: "\f2ed"; } + +.fa-text-height::before { + content: "\f034"; } + +.fa-user-xmark::before { + content: "\f235"; } + +.fa-user-times::before { + content: "\f235"; } + +.fa-stethoscope::before { + content: "\f0f1"; } + +.fa-message::before { + content: "\f27a"; } + +.fa-comment-alt::before { + content: "\f27a"; } + +.fa-info::before { + content: "\f129"; } + +.fa-down-left-and-up-right-to-center::before { + content: "\f422"; } + +.fa-compress-alt::before { + content: "\f422"; } + +.fa-explosion::before { + content: "\e4e9"; } + +.fa-file-lines::before { + content: "\f15c"; } + +.fa-file-alt::before { + content: "\f15c"; } + +.fa-file-text::before { + content: "\f15c"; } + +.fa-wave-square::before { + content: "\f83e"; } + +.fa-ring::before { + content: "\f70b"; } + +.fa-building-un::before { + content: "\e4d9"; } + +.fa-dice-three::before { + content: "\f527"; } + +.fa-calendar-days::before { + content: "\f073"; } + +.fa-calendar-alt::before { + content: "\f073"; } + +.fa-anchor-circle-check::before { + content: "\e4aa"; } + +.fa-building-circle-arrow-right::before { + content: "\e4d1"; } + +.fa-volleyball::before { + content: "\f45f"; } + +.fa-volleyball-ball::before { + content: "\f45f"; } + +.fa-arrows-up-to-line::before { + content: "\e4c2"; } + +.fa-sort-down::before { + content: "\f0dd"; } + +.fa-sort-desc::before { + content: "\f0dd"; } + +.fa-circle-minus::before { + content: "\f056"; } + +.fa-minus-circle::before { + content: "\f056"; } + +.fa-door-open::before { + content: "\f52b"; } + +.fa-right-from-bracket::before { + content: "\f2f5"; } + +.fa-sign-out-alt::before { + content: "\f2f5"; } + +.fa-atom::before { + content: "\f5d2"; } + +.fa-soap::before { + content: "\e06e"; } + +.fa-icons::before { + content: "\f86d"; } + +.fa-heart-music-camera-bolt::before { + content: "\f86d"; } + +.fa-microphone-lines-slash::before { + content: "\f539"; } + +.fa-microphone-alt-slash::before { + content: "\f539"; } + +.fa-bridge-circle-check::before { + content: "\e4c9"; } + +.fa-pump-medical::before { + content: "\e06a"; } + +.fa-fingerprint::before { + content: "\f577"; } + +.fa-hand-point-right::before { + content: "\f0a4"; } + +.fa-magnifying-glass-location::before { + content: "\f689"; } + +.fa-search-location::before { + content: "\f689"; } + +.fa-forward-step::before { + content: "\f051"; } + +.fa-step-forward::before { + content: "\f051"; } + +.fa-face-smile-beam::before { + content: "\f5b8"; } + +.fa-smile-beam::before { + content: "\f5b8"; } + +.fa-flag-checkered::before { + content: "\f11e"; } + +.fa-football::before { + content: "\f44e"; } + +.fa-football-ball::before { + content: "\f44e"; } + +.fa-school-circle-exclamation::before { + content: "\e56c"; } + +.fa-crop::before { + content: "\f125"; } + +.fa-angles-down::before { + content: "\f103"; } + +.fa-angle-double-down::before { + content: "\f103"; } + +.fa-users-rectangle::before { + content: "\e594"; } + +.fa-people-roof::before { + content: "\e537"; } + +.fa-people-line::before { + content: "\e534"; } + +.fa-beer-mug-empty::before { + content: "\f0fc"; } + +.fa-beer::before { + content: "\f0fc"; } + +.fa-diagram-predecessor::before { + content: "\e477"; } + +.fa-arrow-up-long::before { + content: "\f176"; } + +.fa-long-arrow-up::before { + content: "\f176"; } + +.fa-fire-flame-simple::before { + content: "\f46a"; } + +.fa-burn::before { + content: "\f46a"; } + +.fa-person::before { + content: "\f183"; } + +.fa-male::before { + content: "\f183"; } + +.fa-laptop::before { + content: "\f109"; } + +.fa-file-csv::before { + content: "\f6dd"; } + +.fa-menorah::before { + content: "\f676"; } + +.fa-truck-plane::before { + content: "\e58f"; } + +.fa-record-vinyl::before { + content: "\f8d9"; } + +.fa-face-grin-stars::before { + content: "\f587"; } + +.fa-grin-stars::before { + content: "\f587"; } + +.fa-bong::before { + content: "\f55c"; } + +.fa-spaghetti-monster-flying::before { + content: "\f67b"; } + +.fa-pastafarianism::before { + content: "\f67b"; } + +.fa-arrow-down-up-across-line::before { + content: "\e4af"; } + +.fa-spoon::before { + content: "\f2e5"; } + +.fa-utensil-spoon::before { + content: "\f2e5"; } + +.fa-jar-wheat::before { + content: "\e517"; } + +.fa-envelopes-bulk::before { + content: "\f674"; } + +.fa-mail-bulk::before { + content: "\f674"; } + +.fa-file-circle-exclamation::before { + content: "\e4eb"; } + +.fa-circle-h::before { + content: "\f47e"; } + +.fa-hospital-symbol::before { + content: "\f47e"; } + +.fa-pager::before { + content: "\f815"; } + +.fa-address-book::before { + content: "\f2b9"; } + +.fa-contact-book::before { + content: "\f2b9"; } + +.fa-strikethrough::before { + content: "\f0cc"; } + +.fa-k::before { + content: "\4b"; } + +.fa-landmark-flag::before { + content: "\e51c"; } + +.fa-pencil::before { + content: "\f303"; } + +.fa-pencil-alt::before { + content: "\f303"; } + +.fa-backward::before { + content: "\f04a"; } + +.fa-caret-right::before { + content: "\f0da"; } + +.fa-comments::before { + content: "\f086"; } + +.fa-paste::before { + content: "\f0ea"; } + +.fa-file-clipboard::before { + content: "\f0ea"; } + +.fa-code-pull-request::before { + content: "\e13c"; } + +.fa-clipboard-list::before { + content: "\f46d"; } + +.fa-truck-ramp-box::before { + content: "\f4de"; } + +.fa-truck-loading::before { + content: "\f4de"; } + +.fa-user-check::before { + content: "\f4fc"; } + +.fa-vial-virus::before { + content: "\e597"; } + +.fa-sheet-plastic::before { + content: "\e571"; } + +.fa-blog::before { + content: "\f781"; } + +.fa-user-ninja::before { + content: "\f504"; } + +.fa-person-arrow-up-from-line::before { + content: "\e539"; } + +.fa-scroll-torah::before { + content: "\f6a0"; } + +.fa-torah::before { + content: "\f6a0"; } + +.fa-broom-ball::before { + content: "\f458"; } + +.fa-quidditch::before { + content: "\f458"; } + +.fa-quidditch-broom-ball::before { + content: "\f458"; } + +.fa-toggle-off::before { + content: "\f204"; } + +.fa-box-archive::before { + content: "\f187"; } + +.fa-archive::before { + content: "\f187"; } + +.fa-person-drowning::before { + content: "\e545"; } + +.fa-arrow-down-9-1::before { + content: "\f886"; } + +.fa-sort-numeric-desc::before { + content: "\f886"; } + +.fa-sort-numeric-down-alt::before { + content: "\f886"; } + +.fa-face-grin-tongue-squint::before { + content: "\f58a"; } + +.fa-grin-tongue-squint::before { + content: "\f58a"; } + +.fa-spray-can::before { + content: "\f5bd"; } + +.fa-truck-monster::before { + content: "\f63b"; } + +.fa-w::before { + content: "\57"; } + +.fa-earth-africa::before { + content: "\f57c"; } + +.fa-globe-africa::before { + content: "\f57c"; } + +.fa-rainbow::before { + content: "\f75b"; } + +.fa-circle-notch::before { + content: "\f1ce"; } + +.fa-tablet-screen-button::before { + content: "\f3fa"; } + +.fa-tablet-alt::before { + content: "\f3fa"; } + +.fa-paw::before { + content: "\f1b0"; } + +.fa-cloud::before { + content: "\f0c2"; } + +.fa-trowel-bricks::before { + content: "\e58a"; } + +.fa-face-flushed::before { + content: "\f579"; } + +.fa-flushed::before { + content: "\f579"; } + +.fa-hospital-user::before { + content: "\f80d"; } + +.fa-tent-arrow-left-right::before { + content: "\e57f"; } + +.fa-gavel::before { + content: "\f0e3"; } + +.fa-legal::before { + content: "\f0e3"; } + +.fa-binoculars::before { + content: "\f1e5"; } + +.fa-microphone-slash::before { + content: "\f131"; } + +.fa-box-tissue::before { + content: "\e05b"; } + +.fa-motorcycle::before { + content: "\f21c"; } + +.fa-bell-concierge::before { + content: "\f562"; } + +.fa-concierge-bell::before { + content: "\f562"; } + +.fa-pen-ruler::before { + content: "\f5ae"; } + +.fa-pencil-ruler::before { + content: "\f5ae"; } + +.fa-people-arrows::before { + content: "\e068"; } + +.fa-people-arrows-left-right::before { + content: "\e068"; } + +.fa-mars-and-venus-burst::before { + content: "\e523"; } + +.fa-square-caret-right::before { + content: "\f152"; } + +.fa-caret-square-right::before { + content: "\f152"; } + +.fa-scissors::before { + content: "\f0c4"; } + +.fa-cut::before { + content: "\f0c4"; } + +.fa-sun-plant-wilt::before { + content: "\e57a"; } + +.fa-toilets-portable::before { + content: "\e584"; } + +.fa-hockey-puck::before { + content: "\f453"; } + +.fa-table::before { + content: "\f0ce"; } + +.fa-magnifying-glass-arrow-right::before { + content: "\e521"; } + +.fa-tachograph-digital::before { + content: "\f566"; } + +.fa-digital-tachograph::before { + content: "\f566"; } + +.fa-users-slash::before { + content: "\e073"; } + +.fa-clover::before { + content: "\e139"; } + +.fa-reply::before { + content: "\f3e5"; } + +.fa-mail-reply::before { + content: "\f3e5"; } + +.fa-star-and-crescent::before { + content: "\f699"; } + +.fa-house-fire::before { + content: "\e50c"; } + +.fa-square-minus::before { + content: "\f146"; } + +.fa-minus-square::before { + content: "\f146"; } + +.fa-helicopter::before { + content: "\f533"; } + +.fa-compass::before { + content: "\f14e"; } + +.fa-square-caret-down::before { + content: "\f150"; } + +.fa-caret-square-down::before { + content: "\f150"; } + +.fa-file-circle-question::before { + content: "\e4ef"; } + +.fa-laptop-code::before { + content: "\f5fc"; } + +.fa-swatchbook::before { + content: "\f5c3"; } + +.fa-prescription-bottle::before { + content: "\f485"; } + +.fa-bars::before { + content: "\f0c9"; } + +.fa-navicon::before { + content: "\f0c9"; } + +.fa-people-group::before { + content: "\e533"; } + +.fa-hourglass-end::before { + content: "\f253"; } + +.fa-hourglass-3::before { + content: "\f253"; } + +.fa-heart-crack::before { + content: "\f7a9"; } + +.fa-heart-broken::before { + content: "\f7a9"; } + +.fa-square-up-right::before { + content: "\f360"; } + +.fa-external-link-square-alt::before { + content: "\f360"; } + +.fa-face-kiss-beam::before { + content: "\f597"; } + +.fa-kiss-beam::before { + content: "\f597"; } + +.fa-film::before { + content: "\f008"; } + +.fa-ruler-horizontal::before { + content: "\f547"; } + +.fa-people-robbery::before { + content: "\e536"; } + +.fa-lightbulb::before { + content: "\f0eb"; } + +.fa-caret-left::before { + content: "\f0d9"; } + +.fa-circle-exclamation::before { + content: "\f06a"; } + +.fa-exclamation-circle::before { + content: "\f06a"; } + +.fa-school-circle-xmark::before { + content: "\e56d"; } + +.fa-arrow-right-from-bracket::before { + content: "\f08b"; } + +.fa-sign-out::before { + content: "\f08b"; } + +.fa-circle-chevron-down::before { + content: "\f13a"; } + +.fa-chevron-circle-down::before { + content: "\f13a"; } + +.fa-unlock-keyhole::before { + content: "\f13e"; } + +.fa-unlock-alt::before { + content: "\f13e"; } + +.fa-cloud-showers-heavy::before { + content: "\f740"; } + +.fa-headphones-simple::before { + content: "\f58f"; } + +.fa-headphones-alt::before { + content: "\f58f"; } + +.fa-sitemap::before { + content: "\f0e8"; } + +.fa-circle-dollar-to-slot::before { + content: "\f4b9"; } + +.fa-donate::before { + content: "\f4b9"; } + +.fa-memory::before { + content: "\f538"; } + +.fa-road-spikes::before { + content: "\e568"; } + +.fa-fire-burner::before { + content: "\e4f1"; } + +.fa-flag::before { + content: "\f024"; } + +.fa-hanukiah::before { + content: "\f6e6"; } + +.fa-feather::before { + content: "\f52d"; } + +.fa-volume-low::before { + content: "\f027"; } + +.fa-volume-down::before { + content: "\f027"; } + +.fa-comment-slash::before { + content: "\f4b3"; } + +.fa-cloud-sun-rain::before { + content: "\f743"; } + +.fa-compress::before { + content: "\f066"; } + +.fa-wheat-awn::before { + content: "\e2cd"; } + +.fa-wheat-alt::before { + content: "\e2cd"; } + +.fa-ankh::before { + content: "\f644"; } + +.fa-hands-holding-child::before { + content: "\e4fa"; } + +.fa-asterisk::before { + content: "\2a"; } + +.fa-square-check::before { + content: "\f14a"; } + +.fa-check-square::before { + content: "\f14a"; } + +.fa-peseta-sign::before { + content: "\e221"; } + +.fa-heading::before { + content: "\f1dc"; } + +.fa-header::before { + content: "\f1dc"; } + +.fa-ghost::before { + content: "\f6e2"; } + +.fa-list::before { + content: "\f03a"; } + +.fa-list-squares::before { + content: "\f03a"; } + +.fa-square-phone-flip::before { + content: "\f87b"; } + +.fa-phone-square-alt::before { + content: "\f87b"; } + +.fa-cart-plus::before { + content: "\f217"; } + +.fa-gamepad::before { + content: "\f11b"; } + +.fa-circle-dot::before { + content: "\f192"; } + +.fa-dot-circle::before { + content: "\f192"; } + +.fa-face-dizzy::before { + content: "\f567"; } + +.fa-dizzy::before { + content: "\f567"; } + +.fa-egg::before { + content: "\f7fb"; } + +.fa-house-medical-circle-xmark::before { + content: "\e513"; } + +.fa-campground::before { + content: "\f6bb"; } + +.fa-folder-plus::before { + content: "\f65e"; } + +.fa-futbol::before { + content: "\f1e3"; } + +.fa-futbol-ball::before { + content: "\f1e3"; } + +.fa-soccer-ball::before { + content: "\f1e3"; } + +.fa-paintbrush::before { + content: "\f1fc"; } + +.fa-paint-brush::before { + content: "\f1fc"; } + +.fa-lock::before { + content: "\f023"; } + +.fa-gas-pump::before { + content: "\f52f"; } + +.fa-hot-tub-person::before { + content: "\f593"; } + +.fa-hot-tub::before { + content: "\f593"; } + +.fa-map-location::before { + content: "\f59f"; } + +.fa-map-marked::before { + content: "\f59f"; } + +.fa-house-flood-water::before { + content: "\e50e"; } + +.fa-tree::before { + content: "\f1bb"; } + +.fa-bridge-lock::before { + content: "\e4cc"; } + +.fa-sack-dollar::before { + content: "\f81d"; } + +.fa-pen-to-square::before { + content: "\f044"; } + +.fa-edit::before { + content: "\f044"; } + +.fa-car-side::before { + content: "\f5e4"; } + +.fa-share-nodes::before { + content: "\f1e0"; } + +.fa-share-alt::before { + content: "\f1e0"; } + +.fa-heart-circle-minus::before { + content: "\e4ff"; } + +.fa-hourglass-half::before { + content: "\f252"; } + +.fa-hourglass-2::before { + content: "\f252"; } + +.fa-microscope::before { + content: "\f610"; } + +.fa-sink::before { + content: "\e06d"; } + +.fa-bag-shopping::before { + content: "\f290"; } + +.fa-shopping-bag::before { + content: "\f290"; } + +.fa-arrow-down-z-a::before { + content: "\f881"; } + +.fa-sort-alpha-desc::before { + content: "\f881"; } + +.fa-sort-alpha-down-alt::before { + content: "\f881"; } + +.fa-mitten::before { + content: "\f7b5"; } + +.fa-person-rays::before { + content: "\e54d"; } + +.fa-users::before { + content: "\f0c0"; } + +.fa-eye-slash::before { + content: "\f070"; } + +.fa-flask-vial::before { + content: "\e4f3"; } + +.fa-hand::before { + content: "\f256"; } + +.fa-hand-paper::before { + content: "\f256"; } + +.fa-om::before { + content: "\f679"; } + +.fa-worm::before { + content: "\e599"; } + +.fa-house-circle-xmark::before { + content: "\e50b"; } + +.fa-plug::before { + content: "\f1e6"; } + +.fa-chevron-up::before { + content: "\f077"; } + +.fa-hand-spock::before { + content: "\f259"; } + +.fa-stopwatch::before { + content: "\f2f2"; } + +.fa-face-kiss::before { + content: "\f596"; } + +.fa-kiss::before { + content: "\f596"; } + +.fa-bridge-circle-xmark::before { + content: "\e4cb"; } + +.fa-face-grin-tongue::before { + content: "\f589"; } + +.fa-grin-tongue::before { + content: "\f589"; } + +.fa-chess-bishop::before { + content: "\f43a"; } + +.fa-face-grin-wink::before { + content: "\f58c"; } + +.fa-grin-wink::before { + content: "\f58c"; } + +.fa-ear-deaf::before { + content: "\f2a4"; } + +.fa-deaf::before { + content: "\f2a4"; } + +.fa-deafness::before { + content: "\f2a4"; } + +.fa-hard-of-hearing::before { + content: "\f2a4"; } + +.fa-road-circle-check::before { + content: "\e564"; } + +.fa-dice-five::before { + content: "\f523"; } + +.fa-square-rss::before { + content: "\f143"; } + +.fa-rss-square::before { + content: "\f143"; } + +.fa-land-mine-on::before { + content: "\e51b"; } + +.fa-i-cursor::before { + content: "\f246"; } + +.fa-stamp::before { + content: "\f5bf"; } + +.fa-stairs::before { + content: "\e289"; } + +.fa-i::before { + content: "\49"; } + +.fa-hryvnia-sign::before { + content: "\f6f2"; } + +.fa-hryvnia::before { + content: "\f6f2"; } + +.fa-pills::before { + content: "\f484"; } + +.fa-face-grin-wide::before { + content: "\f581"; } + +.fa-grin-alt::before { + content: "\f581"; } + +.fa-tooth::before { + content: "\f5c9"; } + +.fa-v::before { + content: "\56"; } + +.fa-bangladeshi-taka-sign::before { + content: "\e2e6"; } + +.fa-bicycle::before { + content: "\f206"; } + +.fa-staff-snake::before { + content: "\e579"; } + +.fa-rod-asclepius::before { + content: "\e579"; } + +.fa-rod-snake::before { + content: "\e579"; } + +.fa-staff-aesculapius::before { + content: "\e579"; } + +.fa-head-side-cough-slash::before { + content: "\e062"; } + +.fa-truck-medical::before { + content: "\f0f9"; } + +.fa-ambulance::before { + content: "\f0f9"; } + +.fa-wheat-awn-circle-exclamation::before { + content: "\e598"; } + +.fa-snowman::before { + content: "\f7d0"; } + +.fa-mortar-pestle::before { + content: "\f5a7"; } + +.fa-road-barrier::before { + content: "\e562"; } + +.fa-school::before { + content: "\f549"; } + +.fa-igloo::before { + content: "\f7ae"; } + +.fa-joint::before { + content: "\f595"; } + +.fa-angle-right::before { + content: "\f105"; } + +.fa-horse::before { + content: "\f6f0"; } + +.fa-q::before { + content: "\51"; } + +.fa-g::before { + content: "\47"; } + +.fa-notes-medical::before { + content: "\f481"; } + +.fa-temperature-half::before { + content: "\f2c9"; } + +.fa-temperature-2::before { + content: "\f2c9"; } + +.fa-thermometer-2::before { + content: "\f2c9"; } + +.fa-thermometer-half::before { + content: "\f2c9"; } + +.fa-dong-sign::before { + content: "\e169"; } + +.fa-capsules::before { + content: "\f46b"; } + +.fa-poo-storm::before { + content: "\f75a"; } + +.fa-poo-bolt::before { + content: "\f75a"; } + +.fa-face-frown-open::before { + content: "\f57a"; } + +.fa-frown-open::before { + content: "\f57a"; } + +.fa-hand-point-up::before { + content: "\f0a6"; } + +.fa-money-bill::before { + content: "\f0d6"; } + +.fa-bookmark::before { + content: "\f02e"; } + +.fa-align-justify::before { + content: "\f039"; } + +.fa-umbrella-beach::before { + content: "\f5ca"; } + +.fa-helmet-un::before { + content: "\e503"; } + +.fa-bullseye::before { + content: "\f140"; } + +.fa-bacon::before { + content: "\f7e5"; } + +.fa-hand-point-down::before { + content: "\f0a7"; } + +.fa-arrow-up-from-bracket::before { + content: "\e09a"; } + +.fa-folder::before { + content: "\f07b"; } + +.fa-folder-blank::before { + content: "\f07b"; } + +.fa-file-waveform::before { + content: "\f478"; } + +.fa-file-medical-alt::before { + content: "\f478"; } + +.fa-radiation::before { + content: "\f7b9"; } + +.fa-chart-simple::before { + content: "\e473"; } + +.fa-mars-stroke::before { + content: "\f229"; } + +.fa-vial::before { + content: "\f492"; } + +.fa-gauge::before { + content: "\f624"; } + +.fa-dashboard::before { + content: "\f624"; } + +.fa-gauge-med::before { + content: "\f624"; } + +.fa-tachometer-alt-average::before { + content: "\f624"; } + +.fa-wand-magic-sparkles::before { + content: "\e2ca"; } + +.fa-magic-wand-sparkles::before { + content: "\e2ca"; } + +.fa-e::before { + content: "\45"; } + +.fa-pen-clip::before { + content: "\f305"; } + +.fa-pen-alt::before { + content: "\f305"; } + +.fa-bridge-circle-exclamation::before { + content: "\e4ca"; } + +.fa-user::before { + content: "\f007"; } + +.fa-school-circle-check::before { + content: "\e56b"; } + +.fa-dumpster::before { + content: "\f793"; } + +.fa-van-shuttle::before { + content: "\f5b6"; } + +.fa-shuttle-van::before { + content: "\f5b6"; } + +.fa-building-user::before { + content: "\e4da"; } + +.fa-square-caret-left::before { + content: "\f191"; } + +.fa-caret-square-left::before { + content: "\f191"; } + +.fa-highlighter::before { + content: "\f591"; } + +.fa-key::before { + content: "\f084"; } + +.fa-bullhorn::before { + content: "\f0a1"; } + +.fa-globe::before { + content: "\f0ac"; } + +.fa-synagogue::before { + content: "\f69b"; } + +.fa-person-half-dress::before { + content: "\e548"; } + +.fa-road-bridge::before { + content: "\e563"; } + +.fa-location-arrow::before { + content: "\f124"; } + +.fa-c::before { + content: "\43"; } + +.fa-tablet-button::before { + content: "\f10a"; } + +.fa-building-lock::before { + content: "\e4d6"; } + +.fa-pizza-slice::before { + content: "\f818"; } + +.fa-money-bill-wave::before { + content: "\f53a"; } + +.fa-chart-area::before { + content: "\f1fe"; } + +.fa-area-chart::before { + content: "\f1fe"; } + +.fa-house-flag::before { + content: "\e50d"; } + +.fa-person-circle-minus::before { + content: "\e540"; } + +.fa-ban::before { + content: "\f05e"; } + +.fa-cancel::before { + content: "\f05e"; } + +.fa-camera-rotate::before { + content: "\e0d8"; } + +.fa-spray-can-sparkles::before { + content: "\f5d0"; } + +.fa-air-freshener::before { + content: "\f5d0"; } + +.fa-star::before { + content: "\f005"; } + +.fa-repeat::before { + content: "\f363"; } + +.fa-cross::before { + content: "\f654"; } + +.fa-box::before { + content: "\f466"; } + +.fa-venus-mars::before { + content: "\f228"; } + +.fa-arrow-pointer::before { + content: "\f245"; } + +.fa-mouse-pointer::before { + content: "\f245"; } + +.fa-maximize::before { + content: "\f31e"; } + +.fa-expand-arrows-alt::before { + content: "\f31e"; } + +.fa-charging-station::before { + content: "\f5e7"; } + +.fa-shapes::before { + content: "\f61f"; } + +.fa-triangle-circle-square::before { + content: "\f61f"; } + +.fa-shuffle::before { + content: "\f074"; } + +.fa-random::before { + content: "\f074"; } + +.fa-person-running::before { + content: "\f70c"; } + +.fa-running::before { + content: "\f70c"; } + +.fa-mobile-retro::before { + content: "\e527"; } + +.fa-grip-lines-vertical::before { + content: "\f7a5"; } + +.fa-spider::before { + content: "\f717"; } + +.fa-hands-bound::before { + content: "\e4f9"; } + +.fa-file-invoice-dollar::before { + content: "\f571"; } + +.fa-plane-circle-exclamation::before { + content: "\e556"; } + +.fa-x-ray::before { + content: "\f497"; } + +.fa-spell-check::before { + content: "\f891"; } + +.fa-slash::before { + content: "\f715"; } + +.fa-computer-mouse::before { + content: "\f8cc"; } + +.fa-mouse::before { + content: "\f8cc"; } + +.fa-arrow-right-to-bracket::before { + content: "\f090"; } + +.fa-sign-in::before { + content: "\f090"; } + +.fa-shop-slash::before { + content: "\e070"; } + +.fa-store-alt-slash::before { + content: "\e070"; } + +.fa-server::before { + content: "\f233"; } + +.fa-virus-covid-slash::before { + content: "\e4a9"; } + +.fa-shop-lock::before { + content: "\e4a5"; } + +.fa-hourglass-start::before { + content: "\f251"; } + +.fa-hourglass-1::before { + content: "\f251"; } + +.fa-blender-phone::before { + content: "\f6b6"; } + +.fa-building-wheat::before { + content: "\e4db"; } + +.fa-person-breastfeeding::before { + content: "\e53a"; } + +.fa-right-to-bracket::before { + content: "\f2f6"; } + +.fa-sign-in-alt::before { + content: "\f2f6"; } + +.fa-venus::before { + content: "\f221"; } + +.fa-passport::before { + content: "\f5ab"; } + +.fa-heart-pulse::before { + content: "\f21e"; } + +.fa-heartbeat::before { + content: "\f21e"; } + +.fa-people-carry-box::before { + content: "\f4ce"; } + +.fa-people-carry::before { + content: "\f4ce"; } + +.fa-temperature-high::before { + content: "\f769"; } + +.fa-microchip::before { + content: "\f2db"; } + +.fa-crown::before { + content: "\f521"; } + +.fa-weight-hanging::before { + content: "\f5cd"; } + +.fa-xmarks-lines::before { + content: "\e59a"; } + +.fa-file-prescription::before { + content: "\f572"; } + +.fa-weight-scale::before { + content: "\f496"; } + +.fa-weight::before { + content: "\f496"; } + +.fa-user-group::before { + content: "\f500"; } + +.fa-user-friends::before { + content: "\f500"; } + +.fa-arrow-up-a-z::before { + content: "\f15e"; } + +.fa-sort-alpha-up::before { + content: "\f15e"; } + +.fa-chess-knight::before { + content: "\f441"; } + +.fa-face-laugh-squint::before { + content: "\f59b"; } + +.fa-laugh-squint::before { + content: "\f59b"; } + +.fa-wheelchair::before { + content: "\f193"; } + +.fa-circle-arrow-up::before { + content: "\f0aa"; } + +.fa-arrow-circle-up::before { + content: "\f0aa"; } + +.fa-toggle-on::before { + content: "\f205"; } + +.fa-person-walking::before { + content: "\f554"; } + +.fa-walking::before { + content: "\f554"; } + +.fa-l::before { + content: "\4c"; } + +.fa-fire::before { + content: "\f06d"; } + +.fa-bed-pulse::before { + content: "\f487"; } + +.fa-procedures::before { + content: "\f487"; } + +.fa-shuttle-space::before { + content: "\f197"; } + +.fa-space-shuttle::before { + content: "\f197"; } + +.fa-face-laugh::before { + content: "\f599"; } + +.fa-laugh::before { + content: "\f599"; } + +.fa-folder-open::before { + content: "\f07c"; } + +.fa-heart-circle-plus::before { + content: "\e500"; } + +.fa-code-fork::before { + content: "\e13b"; } + +.fa-city::before { + content: "\f64f"; } + +.fa-microphone-lines::before { + content: "\f3c9"; } + +.fa-microphone-alt::before { + content: "\f3c9"; } + +.fa-pepper-hot::before { + content: "\f816"; } + +.fa-unlock::before { + content: "\f09c"; } + +.fa-colon-sign::before { + content: "\e140"; } + +.fa-headset::before { + content: "\f590"; } + +.fa-store-slash::before { + content: "\e071"; } + +.fa-road-circle-xmark::before { + content: "\e566"; } + +.fa-user-minus::before { + content: "\f503"; } + +.fa-mars-stroke-up::before { + content: "\f22a"; } + +.fa-mars-stroke-v::before { + content: "\f22a"; } + +.fa-champagne-glasses::before { + content: "\f79f"; } + +.fa-glass-cheers::before { + content: "\f79f"; } + +.fa-clipboard::before { + content: "\f328"; } + +.fa-house-circle-exclamation::before { + content: "\e50a"; } + +.fa-file-arrow-up::before { + content: "\f574"; } + +.fa-file-upload::before { + content: "\f574"; } + +.fa-wifi::before { + content: "\f1eb"; } + +.fa-wifi-3::before { + content: "\f1eb"; } + +.fa-wifi-strong::before { + content: "\f1eb"; } + +.fa-bath::before { + content: "\f2cd"; } + +.fa-bathtub::before { + content: "\f2cd"; } + +.fa-underline::before { + content: "\f0cd"; } + +.fa-user-pen::before { + content: "\f4ff"; } + +.fa-user-edit::before { + content: "\f4ff"; } + +.fa-signature::before { + content: "\f5b7"; } + +.fa-stroopwafel::before { + content: "\f551"; } + +.fa-bold::before { + content: "\f032"; } + +.fa-anchor-lock::before { + content: "\e4ad"; } + +.fa-building-ngo::before { + content: "\e4d7"; } + +.fa-manat-sign::before { + content: "\e1d5"; } + +.fa-not-equal::before { + content: "\f53e"; } + +.fa-border-top-left::before { + content: "\f853"; } + +.fa-border-style::before { + content: "\f853"; } + +.fa-map-location-dot::before { + content: "\f5a0"; } + +.fa-map-marked-alt::before { + content: "\f5a0"; } + +.fa-jedi::before { + content: "\f669"; } + +.fa-square-poll-vertical::before { + content: "\f681"; } + +.fa-poll::before { + content: "\f681"; } + +.fa-mug-hot::before { + content: "\f7b6"; } + +.fa-car-battery::before { + content: "\f5df"; } + +.fa-battery-car::before { + content: "\f5df"; } + +.fa-gift::before { + content: "\f06b"; } + +.fa-dice-two::before { + content: "\f528"; } + +.fa-chess-queen::before { + content: "\f445"; } + +.fa-glasses::before { + content: "\f530"; } + +.fa-chess-board::before { + content: "\f43c"; } + +.fa-building-circle-check::before { + content: "\e4d2"; } + +.fa-person-chalkboard::before { + content: "\e53d"; } + +.fa-mars-stroke-right::before { + content: "\f22b"; } + +.fa-mars-stroke-h::before { + content: "\f22b"; } + +.fa-hand-back-fist::before { + content: "\f255"; } + +.fa-hand-rock::before { + content: "\f255"; } + +.fa-square-caret-up::before { + content: "\f151"; } + +.fa-caret-square-up::before { + content: "\f151"; } + +.fa-cloud-showers-water::before { + content: "\e4e4"; } + +.fa-chart-bar::before { + content: "\f080"; } + +.fa-bar-chart::before { + content: "\f080"; } + +.fa-hands-bubbles::before { + content: "\e05e"; } + +.fa-hands-wash::before { + content: "\e05e"; } + +.fa-less-than-equal::before { + content: "\f537"; } + +.fa-train::before { + content: "\f238"; } + +.fa-eye-low-vision::before { + content: "\f2a8"; } + +.fa-low-vision::before { + content: "\f2a8"; } + +.fa-crow::before { + content: "\f520"; } + +.fa-sailboat::before { + content: "\e445"; } + +.fa-window-restore::before { + content: "\f2d2"; } + +.fa-square-plus::before { + content: "\f0fe"; } + +.fa-plus-square::before { + content: "\f0fe"; } + +.fa-torii-gate::before { + content: "\f6a1"; } + +.fa-frog::before { + content: "\f52e"; } + +.fa-bucket::before { + content: "\e4cf"; } + +.fa-image::before { + content: "\f03e"; } + +.fa-microphone::before { + content: "\f130"; } + +.fa-cow::before { + content: "\f6c8"; } + +.fa-caret-up::before { + content: "\f0d8"; } + +.fa-screwdriver::before { + content: "\f54a"; } + +.fa-folder-closed::before { + content: "\e185"; } + +.fa-house-tsunami::before { + content: "\e515"; } + +.fa-square-nfi::before { + content: "\e576"; } + +.fa-arrow-up-from-ground-water::before { + content: "\e4b5"; } + +.fa-martini-glass::before { + content: "\f57b"; } + +.fa-glass-martini-alt::before { + content: "\f57b"; } + +.fa-rotate-left::before { + content: "\f2ea"; } + +.fa-rotate-back::before { + content: "\f2ea"; } + +.fa-rotate-backward::before { + content: "\f2ea"; } + +.fa-undo-alt::before { + content: "\f2ea"; } + +.fa-table-columns::before { + content: "\f0db"; } + +.fa-columns::before { + content: "\f0db"; } + +.fa-lemon::before { + content: "\f094"; } + +.fa-head-side-mask::before { + content: "\e063"; } + +.fa-handshake::before { + content: "\f2b5"; } + +.fa-gem::before { + content: "\f3a5"; } + +.fa-dolly::before { + content: "\f472"; } + +.fa-dolly-box::before { + content: "\f472"; } + +.fa-smoking::before { + content: "\f48d"; } + +.fa-minimize::before { + content: "\f78c"; } + +.fa-compress-arrows-alt::before { + content: "\f78c"; } + +.fa-monument::before { + content: "\f5a6"; } + +.fa-snowplow::before { + content: "\f7d2"; } + +.fa-angles-right::before { + content: "\f101"; } + +.fa-angle-double-right::before { + content: "\f101"; } + +.fa-cannabis::before { + content: "\f55f"; } + +.fa-circle-play::before { + content: "\f144"; } + +.fa-play-circle::before { + content: "\f144"; } + +.fa-tablets::before { + content: "\f490"; } + +.fa-ethernet::before { + content: "\f796"; } + +.fa-euro-sign::before { + content: "\f153"; } + +.fa-eur::before { + content: "\f153"; } + +.fa-euro::before { + content: "\f153"; } + +.fa-chair::before { + content: "\f6c0"; } + +.fa-circle-check::before { + content: "\f058"; } + +.fa-check-circle::before { + content: "\f058"; } + +.fa-circle-stop::before { + content: "\f28d"; } + +.fa-stop-circle::before { + content: "\f28d"; } + +.fa-compass-drafting::before { + content: "\f568"; } + +.fa-drafting-compass::before { + content: "\f568"; } + +.fa-plate-wheat::before { + content: "\e55a"; } + +.fa-icicles::before { + content: "\f7ad"; } + +.fa-person-shelter::before { + content: "\e54f"; } + +.fa-neuter::before { + content: "\f22c"; } + +.fa-id-badge::before { + content: "\f2c1"; } + +.fa-marker::before { + content: "\f5a1"; } + +.fa-face-laugh-beam::before { + content: "\f59a"; } + +.fa-laugh-beam::before { + content: "\f59a"; } + +.fa-helicopter-symbol::before { + content: "\e502"; } + +.fa-universal-access::before { + content: "\f29a"; } + +.fa-circle-chevron-up::before { + content: "\f139"; } + +.fa-chevron-circle-up::before { + content: "\f139"; } + +.fa-lari-sign::before { + content: "\e1c8"; } + +.fa-volcano::before { + content: "\f770"; } + +.fa-person-walking-dashed-line-arrow-right::before { + content: "\e553"; } + +.fa-sterling-sign::before { + content: "\f154"; } + +.fa-gbp::before { + content: "\f154"; } + +.fa-pound-sign::before { + content: "\f154"; } + +.fa-viruses::before { + content: "\e076"; } + +.fa-square-person-confined::before { + content: "\e577"; } + +.fa-user-tie::before { + content: "\f508"; } + +.fa-arrow-down-long::before { + content: "\f175"; } + +.fa-long-arrow-down::before { + content: "\f175"; } + +.fa-tent-arrow-down-to-line::before { + content: "\e57e"; } + +.fa-certificate::before { + content: "\f0a3"; } + +.fa-reply-all::before { + content: "\f122"; } + +.fa-mail-reply-all::before { + content: "\f122"; } + +.fa-suitcase::before { + content: "\f0f2"; } + +.fa-person-skating::before { + content: "\f7c5"; } + +.fa-skating::before { + content: "\f7c5"; } + +.fa-filter-circle-dollar::before { + content: "\f662"; } + +.fa-funnel-dollar::before { + content: "\f662"; } + +.fa-camera-retro::before { + content: "\f083"; } + +.fa-circle-arrow-down::before { + content: "\f0ab"; } + +.fa-arrow-circle-down::before { + content: "\f0ab"; } + +.fa-file-import::before { + content: "\f56f"; } + +.fa-arrow-right-to-file::before { + content: "\f56f"; } + +.fa-square-arrow-up-right::before { + content: "\f14c"; } + +.fa-external-link-square::before { + content: "\f14c"; } + +.fa-box-open::before { + content: "\f49e"; } + +.fa-scroll::before { + content: "\f70e"; } + +.fa-spa::before { + content: "\f5bb"; } + +.fa-location-pin-lock::before { + content: "\e51f"; } + +.fa-pause::before { + content: "\f04c"; } + +.fa-hill-avalanche::before { + content: "\e507"; } + +.fa-temperature-empty::before { + content: "\f2cb"; } + +.fa-temperature-0::before { + content: "\f2cb"; } + +.fa-thermometer-0::before { + content: "\f2cb"; } + +.fa-thermometer-empty::before { + content: "\f2cb"; } + +.fa-bomb::before { + content: "\f1e2"; } + +.fa-registered::before { + content: "\f25d"; } + +.fa-address-card::before { + content: "\f2bb"; } + +.fa-contact-card::before { + content: "\f2bb"; } + +.fa-vcard::before { + content: "\f2bb"; } + +.fa-scale-unbalanced-flip::before { + content: "\f516"; } + +.fa-balance-scale-right::before { + content: "\f516"; } + +.fa-subscript::before { + content: "\f12c"; } + +.fa-diamond-turn-right::before { + content: "\f5eb"; } + +.fa-directions::before { + content: "\f5eb"; } + +.fa-burst::before { + content: "\e4dc"; } + +.fa-house-laptop::before { + content: "\e066"; } + +.fa-laptop-house::before { + content: "\e066"; } + +.fa-face-tired::before { + content: "\f5c8"; } + +.fa-tired::before { + content: "\f5c8"; } + +.fa-money-bills::before { + content: "\e1f3"; } + +.fa-smog::before { + content: "\f75f"; } + +.fa-crutch::before { + content: "\f7f7"; } + +.fa-cloud-arrow-up::before { + content: "\f0ee"; } + +.fa-cloud-upload::before { + content: "\f0ee"; } + +.fa-cloud-upload-alt::before { + content: "\f0ee"; } + +.fa-palette::before { + content: "\f53f"; } + +.fa-arrows-turn-right::before { + content: "\e4c0"; } + +.fa-vest::before { + content: "\e085"; } + +.fa-ferry::before { + content: "\e4ea"; } + +.fa-arrows-down-to-people::before { + content: "\e4b9"; } + +.fa-seedling::before { + content: "\f4d8"; } + +.fa-sprout::before { + content: "\f4d8"; } + +.fa-left-right::before { + content: "\f337"; } + +.fa-arrows-alt-h::before { + content: "\f337"; } + +.fa-boxes-packing::before { + content: "\e4c7"; } + +.fa-circle-arrow-left::before { + content: "\f0a8"; } + +.fa-arrow-circle-left::before { + content: "\f0a8"; } + +.fa-group-arrows-rotate::before { + content: "\e4f6"; } + +.fa-bowl-food::before { + content: "\e4c6"; } + +.fa-candy-cane::before { + content: "\f786"; } + +.fa-arrow-down-wide-short::before { + content: "\f160"; } + +.fa-sort-amount-asc::before { + content: "\f160"; } + +.fa-sort-amount-down::before { + content: "\f160"; } + +.fa-cloud-bolt::before { + content: "\f76c"; } + +.fa-thunderstorm::before { + content: "\f76c"; } + +.fa-text-slash::before { + content: "\f87d"; } + +.fa-remove-format::before { + content: "\f87d"; } + +.fa-face-smile-wink::before { + content: "\f4da"; } + +.fa-smile-wink::before { + content: "\f4da"; } + +.fa-file-word::before { + content: "\f1c2"; } + +.fa-file-powerpoint::before { + content: "\f1c4"; } + +.fa-arrows-left-right::before { + content: "\f07e"; } + +.fa-arrows-h::before { + content: "\f07e"; } + +.fa-house-lock::before { + content: "\e510"; } + +.fa-cloud-arrow-down::before { + content: "\f0ed"; } + +.fa-cloud-download::before { + content: "\f0ed"; } + +.fa-cloud-download-alt::before { + content: "\f0ed"; } + +.fa-children::before { + content: "\e4e1"; } + +.fa-chalkboard::before { + content: "\f51b"; } + +.fa-blackboard::before { + content: "\f51b"; } + +.fa-user-large-slash::before { + content: "\f4fa"; } + +.fa-user-alt-slash::before { + content: "\f4fa"; } + +.fa-envelope-open::before { + content: "\f2b6"; } + +.fa-handshake-simple-slash::before { + content: "\e05f"; } + +.fa-handshake-alt-slash::before { + content: "\e05f"; } + +.fa-mattress-pillow::before { + content: "\e525"; } + +.fa-guarani-sign::before { + content: "\e19a"; } + +.fa-arrows-rotate::before { + content: "\f021"; } + +.fa-refresh::before { + content: "\f021"; } + +.fa-sync::before { + content: "\f021"; } + +.fa-fire-extinguisher::before { + content: "\f134"; } + +.fa-cruzeiro-sign::before { + content: "\e152"; } + +.fa-greater-than-equal::before { + content: "\f532"; } + +.fa-shield-halved::before { + content: "\f3ed"; } + +.fa-shield-alt::before { + content: "\f3ed"; } + +.fa-book-atlas::before { + content: "\f558"; } + +.fa-atlas::before { + content: "\f558"; } + +.fa-virus::before { + content: "\e074"; } + +.fa-envelope-circle-check::before { + content: "\e4e8"; } + +.fa-layer-group::before { + content: "\f5fd"; } + +.fa-arrows-to-dot::before { + content: "\e4be"; } + +.fa-archway::before { + content: "\f557"; } + +.fa-heart-circle-check::before { + content: "\e4fd"; } + +.fa-house-chimney-crack::before { + content: "\f6f1"; } + +.fa-house-damage::before { + content: "\f6f1"; } + +.fa-file-zipper::before { + content: "\f1c6"; } + +.fa-file-archive::before { + content: "\f1c6"; } + +.fa-square::before { + content: "\f0c8"; } + +.fa-martini-glass-empty::before { + content: "\f000"; } + +.fa-glass-martini::before { + content: "\f000"; } + +.fa-couch::before { + content: "\f4b8"; } + +.fa-cedi-sign::before { + content: "\e0df"; } + +.fa-italic::before { + content: "\f033"; } + +.fa-church::before { + content: "\f51d"; } + +.fa-comments-dollar::before { + content: "\f653"; } + +.fa-democrat::before { + content: "\f747"; } + +.fa-z::before { + content: "\5a"; } + +.fa-person-skiing::before { + content: "\f7c9"; } + +.fa-skiing::before { + content: "\f7c9"; } + +.fa-road-lock::before { + content: "\e567"; } + +.fa-a::before { + content: "\41"; } + +.fa-temperature-arrow-down::before { + content: "\e03f"; } + +.fa-temperature-down::before { + content: "\e03f"; } + +.fa-feather-pointed::before { + content: "\f56b"; } + +.fa-feather-alt::before { + content: "\f56b"; } + +.fa-p::before { + content: "\50"; } + +.fa-snowflake::before { + content: "\f2dc"; } + +.fa-newspaper::before { + content: "\f1ea"; } + +.fa-rectangle-ad::before { + content: "\f641"; } + +.fa-ad::before { + content: "\f641"; } + +.fa-circle-arrow-right::before { + content: "\f0a9"; } + +.fa-arrow-circle-right::before { + content: "\f0a9"; } + +.fa-filter-circle-xmark::before { + content: "\e17b"; } + +.fa-locust::before { + content: "\e520"; } + +.fa-sort::before { + content: "\f0dc"; } + +.fa-unsorted::before { + content: "\f0dc"; } + +.fa-list-ol::before { + content: "\f0cb"; } + +.fa-list-1-2::before { + content: "\f0cb"; } + +.fa-list-numeric::before { + content: "\f0cb"; } + +.fa-person-dress-burst::before { + content: "\e544"; } + +.fa-money-check-dollar::before { + content: "\f53d"; } + +.fa-money-check-alt::before { + content: "\f53d"; } + +.fa-vector-square::before { + content: "\f5cb"; } + +.fa-bread-slice::before { + content: "\f7ec"; } + +.fa-language::before { + content: "\f1ab"; } + +.fa-face-kiss-wink-heart::before { + content: "\f598"; } + +.fa-kiss-wink-heart::before { + content: "\f598"; } + +.fa-filter::before { + content: "\f0b0"; } + +.fa-question::before { + content: "\3f"; } + +.fa-file-signature::before { + content: "\f573"; } + +.fa-up-down-left-right::before { + content: "\f0b2"; } + +.fa-arrows-alt::before { + content: "\f0b2"; } + +.fa-house-chimney-user::before { + content: "\e065"; } + +.fa-hand-holding-heart::before { + content: "\f4be"; } + +.fa-puzzle-piece::before { + content: "\f12e"; } + +.fa-money-check::before { + content: "\f53c"; } + +.fa-star-half-stroke::before { + content: "\f5c0"; } + +.fa-star-half-alt::before { + content: "\f5c0"; } + +.fa-code::before { + content: "\f121"; } + +.fa-whiskey-glass::before { + content: "\f7a0"; } + +.fa-glass-whiskey::before { + content: "\f7a0"; } + +.fa-building-circle-exclamation::before { + content: "\e4d3"; } + +.fa-magnifying-glass-chart::before { + content: "\e522"; } + +.fa-arrow-up-right-from-square::before { + content: "\f08e"; } + +.fa-external-link::before { + content: "\f08e"; } + +.fa-cubes-stacked::before { + content: "\e4e6"; } + +.fa-won-sign::before { + content: "\f159"; } + +.fa-krw::before { + content: "\f159"; } + +.fa-won::before { + content: "\f159"; } + +.fa-virus-covid::before { + content: "\e4a8"; } + +.fa-austral-sign::before { + content: "\e0a9"; } + +.fa-f::before { + content: "\46"; } + +.fa-leaf::before { + content: "\f06c"; } + +.fa-road::before { + content: "\f018"; } + +.fa-taxi::before { + content: "\f1ba"; } + +.fa-cab::before { + content: "\f1ba"; } + +.fa-person-circle-plus::before { + content: "\e541"; } + +.fa-chart-pie::before { + content: "\f200"; } + +.fa-pie-chart::before { + content: "\f200"; } + +.fa-bolt-lightning::before { + content: "\e0b7"; } + +.fa-sack-xmark::before { + content: "\e56a"; } + +.fa-file-excel::before { + content: "\f1c3"; } + +.fa-file-contract::before { + content: "\f56c"; } + +.fa-fish-fins::before { + content: "\e4f2"; } + +.fa-building-flag::before { + content: "\e4d5"; } + +.fa-face-grin-beam::before { + content: "\f582"; } + +.fa-grin-beam::before { + content: "\f582"; } + +.fa-object-ungroup::before { + content: "\f248"; } + +.fa-poop::before { + content: "\f619"; } + +.fa-location-pin::before { + content: "\f041"; } + +.fa-map-marker::before { + content: "\f041"; } + +.fa-kaaba::before { + content: "\f66b"; } + +.fa-toilet-paper::before { + content: "\f71e"; } + +.fa-helmet-safety::before { + content: "\f807"; } + +.fa-hard-hat::before { + content: "\f807"; } + +.fa-hat-hard::before { + content: "\f807"; } + +.fa-eject::before { + content: "\f052"; } + +.fa-circle-right::before { + content: "\f35a"; } + +.fa-arrow-alt-circle-right::before { + content: "\f35a"; } + +.fa-plane-circle-check::before { + content: "\e555"; } + +.fa-face-rolling-eyes::before { + content: "\f5a5"; } + +.fa-meh-rolling-eyes::before { + content: "\f5a5"; } + +.fa-object-group::before { + content: "\f247"; } + +.fa-chart-line::before { + content: "\f201"; } + +.fa-line-chart::before { + content: "\f201"; } + +.fa-mask-ventilator::before { + content: "\e524"; } + +.fa-arrow-right::before { + content: "\f061"; } + +.fa-signs-post::before { + content: "\f277"; } + +.fa-map-signs::before { + content: "\f277"; } + +.fa-cash-register::before { + content: "\f788"; } + +.fa-person-circle-question::before { + content: "\e542"; } + +.fa-h::before { + content: "\48"; } + +.fa-tarp::before { + content: "\e57b"; } + +.fa-screwdriver-wrench::before { + content: "\f7d9"; } + +.fa-tools::before { + content: "\f7d9"; } + +.fa-arrows-to-eye::before { + content: "\e4bf"; } + +.fa-plug-circle-bolt::before { + content: "\e55b"; } + +.fa-heart::before { + content: "\f004"; } + +.fa-mars-and-venus::before { + content: "\f224"; } + +.fa-house-user::before { + content: "\e1b0"; } + +.fa-home-user::before { + content: "\e1b0"; } + +.fa-dumpster-fire::before { + content: "\f794"; } + +.fa-house-crack::before { + content: "\e3b1"; } + +.fa-martini-glass-citrus::before { + content: "\f561"; } + +.fa-cocktail::before { + content: "\f561"; } + +.fa-face-surprise::before { + content: "\f5c2"; } + +.fa-surprise::before { + content: "\f5c2"; } + +.fa-bottle-water::before { + content: "\e4c5"; } + +.fa-circle-pause::before { + content: "\f28b"; } + +.fa-pause-circle::before { + content: "\f28b"; } + +.fa-toilet-paper-slash::before { + content: "\e072"; } + +.fa-apple-whole::before { + content: "\f5d1"; } + +.fa-apple-alt::before { + content: "\f5d1"; } + +.fa-kitchen-set::before { + content: "\e51a"; } + +.fa-r::before { + content: "\52"; } + +.fa-temperature-quarter::before { + content: "\f2ca"; } + +.fa-temperature-1::before { + content: "\f2ca"; } + +.fa-thermometer-1::before { + content: "\f2ca"; } + +.fa-thermometer-quarter::before { + content: "\f2ca"; } + +.fa-cube::before { + content: "\f1b2"; } + +.fa-bitcoin-sign::before { + content: "\e0b4"; } + +.fa-shield-dog::before { + content: "\e573"; } + +.fa-solar-panel::before { + content: "\f5ba"; } + +.fa-lock-open::before { + content: "\f3c1"; } + +.fa-elevator::before { + content: "\e16d"; } + +.fa-money-bill-transfer::before { + content: "\e528"; } + +.fa-money-bill-trend-up::before { + content: "\e529"; } + +.fa-house-flood-water-circle-arrow-right::before { + content: "\e50f"; } + +.fa-square-poll-horizontal::before { + content: "\f682"; } + +.fa-poll-h::before { + content: "\f682"; } + +.fa-circle::before { + content: "\f111"; } + +.fa-backward-fast::before { + content: "\f049"; } + +.fa-fast-backward::before { + content: "\f049"; } + +.fa-recycle::before { + content: "\f1b8"; } + +.fa-user-astronaut::before { + content: "\f4fb"; } + +.fa-plane-slash::before { + content: "\e069"; } + +.fa-trademark::before { + content: "\f25c"; } + +.fa-basketball::before { + content: "\f434"; } + +.fa-basketball-ball::before { + content: "\f434"; } + +.fa-satellite-dish::before { + content: "\f7c0"; } + +.fa-circle-up::before { + content: "\f35b"; } + +.fa-arrow-alt-circle-up::before { + content: "\f35b"; } + +.fa-mobile-screen-button::before { + content: "\f3cd"; } + +.fa-mobile-alt::before { + content: "\f3cd"; } + +.fa-volume-high::before { + content: "\f028"; } + +.fa-volume-up::before { + content: "\f028"; } + +.fa-users-rays::before { + content: "\e593"; } + +.fa-wallet::before { + content: "\f555"; } + +.fa-clipboard-check::before { + content: "\f46c"; } + +.fa-file-audio::before { + content: "\f1c7"; } + +.fa-burger::before { + content: "\f805"; } + +.fa-hamburger::before { + content: "\f805"; } + +.fa-wrench::before { + content: "\f0ad"; } + +.fa-bugs::before { + content: "\e4d0"; } + +.fa-rupee-sign::before { + content: "\f156"; } + +.fa-rupee::before { + content: "\f156"; } + +.fa-file-image::before { + content: "\f1c5"; } + +.fa-circle-question::before { + content: "\f059"; } + +.fa-question-circle::before { + content: "\f059"; } + +.fa-plane-departure::before { + content: "\f5b0"; } + +.fa-handshake-slash::before { + content: "\e060"; } + +.fa-book-bookmark::before { + content: "\e0bb"; } + +.fa-code-branch::before { + content: "\f126"; } + +.fa-hat-cowboy::before { + content: "\f8c0"; } + +.fa-bridge::before { + content: "\e4c8"; } + +.fa-phone-flip::before { + content: "\f879"; } + +.fa-phone-alt::before { + content: "\f879"; } + +.fa-truck-front::before { + content: "\e2b7"; } + +.fa-cat::before { + content: "\f6be"; } + +.fa-anchor-circle-exclamation::before { + content: "\e4ab"; } + +.fa-truck-field::before { + content: "\e58d"; } + +.fa-route::before { + content: "\f4d7"; } + +.fa-clipboard-question::before { + content: "\e4e3"; } + +.fa-panorama::before { + content: "\e209"; } + +.fa-comment-medical::before { + content: "\f7f5"; } + +.fa-teeth-open::before { + content: "\f62f"; } + +.fa-file-circle-minus::before { + content: "\e4ed"; } + +.fa-tags::before { + content: "\f02c"; } + +.fa-wine-glass::before { + content: "\f4e3"; } + +.fa-forward-fast::before { + content: "\f050"; } + +.fa-fast-forward::before { + content: "\f050"; } + +.fa-face-meh-blank::before { + content: "\f5a4"; } + +.fa-meh-blank::before { + content: "\f5a4"; } + +.fa-square-parking::before { + content: "\f540"; } + +.fa-parking::before { + content: "\f540"; } + +.fa-house-signal::before { + content: "\e012"; } + +.fa-bars-progress::before { + content: "\f828"; } + +.fa-tasks-alt::before { + content: "\f828"; } + +.fa-faucet-drip::before { + content: "\e006"; } + +.fa-cart-flatbed::before { + content: "\f474"; } + +.fa-dolly-flatbed::before { + content: "\f474"; } + +.fa-ban-smoking::before { + content: "\f54d"; } + +.fa-smoking-ban::before { + content: "\f54d"; } + +.fa-terminal::before { + content: "\f120"; } + +.fa-mobile-button::before { + content: "\f10b"; } + +.fa-house-medical-flag::before { + content: "\e514"; } + +.fa-basket-shopping::before { + content: "\f291"; } + +.fa-shopping-basket::before { + content: "\f291"; } + +.fa-tape::before { + content: "\f4db"; } + +.fa-bus-simple::before { + content: "\f55e"; } + +.fa-bus-alt::before { + content: "\f55e"; } + +.fa-eye::before { + content: "\f06e"; } + +.fa-face-sad-cry::before { + content: "\f5b3"; } + +.fa-sad-cry::before { + content: "\f5b3"; } + +.fa-audio-description::before { + content: "\f29e"; } + +.fa-person-military-to-person::before { + content: "\e54c"; } + +.fa-file-shield::before { + content: "\e4f0"; } + +.fa-user-slash::before { + content: "\f506"; } + +.fa-pen::before { + content: "\f304"; } + +.fa-tower-observation::before { + content: "\e586"; } + +.fa-file-code::before { + content: "\f1c9"; } + +.fa-signal::before { + content: "\f012"; } + +.fa-signal-5::before { + content: "\f012"; } + +.fa-signal-perfect::before { + content: "\f012"; } + +.fa-bus::before { + content: "\f207"; } + +.fa-heart-circle-xmark::before { + content: "\e501"; } + +.fa-house-chimney::before { + content: "\e3af"; } + +.fa-home-lg::before { + content: "\e3af"; } + +.fa-window-maximize::before { + content: "\f2d0"; } + +.fa-face-frown::before { + content: "\f119"; } + +.fa-frown::before { + content: "\f119"; } + +.fa-prescription::before { + content: "\f5b1"; } + +.fa-shop::before { + content: "\f54f"; } + +.fa-store-alt::before { + content: "\f54f"; } + +.fa-floppy-disk::before { + content: "\f0c7"; } + +.fa-save::before { + content: "\f0c7"; } + +.fa-vihara::before { + content: "\f6a7"; } + +.fa-scale-unbalanced::before { + content: "\f515"; } + +.fa-balance-scale-left::before { + content: "\f515"; } + +.fa-sort-up::before { + content: "\f0de"; } + +.fa-sort-asc::before { + content: "\f0de"; } + +.fa-comment-dots::before { + content: "\f4ad"; } + +.fa-commenting::before { + content: "\f4ad"; } + +.fa-plant-wilt::before { + content: "\e5aa"; } + +.fa-diamond::before { + content: "\f219"; } + +.fa-face-grin-squint::before { + content: "\f585"; } + +.fa-grin-squint::before { + content: "\f585"; } + +.fa-hand-holding-dollar::before { + content: "\f4c0"; } + +.fa-hand-holding-usd::before { + content: "\f4c0"; } + +.fa-bacterium::before { + content: "\e05a"; } + +.fa-hand-pointer::before { + content: "\f25a"; } + +.fa-drum-steelpan::before { + content: "\f56a"; } + +.fa-hand-scissors::before { + content: "\f257"; } + +.fa-hands-praying::before { + content: "\f684"; } + +.fa-praying-hands::before { + content: "\f684"; } + +.fa-arrow-rotate-right::before { + content: "\f01e"; } + +.fa-arrow-right-rotate::before { + content: "\f01e"; } + +.fa-arrow-rotate-forward::before { + content: "\f01e"; } + +.fa-redo::before { + content: "\f01e"; } + +.fa-biohazard::before { + content: "\f780"; } + +.fa-location-crosshairs::before { + content: "\f601"; } + +.fa-location::before { + content: "\f601"; } + +.fa-mars-double::before { + content: "\f227"; } + +.fa-child-dress::before { + content: "\e59c"; } + +.fa-users-between-lines::before { + content: "\e591"; } + +.fa-lungs-virus::before { + content: "\e067"; } + +.fa-face-grin-tears::before { + content: "\f588"; } + +.fa-grin-tears::before { + content: "\f588"; } + +.fa-phone::before { + content: "\f095"; } + +.fa-calendar-xmark::before { + content: "\f273"; } + +.fa-calendar-times::before { + content: "\f273"; } + +.fa-child-reaching::before { + content: "\e59d"; } + +.fa-head-side-virus::before { + content: "\e064"; } + +.fa-user-gear::before { + content: "\f4fe"; } + +.fa-user-cog::before { + content: "\f4fe"; } + +.fa-arrow-up-1-9::before { + content: "\f163"; } + +.fa-sort-numeric-up::before { + content: "\f163"; } + +.fa-door-closed::before { + content: "\f52a"; } + +.fa-shield-virus::before { + content: "\e06c"; } + +.fa-dice-six::before { + content: "\f526"; } + +.fa-mosquito-net::before { + content: "\e52c"; } + +.fa-bridge-water::before { + content: "\e4ce"; } + +.fa-person-booth::before { + content: "\f756"; } + +.fa-text-width::before { + content: "\f035"; } + +.fa-hat-wizard::before { + content: "\f6e8"; } + +.fa-pen-fancy::before { + content: "\f5ac"; } + +.fa-person-digging::before { + content: "\f85e"; } + +.fa-digging::before { + content: "\f85e"; } + +.fa-trash::before { + content: "\f1f8"; } + +.fa-gauge-simple::before { + content: "\f629"; } + +.fa-gauge-simple-med::before { + content: "\f629"; } + +.fa-tachometer-average::before { + content: "\f629"; } + +.fa-book-medical::before { + content: "\f7e6"; } + +.fa-poo::before { + content: "\f2fe"; } + +.fa-quote-right::before { + content: "\f10e"; } + +.fa-quote-right-alt::before { + content: "\f10e"; } + +.fa-shirt::before { + content: "\f553"; } + +.fa-t-shirt::before { + content: "\f553"; } + +.fa-tshirt::before { + content: "\f553"; } + +.fa-cubes::before { + content: "\f1b3"; } + +.fa-divide::before { + content: "\f529"; } + +.fa-tenge-sign::before { + content: "\f7d7"; } + +.fa-tenge::before { + content: "\f7d7"; } + +.fa-headphones::before { + content: "\f025"; } + +.fa-hands-holding::before { + content: "\f4c2"; } + +.fa-hands-clapping::before { + content: "\e1a8"; } + +.fa-republican::before { + content: "\f75e"; } + +.fa-arrow-left::before { + content: "\f060"; } + +.fa-person-circle-xmark::before { + content: "\e543"; } + +.fa-ruler::before { + content: "\f545"; } + +.fa-align-left::before { + content: "\f036"; } + +.fa-dice-d6::before { + content: "\f6d1"; } + +.fa-restroom::before { + content: "\f7bd"; } + +.fa-j::before { + content: "\4a"; } + +.fa-users-viewfinder::before { + content: "\e595"; } + +.fa-file-video::before { + content: "\f1c8"; } + +.fa-up-right-from-square::before { + content: "\f35d"; } + +.fa-external-link-alt::before { + content: "\f35d"; } + +.fa-table-cells::before { + content: "\f00a"; } + +.fa-th::before { + content: "\f00a"; } + +.fa-file-pdf::before { + content: "\f1c1"; } + +.fa-book-bible::before { + content: "\f647"; } + +.fa-bible::before { + content: "\f647"; } + +.fa-o::before { + content: "\4f"; } + +.fa-suitcase-medical::before { + content: "\f0fa"; } + +.fa-medkit::before { + content: "\f0fa"; } + +.fa-user-secret::before { + content: "\f21b"; } + +.fa-otter::before { + content: "\f700"; } + +.fa-person-dress::before { + content: "\f182"; } + +.fa-female::before { + content: "\f182"; } + +.fa-comment-dollar::before { + content: "\f651"; } + +.fa-business-time::before { + content: "\f64a"; } + +.fa-briefcase-clock::before { + content: "\f64a"; } + +.fa-table-cells-large::before { + content: "\f009"; } + +.fa-th-large::before { + content: "\f009"; } + +.fa-book-tanakh::before { + content: "\f827"; } + +.fa-tanakh::before { + content: "\f827"; } + +.fa-phone-volume::before { + content: "\f2a0"; } + +.fa-volume-control-phone::before { + content: "\f2a0"; } + +.fa-hat-cowboy-side::before { + content: "\f8c1"; } + +.fa-clipboard-user::before { + content: "\f7f3"; } + +.fa-child::before { + content: "\f1ae"; } + +.fa-lira-sign::before { + content: "\f195"; } + +.fa-satellite::before { + content: "\f7bf"; } + +.fa-plane-lock::before { + content: "\e558"; } + +.fa-tag::before { + content: "\f02b"; } + +.fa-comment::before { + content: "\f075"; } + +.fa-cake-candles::before { + content: "\f1fd"; } + +.fa-birthday-cake::before { + content: "\f1fd"; } + +.fa-cake::before { + content: "\f1fd"; } + +.fa-envelope::before { + content: "\f0e0"; } + +.fa-angles-up::before { + content: "\f102"; } + +.fa-angle-double-up::before { + content: "\f102"; } + +.fa-paperclip::before { + content: "\f0c6"; } + +.fa-arrow-right-to-city::before { + content: "\e4b3"; } + +.fa-ribbon::before { + content: "\f4d6"; } + +.fa-lungs::before { + content: "\f604"; } + +.fa-arrow-up-9-1::before { + content: "\f887"; } + +.fa-sort-numeric-up-alt::before { + content: "\f887"; } + +.fa-litecoin-sign::before { + content: "\e1d3"; } + +.fa-border-none::before { + content: "\f850"; } + +.fa-circle-nodes::before { + content: "\e4e2"; } + +.fa-parachute-box::before { + content: "\f4cd"; } + +.fa-indent::before { + content: "\f03c"; } + +.fa-truck-field-un::before { + content: "\e58e"; } + +.fa-hourglass::before { + content: "\f254"; } + +.fa-hourglass-empty::before { + content: "\f254"; } + +.fa-mountain::before { + content: "\f6fc"; } + +.fa-user-doctor::before { + content: "\f0f0"; } + +.fa-user-md::before { + content: "\f0f0"; } + +.fa-circle-info::before { + content: "\f05a"; } + +.fa-info-circle::before { + content: "\f05a"; } + +.fa-cloud-meatball::before { + content: "\f73b"; } + +.fa-camera::before { + content: "\f030"; } + +.fa-camera-alt::before { + content: "\f030"; } + +.fa-square-virus::before { + content: "\e578"; } + +.fa-meteor::before { + content: "\f753"; } + +.fa-car-on::before { + content: "\e4dd"; } + +.fa-sleigh::before { + content: "\f7cc"; } + +.fa-arrow-down-1-9::before { + content: "\f162"; } + +.fa-sort-numeric-asc::before { + content: "\f162"; } + +.fa-sort-numeric-down::before { + content: "\f162"; } + +.fa-hand-holding-droplet::before { + content: "\f4c1"; } + +.fa-hand-holding-water::before { + content: "\f4c1"; } + +.fa-water::before { + content: "\f773"; } + +.fa-calendar-check::before { + content: "\f274"; } + +.fa-braille::before { + content: "\f2a1"; } + +.fa-prescription-bottle-medical::before { + content: "\f486"; } + +.fa-prescription-bottle-alt::before { + content: "\f486"; } + +.fa-landmark::before { + content: "\f66f"; } + +.fa-truck::before { + content: "\f0d1"; } + +.fa-crosshairs::before { + content: "\f05b"; } + +.fa-person-cane::before { + content: "\e53c"; } + +.fa-tent::before { + content: "\e57d"; } + +.fa-vest-patches::before { + content: "\e086"; } + +.fa-check-double::before { + content: "\f560"; } + +.fa-arrow-down-a-z::before { + content: "\f15d"; } + +.fa-sort-alpha-asc::before { + content: "\f15d"; } + +.fa-sort-alpha-down::before { + content: "\f15d"; } + +.fa-money-bill-wheat::before { + content: "\e52a"; } + +.fa-cookie::before { + content: "\f563"; } + +.fa-arrow-rotate-left::before { + content: "\f0e2"; } + +.fa-arrow-left-rotate::before { + content: "\f0e2"; } + +.fa-arrow-rotate-back::before { + content: "\f0e2"; } + +.fa-arrow-rotate-backward::before { + content: "\f0e2"; } + +.fa-undo::before { + content: "\f0e2"; } + +.fa-hard-drive::before { + content: "\f0a0"; } + +.fa-hdd::before { + content: "\f0a0"; } + +.fa-face-grin-squint-tears::before { + content: "\f586"; } + +.fa-grin-squint-tears::before { + content: "\f586"; } + +.fa-dumbbell::before { + content: "\f44b"; } + +.fa-rectangle-list::before { + content: "\f022"; } + +.fa-list-alt::before { + content: "\f022"; } + +.fa-tarp-droplet::before { + content: "\e57c"; } + +.fa-house-medical-circle-check::before { + content: "\e511"; } + +.fa-person-skiing-nordic::before { + content: "\f7ca"; } + +.fa-skiing-nordic::before { + content: "\f7ca"; } + +.fa-calendar-plus::before { + content: "\f271"; } + +.fa-plane-arrival::before { + content: "\f5af"; } + +.fa-circle-left::before { + content: "\f359"; } + +.fa-arrow-alt-circle-left::before { + content: "\f359"; } + +.fa-train-subway::before { + content: "\f239"; } + +.fa-subway::before { + content: "\f239"; } + +.fa-chart-gantt::before { + content: "\e0e4"; } + +.fa-indian-rupee-sign::before { + content: "\e1bc"; } + +.fa-indian-rupee::before { + content: "\e1bc"; } + +.fa-inr::before { + content: "\e1bc"; } + +.fa-crop-simple::before { + content: "\f565"; } + +.fa-crop-alt::before { + content: "\f565"; } + +.fa-money-bill-1::before { + content: "\f3d1"; } + +.fa-money-bill-alt::before { + content: "\f3d1"; } + +.fa-left-long::before { + content: "\f30a"; } + +.fa-long-arrow-alt-left::before { + content: "\f30a"; } + +.fa-dna::before { + content: "\f471"; } + +.fa-virus-slash::before { + content: "\e075"; } + +.fa-minus::before { + content: "\f068"; } + +.fa-subtract::before { + content: "\f068"; } + +.fa-chess::before { + content: "\f439"; } + +.fa-arrow-left-long::before { + content: "\f177"; } + +.fa-long-arrow-left::before { + content: "\f177"; } + +.fa-plug-circle-check::before { + content: "\e55c"; } + +.fa-street-view::before { + content: "\f21d"; } + +.fa-franc-sign::before { + content: "\e18f"; } + +.fa-volume-off::before { + content: "\f026"; } + +.fa-hands-asl-interpreting::before { + content: "\f2a3"; } + +.fa-american-sign-language-interpreting::before { + content: "\f2a3"; } + +.fa-asl-interpreting::before { + content: "\f2a3"; } + +.fa-hands-american-sign-language-interpreting::before { + content: "\f2a3"; } + +.fa-gear::before { + content: "\f013"; } + +.fa-cog::before { + content: "\f013"; } + +.fa-droplet-slash::before { + content: "\f5c7"; } + +.fa-tint-slash::before { + content: "\f5c7"; } + +.fa-mosque::before { + content: "\f678"; } + +.fa-mosquito::before { + content: "\e52b"; } + +.fa-star-of-david::before { + content: "\f69a"; } + +.fa-person-military-rifle::before { + content: "\e54b"; } + +.fa-cart-shopping::before { + content: "\f07a"; } + +.fa-shopping-cart::before { + content: "\f07a"; } + +.fa-vials::before { + content: "\f493"; } + +.fa-plug-circle-plus::before { + content: "\e55f"; } + +.fa-place-of-worship::before { + content: "\f67f"; } + +.fa-grip-vertical::before { + content: "\f58e"; } + +.fa-arrow-turn-up::before { + content: "\f148"; } + +.fa-level-up::before { + content: "\f148"; } + +.fa-u::before { + content: "\55"; } + +.fa-square-root-variable::before { + content: "\f698"; } + +.fa-square-root-alt::before { + content: "\f698"; } + +.fa-clock::before { + content: "\f017"; } + +.fa-clock-four::before { + content: "\f017"; } + +.fa-backward-step::before { + content: "\f048"; } + +.fa-step-backward::before { + content: "\f048"; } + +.fa-pallet::before { + content: "\f482"; } + +.fa-faucet::before { + content: "\e005"; } + +.fa-baseball-bat-ball::before { + content: "\f432"; } + +.fa-s::before { + content: "\53"; } + +.fa-timeline::before { + content: "\e29c"; } + +.fa-keyboard::before { + content: "\f11c"; } + +.fa-caret-down::before { + content: "\f0d7"; } + +.fa-house-chimney-medical::before { + content: "\f7f2"; } + +.fa-clinic-medical::before { + content: "\f7f2"; } + +.fa-temperature-three-quarters::before { + content: "\f2c8"; } + +.fa-temperature-3::before { + content: "\f2c8"; } + +.fa-thermometer-3::before { + content: "\f2c8"; } + +.fa-thermometer-three-quarters::before { + content: "\f2c8"; } + +.fa-mobile-screen::before { + content: "\f3cf"; } + +.fa-mobile-android-alt::before { + content: "\f3cf"; } + +.fa-plane-up::before { + content: "\e22d"; } + +.fa-piggy-bank::before { + content: "\f4d3"; } + +.fa-battery-half::before { + content: "\f242"; } + +.fa-battery-3::before { + content: "\f242"; } + +.fa-mountain-city::before { + content: "\e52e"; } + +.fa-coins::before { + content: "\f51e"; } + +.fa-khanda::before { + content: "\f66d"; } + +.fa-sliders::before { + content: "\f1de"; } + +.fa-sliders-h::before { + content: "\f1de"; } + +.fa-folder-tree::before { + content: "\f802"; } + +.fa-network-wired::before { + content: "\f6ff"; } + +.fa-map-pin::before { + content: "\f276"; } + +.fa-hamsa::before { + content: "\f665"; } + +.fa-cent-sign::before { + content: "\e3f5"; } + +.fa-flask::before { + content: "\f0c3"; } + +.fa-person-pregnant::before { + content: "\e31e"; } + +.fa-wand-sparkles::before { + content: "\f72b"; } + +.fa-ellipsis-vertical::before { + content: "\f142"; } + +.fa-ellipsis-v::before { + content: "\f142"; } + +.fa-ticket::before { + content: "\f145"; } + +.fa-power-off::before { + content: "\f011"; } + +.fa-right-long::before { + content: "\f30b"; } + +.fa-long-arrow-alt-right::before { + content: "\f30b"; } + +.fa-flag-usa::before { + content: "\f74d"; } + +.fa-laptop-file::before { + content: "\e51d"; } + +.fa-tty::before { + content: "\f1e4"; } + +.fa-teletype::before { + content: "\f1e4"; } + +.fa-diagram-next::before { + content: "\e476"; } + +.fa-person-rifle::before { + content: "\e54e"; } + +.fa-house-medical-circle-exclamation::before { + content: "\e512"; } + +.fa-closed-captioning::before { + content: "\f20a"; } + +.fa-person-hiking::before { + content: "\f6ec"; } + +.fa-hiking::before { + content: "\f6ec"; } + +.fa-venus-double::before { + content: "\f226"; } + +.fa-images::before { + content: "\f302"; } + +.fa-calculator::before { + content: "\f1ec"; } + +.fa-people-pulling::before { + content: "\e535"; } + +.fa-n::before { + content: "\4e"; } + +.fa-cable-car::before { + content: "\f7da"; } + +.fa-tram::before { + content: "\f7da"; } + +.fa-cloud-rain::before { + content: "\f73d"; } + +.fa-building-circle-xmark::before { + content: "\e4d4"; } + +.fa-ship::before { + content: "\f21a"; } + +.fa-arrows-down-to-line::before { + content: "\e4b8"; } + +.fa-download::before { + content: "\f019"; } + +.fa-face-grin::before { + content: "\f580"; } + +.fa-grin::before { + content: "\f580"; } + +.fa-delete-left::before { + content: "\f55a"; } + +.fa-backspace::before { + content: "\f55a"; } + +.fa-eye-dropper::before { + content: "\f1fb"; } + +.fa-eye-dropper-empty::before { + content: "\f1fb"; } + +.fa-eyedropper::before { + content: "\f1fb"; } + +.fa-file-circle-check::before { + content: "\e5a0"; } + +.fa-forward::before { + content: "\f04e"; } + +.fa-mobile::before { + content: "\f3ce"; } + +.fa-mobile-android::before { + content: "\f3ce"; } + +.fa-mobile-phone::before { + content: "\f3ce"; } + +.fa-face-meh::before { + content: "\f11a"; } + +.fa-meh::before { + content: "\f11a"; } + +.fa-align-center::before { + content: "\f037"; } + +.fa-book-skull::before { + content: "\f6b7"; } + +.fa-book-dead::before { + content: "\f6b7"; } + +.fa-id-card::before { + content: "\f2c2"; } + +.fa-drivers-license::before { + content: "\f2c2"; } + +.fa-outdent::before { + content: "\f03b"; } + +.fa-dedent::before { + content: "\f03b"; } + +.fa-heart-circle-exclamation::before { + content: "\e4fe"; } + +.fa-house::before { + content: "\f015"; } + +.fa-home::before { + content: "\f015"; } + +.fa-home-alt::before { + content: "\f015"; } + +.fa-home-lg-alt::before { + content: "\f015"; } + +.fa-calendar-week::before { + content: "\f784"; } + +.fa-laptop-medical::before { + content: "\f812"; } + +.fa-b::before { + content: "\42"; } + +.fa-file-medical::before { + content: "\f477"; } + +.fa-dice-one::before { + content: "\f525"; } + +.fa-kiwi-bird::before { + content: "\f535"; } + +.fa-arrow-right-arrow-left::before { + content: "\f0ec"; } + +.fa-exchange::before { + content: "\f0ec"; } + +.fa-rotate-right::before { + content: "\f2f9"; } + +.fa-redo-alt::before { + content: "\f2f9"; } + +.fa-rotate-forward::before { + content: "\f2f9"; } + +.fa-utensils::before { + content: "\f2e7"; } + +.fa-cutlery::before { + content: "\f2e7"; } + +.fa-arrow-up-wide-short::before { + content: "\f161"; } + +.fa-sort-amount-up::before { + content: "\f161"; } + +.fa-mill-sign::before { + content: "\e1ed"; } + +.fa-bowl-rice::before { + content: "\e2eb"; } + +.fa-skull::before { + content: "\f54c"; } + +.fa-tower-broadcast::before { + content: "\f519"; } + +.fa-broadcast-tower::before { + content: "\f519"; } + +.fa-truck-pickup::before { + content: "\f63c"; } + +.fa-up-long::before { + content: "\f30c"; } + +.fa-long-arrow-alt-up::before { + content: "\f30c"; } + +.fa-stop::before { + content: "\f04d"; } + +.fa-code-merge::before { + content: "\f387"; } + +.fa-upload::before { + content: "\f093"; } + +.fa-hurricane::before { + content: "\f751"; } + +.fa-mound::before { + content: "\e52d"; } + +.fa-toilet-portable::before { + content: "\e583"; } + +.fa-compact-disc::before { + content: "\f51f"; } + +.fa-file-arrow-down::before { + content: "\f56d"; } + +.fa-file-download::before { + content: "\f56d"; } + +.fa-caravan::before { + content: "\f8ff"; } + +.fa-shield-cat::before { + content: "\e572"; } + +.fa-bolt::before { + content: "\f0e7"; } + +.fa-zap::before { + content: "\f0e7"; } + +.fa-glass-water::before { + content: "\e4f4"; } + +.fa-oil-well::before { + content: "\e532"; } + +.fa-vault::before { + content: "\e2c5"; } + +.fa-mars::before { + content: "\f222"; } + +.fa-toilet::before { + content: "\f7d8"; } + +.fa-plane-circle-xmark::before { + content: "\e557"; } + +.fa-yen-sign::before { + content: "\f157"; } + +.fa-cny::before { + content: "\f157"; } + +.fa-jpy::before { + content: "\f157"; } + +.fa-rmb::before { + content: "\f157"; } + +.fa-yen::before { + content: "\f157"; } + +.fa-ruble-sign::before { + content: "\f158"; } + +.fa-rouble::before { + content: "\f158"; } + +.fa-rub::before { + content: "\f158"; } + +.fa-ruble::before { + content: "\f158"; } + +.fa-sun::before { + content: "\f185"; } + +.fa-guitar::before { + content: "\f7a6"; } + +.fa-face-laugh-wink::before { + content: "\f59c"; } + +.fa-laugh-wink::before { + content: "\f59c"; } + +.fa-horse-head::before { + content: "\f7ab"; } + +.fa-bore-hole::before { + content: "\e4c3"; } + +.fa-industry::before { + content: "\f275"; } + +.fa-circle-down::before { + content: "\f358"; } + +.fa-arrow-alt-circle-down::before { + content: "\f358"; } + +.fa-arrows-turn-to-dots::before { + content: "\e4c1"; } + +.fa-florin-sign::before { + content: "\e184"; } + +.fa-arrow-down-short-wide::before { + content: "\f884"; } + +.fa-sort-amount-desc::before { + content: "\f884"; } + +.fa-sort-amount-down-alt::before { + content: "\f884"; } + +.fa-less-than::before { + content: "\3c"; } + +.fa-angle-down::before { + content: "\f107"; } + +.fa-car-tunnel::before { + content: "\e4de"; } + +.fa-head-side-cough::before { + content: "\e061"; } + +.fa-grip-lines::before { + content: "\f7a4"; } + +.fa-thumbs-down::before { + content: "\f165"; } + +.fa-user-lock::before { + content: "\f502"; } + +.fa-arrow-right-long::before { + content: "\f178"; } + +.fa-long-arrow-right::before { + content: "\f178"; } + +.fa-anchor-circle-xmark::before { + content: "\e4ac"; } + +.fa-ellipsis::before { + content: "\f141"; } + +.fa-ellipsis-h::before { + content: "\f141"; } + +.fa-chess-pawn::before { + content: "\f443"; } + +.fa-kit-medical::before { + content: "\f479"; } + +.fa-first-aid::before { + content: "\f479"; } + +.fa-person-through-window::before { + content: "\e5a9"; } + +.fa-toolbox::before { + content: "\f552"; } + +.fa-hands-holding-circle::before { + content: "\e4fb"; } + +.fa-bug::before { + content: "\f188"; } + +.fa-credit-card::before { + content: "\f09d"; } + +.fa-credit-card-alt::before { + content: "\f09d"; } + +.fa-car::before { + content: "\f1b9"; } + +.fa-automobile::before { + content: "\f1b9"; } + +.fa-hand-holding-hand::before { + content: "\e4f7"; } + +.fa-book-open-reader::before { + content: "\f5da"; } + +.fa-book-reader::before { + content: "\f5da"; } + +.fa-mountain-sun::before { + content: "\e52f"; } + +.fa-arrows-left-right-to-line::before { + content: "\e4ba"; } + +.fa-dice-d20::before { + content: "\f6cf"; } + +.fa-truck-droplet::before { + content: "\e58c"; } + +.fa-file-circle-xmark::before { + content: "\e5a1"; } + +.fa-temperature-arrow-up::before { + content: "\e040"; } + +.fa-temperature-up::before { + content: "\e040"; } + +.fa-medal::before { + content: "\f5a2"; } + +.fa-bed::before { + content: "\f236"; } + +.fa-square-h::before { + content: "\f0fd"; } + +.fa-h-square::before { + content: "\f0fd"; } + +.fa-podcast::before { + content: "\f2ce"; } + +.fa-temperature-full::before { + content: "\f2c7"; } + +.fa-temperature-4::before { + content: "\f2c7"; } + +.fa-thermometer-4::before { + content: "\f2c7"; } + +.fa-thermometer-full::before { + content: "\f2c7"; } + +.fa-bell::before { + content: "\f0f3"; } + +.fa-superscript::before { + content: "\f12b"; } + +.fa-plug-circle-xmark::before { + content: "\e560"; } + +.fa-star-of-life::before { + content: "\f621"; } + +.fa-phone-slash::before { + content: "\f3dd"; } + +.fa-paint-roller::before { + content: "\f5aa"; } + +.fa-handshake-angle::before { + content: "\f4c4"; } + +.fa-hands-helping::before { + content: "\f4c4"; } + +.fa-location-dot::before { + content: "\f3c5"; } + +.fa-map-marker-alt::before { + content: "\f3c5"; } + +.fa-file::before { + content: "\f15b"; } + +.fa-greater-than::before { + content: "\3e"; } + +.fa-person-swimming::before { + content: "\f5c4"; } + +.fa-swimmer::before { + content: "\f5c4"; } + +.fa-arrow-down::before { + content: "\f063"; } + +.fa-droplet::before { + content: "\f043"; } + +.fa-tint::before { + content: "\f043"; } + +.fa-eraser::before { + content: "\f12d"; } + +.fa-earth-americas::before { + content: "\f57d"; } + +.fa-earth::before { + content: "\f57d"; } + +.fa-earth-america::before { + content: "\f57d"; } + +.fa-globe-americas::before { + content: "\f57d"; } + +.fa-person-burst::before { + content: "\e53b"; } + +.fa-dove::before { + content: "\f4ba"; } + +.fa-battery-empty::before { + content: "\f244"; } + +.fa-battery-0::before { + content: "\f244"; } + +.fa-socks::before { + content: "\f696"; } + +.fa-inbox::before { + content: "\f01c"; } + +.fa-section::before { + content: "\e447"; } + +.fa-gauge-high::before { + content: "\f625"; } + +.fa-tachometer-alt::before { + content: "\f625"; } + +.fa-tachometer-alt-fast::before { + content: "\f625"; } + +.fa-envelope-open-text::before { + content: "\f658"; } + +.fa-hospital::before { + content: "\f0f8"; } + +.fa-hospital-alt::before { + content: "\f0f8"; } + +.fa-hospital-wide::before { + content: "\f0f8"; } + +.fa-wine-bottle::before { + content: "\f72f"; } + +.fa-chess-rook::before { + content: "\f447"; } + +.fa-bars-staggered::before { + content: "\f550"; } + +.fa-reorder::before { + content: "\f550"; } + +.fa-stream::before { + content: "\f550"; } + +.fa-dharmachakra::before { + content: "\f655"; } + +.fa-hotdog::before { + content: "\f80f"; } + +.fa-person-walking-with-cane::before { + content: "\f29d"; } + +.fa-blind::before { + content: "\f29d"; } + +.fa-drum::before { + content: "\f569"; } + +.fa-ice-cream::before { + content: "\f810"; } + +.fa-heart-circle-bolt::before { + content: "\e4fc"; } + +.fa-fax::before { + content: "\f1ac"; } + +.fa-paragraph::before { + content: "\f1dd"; } + +.fa-check-to-slot::before { + content: "\f772"; } + +.fa-vote-yea::before { + content: "\f772"; } + +.fa-star-half::before { + content: "\f089"; } + +.fa-boxes-stacked::before { + content: "\f468"; } + +.fa-boxes::before { + content: "\f468"; } + +.fa-boxes-alt::before { + content: "\f468"; } + +.fa-link::before { + content: "\f0c1"; } + +.fa-chain::before { + content: "\f0c1"; } + +.fa-ear-listen::before { + content: "\f2a2"; } + +.fa-assistive-listening-systems::before { + content: "\f2a2"; } + +.fa-tree-city::before { + content: "\e587"; } + +.fa-play::before { + content: "\f04b"; } + +.fa-font::before { + content: "\f031"; } + +.fa-rupiah-sign::before { + content: "\e23d"; } + +.fa-magnifying-glass::before { + content: "\f002"; } + +.fa-search::before { + content: "\f002"; } + +.fa-table-tennis-paddle-ball::before { + content: "\f45d"; } + +.fa-ping-pong-paddle-ball::before { + content: "\f45d"; } + +.fa-table-tennis::before { + content: "\f45d"; } + +.fa-person-dots-from-line::before { + content: "\f470"; } + +.fa-diagnoses::before { + content: "\f470"; } + +.fa-trash-can-arrow-up::before { + content: "\f82a"; } + +.fa-trash-restore-alt::before { + content: "\f82a"; } + +.fa-naira-sign::before { + content: "\e1f6"; } + +.fa-cart-arrow-down::before { + content: "\f218"; } + +.fa-walkie-talkie::before { + content: "\f8ef"; } + +.fa-file-pen::before { + content: "\f31c"; } + +.fa-file-edit::before { + content: "\f31c"; } + +.fa-receipt::before { + content: "\f543"; } + +.fa-square-pen::before { + content: "\f14b"; } + +.fa-pen-square::before { + content: "\f14b"; } + +.fa-pencil-square::before { + content: "\f14b"; } + +.fa-suitcase-rolling::before { + content: "\f5c1"; } + +.fa-person-circle-exclamation::before { + content: "\e53f"; } + +.fa-chevron-down::before { + content: "\f078"; } + +.fa-battery-full::before { + content: "\f240"; } + +.fa-battery::before { + content: "\f240"; } + +.fa-battery-5::before { + content: "\f240"; } + +.fa-skull-crossbones::before { + content: "\f714"; } + +.fa-code-compare::before { + content: "\e13a"; } + +.fa-list-ul::before { + content: "\f0ca"; } + +.fa-list-dots::before { + content: "\f0ca"; } + +.fa-school-lock::before { + content: "\e56f"; } + +.fa-tower-cell::before { + content: "\e585"; } + +.fa-down-long::before { + content: "\f309"; } + +.fa-long-arrow-alt-down::before { + content: "\f309"; } + +.fa-ranking-star::before { + content: "\e561"; } + +.fa-chess-king::before { + content: "\f43f"; } + +.fa-person-harassing::before { + content: "\e549"; } + +.fa-brazilian-real-sign::before { + content: "\e46c"; } + +.fa-landmark-dome::before { + content: "\f752"; } + +.fa-landmark-alt::before { + content: "\f752"; } + +.fa-arrow-up::before { + content: "\f062"; } + +.fa-tv::before { + content: "\f26c"; } + +.fa-television::before { + content: "\f26c"; } + +.fa-tv-alt::before { + content: "\f26c"; } + +.fa-shrimp::before { + content: "\e448"; } + +.fa-list-check::before { + content: "\f0ae"; } + +.fa-tasks::before { + content: "\f0ae"; } + +.fa-jug-detergent::before { + content: "\e519"; } + +.fa-circle-user::before { + content: "\f2bd"; } + +.fa-user-circle::before { + content: "\f2bd"; } + +.fa-user-shield::before { + content: "\f505"; } + +.fa-wind::before { + content: "\f72e"; } + +.fa-car-burst::before { + content: "\f5e1"; } + +.fa-car-crash::before { + content: "\f5e1"; } + +.fa-y::before { + content: "\59"; } + +.fa-person-snowboarding::before { + content: "\f7ce"; } + +.fa-snowboarding::before { + content: "\f7ce"; } + +.fa-truck-fast::before { + content: "\f48b"; } + +.fa-shipping-fast::before { + content: "\f48b"; } + +.fa-fish::before { + content: "\f578"; } + +.fa-user-graduate::before { + content: "\f501"; } + +.fa-circle-half-stroke::before { + content: "\f042"; } + +.fa-adjust::before { + content: "\f042"; } + +.fa-clapperboard::before { + content: "\e131"; } + +.fa-circle-radiation::before { + content: "\f7ba"; } + +.fa-radiation-alt::before { + content: "\f7ba"; } + +.fa-baseball::before { + content: "\f433"; } + +.fa-baseball-ball::before { + content: "\f433"; } + +.fa-jet-fighter-up::before { + content: "\e518"; } + +.fa-diagram-project::before { + content: "\f542"; } + +.fa-project-diagram::before { + content: "\f542"; } + +.fa-copy::before { + content: "\f0c5"; } + +.fa-volume-xmark::before { + content: "\f6a9"; } + +.fa-volume-mute::before { + content: "\f6a9"; } + +.fa-volume-times::before { + content: "\f6a9"; } + +.fa-hand-sparkles::before { + content: "\e05d"; } + +.fa-grip::before { + content: "\f58d"; } + +.fa-grip-horizontal::before { + content: "\f58d"; } + +.fa-share-from-square::before { + content: "\f14d"; } + +.fa-share-square::before { + content: "\f14d"; } + +.fa-child-combatant::before { + content: "\e4e0"; } + +.fa-child-rifle::before { + content: "\e4e0"; } + +.fa-gun::before { + content: "\e19b"; } + +.fa-square-phone::before { + content: "\f098"; } + +.fa-phone-square::before { + content: "\f098"; } + +.fa-plus::before { + content: "\2b"; } + +.fa-add::before { + content: "\2b"; } + +.fa-expand::before { + content: "\f065"; } + +.fa-computer::before { + content: "\e4e5"; } + +.fa-xmark::before { + content: "\f00d"; } + +.fa-close::before { + content: "\f00d"; } + +.fa-multiply::before { + content: "\f00d"; } + +.fa-remove::before { + content: "\f00d"; } + +.fa-times::before { + content: "\f00d"; } + +.fa-arrows-up-down-left-right::before { + content: "\f047"; } + +.fa-arrows::before { + content: "\f047"; } + +.fa-chalkboard-user::before { + content: "\f51c"; } + +.fa-chalkboard-teacher::before { + content: "\f51c"; } + +.fa-peso-sign::before { + content: "\e222"; } + +.fa-building-shield::before { + content: "\e4d8"; } + +.fa-baby::before { + content: "\f77c"; } + +.fa-users-line::before { + content: "\e592"; } + +.fa-quote-left::before { + content: "\f10d"; } + +.fa-quote-left-alt::before { + content: "\f10d"; } + +.fa-tractor::before { + content: "\f722"; } + +.fa-trash-arrow-up::before { + content: "\f829"; } + +.fa-trash-restore::before { + content: "\f829"; } + +.fa-arrow-down-up-lock::before { + content: "\e4b0"; } + +.fa-lines-leaning::before { + content: "\e51e"; } + +.fa-ruler-combined::before { + content: "\f546"; } + +.fa-copyright::before { + content: "\f1f9"; } + +.fa-equals::before { + content: "\3d"; } + +.fa-blender::before { + content: "\f517"; } + +.fa-teeth::before { + content: "\f62e"; } + +.fa-shekel-sign::before { + content: "\f20b"; } + +.fa-ils::before { + content: "\f20b"; } + +.fa-shekel::before { + content: "\f20b"; } + +.fa-sheqel::before { + content: "\f20b"; } + +.fa-sheqel-sign::before { + content: "\f20b"; } + +.fa-map::before { + content: "\f279"; } + +.fa-rocket::before { + content: "\f135"; } + +.fa-photo-film::before { + content: "\f87c"; } + +.fa-photo-video::before { + content: "\f87c"; } + +.fa-folder-minus::before { + content: "\f65d"; } + +.fa-store::before { + content: "\f54e"; } + +.fa-arrow-trend-up::before { + content: "\e098"; } + +.fa-plug-circle-minus::before { + content: "\e55e"; } + +.fa-sign-hanging::before { + content: "\f4d9"; } + +.fa-sign::before { + content: "\f4d9"; } + +.fa-bezier-curve::before { + content: "\f55b"; } + +.fa-bell-slash::before { + content: "\f1f6"; } + +.fa-tablet::before { + content: "\f3fb"; } + +.fa-tablet-android::before { + content: "\f3fb"; } + +.fa-school-flag::before { + content: "\e56e"; } + +.fa-fill::before { + content: "\f575"; } + +.fa-angle-up::before { + content: "\f106"; } + +.fa-drumstick-bite::before { + content: "\f6d7"; } + +.fa-holly-berry::before { + content: "\f7aa"; } + +.fa-chevron-left::before { + content: "\f053"; } + +.fa-bacteria::before { + content: "\e059"; } + +.fa-hand-lizard::before { + content: "\f258"; } + +.fa-notdef::before { + content: "\e1fe"; } + +.fa-disease::before { + content: "\f7fa"; } + +.fa-briefcase-medical::before { + content: "\f469"; } + +.fa-genderless::before { + content: "\f22d"; } + +.fa-chevron-right::before { + content: "\f054"; } + +.fa-retweet::before { + content: "\f079"; } + +.fa-car-rear::before { + content: "\f5de"; } + +.fa-car-alt::before { + content: "\f5de"; } + +.fa-pump-soap::before { + content: "\e06b"; } + +.fa-video-slash::before { + content: "\f4e2"; } + +.fa-battery-quarter::before { + content: "\f243"; } + +.fa-battery-2::before { + content: "\f243"; } + +.fa-radio::before { + content: "\f8d7"; } + +.fa-baby-carriage::before { + content: "\f77d"; } + +.fa-carriage-baby::before { + content: "\f77d"; } + +.fa-traffic-light::before { + content: "\f637"; } + +.fa-thermometer::before { + content: "\f491"; } + +.fa-vr-cardboard::before { + content: "\f729"; } + +.fa-hand-middle-finger::before { + content: "\f806"; } + +.fa-percent::before { + content: "\25"; } + +.fa-percentage::before { + content: "\25"; } + +.fa-truck-moving::before { + content: "\f4df"; } + +.fa-glass-water-droplet::before { + content: "\e4f5"; } + +.fa-display::before { + content: "\e163"; } + +.fa-face-smile::before { + content: "\f118"; } + +.fa-smile::before { + content: "\f118"; } + +.fa-thumbtack::before { + content: "\f08d"; } + +.fa-thumb-tack::before { + content: "\f08d"; } + +.fa-trophy::before { + content: "\f091"; } + +.fa-person-praying::before { + content: "\f683"; } + +.fa-pray::before { + content: "\f683"; } + +.fa-hammer::before { + content: "\f6e3"; } + +.fa-hand-peace::before { + content: "\f25b"; } + +.fa-rotate::before { + content: "\f2f1"; } + +.fa-sync-alt::before { + content: "\f2f1"; } + +.fa-spinner::before { + content: "\f110"; } + +.fa-robot::before { + content: "\f544"; } + +.fa-peace::before { + content: "\f67c"; } + +.fa-gears::before { + content: "\f085"; } + +.fa-cogs::before { + content: "\f085"; } + +.fa-warehouse::before { + content: "\f494"; } + +.fa-arrow-up-right-dots::before { + content: "\e4b7"; } + +.fa-splotch::before { + content: "\f5bc"; } + +.fa-face-grin-hearts::before { + content: "\f584"; } + +.fa-grin-hearts::before { + content: "\f584"; } + +.fa-dice-four::before { + content: "\f524"; } + +.fa-sim-card::before { + content: "\f7c4"; } + +.fa-transgender::before { + content: "\f225"; } + +.fa-transgender-alt::before { + content: "\f225"; } + +.fa-mercury::before { + content: "\f223"; } + +.fa-arrow-turn-down::before { + content: "\f149"; } + +.fa-level-down::before { + content: "\f149"; } + +.fa-person-falling-burst::before { + content: "\e547"; } + +.fa-award::before { + content: "\f559"; } + +.fa-ticket-simple::before { + content: "\f3ff"; } + +.fa-ticket-alt::before { + content: "\f3ff"; } + +.fa-building::before { + content: "\f1ad"; } + +.fa-angles-left::before { + content: "\f100"; } + +.fa-angle-double-left::before { + content: "\f100"; } + +.fa-qrcode::before { + content: "\f029"; } + +.fa-clock-rotate-left::before { + content: "\f1da"; } + +.fa-history::before { + content: "\f1da"; } + +.fa-face-grin-beam-sweat::before { + content: "\f583"; } + +.fa-grin-beam-sweat::before { + content: "\f583"; } + +.fa-file-export::before { + content: "\f56e"; } + +.fa-arrow-right-from-file::before { + content: "\f56e"; } + +.fa-shield::before { + content: "\f132"; } + +.fa-shield-blank::before { + content: "\f132"; } + +.fa-arrow-up-short-wide::before { + content: "\f885"; } + +.fa-sort-amount-up-alt::before { + content: "\f885"; } + +.fa-house-medical::before { + content: "\e3b2"; } + +.fa-golf-ball-tee::before { + content: "\f450"; } + +.fa-golf-ball::before { + content: "\f450"; } + +.fa-circle-chevron-left::before { + content: "\f137"; } + +.fa-chevron-circle-left::before { + content: "\f137"; } + +.fa-house-chimney-window::before { + content: "\e00d"; } + +.fa-pen-nib::before { + content: "\f5ad"; } + +.fa-tent-arrow-turn-left::before { + content: "\e580"; } + +.fa-tents::before { + content: "\e582"; } + +.fa-wand-magic::before { + content: "\f0d0"; } + +.fa-magic::before { + content: "\f0d0"; } + +.fa-dog::before { + content: "\f6d3"; } + +.fa-carrot::before { + content: "\f787"; } + +.fa-moon::before { + content: "\f186"; } + +.fa-wine-glass-empty::before { + content: "\f5ce"; } + +.fa-wine-glass-alt::before { + content: "\f5ce"; } + +.fa-cheese::before { + content: "\f7ef"; } + +.fa-yin-yang::before { + content: "\f6ad"; } + +.fa-music::before { + content: "\f001"; } + +.fa-code-commit::before { + content: "\f386"; } + +.fa-temperature-low::before { + content: "\f76b"; } + +.fa-person-biking::before { + content: "\f84a"; } + +.fa-biking::before { + content: "\f84a"; } + +.fa-broom::before { + content: "\f51a"; } + +.fa-shield-heart::before { + content: "\e574"; } + +.fa-gopuram::before { + content: "\f664"; } + +.fa-earth-oceania::before { + content: "\e47b"; } + +.fa-globe-oceania::before { + content: "\e47b"; } + +.fa-square-xmark::before { + content: "\f2d3"; } + +.fa-times-square::before { + content: "\f2d3"; } + +.fa-xmark-square::before { + content: "\f2d3"; } + +.fa-hashtag::before { + content: "\23"; } + +.fa-up-right-and-down-left-from-center::before { + content: "\f424"; } + +.fa-expand-alt::before { + content: "\f424"; } + +.fa-oil-can::before { + content: "\f613"; } + +.fa-t::before { + content: "\54"; } + +.fa-hippo::before { + content: "\f6ed"; } + +.fa-chart-column::before { + content: "\e0e3"; } + +.fa-infinity::before { + content: "\f534"; } + +.fa-vial-circle-check::before { + content: "\e596"; } + +.fa-person-arrow-down-to-line::before { + content: "\e538"; } + +.fa-voicemail::before { + content: "\f897"; } + +.fa-fan::before { + content: "\f863"; } + +.fa-person-walking-luggage::before { + content: "\e554"; } + +.fa-up-down::before { + content: "\f338"; } + +.fa-arrows-alt-v::before { + content: "\f338"; } + +.fa-cloud-moon-rain::before { + content: "\f73c"; } + +.fa-calendar::before { + content: "\f133"; } + +.fa-trailer::before { + content: "\e041"; } + +.fa-bahai::before { + content: "\f666"; } + +.fa-haykal::before { + content: "\f666"; } + +.fa-sd-card::before { + content: "\f7c2"; } + +.fa-dragon::before { + content: "\f6d5"; } + +.fa-shoe-prints::before { + content: "\f54b"; } + +.fa-circle-plus::before { + content: "\f055"; } + +.fa-plus-circle::before { + content: "\f055"; } + +.fa-face-grin-tongue-wink::before { + content: "\f58b"; } + +.fa-grin-tongue-wink::before { + content: "\f58b"; } + +.fa-hand-holding::before { + content: "\f4bd"; } + +.fa-plug-circle-exclamation::before { + content: "\e55d"; } + +.fa-link-slash::before { + content: "\f127"; } + +.fa-chain-broken::before { + content: "\f127"; } + +.fa-chain-slash::before { + content: "\f127"; } + +.fa-unlink::before { + content: "\f127"; } + +.fa-clone::before { + content: "\f24d"; } + +.fa-person-walking-arrow-loop-left::before { + content: "\e551"; } + +.fa-arrow-up-z-a::before { + content: "\f882"; } + +.fa-sort-alpha-up-alt::before { + content: "\f882"; } + +.fa-fire-flame-curved::before { + content: "\f7e4"; } + +.fa-fire-alt::before { + content: "\f7e4"; } + +.fa-tornado::before { + content: "\f76f"; } + +.fa-file-circle-plus::before { + content: "\e494"; } + +.fa-book-quran::before { + content: "\f687"; } + +.fa-quran::before { + content: "\f687"; } + +.fa-anchor::before { + content: "\f13d"; } + +.fa-border-all::before { + content: "\f84c"; } + +.fa-face-angry::before { + content: "\f556"; } + +.fa-angry::before { + content: "\f556"; } + +.fa-cookie-bite::before { + content: "\f564"; } + +.fa-arrow-trend-down::before { + content: "\e097"; } + +.fa-rss::before { + content: "\f09e"; } + +.fa-feed::before { + content: "\f09e"; } + +.fa-draw-polygon::before { + content: "\f5ee"; } + +.fa-scale-balanced::before { + content: "\f24e"; } + +.fa-balance-scale::before { + content: "\f24e"; } + +.fa-gauge-simple-high::before { + content: "\f62a"; } + +.fa-tachometer::before { + content: "\f62a"; } + +.fa-tachometer-fast::before { + content: "\f62a"; } + +.fa-shower::before { + content: "\f2cc"; } + +.fa-desktop::before { + content: "\f390"; } + +.fa-desktop-alt::before { + content: "\f390"; } + +.fa-m::before { + content: "\4d"; } + +.fa-table-list::before { + content: "\f00b"; } + +.fa-th-list::before { + content: "\f00b"; } + +.fa-comment-sms::before { + content: "\f7cd"; } + +.fa-sms::before { + content: "\f7cd"; } + +.fa-book::before { + content: "\f02d"; } + +.fa-user-plus::before { + content: "\f234"; } + +.fa-check::before { + content: "\f00c"; } + +.fa-battery-three-quarters::before { + content: "\f241"; } + +.fa-battery-4::before { + content: "\f241"; } + +.fa-house-circle-check::before { + content: "\e509"; } + +.fa-angle-left::before { + content: "\f104"; } + +.fa-diagram-successor::before { + content: "\e47a"; } + +.fa-truck-arrow-right::before { + content: "\e58b"; } + +.fa-arrows-split-up-and-left::before { + content: "\e4bc"; } + +.fa-hand-fist::before { + content: "\f6de"; } + +.fa-fist-raised::before { + content: "\f6de"; } + +.fa-cloud-moon::before { + content: "\f6c3"; } + +.fa-briefcase::before { + content: "\f0b1"; } + +.fa-person-falling::before { + content: "\e546"; } + +.fa-image-portrait::before { + content: "\f3e0"; } + +.fa-portrait::before { + content: "\f3e0"; } + +.fa-user-tag::before { + content: "\f507"; } + +.fa-rug::before { + content: "\e569"; } + +.fa-earth-europe::before { + content: "\f7a2"; } + +.fa-globe-europe::before { + content: "\f7a2"; } + +.fa-cart-flatbed-suitcase::before { + content: "\f59d"; } + +.fa-luggage-cart::before { + content: "\f59d"; } + +.fa-rectangle-xmark::before { + content: "\f410"; } + +.fa-rectangle-times::before { + content: "\f410"; } + +.fa-times-rectangle::before { + content: "\f410"; } + +.fa-window-close::before { + content: "\f410"; } + +.fa-baht-sign::before { + content: "\e0ac"; } + +.fa-book-open::before { + content: "\f518"; } + +.fa-book-journal-whills::before { + content: "\f66a"; } + +.fa-journal-whills::before { + content: "\f66a"; } + +.fa-handcuffs::before { + content: "\e4f8"; } + +.fa-triangle-exclamation::before { + content: "\f071"; } + +.fa-exclamation-triangle::before { + content: "\f071"; } + +.fa-warning::before { + content: "\f071"; } + +.fa-database::before { + content: "\f1c0"; } + +.fa-share::before { + content: "\f064"; } + +.fa-arrow-turn-right::before { + content: "\f064"; } + +.fa-mail-forward::before { + content: "\f064"; } + +.fa-bottle-droplet::before { + content: "\e4c4"; } + +.fa-mask-face::before { + content: "\e1d7"; } + +.fa-hill-rockslide::before { + content: "\e508"; } + +.fa-right-left::before { + content: "\f362"; } + +.fa-exchange-alt::before { + content: "\f362"; } + +.fa-paper-plane::before { + content: "\f1d8"; } + +.fa-road-circle-exclamation::before { + content: "\e565"; } + +.fa-dungeon::before { + content: "\f6d9"; } + +.fa-align-right::before { + content: "\f038"; } + +.fa-money-bill-1-wave::before { + content: "\f53b"; } + +.fa-money-bill-wave-alt::before { + content: "\f53b"; } + +.fa-life-ring::before { + content: "\f1cd"; } + +.fa-hands::before { + content: "\f2a7"; } + +.fa-sign-language::before { + content: "\f2a7"; } + +.fa-signing::before { + content: "\f2a7"; } + +.fa-calendar-day::before { + content: "\f783"; } + +.fa-water-ladder::before { + content: "\f5c5"; } + +.fa-ladder-water::before { + content: "\f5c5"; } + +.fa-swimming-pool::before { + content: "\f5c5"; } + +.fa-arrows-up-down::before { + content: "\f07d"; } + +.fa-arrows-v::before { + content: "\f07d"; } + +.fa-face-grimace::before { + content: "\f57f"; } + +.fa-grimace::before { + content: "\f57f"; } + +.fa-wheelchair-move::before { + content: "\e2ce"; } + +.fa-wheelchair-alt::before { + content: "\e2ce"; } + +.fa-turn-down::before { + content: "\f3be"; } + +.fa-level-down-alt::before { + content: "\f3be"; } + +.fa-person-walking-arrow-right::before { + content: "\e552"; } + +.fa-square-envelope::before { + content: "\f199"; } + +.fa-envelope-square::before { + content: "\f199"; } + +.fa-dice::before { + content: "\f522"; } + +.fa-bowling-ball::before { + content: "\f436"; } + +.fa-brain::before { + content: "\f5dc"; } + +.fa-bandage::before { + content: "\f462"; } + +.fa-band-aid::before { + content: "\f462"; } + +.fa-calendar-minus::before { + content: "\f272"; } + +.fa-circle-xmark::before { + content: "\f057"; } + +.fa-times-circle::before { + content: "\f057"; } + +.fa-xmark-circle::before { + content: "\f057"; } + +.fa-gifts::before { + content: "\f79c"; } + +.fa-hotel::before { + content: "\f594"; } + +.fa-earth-asia::before { + content: "\f57e"; } + +.fa-globe-asia::before { + content: "\f57e"; } + +.fa-id-card-clip::before { + content: "\f47f"; } + +.fa-id-card-alt::before { + content: "\f47f"; } + +.fa-magnifying-glass-plus::before { + content: "\f00e"; } + +.fa-search-plus::before { + content: "\f00e"; } + +.fa-thumbs-up::before { + content: "\f164"; } + +.fa-user-clock::before { + content: "\f4fd"; } + +.fa-hand-dots::before { + content: "\f461"; } + +.fa-allergies::before { + content: "\f461"; } + +.fa-file-invoice::before { + content: "\f570"; } + +.fa-window-minimize::before { + content: "\f2d1"; } + +.fa-mug-saucer::before { + content: "\f0f4"; } + +.fa-coffee::before { + content: "\f0f4"; } + +.fa-brush::before { + content: "\f55d"; } + +.fa-mask::before { + content: "\f6fa"; } + +.fa-magnifying-glass-minus::before { + content: "\f010"; } + +.fa-search-minus::before { + content: "\f010"; } + +.fa-ruler-vertical::before { + content: "\f548"; } + +.fa-user-large::before { + content: "\f406"; } + +.fa-user-alt::before { + content: "\f406"; } + +.fa-train-tram::before { + content: "\e5b4"; } + +.fa-user-nurse::before { + content: "\f82f"; } + +.fa-syringe::before { + content: "\f48e"; } + +.fa-cloud-sun::before { + content: "\f6c4"; } + +.fa-stopwatch-20::before { + content: "\e06f"; } + +.fa-square-full::before { + content: "\f45c"; } + +.fa-magnet::before { + content: "\f076"; } + +.fa-jar::before { + content: "\e516"; } + +.fa-note-sticky::before { + content: "\f249"; } + +.fa-sticky-note::before { + content: "\f249"; } + +.fa-bug-slash::before { + content: "\e490"; } + +.fa-arrow-up-from-water-pump::before { + content: "\e4b6"; } + +.fa-bone::before { + content: "\f5d7"; } + +.fa-user-injured::before { + content: "\f728"; } + +.fa-face-sad-tear::before { + content: "\f5b4"; } + +.fa-sad-tear::before { + content: "\f5b4"; } + +.fa-plane::before { + content: "\f072"; } + +.fa-tent-arrows-down::before { + content: "\e581"; } + +.fa-exclamation::before { + content: "\21"; } + +.fa-arrows-spin::before { + content: "\e4bb"; } + +.fa-print::before { + content: "\f02f"; } + +.fa-turkish-lira-sign::before { + content: "\e2bb"; } + +.fa-try::before { + content: "\e2bb"; } + +.fa-turkish-lira::before { + content: "\e2bb"; } + +.fa-dollar-sign::before { + content: "\24"; } + +.fa-dollar::before { + content: "\24"; } + +.fa-usd::before { + content: "\24"; } + +.fa-x::before { + content: "\58"; } + +.fa-magnifying-glass-dollar::before { + content: "\f688"; } + +.fa-search-dollar::before { + content: "\f688"; } + +.fa-users-gear::before { + content: "\f509"; } + +.fa-users-cog::before { + content: "\f509"; } + +.fa-person-military-pointing::before { + content: "\e54a"; } + +.fa-building-columns::before { + content: "\f19c"; } + +.fa-bank::before { + content: "\f19c"; } + +.fa-institution::before { + content: "\f19c"; } + +.fa-museum::before { + content: "\f19c"; } + +.fa-university::before { + content: "\f19c"; } + +.fa-umbrella::before { + content: "\f0e9"; } + +.fa-trowel::before { + content: "\e589"; } + +.fa-d::before { + content: "\44"; } + +.fa-stapler::before { + content: "\e5af"; } + +.fa-masks-theater::before { + content: "\f630"; } + +.fa-theater-masks::before { + content: "\f630"; } + +.fa-kip-sign::before { + content: "\e1c4"; } + +.fa-hand-point-left::before { + content: "\f0a5"; } + +.fa-handshake-simple::before { + content: "\f4c6"; } + +.fa-handshake-alt::before { + content: "\f4c6"; } + +.fa-jet-fighter::before { + content: "\f0fb"; } + +.fa-fighter-jet::before { + content: "\f0fb"; } + +.fa-square-share-nodes::before { + content: "\f1e1"; } + +.fa-share-alt-square::before { + content: "\f1e1"; } + +.fa-barcode::before { + content: "\f02a"; } + +.fa-plus-minus::before { + content: "\e43c"; } + +.fa-video::before { + content: "\f03d"; } + +.fa-video-camera::before { + content: "\f03d"; } + +.fa-graduation-cap::before { + content: "\f19d"; } + +.fa-mortar-board::before { + content: "\f19d"; } + +.fa-hand-holding-medical::before { + content: "\e05c"; } + +.fa-person-circle-check::before { + content: "\e53e"; } + +.fa-turn-up::before { + content: "\f3bf"; } + +.fa-level-up-alt::before { + content: "\f3bf"; } + +.sr-only, +.fa-sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + white-space: nowrap; + border-width: 0; } + +.sr-only-focusable:not(:focus), +.fa-sr-only-focusable:not(:focus) { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + white-space: nowrap; + border-width: 0; } +:root, :host { + --fa-style-family-brands: 'Font Awesome 6 Brands'; + --fa-font-brands: normal 400 1em/1 'Font Awesome 6 Brands'; } + +@font-face { + font-family: 'Font Awesome 6 Brands'; + font-style: normal; + font-weight: 400; + font-display: block; + src: url("../webfonts/fa-brands-400.woff2") format("woff2"), url("../webfonts/fa-brands-400.ttf") format("truetype"); } + +.fab, +.fa-brands { + font-weight: 400; } + +.fa-monero:before { + content: "\f3d0"; } + +.fa-hooli:before { + content: "\f427"; } + +.fa-yelp:before { + content: "\f1e9"; } + +.fa-cc-visa:before { + content: "\f1f0"; } + +.fa-lastfm:before { + content: "\f202"; } + +.fa-shopware:before { + content: "\f5b5"; } + +.fa-creative-commons-nc:before { + content: "\f4e8"; } + +.fa-aws:before { + content: "\f375"; } + +.fa-redhat:before { + content: "\f7bc"; } + +.fa-yoast:before { + content: "\f2b1"; } + +.fa-cloudflare:before { + content: "\e07d"; } + +.fa-ups:before { + content: "\f7e0"; } + +.fa-wpexplorer:before { + content: "\f2de"; } + +.fa-dyalog:before { + content: "\f399"; } + +.fa-bity:before { + content: "\f37a"; } + +.fa-stackpath:before { + content: "\f842"; } + +.fa-buysellads:before { + content: "\f20d"; } + +.fa-first-order:before { + content: "\f2b0"; } + +.fa-modx:before { + content: "\f285"; } + +.fa-guilded:before { + content: "\e07e"; } + +.fa-vnv:before { + content: "\f40b"; } + +.fa-square-js:before { + content: "\f3b9"; } + +.fa-js-square:before { + content: "\f3b9"; } + +.fa-microsoft:before { + content: "\f3ca"; } + +.fa-qq:before { + content: "\f1d6"; } + +.fa-orcid:before { + content: "\f8d2"; } + +.fa-java:before { + content: "\f4e4"; } + +.fa-invision:before { + content: "\f7b0"; } + +.fa-creative-commons-pd-alt:before { + content: "\f4ed"; } + +.fa-centercode:before { + content: "\f380"; } + +.fa-glide-g:before { + content: "\f2a6"; } + +.fa-drupal:before { + content: "\f1a9"; } + +.fa-hire-a-helper:before { + content: "\f3b0"; } + +.fa-creative-commons-by:before { + content: "\f4e7"; } + +.fa-unity:before { + content: "\e049"; } + +.fa-whmcs:before { + content: "\f40d"; } + +.fa-rocketchat:before { + content: "\f3e8"; } + +.fa-vk:before { + content: "\f189"; } + +.fa-untappd:before { + content: "\f405"; } + +.fa-mailchimp:before { + content: "\f59e"; } + +.fa-css3-alt:before { + content: "\f38b"; } + +.fa-square-reddit:before { + content: "\f1a2"; } + +.fa-reddit-square:before { + content: "\f1a2"; } + +.fa-vimeo-v:before { + content: "\f27d"; } + +.fa-contao:before { + content: "\f26d"; } + +.fa-square-font-awesome:before { + content: "\e5ad"; } + +.fa-deskpro:before { + content: "\f38f"; } + +.fa-sistrix:before { + content: "\f3ee"; } + +.fa-square-instagram:before { + content: "\e055"; } + +.fa-instagram-square:before { + content: "\e055"; } + +.fa-battle-net:before { + content: "\f835"; } + +.fa-the-red-yeti:before { + content: "\f69d"; } + +.fa-square-hacker-news:before { + content: "\f3af"; } + +.fa-hacker-news-square:before { + content: "\f3af"; } + +.fa-edge:before { + content: "\f282"; } + +.fa-napster:before { + content: "\f3d2"; } + +.fa-square-snapchat:before { + content: "\f2ad"; } + +.fa-snapchat-square:before { + content: "\f2ad"; } + +.fa-google-plus-g:before { + content: "\f0d5"; } + +.fa-artstation:before { + content: "\f77a"; } + +.fa-markdown:before { + content: "\f60f"; } + +.fa-sourcetree:before { + content: "\f7d3"; } + +.fa-google-plus:before { + content: "\f2b3"; } + +.fa-diaspora:before { + content: "\f791"; } + +.fa-foursquare:before { + content: "\f180"; } + +.fa-stack-overflow:before { + content: "\f16c"; } + +.fa-github-alt:before { + content: "\f113"; } + +.fa-phoenix-squadron:before { + content: "\f511"; } + +.fa-pagelines:before { + content: "\f18c"; } + +.fa-algolia:before { + content: "\f36c"; } + +.fa-red-river:before { + content: "\f3e3"; } + +.fa-creative-commons-sa:before { + content: "\f4ef"; } + +.fa-safari:before { + content: "\f267"; } + +.fa-google:before { + content: "\f1a0"; } + +.fa-square-font-awesome-stroke:before { + content: "\f35c"; } + +.fa-font-awesome-alt:before { + content: "\f35c"; } + +.fa-atlassian:before { + content: "\f77b"; } + +.fa-linkedin-in:before { + content: "\f0e1"; } + +.fa-digital-ocean:before { + content: "\f391"; } + +.fa-nimblr:before { + content: "\f5a8"; } + +.fa-chromecast:before { + content: "\f838"; } + +.fa-evernote:before { + content: "\f839"; } + +.fa-hacker-news:before { + content: "\f1d4"; } + +.fa-creative-commons-sampling:before { + content: "\f4f0"; } + +.fa-adversal:before { + content: "\f36a"; } + +.fa-creative-commons:before { + content: "\f25e"; } + +.fa-watchman-monitoring:before { + content: "\e087"; } + +.fa-fonticons:before { + content: "\f280"; } + +.fa-weixin:before { + content: "\f1d7"; } + +.fa-shirtsinbulk:before { + content: "\f214"; } + +.fa-codepen:before { + content: "\f1cb"; } + +.fa-git-alt:before { + content: "\f841"; } + +.fa-lyft:before { + content: "\f3c3"; } + +.fa-rev:before { + content: "\f5b2"; } + +.fa-windows:before { + content: "\f17a"; } + +.fa-wizards-of-the-coast:before { + content: "\f730"; } + +.fa-square-viadeo:before { + content: "\f2aa"; } + +.fa-viadeo-square:before { + content: "\f2aa"; } + +.fa-meetup:before { + content: "\f2e0"; } + +.fa-centos:before { + content: "\f789"; } + +.fa-adn:before { + content: "\f170"; } + +.fa-cloudsmith:before { + content: "\f384"; } + +.fa-pied-piper-alt:before { + content: "\f1a8"; } + +.fa-square-dribbble:before { + content: "\f397"; } + +.fa-dribbble-square:before { + content: "\f397"; } + +.fa-codiepie:before { + content: "\f284"; } + +.fa-node:before { + content: "\f419"; } + +.fa-mix:before { + content: "\f3cb"; } + +.fa-steam:before { + content: "\f1b6"; } + +.fa-cc-apple-pay:before { + content: "\f416"; } + +.fa-scribd:before { + content: "\f28a"; } + +.fa-openid:before { + content: "\f19b"; } + +.fa-instalod:before { + content: "\e081"; } + +.fa-expeditedssl:before { + content: "\f23e"; } + +.fa-sellcast:before { + content: "\f2da"; } + +.fa-square-twitter:before { + content: "\f081"; } + +.fa-twitter-square:before { + content: "\f081"; } + +.fa-r-project:before { + content: "\f4f7"; } + +.fa-delicious:before { + content: "\f1a5"; } + +.fa-freebsd:before { + content: "\f3a4"; } + +.fa-vuejs:before { + content: "\f41f"; } + +.fa-accusoft:before { + content: "\f369"; } + +.fa-ioxhost:before { + content: "\f208"; } + +.fa-fonticons-fi:before { + content: "\f3a2"; } + +.fa-app-store:before { + content: "\f36f"; } + +.fa-cc-mastercard:before { + content: "\f1f1"; } + +.fa-itunes-note:before { + content: "\f3b5"; } + +.fa-golang:before { + content: "\e40f"; } + +.fa-kickstarter:before { + content: "\f3bb"; } + +.fa-grav:before { + content: "\f2d6"; } + +.fa-weibo:before { + content: "\f18a"; } + +.fa-uncharted:before { + content: "\e084"; } + +.fa-firstdraft:before { + content: "\f3a1"; } + +.fa-square-youtube:before { + content: "\f431"; } + +.fa-youtube-square:before { + content: "\f431"; } + +.fa-wikipedia-w:before { + content: "\f266"; } + +.fa-wpressr:before { + content: "\f3e4"; } + +.fa-rendact:before { + content: "\f3e4"; } + +.fa-angellist:before { + content: "\f209"; } + +.fa-galactic-republic:before { + content: "\f50c"; } + +.fa-nfc-directional:before { + content: "\e530"; } + +.fa-skype:before { + content: "\f17e"; } + +.fa-joget:before { + content: "\f3b7"; } + +.fa-fedora:before { + content: "\f798"; } + +.fa-stripe-s:before { + content: "\f42a"; } + +.fa-meta:before { + content: "\e49b"; } + +.fa-laravel:before { + content: "\f3bd"; } + +.fa-hotjar:before { + content: "\f3b1"; } + +.fa-bluetooth-b:before { + content: "\f294"; } + +.fa-sticker-mule:before { + content: "\f3f7"; } + +.fa-creative-commons-zero:before { + content: "\f4f3"; } + +.fa-hips:before { + content: "\f452"; } + +.fa-behance:before { + content: "\f1b4"; } + +.fa-reddit:before { + content: "\f1a1"; } + +.fa-discord:before { + content: "\f392"; } + +.fa-chrome:before { + content: "\f268"; } + +.fa-app-store-ios:before { + content: "\f370"; } + +.fa-cc-discover:before { + content: "\f1f2"; } + +.fa-wpbeginner:before { + content: "\f297"; } + +.fa-confluence:before { + content: "\f78d"; } + +.fa-mdb:before { + content: "\f8ca"; } + +.fa-dochub:before { + content: "\f394"; } + +.fa-accessible-icon:before { + content: "\f368"; } + +.fa-ebay:before { + content: "\f4f4"; } + +.fa-amazon:before { + content: "\f270"; } + +.fa-unsplash:before { + content: "\e07c"; } + +.fa-yarn:before { + content: "\f7e3"; } + +.fa-square-steam:before { + content: "\f1b7"; } + +.fa-steam-square:before { + content: "\f1b7"; } + +.fa-500px:before { + content: "\f26e"; } + +.fa-square-vimeo:before { + content: "\f194"; } + +.fa-vimeo-square:before { + content: "\f194"; } + +.fa-asymmetrik:before { + content: "\f372"; } + +.fa-font-awesome:before { + content: "\f2b4"; } + +.fa-font-awesome-flag:before { + content: "\f2b4"; } + +.fa-font-awesome-logo-full:before { + content: "\f2b4"; } + +.fa-gratipay:before { + content: "\f184"; } + +.fa-apple:before { + content: "\f179"; } + +.fa-hive:before { + content: "\e07f"; } + +.fa-gitkraken:before { + content: "\f3a6"; } + +.fa-keybase:before { + content: "\f4f5"; } + +.fa-apple-pay:before { + content: "\f415"; } + +.fa-padlet:before { + content: "\e4a0"; } + +.fa-amazon-pay:before { + content: "\f42c"; } + +.fa-square-github:before { + content: "\f092"; } + +.fa-github-square:before { + content: "\f092"; } + +.fa-stumbleupon:before { + content: "\f1a4"; } + +.fa-fedex:before { + content: "\f797"; } + +.fa-phoenix-framework:before { + content: "\f3dc"; } + +.fa-shopify:before { + content: "\e057"; } + +.fa-neos:before { + content: "\f612"; } + +.fa-hackerrank:before { + content: "\f5f7"; } + +.fa-researchgate:before { + content: "\f4f8"; } + +.fa-swift:before { + content: "\f8e1"; } + +.fa-angular:before { + content: "\f420"; } + +.fa-speakap:before { + content: "\f3f3"; } + +.fa-angrycreative:before { + content: "\f36e"; } + +.fa-y-combinator:before { + content: "\f23b"; } + +.fa-empire:before { + content: "\f1d1"; } + +.fa-envira:before { + content: "\f299"; } + +.fa-square-gitlab:before { + content: "\e5ae"; } + +.fa-gitlab-square:before { + content: "\e5ae"; } + +.fa-studiovinari:before { + content: "\f3f8"; } + +.fa-pied-piper:before { + content: "\f2ae"; } + +.fa-wordpress:before { + content: "\f19a"; } + +.fa-product-hunt:before { + content: "\f288"; } + +.fa-firefox:before { + content: "\f269"; } + +.fa-linode:before { + content: "\f2b8"; } + +.fa-goodreads:before { + content: "\f3a8"; } + +.fa-square-odnoklassniki:before { + content: "\f264"; } + +.fa-odnoklassniki-square:before { + content: "\f264"; } + +.fa-jsfiddle:before { + content: "\f1cc"; } + +.fa-sith:before { + content: "\f512"; } + +.fa-themeisle:before { + content: "\f2b2"; } + +.fa-page4:before { + content: "\f3d7"; } + +.fa-hashnode:before { + content: "\e499"; } + +.fa-react:before { + content: "\f41b"; } + +.fa-cc-paypal:before { + content: "\f1f4"; } + +.fa-squarespace:before { + content: "\f5be"; } + +.fa-cc-stripe:before { + content: "\f1f5"; } + +.fa-creative-commons-share:before { + content: "\f4f2"; } + +.fa-bitcoin:before { + content: "\f379"; } + +.fa-keycdn:before { + content: "\f3ba"; } + +.fa-opera:before { + content: "\f26a"; } + +.fa-itch-io:before { + content: "\f83a"; } + +.fa-umbraco:before { + content: "\f8e8"; } + +.fa-galactic-senate:before { + content: "\f50d"; } + +.fa-ubuntu:before { + content: "\f7df"; } + +.fa-draft2digital:before { + content: "\f396"; } + +.fa-stripe:before { + content: "\f429"; } + +.fa-houzz:before { + content: "\f27c"; } + +.fa-gg:before { + content: "\f260"; } + +.fa-dhl:before { + content: "\f790"; } + +.fa-square-pinterest:before { + content: "\f0d3"; } + +.fa-pinterest-square:before { + content: "\f0d3"; } + +.fa-xing:before { + content: "\f168"; } + +.fa-blackberry:before { + content: "\f37b"; } + +.fa-creative-commons-pd:before { + content: "\f4ec"; } + +.fa-playstation:before { + content: "\f3df"; } + +.fa-quinscape:before { + content: "\f459"; } + +.fa-less:before { + content: "\f41d"; } + +.fa-blogger-b:before { + content: "\f37d"; } + +.fa-opencart:before { + content: "\f23d"; } + +.fa-vine:before { + content: "\f1ca"; } + +.fa-paypal:before { + content: "\f1ed"; } + +.fa-gitlab:before { + content: "\f296"; } + +.fa-typo3:before { + content: "\f42b"; } + +.fa-reddit-alien:before { + content: "\f281"; } + +.fa-yahoo:before { + content: "\f19e"; } + +.fa-dailymotion:before { + content: "\e052"; } + +.fa-affiliatetheme:before { + content: "\f36b"; } + +.fa-pied-piper-pp:before { + content: "\f1a7"; } + +.fa-bootstrap:before { + content: "\f836"; } + +.fa-odnoklassniki:before { + content: "\f263"; } + +.fa-nfc-symbol:before { + content: "\e531"; } + +.fa-ethereum:before { + content: "\f42e"; } + +.fa-speaker-deck:before { + content: "\f83c"; } + +.fa-creative-commons-nc-eu:before { + content: "\f4e9"; } + +.fa-patreon:before { + content: "\f3d9"; } + +.fa-avianex:before { + content: "\f374"; } + +.fa-ello:before { + content: "\f5f1"; } + +.fa-gofore:before { + content: "\f3a7"; } + +.fa-bimobject:before { + content: "\f378"; } + +.fa-facebook-f:before { + content: "\f39e"; } + +.fa-square-google-plus:before { + content: "\f0d4"; } + +.fa-google-plus-square:before { + content: "\f0d4"; } + +.fa-mandalorian:before { + content: "\f50f"; } + +.fa-first-order-alt:before { + content: "\f50a"; } + +.fa-osi:before { + content: "\f41a"; } + +.fa-google-wallet:before { + content: "\f1ee"; } + +.fa-d-and-d-beyond:before { + content: "\f6ca"; } + +.fa-periscope:before { + content: "\f3da"; } + +.fa-fulcrum:before { + content: "\f50b"; } + +.fa-cloudscale:before { + content: "\f383"; } + +.fa-forumbee:before { + content: "\f211"; } + +.fa-mizuni:before { + content: "\f3cc"; } + +.fa-schlix:before { + content: "\f3ea"; } + +.fa-square-xing:before { + content: "\f169"; } + +.fa-xing-square:before { + content: "\f169"; } + +.fa-bandcamp:before { + content: "\f2d5"; } + +.fa-wpforms:before { + content: "\f298"; } + +.fa-cloudversify:before { + content: "\f385"; } + +.fa-usps:before { + content: "\f7e1"; } + +.fa-megaport:before { + content: "\f5a3"; } + +.fa-magento:before { + content: "\f3c4"; } + +.fa-spotify:before { + content: "\f1bc"; } + +.fa-optin-monster:before { + content: "\f23c"; } + +.fa-fly:before { + content: "\f417"; } + +.fa-aviato:before { + content: "\f421"; } + +.fa-itunes:before { + content: "\f3b4"; } + +.fa-cuttlefish:before { + content: "\f38c"; } + +.fa-blogger:before { + content: "\f37c"; } + +.fa-flickr:before { + content: "\f16e"; } + +.fa-viber:before { + content: "\f409"; } + +.fa-soundcloud:before { + content: "\f1be"; } + +.fa-digg:before { + content: "\f1a6"; } + +.fa-tencent-weibo:before { + content: "\f1d5"; } + +.fa-symfony:before { + content: "\f83d"; } + +.fa-maxcdn:before { + content: "\f136"; } + +.fa-etsy:before { + content: "\f2d7"; } + +.fa-facebook-messenger:before { + content: "\f39f"; } + +.fa-audible:before { + content: "\f373"; } + +.fa-think-peaks:before { + content: "\f731"; } + +.fa-bilibili:before { + content: "\e3d9"; } + +.fa-erlang:before { + content: "\f39d"; } + +.fa-cotton-bureau:before { + content: "\f89e"; } + +.fa-dashcube:before { + content: "\f210"; } + +.fa-42-group:before { + content: "\e080"; } + +.fa-innosoft:before { + content: "\e080"; } + +.fa-stack-exchange:before { + content: "\f18d"; } + +.fa-elementor:before { + content: "\f430"; } + +.fa-square-pied-piper:before { + content: "\e01e"; } + +.fa-pied-piper-square:before { + content: "\e01e"; } + +.fa-creative-commons-nd:before { + content: "\f4eb"; } + +.fa-palfed:before { + content: "\f3d8"; } + +.fa-superpowers:before { + content: "\f2dd"; } + +.fa-resolving:before { + content: "\f3e7"; } + +.fa-xbox:before { + content: "\f412"; } + +.fa-searchengin:before { + content: "\f3eb"; } + +.fa-tiktok:before { + content: "\e07b"; } + +.fa-square-facebook:before { + content: "\f082"; } + +.fa-facebook-square:before { + content: "\f082"; } + +.fa-renren:before { + content: "\f18b"; } + +.fa-linux:before { + content: "\f17c"; } + +.fa-glide:before { + content: "\f2a5"; } + +.fa-linkedin:before { + content: "\f08c"; } + +.fa-hubspot:before { + content: "\f3b2"; } + +.fa-deploydog:before { + content: "\f38e"; } + +.fa-twitch:before { + content: "\f1e8"; } + +.fa-ravelry:before { + content: "\f2d9"; } + +.fa-mixer:before { + content: "\e056"; } + +.fa-square-lastfm:before { + content: "\f203"; } + +.fa-lastfm-square:before { + content: "\f203"; } + +.fa-vimeo:before { + content: "\f40a"; } + +.fa-mendeley:before { + content: "\f7b3"; } + +.fa-uniregistry:before { + content: "\f404"; } + +.fa-figma:before { + content: "\f799"; } + +.fa-creative-commons-remix:before { + content: "\f4ee"; } + +.fa-cc-amazon-pay:before { + content: "\f42d"; } + +.fa-dropbox:before { + content: "\f16b"; } + +.fa-instagram:before { + content: "\f16d"; } + +.fa-cmplid:before { + content: "\e360"; } + +.fa-facebook:before { + content: "\f09a"; } + +.fa-gripfire:before { + content: "\f3ac"; } + +.fa-jedi-order:before { + content: "\f50e"; } + +.fa-uikit:before { + content: "\f403"; } + +.fa-fort-awesome-alt:before { + content: "\f3a3"; } + +.fa-phabricator:before { + content: "\f3db"; } + +.fa-ussunnah:before { + content: "\f407"; } + +.fa-earlybirds:before { + content: "\f39a"; } + +.fa-trade-federation:before { + content: "\f513"; } + +.fa-autoprefixer:before { + content: "\f41c"; } + +.fa-whatsapp:before { + content: "\f232"; } + +.fa-slideshare:before { + content: "\f1e7"; } + +.fa-google-play:before { + content: "\f3ab"; } + +.fa-viadeo:before { + content: "\f2a9"; } + +.fa-line:before { + content: "\f3c0"; } + +.fa-google-drive:before { + content: "\f3aa"; } + +.fa-servicestack:before { + content: "\f3ec"; } + +.fa-simplybuilt:before { + content: "\f215"; } + +.fa-bitbucket:before { + content: "\f171"; } + +.fa-imdb:before { + content: "\f2d8"; } + +.fa-deezer:before { + content: "\e077"; } + +.fa-raspberry-pi:before { + content: "\f7bb"; } + +.fa-jira:before { + content: "\f7b1"; } + +.fa-docker:before { + content: "\f395"; } + +.fa-screenpal:before { + content: "\e570"; } + +.fa-bluetooth:before { + content: "\f293"; } + +.fa-gitter:before { + content: "\f426"; } + +.fa-d-and-d:before { + content: "\f38d"; } + +.fa-microblog:before { + content: "\e01a"; } + +.fa-cc-diners-club:before { + content: "\f24c"; } + +.fa-gg-circle:before { + content: "\f261"; } + +.fa-pied-piper-hat:before { + content: "\f4e5"; } + +.fa-kickstarter-k:before { + content: "\f3bc"; } + +.fa-yandex:before { + content: "\f413"; } + +.fa-readme:before { + content: "\f4d5"; } + +.fa-html5:before { + content: "\f13b"; } + +.fa-sellsy:before { + content: "\f213"; } + +.fa-sass:before { + content: "\f41e"; } + +.fa-wirsindhandwerk:before { + content: "\e2d0"; } + +.fa-wsh:before { + content: "\e2d0"; } + +.fa-buromobelexperte:before { + content: "\f37f"; } + +.fa-salesforce:before { + content: "\f83b"; } + +.fa-octopus-deploy:before { + content: "\e082"; } + +.fa-medapps:before { + content: "\f3c6"; } + +.fa-ns8:before { + content: "\f3d5"; } + +.fa-pinterest-p:before { + content: "\f231"; } + +.fa-apper:before { + content: "\f371"; } + +.fa-fort-awesome:before { + content: "\f286"; } + +.fa-waze:before { + content: "\f83f"; } + +.fa-cc-jcb:before { + content: "\f24b"; } + +.fa-snapchat:before { + content: "\f2ab"; } + +.fa-snapchat-ghost:before { + content: "\f2ab"; } + +.fa-fantasy-flight-games:before { + content: "\f6dc"; } + +.fa-rust:before { + content: "\e07a"; } + +.fa-wix:before { + content: "\f5cf"; } + +.fa-square-behance:before { + content: "\f1b5"; } + +.fa-behance-square:before { + content: "\f1b5"; } + +.fa-supple:before { + content: "\f3f9"; } + +.fa-rebel:before { + content: "\f1d0"; } + +.fa-css3:before { + content: "\f13c"; } + +.fa-staylinked:before { + content: "\f3f5"; } + +.fa-kaggle:before { + content: "\f5fa"; } + +.fa-space-awesome:before { + content: "\e5ac"; } + +.fa-deviantart:before { + content: "\f1bd"; } + +.fa-cpanel:before { + content: "\f388"; } + +.fa-goodreads-g:before { + content: "\f3a9"; } + +.fa-square-git:before { + content: "\f1d2"; } + +.fa-git-square:before { + content: "\f1d2"; } + +.fa-square-tumblr:before { + content: "\f174"; } + +.fa-tumblr-square:before { + content: "\f174"; } + +.fa-trello:before { + content: "\f181"; } + +.fa-creative-commons-nc-jp:before { + content: "\f4ea"; } + +.fa-get-pocket:before { + content: "\f265"; } + +.fa-perbyte:before { + content: "\e083"; } + +.fa-grunt:before { + content: "\f3ad"; } + +.fa-weebly:before { + content: "\f5cc"; } + +.fa-connectdevelop:before { + content: "\f20e"; } + +.fa-leanpub:before { + content: "\f212"; } + +.fa-black-tie:before { + content: "\f27e"; } + +.fa-themeco:before { + content: "\f5c6"; } + +.fa-python:before { + content: "\f3e2"; } + +.fa-android:before { + content: "\f17b"; } + +.fa-bots:before { + content: "\e340"; } + +.fa-free-code-camp:before { + content: "\f2c5"; } + +.fa-hornbill:before { + content: "\f592"; } + +.fa-js:before { + content: "\f3b8"; } + +.fa-ideal:before { + content: "\e013"; } + +.fa-git:before { + content: "\f1d3"; } + +.fa-dev:before { + content: "\f6cc"; } + +.fa-sketch:before { + content: "\f7c6"; } + +.fa-yandex-international:before { + content: "\f414"; } + +.fa-cc-amex:before { + content: "\f1f3"; } + +.fa-uber:before { + content: "\f402"; } + +.fa-github:before { + content: "\f09b"; } + +.fa-php:before { + content: "\f457"; } + +.fa-alipay:before { + content: "\f642"; } + +.fa-youtube:before { + content: "\f167"; } + +.fa-skyatlas:before { + content: "\f216"; } + +.fa-firefox-browser:before { + content: "\e007"; } + +.fa-replyd:before { + content: "\f3e6"; } + +.fa-suse:before { + content: "\f7d6"; } + +.fa-jenkins:before { + content: "\f3b6"; } + +.fa-twitter:before { + content: "\f099"; } + +.fa-rockrms:before { + content: "\f3e9"; } + +.fa-pinterest:before { + content: "\f0d2"; } + +.fa-buffer:before { + content: "\f837"; } + +.fa-npm:before { + content: "\f3d4"; } + +.fa-yammer:before { + content: "\f840"; } + +.fa-btc:before { + content: "\f15a"; } + +.fa-dribbble:before { + content: "\f17d"; } + +.fa-stumbleupon-circle:before { + content: "\f1a3"; } + +.fa-internet-explorer:before { + content: "\f26b"; } + +.fa-stubber:before { + content: "\e5c7"; } + +.fa-telegram:before { + content: "\f2c6"; } + +.fa-telegram-plane:before { + content: "\f2c6"; } + +.fa-old-republic:before { + content: "\f510"; } + +.fa-odysee:before { + content: "\e5c6"; } + +.fa-square-whatsapp:before { + content: "\f40c"; } + +.fa-whatsapp-square:before { + content: "\f40c"; } + +.fa-node-js:before { + content: "\f3d3"; } + +.fa-edge-legacy:before { + content: "\e078"; } + +.fa-slack:before { + content: "\f198"; } + +.fa-slack-hash:before { + content: "\f198"; } + +.fa-medrt:before { + content: "\f3c8"; } + +.fa-usb:before { + content: "\f287"; } + +.fa-tumblr:before { + content: "\f173"; } + +.fa-vaadin:before { + content: "\f408"; } + +.fa-quora:before { + content: "\f2c4"; } + +.fa-reacteurope:before { + content: "\f75d"; } + +.fa-medium:before { + content: "\f23a"; } + +.fa-medium-m:before { + content: "\f23a"; } + +.fa-amilia:before { + content: "\f36d"; } + +.fa-mixcloud:before { + content: "\f289"; } + +.fa-flipboard:before { + content: "\f44d"; } + +.fa-viacoin:before { + content: "\f237"; } + +.fa-critical-role:before { + content: "\f6c9"; } + +.fa-sitrox:before { + content: "\e44a"; } + +.fa-discourse:before { + content: "\f393"; } + +.fa-joomla:before { + content: "\f1aa"; } + +.fa-mastodon:before { + content: "\f4f6"; } + +.fa-airbnb:before { + content: "\f834"; } + +.fa-wolf-pack-battalion:before { + content: "\f514"; } + +.fa-buy-n-large:before { + content: "\f8a6"; } + +.fa-gulp:before { + content: "\f3ae"; } + +.fa-creative-commons-sampling-plus:before { + content: "\f4f1"; } + +.fa-strava:before { + content: "\f428"; } + +.fa-ember:before { + content: "\f423"; } + +.fa-canadian-maple-leaf:before { + content: "\f785"; } + +.fa-teamspeak:before { + content: "\f4f9"; } + +.fa-pushed:before { + content: "\f3e1"; } + +.fa-wordpress-simple:before { + content: "\f411"; } + +.fa-nutritionix:before { + content: "\f3d6"; } + +.fa-wodu:before { + content: "\e088"; } + +.fa-google-pay:before { + content: "\e079"; } + +.fa-intercom:before { + content: "\f7af"; } + +.fa-zhihu:before { + content: "\f63f"; } + +.fa-korvue:before { + content: "\f42f"; } + +.fa-pix:before { + content: "\e43a"; } + +.fa-steam-symbol:before { + content: "\f3f6"; } +:root, :host { + --fa-style-family-classic: 'Font Awesome 6 Free'; + --fa-font-regular: normal 400 1em/1 'Font Awesome 6 Free'; } + +@font-face { + font-family: 'Font Awesome 6 Free'; + font-style: normal; + font-weight: 400; + font-display: block; + src: url("../webfonts/fa-regular-400.woff2") format("woff2"), url("../webfonts/fa-regular-400.ttf") format("truetype"); } + +.far, +.fa-regular { + font-weight: 400; } +:root, :host { + --fa-style-family-classic: 'Font Awesome 6 Free'; + --fa-font-solid: normal 900 1em/1 'Font Awesome 6 Free'; } + +@font-face { + font-family: 'Font Awesome 6 Free'; + font-style: normal; + font-weight: 900; + font-display: block; + src: url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.ttf") format("truetype"); } + +.fas, +.fa-solid { + font-weight: 900; } +@font-face { + font-family: 'Font Awesome 5 Brands'; + font-display: block; + font-weight: 400; + src: url("../webfonts/fa-brands-400.woff2") format("woff2"), url("../webfonts/fa-brands-400.ttf") format("truetype"); } + +@font-face { + font-family: 'Font Awesome 5 Free'; + font-display: block; + font-weight: 900; + src: url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.ttf") format("truetype"); } + +@font-face { + font-family: 'Font Awesome 5 Free'; + font-display: block; + font-weight: 400; + src: url("../webfonts/fa-regular-400.woff2") format("woff2"), url("../webfonts/fa-regular-400.ttf") format("truetype"); } +@font-face { + font-family: 'FontAwesome'; + font-display: block; + src: url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.ttf") format("truetype"); } + +@font-face { + font-family: 'FontAwesome'; + font-display: block; + src: url("../webfonts/fa-brands-400.woff2") format("woff2"), url("../webfonts/fa-brands-400.ttf") format("truetype"); } + +@font-face { + font-family: 'FontAwesome'; + font-display: block; + src: url("../webfonts/fa-regular-400.woff2") format("woff2"), url("../webfonts/fa-regular-400.ttf") format("truetype"); } + +@font-face { + font-family: 'FontAwesome'; + font-display: block; + src: url("../webfonts/fa-v4compatibility.woff2") format("woff2"), url("../webfonts/fa-v4compatibility.ttf") format("truetype"); } diff --git a/docs/site_libs/font-awesome-6.4.0/css/all.min.css b/docs/site_libs/font-awesome-6.4.0/css/all.min.css new file mode 100644 index 0000000..9411846 --- /dev/null +++ b/docs/site_libs/font-awesome-6.4.0/css/all.min.css @@ -0,0 +1,9 @@ +/*! + * Font Awesome Free 6.4.0 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + * Copyright 2023 Fonticons, Inc. + */ +.fa{font-family:var(--fa-style-family,"Font Awesome 6 Free");font-weight:var(--fa-style,900)}.fa,.fa-brands,.fa-classic,.fa-regular,.fa-sharp,.fa-solid,.fab,.far,.fas{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:var(--fa-display,inline-block);font-style:normal;font-variant:normal;line-height:1;text-rendering:auto}.fa-classic,.fa-regular,.fa-solid,.far,.fas{font-family:"Font Awesome 6 Free"}.fa-brands,.fab{font-family:"Font Awesome 6 Brands"}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-2xs{font-size:.625em;line-height:.1em;vertical-align:.225em}.fa-xs{font-size:.75em;line-height:.08333em;vertical-align:.125em}.fa-sm{font-size:.875em;line-height:.07143em;vertical-align:.05357em}.fa-lg{font-size:1.25em;line-height:.05em;vertical-align:-.075em}.fa-xl{font-size:1.5em;line-height:.04167em;vertical-align:-.125em}.fa-2xl{font-size:2em;line-height:.03125em;vertical-align:-.1875em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:var(--fa-li-margin,2.5em);padding-left:0}.fa-ul>li{position:relative}.fa-li{left:calc(var(--fa-li-width, 2em)*-1);position:absolute;text-align:center;width:var(--fa-li-width,2em);line-height:inherit}.fa-border{border-radius:var(--fa-border-radius,.1em);border:var(--fa-border-width,.08em) var(--fa-border-style,solid) var(--fa-border-color,#eee);padding:var(--fa-border-padding,.2em .25em .15em)}.fa-pull-left{float:left;margin-right:var(--fa-pull-margin,.3em)}.fa-pull-right{float:right;margin-left:var(--fa-pull-margin,.3em)}.fa-beat{-webkit-animation-name:fa-beat;animation-name:fa-beat;-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,ease-in-out);animation-timing-function:var(--fa-animation-timing,ease-in-out)}.fa-bounce{-webkit-animation-name:fa-bounce;animation-name:fa-bounce;-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,cubic-bezier(.28,.84,.42,1));animation-timing-function:var(--fa-animation-timing,cubic-bezier(.28,.84,.42,1))}.fa-fade{-webkit-animation-name:fa-fade;animation-name:fa-fade;-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1));animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1))}.fa-beat-fade,.fa-fade{-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s)}.fa-beat-fade{-webkit-animation-name:fa-beat-fade;animation-name:fa-beat-fade;-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1));animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1))}.fa-flip{-webkit-animation-name:fa-flip;animation-name:fa-flip;-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,ease-in-out);animation-timing-function:var(--fa-animation-timing,ease-in-out)}.fa-shake{-webkit-animation-name:fa-shake;animation-name:fa-shake;-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,linear);animation-timing-function:var(--fa-animation-timing,linear)}.fa-shake,.fa-spin{-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal)}.fa-spin{-webkit-animation-name:fa-spin;animation-name:fa-spin;-webkit-animation-duration:var(--fa-animation-duration,2s);animation-duration:var(--fa-animation-duration,2s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,linear);animation-timing-function:var(--fa-animation-timing,linear)}.fa-spin-reverse{--fa-animation-direction:reverse}.fa-pulse,.fa-spin-pulse{-webkit-animation-name:fa-spin;animation-name:fa-spin;-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,steps(8));animation-timing-function:var(--fa-animation-timing,steps(8))}@media (prefers-reduced-motion:reduce){.fa-beat,.fa-beat-fade,.fa-bounce,.fa-fade,.fa-flip,.fa-pulse,.fa-shake,.fa-spin,.fa-spin-pulse{-webkit-animation-delay:-1ms;animation-delay:-1ms;-webkit-animation-duration:1ms;animation-duration:1ms;-webkit-animation-iteration-count:1;animation-iteration-count:1;-webkit-transition-delay:0s;transition-delay:0s;-webkit-transition-duration:0s;transition-duration:0s}}@-webkit-keyframes fa-beat{0%,90%{-webkit-transform:scale(1);transform:scale(1)}45%{-webkit-transform:scale(var(--fa-beat-scale,1.25));transform:scale(var(--fa-beat-scale,1.25))}}@keyframes fa-beat{0%,90%{-webkit-transform:scale(1);transform:scale(1)}45%{-webkit-transform:scale(var(--fa-beat-scale,1.25));transform:scale(var(--fa-beat-scale,1.25))}}@-webkit-keyframes fa-bounce{0%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}10%{-webkit-transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0);transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0)}30%{-webkit-transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em));transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em))}50%{-webkit-transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0);transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0)}57%{-webkit-transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em));transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em))}64%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}to{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}}@keyframes fa-bounce{0%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}10%{-webkit-transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0);transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0)}30%{-webkit-transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em));transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em))}50%{-webkit-transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0);transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0)}57%{-webkit-transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em));transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em))}64%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}to{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}}@-webkit-keyframes fa-fade{50%{opacity:var(--fa-fade-opacity,.4)}}@keyframes fa-fade{50%{opacity:var(--fa-fade-opacity,.4)}}@-webkit-keyframes fa-beat-fade{0%,to{opacity:var(--fa-beat-fade-opacity,.4);-webkit-transform:scale(1);transform:scale(1)}50%{opacity:1;-webkit-transform:scale(var(--fa-beat-fade-scale,1.125));transform:scale(var(--fa-beat-fade-scale,1.125))}}@keyframes fa-beat-fade{0%,to{opacity:var(--fa-beat-fade-opacity,.4);-webkit-transform:scale(1);transform:scale(1)}50%{opacity:1;-webkit-transform:scale(var(--fa-beat-fade-scale,1.125));transform:scale(var(--fa-beat-fade-scale,1.125))}}@-webkit-keyframes fa-flip{50%{-webkit-transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg));transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg))}}@keyframes fa-flip{50%{-webkit-transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg));transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg))}}@-webkit-keyframes fa-shake{0%{-webkit-transform:rotate(-15deg);transform:rotate(-15deg)}4%{-webkit-transform:rotate(15deg);transform:rotate(15deg)}8%,24%{-webkit-transform:rotate(-18deg);transform:rotate(-18deg)}12%,28%{-webkit-transform:rotate(18deg);transform:rotate(18deg)}16%{-webkit-transform:rotate(-22deg);transform:rotate(-22deg)}20%{-webkit-transform:rotate(22deg);transform:rotate(22deg)}32%{-webkit-transform:rotate(-12deg);transform:rotate(-12deg)}36%{-webkit-transform:rotate(12deg);transform:rotate(12deg)}40%,to{-webkit-transform:rotate(0deg);transform:rotate(0deg)}}@keyframes fa-shake{0%{-webkit-transform:rotate(-15deg);transform:rotate(-15deg)}4%{-webkit-transform:rotate(15deg);transform:rotate(15deg)}8%,24%{-webkit-transform:rotate(-18deg);transform:rotate(-18deg)}12%,28%{-webkit-transform:rotate(18deg);transform:rotate(18deg)}16%{-webkit-transform:rotate(-22deg);transform:rotate(-22deg)}20%{-webkit-transform:rotate(22deg);transform:rotate(22deg)}32%{-webkit-transform:rotate(-12deg);transform:rotate(-12deg)}36%{-webkit-transform:rotate(12deg);transform:rotate(12deg)}40%,to{-webkit-transform:rotate(0deg);transform:rotate(0deg)}}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.fa-rotate-90{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-webkit-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-webkit-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-webkit-transform:scaleY(-1);transform:scaleY(-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{-webkit-transform:scale(-1);transform:scale(-1)}.fa-rotate-by{-webkit-transform:rotate(var(--fa-rotate-angle,none));transform:rotate(var(--fa-rotate-angle,none))}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%;z-index:var(--fa-stack-z-index,auto)}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:var(--fa-inverse,#fff)} + +.fa-0:before{content:"\30"}.fa-1:before{content:"\31"}.fa-2:before{content:"\32"}.fa-3:before{content:"\33"}.fa-4:before{content:"\34"}.fa-5:before{content:"\35"}.fa-6:before{content:"\36"}.fa-7:before{content:"\37"}.fa-8:before{content:"\38"}.fa-9:before{content:"\39"}.fa-fill-drip:before{content:"\f576"}.fa-arrows-to-circle:before{content:"\e4bd"}.fa-chevron-circle-right:before,.fa-circle-chevron-right:before{content:"\f138"}.fa-at:before{content:"\40"}.fa-trash-alt:before,.fa-trash-can:before{content:"\f2ed"}.fa-text-height:before{content:"\f034"}.fa-user-times:before,.fa-user-xmark:before{content:"\f235"}.fa-stethoscope:before{content:"\f0f1"}.fa-comment-alt:before,.fa-message:before{content:"\f27a"}.fa-info:before{content:"\f129"}.fa-compress-alt:before,.fa-down-left-and-up-right-to-center:before{content:"\f422"}.fa-explosion:before{content:"\e4e9"}.fa-file-alt:before,.fa-file-lines:before,.fa-file-text:before{content:"\f15c"}.fa-wave-square:before{content:"\f83e"}.fa-ring:before{content:"\f70b"}.fa-building-un:before{content:"\e4d9"}.fa-dice-three:before{content:"\f527"}.fa-calendar-alt:before,.fa-calendar-days:before{content:"\f073"}.fa-anchor-circle-check:before{content:"\e4aa"}.fa-building-circle-arrow-right:before{content:"\e4d1"}.fa-volleyball-ball:before,.fa-volleyball:before{content:"\f45f"}.fa-arrows-up-to-line:before{content:"\e4c2"}.fa-sort-desc:before,.fa-sort-down:before{content:"\f0dd"}.fa-circle-minus:before,.fa-minus-circle:before{content:"\f056"}.fa-door-open:before{content:"\f52b"}.fa-right-from-bracket:before,.fa-sign-out-alt:before{content:"\f2f5"}.fa-atom:before{content:"\f5d2"}.fa-soap:before{content:"\e06e"}.fa-heart-music-camera-bolt:before,.fa-icons:before{content:"\f86d"}.fa-microphone-alt-slash:before,.fa-microphone-lines-slash:before{content:"\f539"}.fa-bridge-circle-check:before{content:"\e4c9"}.fa-pump-medical:before{content:"\e06a"}.fa-fingerprint:before{content:"\f577"}.fa-hand-point-right:before{content:"\f0a4"}.fa-magnifying-glass-location:before,.fa-search-location:before{content:"\f689"}.fa-forward-step:before,.fa-step-forward:before{content:"\f051"}.fa-face-smile-beam:before,.fa-smile-beam:before{content:"\f5b8"}.fa-flag-checkered:before{content:"\f11e"}.fa-football-ball:before,.fa-football:before{content:"\f44e"}.fa-school-circle-exclamation:before{content:"\e56c"}.fa-crop:before{content:"\f125"}.fa-angle-double-down:before,.fa-angles-down:before{content:"\f103"}.fa-users-rectangle:before{content:"\e594"}.fa-people-roof:before{content:"\e537"}.fa-people-line:before{content:"\e534"}.fa-beer-mug-empty:before,.fa-beer:before{content:"\f0fc"}.fa-diagram-predecessor:before{content:"\e477"}.fa-arrow-up-long:before,.fa-long-arrow-up:before{content:"\f176"}.fa-burn:before,.fa-fire-flame-simple:before{content:"\f46a"}.fa-male:before,.fa-person:before{content:"\f183"}.fa-laptop:before{content:"\f109"}.fa-file-csv:before{content:"\f6dd"}.fa-menorah:before{content:"\f676"}.fa-truck-plane:before{content:"\e58f"}.fa-record-vinyl:before{content:"\f8d9"}.fa-face-grin-stars:before,.fa-grin-stars:before{content:"\f587"}.fa-bong:before{content:"\f55c"}.fa-pastafarianism:before,.fa-spaghetti-monster-flying:before{content:"\f67b"}.fa-arrow-down-up-across-line:before{content:"\e4af"}.fa-spoon:before,.fa-utensil-spoon:before{content:"\f2e5"}.fa-jar-wheat:before{content:"\e517"}.fa-envelopes-bulk:before,.fa-mail-bulk:before{content:"\f674"}.fa-file-circle-exclamation:before{content:"\e4eb"}.fa-circle-h:before,.fa-hospital-symbol:before{content:"\f47e"}.fa-pager:before{content:"\f815"}.fa-address-book:before,.fa-contact-book:before{content:"\f2b9"}.fa-strikethrough:before{content:"\f0cc"}.fa-k:before{content:"\4b"}.fa-landmark-flag:before{content:"\e51c"}.fa-pencil-alt:before,.fa-pencil:before{content:"\f303"}.fa-backward:before{content:"\f04a"}.fa-caret-right:before{content:"\f0da"}.fa-comments:before{content:"\f086"}.fa-file-clipboard:before,.fa-paste:before{content:"\f0ea"}.fa-code-pull-request:before{content:"\e13c"}.fa-clipboard-list:before{content:"\f46d"}.fa-truck-loading:before,.fa-truck-ramp-box:before{content:"\f4de"}.fa-user-check:before{content:"\f4fc"}.fa-vial-virus:before{content:"\e597"}.fa-sheet-plastic:before{content:"\e571"}.fa-blog:before{content:"\f781"}.fa-user-ninja:before{content:"\f504"}.fa-person-arrow-up-from-line:before{content:"\e539"}.fa-scroll-torah:before,.fa-torah:before{content:"\f6a0"}.fa-broom-ball:before,.fa-quidditch-broom-ball:before,.fa-quidditch:before{content:"\f458"}.fa-toggle-off:before{content:"\f204"}.fa-archive:before,.fa-box-archive:before{content:"\f187"}.fa-person-drowning:before{content:"\e545"}.fa-arrow-down-9-1:before,.fa-sort-numeric-desc:before,.fa-sort-numeric-down-alt:before{content:"\f886"}.fa-face-grin-tongue-squint:before,.fa-grin-tongue-squint:before{content:"\f58a"}.fa-spray-can:before{content:"\f5bd"}.fa-truck-monster:before{content:"\f63b"}.fa-w:before{content:"\57"}.fa-earth-africa:before,.fa-globe-africa:before{content:"\f57c"}.fa-rainbow:before{content:"\f75b"}.fa-circle-notch:before{content:"\f1ce"}.fa-tablet-alt:before,.fa-tablet-screen-button:before{content:"\f3fa"}.fa-paw:before{content:"\f1b0"}.fa-cloud:before{content:"\f0c2"}.fa-trowel-bricks:before{content:"\e58a"}.fa-face-flushed:before,.fa-flushed:before{content:"\f579"}.fa-hospital-user:before{content:"\f80d"}.fa-tent-arrow-left-right:before{content:"\e57f"}.fa-gavel:before,.fa-legal:before{content:"\f0e3"}.fa-binoculars:before{content:"\f1e5"}.fa-microphone-slash:before{content:"\f131"}.fa-box-tissue:before{content:"\e05b"}.fa-motorcycle:before{content:"\f21c"}.fa-bell-concierge:before,.fa-concierge-bell:before{content:"\f562"}.fa-pen-ruler:before,.fa-pencil-ruler:before{content:"\f5ae"}.fa-people-arrows-left-right:before,.fa-people-arrows:before{content:"\e068"}.fa-mars-and-venus-burst:before{content:"\e523"}.fa-caret-square-right:before,.fa-square-caret-right:before{content:"\f152"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-sun-plant-wilt:before{content:"\e57a"}.fa-toilets-portable:before{content:"\e584"}.fa-hockey-puck:before{content:"\f453"}.fa-table:before{content:"\f0ce"}.fa-magnifying-glass-arrow-right:before{content:"\e521"}.fa-digital-tachograph:before,.fa-tachograph-digital:before{content:"\f566"}.fa-users-slash:before{content:"\e073"}.fa-clover:before{content:"\e139"}.fa-mail-reply:before,.fa-reply:before{content:"\f3e5"}.fa-star-and-crescent:before{content:"\f699"}.fa-house-fire:before{content:"\e50c"}.fa-minus-square:before,.fa-square-minus:before{content:"\f146"}.fa-helicopter:before{content:"\f533"}.fa-compass:before{content:"\f14e"}.fa-caret-square-down:before,.fa-square-caret-down:before{content:"\f150"}.fa-file-circle-question:before{content:"\e4ef"}.fa-laptop-code:before{content:"\f5fc"}.fa-swatchbook:before{content:"\f5c3"}.fa-prescription-bottle:before{content:"\f485"}.fa-bars:before,.fa-navicon:before{content:"\f0c9"}.fa-people-group:before{content:"\e533"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-heart-broken:before,.fa-heart-crack:before{content:"\f7a9"}.fa-external-link-square-alt:before,.fa-square-up-right:before{content:"\f360"}.fa-face-kiss-beam:before,.fa-kiss-beam:before{content:"\f597"}.fa-film:before{content:"\f008"}.fa-ruler-horizontal:before{content:"\f547"}.fa-people-robbery:before{content:"\e536"}.fa-lightbulb:before{content:"\f0eb"}.fa-caret-left:before{content:"\f0d9"}.fa-circle-exclamation:before,.fa-exclamation-circle:before{content:"\f06a"}.fa-school-circle-xmark:before{content:"\e56d"}.fa-arrow-right-from-bracket:before,.fa-sign-out:before{content:"\f08b"}.fa-chevron-circle-down:before,.fa-circle-chevron-down:before{content:"\f13a"}.fa-unlock-alt:before,.fa-unlock-keyhole:before{content:"\f13e"}.fa-cloud-showers-heavy:before{content:"\f740"}.fa-headphones-alt:before,.fa-headphones-simple:before{content:"\f58f"}.fa-sitemap:before{content:"\f0e8"}.fa-circle-dollar-to-slot:before,.fa-donate:before{content:"\f4b9"}.fa-memory:before{content:"\f538"}.fa-road-spikes:before{content:"\e568"}.fa-fire-burner:before{content:"\e4f1"}.fa-flag:before{content:"\f024"}.fa-hanukiah:before{content:"\f6e6"}.fa-feather:before{content:"\f52d"}.fa-volume-down:before,.fa-volume-low:before{content:"\f027"}.fa-comment-slash:before{content:"\f4b3"}.fa-cloud-sun-rain:before{content:"\f743"}.fa-compress:before{content:"\f066"}.fa-wheat-alt:before,.fa-wheat-awn:before{content:"\e2cd"}.fa-ankh:before{content:"\f644"}.fa-hands-holding-child:before{content:"\e4fa"}.fa-asterisk:before{content:"\2a"}.fa-check-square:before,.fa-square-check:before{content:"\f14a"}.fa-peseta-sign:before{content:"\e221"}.fa-header:before,.fa-heading:before{content:"\f1dc"}.fa-ghost:before{content:"\f6e2"}.fa-list-squares:before,.fa-list:before{content:"\f03a"}.fa-phone-square-alt:before,.fa-square-phone-flip:before{content:"\f87b"}.fa-cart-plus:before{content:"\f217"}.fa-gamepad:before{content:"\f11b"}.fa-circle-dot:before,.fa-dot-circle:before{content:"\f192"}.fa-dizzy:before,.fa-face-dizzy:before{content:"\f567"}.fa-egg:before{content:"\f7fb"}.fa-house-medical-circle-xmark:before{content:"\e513"}.fa-campground:before{content:"\f6bb"}.fa-folder-plus:before{content:"\f65e"}.fa-futbol-ball:before,.fa-futbol:before,.fa-soccer-ball:before{content:"\f1e3"}.fa-paint-brush:before,.fa-paintbrush:before{content:"\f1fc"}.fa-lock:before{content:"\f023"}.fa-gas-pump:before{content:"\f52f"}.fa-hot-tub-person:before,.fa-hot-tub:before{content:"\f593"}.fa-map-location:before,.fa-map-marked:before{content:"\f59f"}.fa-house-flood-water:before{content:"\e50e"}.fa-tree:before{content:"\f1bb"}.fa-bridge-lock:before{content:"\e4cc"}.fa-sack-dollar:before{content:"\f81d"}.fa-edit:before,.fa-pen-to-square:before{content:"\f044"}.fa-car-side:before{content:"\f5e4"}.fa-share-alt:before,.fa-share-nodes:before{content:"\f1e0"}.fa-heart-circle-minus:before{content:"\e4ff"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-microscope:before{content:"\f610"}.fa-sink:before{content:"\e06d"}.fa-bag-shopping:before,.fa-shopping-bag:before{content:"\f290"}.fa-arrow-down-z-a:before,.fa-sort-alpha-desc:before,.fa-sort-alpha-down-alt:before{content:"\f881"}.fa-mitten:before{content:"\f7b5"}.fa-person-rays:before{content:"\e54d"}.fa-users:before{content:"\f0c0"}.fa-eye-slash:before{content:"\f070"}.fa-flask-vial:before{content:"\e4f3"}.fa-hand-paper:before,.fa-hand:before{content:"\f256"}.fa-om:before{content:"\f679"}.fa-worm:before{content:"\e599"}.fa-house-circle-xmark:before{content:"\e50b"}.fa-plug:before{content:"\f1e6"}.fa-chevron-up:before{content:"\f077"}.fa-hand-spock:before{content:"\f259"}.fa-stopwatch:before{content:"\f2f2"}.fa-face-kiss:before,.fa-kiss:before{content:"\f596"}.fa-bridge-circle-xmark:before{content:"\e4cb"}.fa-face-grin-tongue:before,.fa-grin-tongue:before{content:"\f589"}.fa-chess-bishop:before{content:"\f43a"}.fa-face-grin-wink:before,.fa-grin-wink:before{content:"\f58c"}.fa-deaf:before,.fa-deafness:before,.fa-ear-deaf:before,.fa-hard-of-hearing:before{content:"\f2a4"}.fa-road-circle-check:before{content:"\e564"}.fa-dice-five:before{content:"\f523"}.fa-rss-square:before,.fa-square-rss:before{content:"\f143"}.fa-land-mine-on:before{content:"\e51b"}.fa-i-cursor:before{content:"\f246"}.fa-stamp:before{content:"\f5bf"}.fa-stairs:before{content:"\e289"}.fa-i:before{content:"\49"}.fa-hryvnia-sign:before,.fa-hryvnia:before{content:"\f6f2"}.fa-pills:before{content:"\f484"}.fa-face-grin-wide:before,.fa-grin-alt:before{content:"\f581"}.fa-tooth:before{content:"\f5c9"}.fa-v:before{content:"\56"}.fa-bangladeshi-taka-sign:before{content:"\e2e6"}.fa-bicycle:before{content:"\f206"}.fa-rod-asclepius:before,.fa-rod-snake:before,.fa-staff-aesculapius:before,.fa-staff-snake:before{content:"\e579"}.fa-head-side-cough-slash:before{content:"\e062"}.fa-ambulance:before,.fa-truck-medical:before{content:"\f0f9"}.fa-wheat-awn-circle-exclamation:before{content:"\e598"}.fa-snowman:before{content:"\f7d0"}.fa-mortar-pestle:before{content:"\f5a7"}.fa-road-barrier:before{content:"\e562"}.fa-school:before{content:"\f549"}.fa-igloo:before{content:"\f7ae"}.fa-joint:before{content:"\f595"}.fa-angle-right:before{content:"\f105"}.fa-horse:before{content:"\f6f0"}.fa-q:before{content:"\51"}.fa-g:before{content:"\47"}.fa-notes-medical:before{content:"\f481"}.fa-temperature-2:before,.fa-temperature-half:before,.fa-thermometer-2:before,.fa-thermometer-half:before{content:"\f2c9"}.fa-dong-sign:before{content:"\e169"}.fa-capsules:before{content:"\f46b"}.fa-poo-bolt:before,.fa-poo-storm:before{content:"\f75a"}.fa-face-frown-open:before,.fa-frown-open:before{content:"\f57a"}.fa-hand-point-up:before{content:"\f0a6"}.fa-money-bill:before{content:"\f0d6"}.fa-bookmark:before{content:"\f02e"}.fa-align-justify:before{content:"\f039"}.fa-umbrella-beach:before{content:"\f5ca"}.fa-helmet-un:before{content:"\e503"}.fa-bullseye:before{content:"\f140"}.fa-bacon:before{content:"\f7e5"}.fa-hand-point-down:before{content:"\f0a7"}.fa-arrow-up-from-bracket:before{content:"\e09a"}.fa-folder-blank:before,.fa-folder:before{content:"\f07b"}.fa-file-medical-alt:before,.fa-file-waveform:before{content:"\f478"}.fa-radiation:before{content:"\f7b9"}.fa-chart-simple:before{content:"\e473"}.fa-mars-stroke:before{content:"\f229"}.fa-vial:before{content:"\f492"}.fa-dashboard:before,.fa-gauge-med:before,.fa-gauge:before,.fa-tachometer-alt-average:before{content:"\f624"}.fa-magic-wand-sparkles:before,.fa-wand-magic-sparkles:before{content:"\e2ca"}.fa-e:before{content:"\45"}.fa-pen-alt:before,.fa-pen-clip:before{content:"\f305"}.fa-bridge-circle-exclamation:before{content:"\e4ca"}.fa-user:before{content:"\f007"}.fa-school-circle-check:before{content:"\e56b"}.fa-dumpster:before{content:"\f793"}.fa-shuttle-van:before,.fa-van-shuttle:before{content:"\f5b6"}.fa-building-user:before{content:"\e4da"}.fa-caret-square-left:before,.fa-square-caret-left:before{content:"\f191"}.fa-highlighter:before{content:"\f591"}.fa-key:before{content:"\f084"}.fa-bullhorn:before{content:"\f0a1"}.fa-globe:before{content:"\f0ac"}.fa-synagogue:before{content:"\f69b"}.fa-person-half-dress:before{content:"\e548"}.fa-road-bridge:before{content:"\e563"}.fa-location-arrow:before{content:"\f124"}.fa-c:before{content:"\43"}.fa-tablet-button:before{content:"\f10a"}.fa-building-lock:before{content:"\e4d6"}.fa-pizza-slice:before{content:"\f818"}.fa-money-bill-wave:before{content:"\f53a"}.fa-area-chart:before,.fa-chart-area:before{content:"\f1fe"}.fa-house-flag:before{content:"\e50d"}.fa-person-circle-minus:before{content:"\e540"}.fa-ban:before,.fa-cancel:before{content:"\f05e"}.fa-camera-rotate:before{content:"\e0d8"}.fa-air-freshener:before,.fa-spray-can-sparkles:before{content:"\f5d0"}.fa-star:before{content:"\f005"}.fa-repeat:before{content:"\f363"}.fa-cross:before{content:"\f654"}.fa-box:before{content:"\f466"}.fa-venus-mars:before{content:"\f228"}.fa-arrow-pointer:before,.fa-mouse-pointer:before{content:"\f245"}.fa-expand-arrows-alt:before,.fa-maximize:before{content:"\f31e"}.fa-charging-station:before{content:"\f5e7"}.fa-shapes:before,.fa-triangle-circle-square:before{content:"\f61f"}.fa-random:before,.fa-shuffle:before{content:"\f074"}.fa-person-running:before,.fa-running:before{content:"\f70c"}.fa-mobile-retro:before{content:"\e527"}.fa-grip-lines-vertical:before{content:"\f7a5"}.fa-spider:before{content:"\f717"}.fa-hands-bound:before{content:"\e4f9"}.fa-file-invoice-dollar:before{content:"\f571"}.fa-plane-circle-exclamation:before{content:"\e556"}.fa-x-ray:before{content:"\f497"}.fa-spell-check:before{content:"\f891"}.fa-slash:before{content:"\f715"}.fa-computer-mouse:before,.fa-mouse:before{content:"\f8cc"}.fa-arrow-right-to-bracket:before,.fa-sign-in:before{content:"\f090"}.fa-shop-slash:before,.fa-store-alt-slash:before{content:"\e070"}.fa-server:before{content:"\f233"}.fa-virus-covid-slash:before{content:"\e4a9"}.fa-shop-lock:before{content:"\e4a5"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-blender-phone:before{content:"\f6b6"}.fa-building-wheat:before{content:"\e4db"}.fa-person-breastfeeding:before{content:"\e53a"}.fa-right-to-bracket:before,.fa-sign-in-alt:before{content:"\f2f6"}.fa-venus:before{content:"\f221"}.fa-passport:before{content:"\f5ab"}.fa-heart-pulse:before,.fa-heartbeat:before{content:"\f21e"}.fa-people-carry-box:before,.fa-people-carry:before{content:"\f4ce"}.fa-temperature-high:before{content:"\f769"}.fa-microchip:before{content:"\f2db"}.fa-crown:before{content:"\f521"}.fa-weight-hanging:before{content:"\f5cd"}.fa-xmarks-lines:before{content:"\e59a"}.fa-file-prescription:before{content:"\f572"}.fa-weight-scale:before,.fa-weight:before{content:"\f496"}.fa-user-friends:before,.fa-user-group:before{content:"\f500"}.fa-arrow-up-a-z:before,.fa-sort-alpha-up:before{content:"\f15e"}.fa-chess-knight:before{content:"\f441"}.fa-face-laugh-squint:before,.fa-laugh-squint:before{content:"\f59b"}.fa-wheelchair:before{content:"\f193"}.fa-arrow-circle-up:before,.fa-circle-arrow-up:before{content:"\f0aa"}.fa-toggle-on:before{content:"\f205"}.fa-person-walking:before,.fa-walking:before{content:"\f554"}.fa-l:before{content:"\4c"}.fa-fire:before{content:"\f06d"}.fa-bed-pulse:before,.fa-procedures:before{content:"\f487"}.fa-shuttle-space:before,.fa-space-shuttle:before{content:"\f197"}.fa-face-laugh:before,.fa-laugh:before{content:"\f599"}.fa-folder-open:before{content:"\f07c"}.fa-heart-circle-plus:before{content:"\e500"}.fa-code-fork:before{content:"\e13b"}.fa-city:before{content:"\f64f"}.fa-microphone-alt:before,.fa-microphone-lines:before{content:"\f3c9"}.fa-pepper-hot:before{content:"\f816"}.fa-unlock:before{content:"\f09c"}.fa-colon-sign:before{content:"\e140"}.fa-headset:before{content:"\f590"}.fa-store-slash:before{content:"\e071"}.fa-road-circle-xmark:before{content:"\e566"}.fa-user-minus:before{content:"\f503"}.fa-mars-stroke-up:before,.fa-mars-stroke-v:before{content:"\f22a"}.fa-champagne-glasses:before,.fa-glass-cheers:before{content:"\f79f"}.fa-clipboard:before{content:"\f328"}.fa-house-circle-exclamation:before{content:"\e50a"}.fa-file-arrow-up:before,.fa-file-upload:before{content:"\f574"}.fa-wifi-3:before,.fa-wifi-strong:before,.fa-wifi:before{content:"\f1eb"}.fa-bath:before,.fa-bathtub:before{content:"\f2cd"}.fa-underline:before{content:"\f0cd"}.fa-user-edit:before,.fa-user-pen:before{content:"\f4ff"}.fa-signature:before{content:"\f5b7"}.fa-stroopwafel:before{content:"\f551"}.fa-bold:before{content:"\f032"}.fa-anchor-lock:before{content:"\e4ad"}.fa-building-ngo:before{content:"\e4d7"}.fa-manat-sign:before{content:"\e1d5"}.fa-not-equal:before{content:"\f53e"}.fa-border-style:before,.fa-border-top-left:before{content:"\f853"}.fa-map-location-dot:before,.fa-map-marked-alt:before{content:"\f5a0"}.fa-jedi:before{content:"\f669"}.fa-poll:before,.fa-square-poll-vertical:before{content:"\f681"}.fa-mug-hot:before{content:"\f7b6"}.fa-battery-car:before,.fa-car-battery:before{content:"\f5df"}.fa-gift:before{content:"\f06b"}.fa-dice-two:before{content:"\f528"}.fa-chess-queen:before{content:"\f445"}.fa-glasses:before{content:"\f530"}.fa-chess-board:before{content:"\f43c"}.fa-building-circle-check:before{content:"\e4d2"}.fa-person-chalkboard:before{content:"\e53d"}.fa-mars-stroke-h:before,.fa-mars-stroke-right:before{content:"\f22b"}.fa-hand-back-fist:before,.fa-hand-rock:before{content:"\f255"}.fa-caret-square-up:before,.fa-square-caret-up:before{content:"\f151"}.fa-cloud-showers-water:before{content:"\e4e4"}.fa-bar-chart:before,.fa-chart-bar:before{content:"\f080"}.fa-hands-bubbles:before,.fa-hands-wash:before{content:"\e05e"}.fa-less-than-equal:before{content:"\f537"}.fa-train:before{content:"\f238"}.fa-eye-low-vision:before,.fa-low-vision:before{content:"\f2a8"}.fa-crow:before{content:"\f520"}.fa-sailboat:before{content:"\e445"}.fa-window-restore:before{content:"\f2d2"}.fa-plus-square:before,.fa-square-plus:before{content:"\f0fe"}.fa-torii-gate:before{content:"\f6a1"}.fa-frog:before{content:"\f52e"}.fa-bucket:before{content:"\e4cf"}.fa-image:before{content:"\f03e"}.fa-microphone:before{content:"\f130"}.fa-cow:before{content:"\f6c8"}.fa-caret-up:before{content:"\f0d8"}.fa-screwdriver:before{content:"\f54a"}.fa-folder-closed:before{content:"\e185"}.fa-house-tsunami:before{content:"\e515"}.fa-square-nfi:before{content:"\e576"}.fa-arrow-up-from-ground-water:before{content:"\e4b5"}.fa-glass-martini-alt:before,.fa-martini-glass:before{content:"\f57b"}.fa-rotate-back:before,.fa-rotate-backward:before,.fa-rotate-left:before,.fa-undo-alt:before{content:"\f2ea"}.fa-columns:before,.fa-table-columns:before{content:"\f0db"}.fa-lemon:before{content:"\f094"}.fa-head-side-mask:before{content:"\e063"}.fa-handshake:before{content:"\f2b5"}.fa-gem:before{content:"\f3a5"}.fa-dolly-box:before,.fa-dolly:before{content:"\f472"}.fa-smoking:before{content:"\f48d"}.fa-compress-arrows-alt:before,.fa-minimize:before{content:"\f78c"}.fa-monument:before{content:"\f5a6"}.fa-snowplow:before{content:"\f7d2"}.fa-angle-double-right:before,.fa-angles-right:before{content:"\f101"}.fa-cannabis:before{content:"\f55f"}.fa-circle-play:before,.fa-play-circle:before{content:"\f144"}.fa-tablets:before{content:"\f490"}.fa-ethernet:before{content:"\f796"}.fa-eur:before,.fa-euro-sign:before,.fa-euro:before{content:"\f153"}.fa-chair:before{content:"\f6c0"}.fa-check-circle:before,.fa-circle-check:before{content:"\f058"}.fa-circle-stop:before,.fa-stop-circle:before{content:"\f28d"}.fa-compass-drafting:before,.fa-drafting-compass:before{content:"\f568"}.fa-plate-wheat:before{content:"\e55a"}.fa-icicles:before{content:"\f7ad"}.fa-person-shelter:before{content:"\e54f"}.fa-neuter:before{content:"\f22c"}.fa-id-badge:before{content:"\f2c1"}.fa-marker:before{content:"\f5a1"}.fa-face-laugh-beam:before,.fa-laugh-beam:before{content:"\f59a"}.fa-helicopter-symbol:before{content:"\e502"}.fa-universal-access:before{content:"\f29a"}.fa-chevron-circle-up:before,.fa-circle-chevron-up:before{content:"\f139"}.fa-lari-sign:before{content:"\e1c8"}.fa-volcano:before{content:"\f770"}.fa-person-walking-dashed-line-arrow-right:before{content:"\e553"}.fa-gbp:before,.fa-pound-sign:before,.fa-sterling-sign:before{content:"\f154"}.fa-viruses:before{content:"\e076"}.fa-square-person-confined:before{content:"\e577"}.fa-user-tie:before{content:"\f508"}.fa-arrow-down-long:before,.fa-long-arrow-down:before{content:"\f175"}.fa-tent-arrow-down-to-line:before{content:"\e57e"}.fa-certificate:before{content:"\f0a3"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-suitcase:before{content:"\f0f2"}.fa-person-skating:before,.fa-skating:before{content:"\f7c5"}.fa-filter-circle-dollar:before,.fa-funnel-dollar:before{content:"\f662"}.fa-camera-retro:before{content:"\f083"}.fa-arrow-circle-down:before,.fa-circle-arrow-down:before{content:"\f0ab"}.fa-arrow-right-to-file:before,.fa-file-import:before{content:"\f56f"}.fa-external-link-square:before,.fa-square-arrow-up-right:before{content:"\f14c"}.fa-box-open:before{content:"\f49e"}.fa-scroll:before{content:"\f70e"}.fa-spa:before{content:"\f5bb"}.fa-location-pin-lock:before{content:"\e51f"}.fa-pause:before{content:"\f04c"}.fa-hill-avalanche:before{content:"\e507"}.fa-temperature-0:before,.fa-temperature-empty:before,.fa-thermometer-0:before,.fa-thermometer-empty:before{content:"\f2cb"}.fa-bomb:before{content:"\f1e2"}.fa-registered:before{content:"\f25d"}.fa-address-card:before,.fa-contact-card:before,.fa-vcard:before{content:"\f2bb"}.fa-balance-scale-right:before,.fa-scale-unbalanced-flip:before{content:"\f516"}.fa-subscript:before{content:"\f12c"}.fa-diamond-turn-right:before,.fa-directions:before{content:"\f5eb"}.fa-burst:before{content:"\e4dc"}.fa-house-laptop:before,.fa-laptop-house:before{content:"\e066"}.fa-face-tired:before,.fa-tired:before{content:"\f5c8"}.fa-money-bills:before{content:"\e1f3"}.fa-smog:before{content:"\f75f"}.fa-crutch:before{content:"\f7f7"}.fa-cloud-arrow-up:before,.fa-cloud-upload-alt:before,.fa-cloud-upload:before{content:"\f0ee"}.fa-palette:before{content:"\f53f"}.fa-arrows-turn-right:before{content:"\e4c0"}.fa-vest:before{content:"\e085"}.fa-ferry:before{content:"\e4ea"}.fa-arrows-down-to-people:before{content:"\e4b9"}.fa-seedling:before,.fa-sprout:before{content:"\f4d8"}.fa-arrows-alt-h:before,.fa-left-right:before{content:"\f337"}.fa-boxes-packing:before{content:"\e4c7"}.fa-arrow-circle-left:before,.fa-circle-arrow-left:before{content:"\f0a8"}.fa-group-arrows-rotate:before{content:"\e4f6"}.fa-bowl-food:before{content:"\e4c6"}.fa-candy-cane:before{content:"\f786"}.fa-arrow-down-wide-short:before,.fa-sort-amount-asc:before,.fa-sort-amount-down:before{content:"\f160"}.fa-cloud-bolt:before,.fa-thunderstorm:before{content:"\f76c"}.fa-remove-format:before,.fa-text-slash:before{content:"\f87d"}.fa-face-smile-wink:before,.fa-smile-wink:before{content:"\f4da"}.fa-file-word:before{content:"\f1c2"}.fa-file-powerpoint:before{content:"\f1c4"}.fa-arrows-h:before,.fa-arrows-left-right:before{content:"\f07e"}.fa-house-lock:before{content:"\e510"}.fa-cloud-arrow-down:before,.fa-cloud-download-alt:before,.fa-cloud-download:before{content:"\f0ed"}.fa-children:before{content:"\e4e1"}.fa-blackboard:before,.fa-chalkboard:before{content:"\f51b"}.fa-user-alt-slash:before,.fa-user-large-slash:before{content:"\f4fa"}.fa-envelope-open:before{content:"\f2b6"}.fa-handshake-alt-slash:before,.fa-handshake-simple-slash:before{content:"\e05f"}.fa-mattress-pillow:before{content:"\e525"}.fa-guarani-sign:before{content:"\e19a"}.fa-arrows-rotate:before,.fa-refresh:before,.fa-sync:before{content:"\f021"}.fa-fire-extinguisher:before{content:"\f134"}.fa-cruzeiro-sign:before{content:"\e152"}.fa-greater-than-equal:before{content:"\f532"}.fa-shield-alt:before,.fa-shield-halved:before{content:"\f3ed"}.fa-atlas:before,.fa-book-atlas:before{content:"\f558"}.fa-virus:before{content:"\e074"}.fa-envelope-circle-check:before{content:"\e4e8"}.fa-layer-group:before{content:"\f5fd"}.fa-arrows-to-dot:before{content:"\e4be"}.fa-archway:before{content:"\f557"}.fa-heart-circle-check:before{content:"\e4fd"}.fa-house-chimney-crack:before,.fa-house-damage:before{content:"\f6f1"}.fa-file-archive:before,.fa-file-zipper:before{content:"\f1c6"}.fa-square:before{content:"\f0c8"}.fa-glass-martini:before,.fa-martini-glass-empty:before{content:"\f000"}.fa-couch:before{content:"\f4b8"}.fa-cedi-sign:before{content:"\e0df"}.fa-italic:before{content:"\f033"}.fa-church:before{content:"\f51d"}.fa-comments-dollar:before{content:"\f653"}.fa-democrat:before{content:"\f747"}.fa-z:before{content:"\5a"}.fa-person-skiing:before,.fa-skiing:before{content:"\f7c9"}.fa-road-lock:before{content:"\e567"}.fa-a:before{content:"\41"}.fa-temperature-arrow-down:before,.fa-temperature-down:before{content:"\e03f"}.fa-feather-alt:before,.fa-feather-pointed:before{content:"\f56b"}.fa-p:before{content:"\50"}.fa-snowflake:before{content:"\f2dc"}.fa-newspaper:before{content:"\f1ea"}.fa-ad:before,.fa-rectangle-ad:before{content:"\f641"}.fa-arrow-circle-right:before,.fa-circle-arrow-right:before{content:"\f0a9"}.fa-filter-circle-xmark:before{content:"\e17b"}.fa-locust:before{content:"\e520"}.fa-sort:before,.fa-unsorted:before{content:"\f0dc"}.fa-list-1-2:before,.fa-list-numeric:before,.fa-list-ol:before{content:"\f0cb"}.fa-person-dress-burst:before{content:"\e544"}.fa-money-check-alt:before,.fa-money-check-dollar:before{content:"\f53d"}.fa-vector-square:before{content:"\f5cb"}.fa-bread-slice:before{content:"\f7ec"}.fa-language:before{content:"\f1ab"}.fa-face-kiss-wink-heart:before,.fa-kiss-wink-heart:before{content:"\f598"}.fa-filter:before{content:"\f0b0"}.fa-question:before{content:"\3f"}.fa-file-signature:before{content:"\f573"}.fa-arrows-alt:before,.fa-up-down-left-right:before{content:"\f0b2"}.fa-house-chimney-user:before{content:"\e065"}.fa-hand-holding-heart:before{content:"\f4be"}.fa-puzzle-piece:before{content:"\f12e"}.fa-money-check:before{content:"\f53c"}.fa-star-half-alt:before,.fa-star-half-stroke:before{content:"\f5c0"}.fa-code:before{content:"\f121"}.fa-glass-whiskey:before,.fa-whiskey-glass:before{content:"\f7a0"}.fa-building-circle-exclamation:before{content:"\e4d3"}.fa-magnifying-glass-chart:before{content:"\e522"}.fa-arrow-up-right-from-square:before,.fa-external-link:before{content:"\f08e"}.fa-cubes-stacked:before{content:"\e4e6"}.fa-krw:before,.fa-won-sign:before,.fa-won:before{content:"\f159"}.fa-virus-covid:before{content:"\e4a8"}.fa-austral-sign:before{content:"\e0a9"}.fa-f:before{content:"\46"}.fa-leaf:before{content:"\f06c"}.fa-road:before{content:"\f018"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-person-circle-plus:before{content:"\e541"}.fa-chart-pie:before,.fa-pie-chart:before{content:"\f200"}.fa-bolt-lightning:before{content:"\e0b7"}.fa-sack-xmark:before{content:"\e56a"}.fa-file-excel:before{content:"\f1c3"}.fa-file-contract:before{content:"\f56c"}.fa-fish-fins:before{content:"\e4f2"}.fa-building-flag:before{content:"\e4d5"}.fa-face-grin-beam:before,.fa-grin-beam:before{content:"\f582"}.fa-object-ungroup:before{content:"\f248"}.fa-poop:before{content:"\f619"}.fa-location-pin:before,.fa-map-marker:before{content:"\f041"}.fa-kaaba:before{content:"\f66b"}.fa-toilet-paper:before{content:"\f71e"}.fa-hard-hat:before,.fa-hat-hard:before,.fa-helmet-safety:before{content:"\f807"}.fa-eject:before{content:"\f052"}.fa-arrow-alt-circle-right:before,.fa-circle-right:before{content:"\f35a"}.fa-plane-circle-check:before{content:"\e555"}.fa-face-rolling-eyes:before,.fa-meh-rolling-eyes:before{content:"\f5a5"}.fa-object-group:before{content:"\f247"}.fa-chart-line:before,.fa-line-chart:before{content:"\f201"}.fa-mask-ventilator:before{content:"\e524"}.fa-arrow-right:before{content:"\f061"}.fa-map-signs:before,.fa-signs-post:before{content:"\f277"}.fa-cash-register:before{content:"\f788"}.fa-person-circle-question:before{content:"\e542"}.fa-h:before{content:"\48"}.fa-tarp:before{content:"\e57b"}.fa-screwdriver-wrench:before,.fa-tools:before{content:"\f7d9"}.fa-arrows-to-eye:before{content:"\e4bf"}.fa-plug-circle-bolt:before{content:"\e55b"}.fa-heart:before{content:"\f004"}.fa-mars-and-venus:before{content:"\f224"}.fa-home-user:before,.fa-house-user:before{content:"\e1b0"}.fa-dumpster-fire:before{content:"\f794"}.fa-house-crack:before{content:"\e3b1"}.fa-cocktail:before,.fa-martini-glass-citrus:before{content:"\f561"}.fa-face-surprise:before,.fa-surprise:before{content:"\f5c2"}.fa-bottle-water:before{content:"\e4c5"}.fa-circle-pause:before,.fa-pause-circle:before{content:"\f28b"}.fa-toilet-paper-slash:before{content:"\e072"}.fa-apple-alt:before,.fa-apple-whole:before{content:"\f5d1"}.fa-kitchen-set:before{content:"\e51a"}.fa-r:before{content:"\52"}.fa-temperature-1:before,.fa-temperature-quarter:before,.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:"\f2ca"}.fa-cube:before{content:"\f1b2"}.fa-bitcoin-sign:before{content:"\e0b4"}.fa-shield-dog:before{content:"\e573"}.fa-solar-panel:before{content:"\f5ba"}.fa-lock-open:before{content:"\f3c1"}.fa-elevator:before{content:"\e16d"}.fa-money-bill-transfer:before{content:"\e528"}.fa-money-bill-trend-up:before{content:"\e529"}.fa-house-flood-water-circle-arrow-right:before{content:"\e50f"}.fa-poll-h:before,.fa-square-poll-horizontal:before{content:"\f682"}.fa-circle:before{content:"\f111"}.fa-backward-fast:before,.fa-fast-backward:before{content:"\f049"}.fa-recycle:before{content:"\f1b8"}.fa-user-astronaut:before{content:"\f4fb"}.fa-plane-slash:before{content:"\e069"}.fa-trademark:before{content:"\f25c"}.fa-basketball-ball:before,.fa-basketball:before{content:"\f434"}.fa-satellite-dish:before{content:"\f7c0"}.fa-arrow-alt-circle-up:before,.fa-circle-up:before{content:"\f35b"}.fa-mobile-alt:before,.fa-mobile-screen-button:before{content:"\f3cd"}.fa-volume-high:before,.fa-volume-up:before{content:"\f028"}.fa-users-rays:before{content:"\e593"}.fa-wallet:before{content:"\f555"}.fa-clipboard-check:before{content:"\f46c"}.fa-file-audio:before{content:"\f1c7"}.fa-burger:before,.fa-hamburger:before{content:"\f805"}.fa-wrench:before{content:"\f0ad"}.fa-bugs:before{content:"\e4d0"}.fa-rupee-sign:before,.fa-rupee:before{content:"\f156"}.fa-file-image:before{content:"\f1c5"}.fa-circle-question:before,.fa-question-circle:before{content:"\f059"}.fa-plane-departure:before{content:"\f5b0"}.fa-handshake-slash:before{content:"\e060"}.fa-book-bookmark:before{content:"\e0bb"}.fa-code-branch:before{content:"\f126"}.fa-hat-cowboy:before{content:"\f8c0"}.fa-bridge:before{content:"\e4c8"}.fa-phone-alt:before,.fa-phone-flip:before{content:"\f879"}.fa-truck-front:before{content:"\e2b7"}.fa-cat:before{content:"\f6be"}.fa-anchor-circle-exclamation:before{content:"\e4ab"}.fa-truck-field:before{content:"\e58d"}.fa-route:before{content:"\f4d7"}.fa-clipboard-question:before{content:"\e4e3"}.fa-panorama:before{content:"\e209"}.fa-comment-medical:before{content:"\f7f5"}.fa-teeth-open:before{content:"\f62f"}.fa-file-circle-minus:before{content:"\e4ed"}.fa-tags:before{content:"\f02c"}.fa-wine-glass:before{content:"\f4e3"}.fa-fast-forward:before,.fa-forward-fast:before{content:"\f050"}.fa-face-meh-blank:before,.fa-meh-blank:before{content:"\f5a4"}.fa-parking:before,.fa-square-parking:before{content:"\f540"}.fa-house-signal:before{content:"\e012"}.fa-bars-progress:before,.fa-tasks-alt:before{content:"\f828"}.fa-faucet-drip:before{content:"\e006"}.fa-cart-flatbed:before,.fa-dolly-flatbed:before{content:"\f474"}.fa-ban-smoking:before,.fa-smoking-ban:before{content:"\f54d"}.fa-terminal:before{content:"\f120"}.fa-mobile-button:before{content:"\f10b"}.fa-house-medical-flag:before{content:"\e514"}.fa-basket-shopping:before,.fa-shopping-basket:before{content:"\f291"}.fa-tape:before{content:"\f4db"}.fa-bus-alt:before,.fa-bus-simple:before{content:"\f55e"}.fa-eye:before{content:"\f06e"}.fa-face-sad-cry:before,.fa-sad-cry:before{content:"\f5b3"}.fa-audio-description:before{content:"\f29e"}.fa-person-military-to-person:before{content:"\e54c"}.fa-file-shield:before{content:"\e4f0"}.fa-user-slash:before{content:"\f506"}.fa-pen:before{content:"\f304"}.fa-tower-observation:before{content:"\e586"}.fa-file-code:before{content:"\f1c9"}.fa-signal-5:before,.fa-signal-perfect:before,.fa-signal:before{content:"\f012"}.fa-bus:before{content:"\f207"}.fa-heart-circle-xmark:before{content:"\e501"}.fa-home-lg:before,.fa-house-chimney:before{content:"\e3af"}.fa-window-maximize:before{content:"\f2d0"}.fa-face-frown:before,.fa-frown:before{content:"\f119"}.fa-prescription:before{content:"\f5b1"}.fa-shop:before,.fa-store-alt:before{content:"\f54f"}.fa-floppy-disk:before,.fa-save:before{content:"\f0c7"}.fa-vihara:before{content:"\f6a7"}.fa-balance-scale-left:before,.fa-scale-unbalanced:before{content:"\f515"}.fa-sort-asc:before,.fa-sort-up:before{content:"\f0de"}.fa-comment-dots:before,.fa-commenting:before{content:"\f4ad"}.fa-plant-wilt:before{content:"\e5aa"}.fa-diamond:before{content:"\f219"}.fa-face-grin-squint:before,.fa-grin-squint:before{content:"\f585"}.fa-hand-holding-dollar:before,.fa-hand-holding-usd:before{content:"\f4c0"}.fa-bacterium:before{content:"\e05a"}.fa-hand-pointer:before{content:"\f25a"}.fa-drum-steelpan:before{content:"\f56a"}.fa-hand-scissors:before{content:"\f257"}.fa-hands-praying:before,.fa-praying-hands:before{content:"\f684"}.fa-arrow-right-rotate:before,.fa-arrow-rotate-forward:before,.fa-arrow-rotate-right:before,.fa-redo:before{content:"\f01e"}.fa-biohazard:before{content:"\f780"}.fa-location-crosshairs:before,.fa-location:before{content:"\f601"}.fa-mars-double:before{content:"\f227"}.fa-child-dress:before{content:"\e59c"}.fa-users-between-lines:before{content:"\e591"}.fa-lungs-virus:before{content:"\e067"}.fa-face-grin-tears:before,.fa-grin-tears:before{content:"\f588"}.fa-phone:before{content:"\f095"}.fa-calendar-times:before,.fa-calendar-xmark:before{content:"\f273"}.fa-child-reaching:before{content:"\e59d"}.fa-head-side-virus:before{content:"\e064"}.fa-user-cog:before,.fa-user-gear:before{content:"\f4fe"}.fa-arrow-up-1-9:before,.fa-sort-numeric-up:before{content:"\f163"}.fa-door-closed:before{content:"\f52a"}.fa-shield-virus:before{content:"\e06c"}.fa-dice-six:before{content:"\f526"}.fa-mosquito-net:before{content:"\e52c"}.fa-bridge-water:before{content:"\e4ce"}.fa-person-booth:before{content:"\f756"}.fa-text-width:before{content:"\f035"}.fa-hat-wizard:before{content:"\f6e8"}.fa-pen-fancy:before{content:"\f5ac"}.fa-digging:before,.fa-person-digging:before{content:"\f85e"}.fa-trash:before{content:"\f1f8"}.fa-gauge-simple-med:before,.fa-gauge-simple:before,.fa-tachometer-average:before{content:"\f629"}.fa-book-medical:before{content:"\f7e6"}.fa-poo:before{content:"\f2fe"}.fa-quote-right-alt:before,.fa-quote-right:before{content:"\f10e"}.fa-shirt:before,.fa-t-shirt:before,.fa-tshirt:before{content:"\f553"}.fa-cubes:before{content:"\f1b3"}.fa-divide:before{content:"\f529"}.fa-tenge-sign:before,.fa-tenge:before{content:"\f7d7"}.fa-headphones:before{content:"\f025"}.fa-hands-holding:before{content:"\f4c2"}.fa-hands-clapping:before{content:"\e1a8"}.fa-republican:before{content:"\f75e"}.fa-arrow-left:before{content:"\f060"}.fa-person-circle-xmark:before{content:"\e543"}.fa-ruler:before{content:"\f545"}.fa-align-left:before{content:"\f036"}.fa-dice-d6:before{content:"\f6d1"}.fa-restroom:before{content:"\f7bd"}.fa-j:before{content:"\4a"}.fa-users-viewfinder:before{content:"\e595"}.fa-file-video:before{content:"\f1c8"}.fa-external-link-alt:before,.fa-up-right-from-square:before{content:"\f35d"}.fa-table-cells:before,.fa-th:before{content:"\f00a"}.fa-file-pdf:before{content:"\f1c1"}.fa-bible:before,.fa-book-bible:before{content:"\f647"}.fa-o:before{content:"\4f"}.fa-medkit:before,.fa-suitcase-medical:before{content:"\f0fa"}.fa-user-secret:before{content:"\f21b"}.fa-otter:before{content:"\f700"}.fa-female:before,.fa-person-dress:before{content:"\f182"}.fa-comment-dollar:before{content:"\f651"}.fa-briefcase-clock:before,.fa-business-time:before{content:"\f64a"}.fa-table-cells-large:before,.fa-th-large:before{content:"\f009"}.fa-book-tanakh:before,.fa-tanakh:before{content:"\f827"}.fa-phone-volume:before,.fa-volume-control-phone:before{content:"\f2a0"}.fa-hat-cowboy-side:before{content:"\f8c1"}.fa-clipboard-user:before{content:"\f7f3"}.fa-child:before{content:"\f1ae"}.fa-lira-sign:before{content:"\f195"}.fa-satellite:before{content:"\f7bf"}.fa-plane-lock:before{content:"\e558"}.fa-tag:before{content:"\f02b"}.fa-comment:before{content:"\f075"}.fa-birthday-cake:before,.fa-cake-candles:before,.fa-cake:before{content:"\f1fd"}.fa-envelope:before{content:"\f0e0"}.fa-angle-double-up:before,.fa-angles-up:before{content:"\f102"}.fa-paperclip:before{content:"\f0c6"}.fa-arrow-right-to-city:before{content:"\e4b3"}.fa-ribbon:before{content:"\f4d6"}.fa-lungs:before{content:"\f604"}.fa-arrow-up-9-1:before,.fa-sort-numeric-up-alt:before{content:"\f887"}.fa-litecoin-sign:before{content:"\e1d3"}.fa-border-none:before{content:"\f850"}.fa-circle-nodes:before{content:"\e4e2"}.fa-parachute-box:before{content:"\f4cd"}.fa-indent:before{content:"\f03c"}.fa-truck-field-un:before{content:"\e58e"}.fa-hourglass-empty:before,.fa-hourglass:before{content:"\f254"}.fa-mountain:before{content:"\f6fc"}.fa-user-doctor:before,.fa-user-md:before{content:"\f0f0"}.fa-circle-info:before,.fa-info-circle:before{content:"\f05a"}.fa-cloud-meatball:before{content:"\f73b"}.fa-camera-alt:before,.fa-camera:before{content:"\f030"}.fa-square-virus:before{content:"\e578"}.fa-meteor:before{content:"\f753"}.fa-car-on:before{content:"\e4dd"}.fa-sleigh:before{content:"\f7cc"}.fa-arrow-down-1-9:before,.fa-sort-numeric-asc:before,.fa-sort-numeric-down:before{content:"\f162"}.fa-hand-holding-droplet:before,.fa-hand-holding-water:before{content:"\f4c1"}.fa-water:before{content:"\f773"}.fa-calendar-check:before{content:"\f274"}.fa-braille:before{content:"\f2a1"}.fa-prescription-bottle-alt:before,.fa-prescription-bottle-medical:before{content:"\f486"}.fa-landmark:before{content:"\f66f"}.fa-truck:before{content:"\f0d1"}.fa-crosshairs:before{content:"\f05b"}.fa-person-cane:before{content:"\e53c"}.fa-tent:before{content:"\e57d"}.fa-vest-patches:before{content:"\e086"}.fa-check-double:before{content:"\f560"}.fa-arrow-down-a-z:before,.fa-sort-alpha-asc:before,.fa-sort-alpha-down:before{content:"\f15d"}.fa-money-bill-wheat:before{content:"\e52a"}.fa-cookie:before{content:"\f563"}.fa-arrow-left-rotate:before,.fa-arrow-rotate-back:before,.fa-arrow-rotate-backward:before,.fa-arrow-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-hard-drive:before,.fa-hdd:before{content:"\f0a0"}.fa-face-grin-squint-tears:before,.fa-grin-squint-tears:before{content:"\f586"}.fa-dumbbell:before{content:"\f44b"}.fa-list-alt:before,.fa-rectangle-list:before{content:"\f022"}.fa-tarp-droplet:before{content:"\e57c"}.fa-house-medical-circle-check:before{content:"\e511"}.fa-person-skiing-nordic:before,.fa-skiing-nordic:before{content:"\f7ca"}.fa-calendar-plus:before{content:"\f271"}.fa-plane-arrival:before{content:"\f5af"}.fa-arrow-alt-circle-left:before,.fa-circle-left:before{content:"\f359"}.fa-subway:before,.fa-train-subway:before{content:"\f239"}.fa-chart-gantt:before{content:"\e0e4"}.fa-indian-rupee-sign:before,.fa-indian-rupee:before,.fa-inr:before{content:"\e1bc"}.fa-crop-alt:before,.fa-crop-simple:before{content:"\f565"}.fa-money-bill-1:before,.fa-money-bill-alt:before{content:"\f3d1"}.fa-left-long:before,.fa-long-arrow-alt-left:before{content:"\f30a"}.fa-dna:before{content:"\f471"}.fa-virus-slash:before{content:"\e075"}.fa-minus:before,.fa-subtract:before{content:"\f068"}.fa-chess:before{content:"\f439"}.fa-arrow-left-long:before,.fa-long-arrow-left:before{content:"\f177"}.fa-plug-circle-check:before{content:"\e55c"}.fa-street-view:before{content:"\f21d"}.fa-franc-sign:before{content:"\e18f"}.fa-volume-off:before{content:"\f026"}.fa-american-sign-language-interpreting:before,.fa-asl-interpreting:before,.fa-hands-american-sign-language-interpreting:before,.fa-hands-asl-interpreting:before{content:"\f2a3"}.fa-cog:before,.fa-gear:before{content:"\f013"}.fa-droplet-slash:before,.fa-tint-slash:before{content:"\f5c7"}.fa-mosque:before{content:"\f678"}.fa-mosquito:before{content:"\e52b"}.fa-star-of-david:before{content:"\f69a"}.fa-person-military-rifle:before{content:"\e54b"}.fa-cart-shopping:before,.fa-shopping-cart:before{content:"\f07a"}.fa-vials:before{content:"\f493"}.fa-plug-circle-plus:before{content:"\e55f"}.fa-place-of-worship:before{content:"\f67f"}.fa-grip-vertical:before{content:"\f58e"}.fa-arrow-turn-up:before,.fa-level-up:before{content:"\f148"}.fa-u:before{content:"\55"}.fa-square-root-alt:before,.fa-square-root-variable:before{content:"\f698"}.fa-clock-four:before,.fa-clock:before{content:"\f017"}.fa-backward-step:before,.fa-step-backward:before{content:"\f048"}.fa-pallet:before{content:"\f482"}.fa-faucet:before{content:"\e005"}.fa-baseball-bat-ball:before{content:"\f432"}.fa-s:before{content:"\53"}.fa-timeline:before{content:"\e29c"}.fa-keyboard:before{content:"\f11c"}.fa-caret-down:before{content:"\f0d7"}.fa-clinic-medical:before,.fa-house-chimney-medical:before{content:"\f7f2"}.fa-temperature-3:before,.fa-temperature-three-quarters:before,.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-mobile-android-alt:before,.fa-mobile-screen:before{content:"\f3cf"}.fa-plane-up:before{content:"\e22d"}.fa-piggy-bank:before{content:"\f4d3"}.fa-battery-3:before,.fa-battery-half:before{content:"\f242"}.fa-mountain-city:before{content:"\e52e"}.fa-coins:before{content:"\f51e"}.fa-khanda:before{content:"\f66d"}.fa-sliders-h:before,.fa-sliders:before{content:"\f1de"}.fa-folder-tree:before{content:"\f802"}.fa-network-wired:before{content:"\f6ff"}.fa-map-pin:before{content:"\f276"}.fa-hamsa:before{content:"\f665"}.fa-cent-sign:before{content:"\e3f5"}.fa-flask:before{content:"\f0c3"}.fa-person-pregnant:before{content:"\e31e"}.fa-wand-sparkles:before{content:"\f72b"}.fa-ellipsis-v:before,.fa-ellipsis-vertical:before{content:"\f142"}.fa-ticket:before{content:"\f145"}.fa-power-off:before{content:"\f011"}.fa-long-arrow-alt-right:before,.fa-right-long:before{content:"\f30b"}.fa-flag-usa:before{content:"\f74d"}.fa-laptop-file:before{content:"\e51d"}.fa-teletype:before,.fa-tty:before{content:"\f1e4"}.fa-diagram-next:before{content:"\e476"}.fa-person-rifle:before{content:"\e54e"}.fa-house-medical-circle-exclamation:before{content:"\e512"}.fa-closed-captioning:before{content:"\f20a"}.fa-hiking:before,.fa-person-hiking:before{content:"\f6ec"}.fa-venus-double:before{content:"\f226"}.fa-images:before{content:"\f302"}.fa-calculator:before{content:"\f1ec"}.fa-people-pulling:before{content:"\e535"}.fa-n:before{content:"\4e"}.fa-cable-car:before,.fa-tram:before{content:"\f7da"}.fa-cloud-rain:before{content:"\f73d"}.fa-building-circle-xmark:before{content:"\e4d4"}.fa-ship:before{content:"\f21a"}.fa-arrows-down-to-line:before{content:"\e4b8"}.fa-download:before{content:"\f019"}.fa-face-grin:before,.fa-grin:before{content:"\f580"}.fa-backspace:before,.fa-delete-left:before{content:"\f55a"}.fa-eye-dropper-empty:before,.fa-eye-dropper:before,.fa-eyedropper:before{content:"\f1fb"}.fa-file-circle-check:before{content:"\e5a0"}.fa-forward:before{content:"\f04e"}.fa-mobile-android:before,.fa-mobile-phone:before,.fa-mobile:before{content:"\f3ce"}.fa-face-meh:before,.fa-meh:before{content:"\f11a"}.fa-align-center:before{content:"\f037"}.fa-book-dead:before,.fa-book-skull:before{content:"\f6b7"}.fa-drivers-license:before,.fa-id-card:before{content:"\f2c2"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-heart-circle-exclamation:before{content:"\e4fe"}.fa-home-alt:before,.fa-home-lg-alt:before,.fa-home:before,.fa-house:before{content:"\f015"}.fa-calendar-week:before{content:"\f784"}.fa-laptop-medical:before{content:"\f812"}.fa-b:before{content:"\42"}.fa-file-medical:before{content:"\f477"}.fa-dice-one:before{content:"\f525"}.fa-kiwi-bird:before{content:"\f535"}.fa-arrow-right-arrow-left:before,.fa-exchange:before{content:"\f0ec"}.fa-redo-alt:before,.fa-rotate-forward:before,.fa-rotate-right:before{content:"\f2f9"}.fa-cutlery:before,.fa-utensils:before{content:"\f2e7"}.fa-arrow-up-wide-short:before,.fa-sort-amount-up:before{content:"\f161"}.fa-mill-sign:before{content:"\e1ed"}.fa-bowl-rice:before{content:"\e2eb"}.fa-skull:before{content:"\f54c"}.fa-broadcast-tower:before,.fa-tower-broadcast:before{content:"\f519"}.fa-truck-pickup:before{content:"\f63c"}.fa-long-arrow-alt-up:before,.fa-up-long:before{content:"\f30c"}.fa-stop:before{content:"\f04d"}.fa-code-merge:before{content:"\f387"}.fa-upload:before{content:"\f093"}.fa-hurricane:before{content:"\f751"}.fa-mound:before{content:"\e52d"}.fa-toilet-portable:before{content:"\e583"}.fa-compact-disc:before{content:"\f51f"}.fa-file-arrow-down:before,.fa-file-download:before{content:"\f56d"}.fa-caravan:before{content:"\f8ff"}.fa-shield-cat:before{content:"\e572"}.fa-bolt:before,.fa-zap:before{content:"\f0e7"}.fa-glass-water:before{content:"\e4f4"}.fa-oil-well:before{content:"\e532"}.fa-vault:before{content:"\e2c5"}.fa-mars:before{content:"\f222"}.fa-toilet:before{content:"\f7d8"}.fa-plane-circle-xmark:before{content:"\e557"}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen-sign:before,.fa-yen:before{content:"\f157"}.fa-rouble:before,.fa-rub:before,.fa-ruble-sign:before,.fa-ruble:before{content:"\f158"}.fa-sun:before{content:"\f185"}.fa-guitar:before{content:"\f7a6"}.fa-face-laugh-wink:before,.fa-laugh-wink:before{content:"\f59c"}.fa-horse-head:before{content:"\f7ab"}.fa-bore-hole:before{content:"\e4c3"}.fa-industry:before{content:"\f275"}.fa-arrow-alt-circle-down:before,.fa-circle-down:before{content:"\f358"}.fa-arrows-turn-to-dots:before{content:"\e4c1"}.fa-florin-sign:before{content:"\e184"}.fa-arrow-down-short-wide:before,.fa-sort-amount-desc:before,.fa-sort-amount-down-alt:before{content:"\f884"}.fa-less-than:before{content:"\3c"}.fa-angle-down:before{content:"\f107"}.fa-car-tunnel:before{content:"\e4de"}.fa-head-side-cough:before{content:"\e061"}.fa-grip-lines:before{content:"\f7a4"}.fa-thumbs-down:before{content:"\f165"}.fa-user-lock:before{content:"\f502"}.fa-arrow-right-long:before,.fa-long-arrow-right:before{content:"\f178"}.fa-anchor-circle-xmark:before{content:"\e4ac"}.fa-ellipsis-h:before,.fa-ellipsis:before{content:"\f141"}.fa-chess-pawn:before{content:"\f443"}.fa-first-aid:before,.fa-kit-medical:before{content:"\f479"}.fa-person-through-window:before{content:"\e5a9"}.fa-toolbox:before{content:"\f552"}.fa-hands-holding-circle:before{content:"\e4fb"}.fa-bug:before{content:"\f188"}.fa-credit-card-alt:before,.fa-credit-card:before{content:"\f09d"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-hand-holding-hand:before{content:"\e4f7"}.fa-book-open-reader:before,.fa-book-reader:before{content:"\f5da"}.fa-mountain-sun:before{content:"\e52f"}.fa-arrows-left-right-to-line:before{content:"\e4ba"}.fa-dice-d20:before{content:"\f6cf"}.fa-truck-droplet:before{content:"\e58c"}.fa-file-circle-xmark:before{content:"\e5a1"}.fa-temperature-arrow-up:before,.fa-temperature-up:before{content:"\e040"}.fa-medal:before{content:"\f5a2"}.fa-bed:before{content:"\f236"}.fa-h-square:before,.fa-square-h:before{content:"\f0fd"}.fa-podcast:before{content:"\f2ce"}.fa-temperature-4:before,.fa-temperature-full:before,.fa-thermometer-4:before,.fa-thermometer-full:before{content:"\f2c7"}.fa-bell:before{content:"\f0f3"}.fa-superscript:before{content:"\f12b"}.fa-plug-circle-xmark:before{content:"\e560"}.fa-star-of-life:before{content:"\f621"}.fa-phone-slash:before{content:"\f3dd"}.fa-paint-roller:before{content:"\f5aa"}.fa-hands-helping:before,.fa-handshake-angle:before{content:"\f4c4"}.fa-location-dot:before,.fa-map-marker-alt:before{content:"\f3c5"}.fa-file:before{content:"\f15b"}.fa-greater-than:before{content:"\3e"}.fa-person-swimming:before,.fa-swimmer:before{content:"\f5c4"}.fa-arrow-down:before{content:"\f063"}.fa-droplet:before,.fa-tint:before{content:"\f043"}.fa-eraser:before{content:"\f12d"}.fa-earth-america:before,.fa-earth-americas:before,.fa-earth:before,.fa-globe-americas:before{content:"\f57d"}.fa-person-burst:before{content:"\e53b"}.fa-dove:before{content:"\f4ba"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-socks:before{content:"\f696"}.fa-inbox:before{content:"\f01c"}.fa-section:before{content:"\e447"}.fa-gauge-high:before,.fa-tachometer-alt-fast:before,.fa-tachometer-alt:before{content:"\f625"}.fa-envelope-open-text:before{content:"\f658"}.fa-hospital-alt:before,.fa-hospital-wide:before,.fa-hospital:before{content:"\f0f8"}.fa-wine-bottle:before{content:"\f72f"}.fa-chess-rook:before{content:"\f447"}.fa-bars-staggered:before,.fa-reorder:before,.fa-stream:before{content:"\f550"}.fa-dharmachakra:before{content:"\f655"}.fa-hotdog:before{content:"\f80f"}.fa-blind:before,.fa-person-walking-with-cane:before{content:"\f29d"}.fa-drum:before{content:"\f569"}.fa-ice-cream:before{content:"\f810"}.fa-heart-circle-bolt:before{content:"\e4fc"}.fa-fax:before{content:"\f1ac"}.fa-paragraph:before{content:"\f1dd"}.fa-check-to-slot:before,.fa-vote-yea:before{content:"\f772"}.fa-star-half:before{content:"\f089"}.fa-boxes-alt:before,.fa-boxes-stacked:before,.fa-boxes:before{content:"\f468"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-assistive-listening-systems:before,.fa-ear-listen:before{content:"\f2a2"}.fa-tree-city:before{content:"\e587"}.fa-play:before{content:"\f04b"}.fa-font:before{content:"\f031"}.fa-rupiah-sign:before{content:"\e23d"}.fa-magnifying-glass:before,.fa-search:before{content:"\f002"}.fa-ping-pong-paddle-ball:before,.fa-table-tennis-paddle-ball:before,.fa-table-tennis:before{content:"\f45d"}.fa-diagnoses:before,.fa-person-dots-from-line:before{content:"\f470"}.fa-trash-can-arrow-up:before,.fa-trash-restore-alt:before{content:"\f82a"}.fa-naira-sign:before{content:"\e1f6"}.fa-cart-arrow-down:before{content:"\f218"}.fa-walkie-talkie:before{content:"\f8ef"}.fa-file-edit:before,.fa-file-pen:before{content:"\f31c"}.fa-receipt:before{content:"\f543"}.fa-pen-square:before,.fa-pencil-square:before,.fa-square-pen:before{content:"\f14b"}.fa-suitcase-rolling:before{content:"\f5c1"}.fa-person-circle-exclamation:before{content:"\e53f"}.fa-chevron-down:before{content:"\f078"}.fa-battery-5:before,.fa-battery-full:before,.fa-battery:before{content:"\f240"}.fa-skull-crossbones:before{content:"\f714"}.fa-code-compare:before{content:"\e13a"}.fa-list-dots:before,.fa-list-ul:before{content:"\f0ca"}.fa-school-lock:before{content:"\e56f"}.fa-tower-cell:before{content:"\e585"}.fa-down-long:before,.fa-long-arrow-alt-down:before{content:"\f309"}.fa-ranking-star:before{content:"\e561"}.fa-chess-king:before{content:"\f43f"}.fa-person-harassing:before{content:"\e549"}.fa-brazilian-real-sign:before{content:"\e46c"}.fa-landmark-alt:before,.fa-landmark-dome:before{content:"\f752"}.fa-arrow-up:before{content:"\f062"}.fa-television:before,.fa-tv-alt:before,.fa-tv:before{content:"\f26c"}.fa-shrimp:before{content:"\e448"}.fa-list-check:before,.fa-tasks:before{content:"\f0ae"}.fa-jug-detergent:before{content:"\e519"}.fa-circle-user:before,.fa-user-circle:before{content:"\f2bd"}.fa-user-shield:before{content:"\f505"}.fa-wind:before{content:"\f72e"}.fa-car-burst:before,.fa-car-crash:before{content:"\f5e1"}.fa-y:before{content:"\59"}.fa-person-snowboarding:before,.fa-snowboarding:before{content:"\f7ce"}.fa-shipping-fast:before,.fa-truck-fast:before{content:"\f48b"}.fa-fish:before{content:"\f578"}.fa-user-graduate:before{content:"\f501"}.fa-adjust:before,.fa-circle-half-stroke:before{content:"\f042"}.fa-clapperboard:before{content:"\e131"}.fa-circle-radiation:before,.fa-radiation-alt:before{content:"\f7ba"}.fa-baseball-ball:before,.fa-baseball:before{content:"\f433"}.fa-jet-fighter-up:before{content:"\e518"}.fa-diagram-project:before,.fa-project-diagram:before{content:"\f542"}.fa-copy:before{content:"\f0c5"}.fa-volume-mute:before,.fa-volume-times:before,.fa-volume-xmark:before{content:"\f6a9"}.fa-hand-sparkles:before{content:"\e05d"}.fa-grip-horizontal:before,.fa-grip:before{content:"\f58d"}.fa-share-from-square:before,.fa-share-square:before{content:"\f14d"}.fa-child-combatant:before,.fa-child-rifle:before{content:"\e4e0"}.fa-gun:before{content:"\e19b"}.fa-phone-square:before,.fa-square-phone:before{content:"\f098"}.fa-add:before,.fa-plus:before{content:"\2b"}.fa-expand:before{content:"\f065"}.fa-computer:before{content:"\e4e5"}.fa-close:before,.fa-multiply:before,.fa-remove:before,.fa-times:before,.fa-xmark:before{content:"\f00d"}.fa-arrows-up-down-left-right:before,.fa-arrows:before{content:"\f047"}.fa-chalkboard-teacher:before,.fa-chalkboard-user:before{content:"\f51c"}.fa-peso-sign:before{content:"\e222"}.fa-building-shield:before{content:"\e4d8"}.fa-baby:before{content:"\f77c"}.fa-users-line:before{content:"\e592"}.fa-quote-left-alt:before,.fa-quote-left:before{content:"\f10d"}.fa-tractor:before{content:"\f722"}.fa-trash-arrow-up:before,.fa-trash-restore:before{content:"\f829"}.fa-arrow-down-up-lock:before{content:"\e4b0"}.fa-lines-leaning:before{content:"\e51e"}.fa-ruler-combined:before{content:"\f546"}.fa-copyright:before{content:"\f1f9"}.fa-equals:before{content:"\3d"}.fa-blender:before{content:"\f517"}.fa-teeth:before{content:"\f62e"}.fa-ils:before,.fa-shekel-sign:before,.fa-shekel:before,.fa-sheqel-sign:before,.fa-sheqel:before{content:"\f20b"}.fa-map:before{content:"\f279"}.fa-rocket:before{content:"\f135"}.fa-photo-film:before,.fa-photo-video:before{content:"\f87c"}.fa-folder-minus:before{content:"\f65d"}.fa-store:before{content:"\f54e"}.fa-arrow-trend-up:before{content:"\e098"}.fa-plug-circle-minus:before{content:"\e55e"}.fa-sign-hanging:before,.fa-sign:before{content:"\f4d9"}.fa-bezier-curve:before{content:"\f55b"}.fa-bell-slash:before{content:"\f1f6"}.fa-tablet-android:before,.fa-tablet:before{content:"\f3fb"}.fa-school-flag:before{content:"\e56e"}.fa-fill:before{content:"\f575"}.fa-angle-up:before{content:"\f106"}.fa-drumstick-bite:before{content:"\f6d7"}.fa-holly-berry:before{content:"\f7aa"}.fa-chevron-left:before{content:"\f053"}.fa-bacteria:before{content:"\e059"}.fa-hand-lizard:before{content:"\f258"}.fa-notdef:before{content:"\e1fe"}.fa-disease:before{content:"\f7fa"}.fa-briefcase-medical:before{content:"\f469"}.fa-genderless:before{content:"\f22d"}.fa-chevron-right:before{content:"\f054"}.fa-retweet:before{content:"\f079"}.fa-car-alt:before,.fa-car-rear:before{content:"\f5de"}.fa-pump-soap:before{content:"\e06b"}.fa-video-slash:before{content:"\f4e2"}.fa-battery-2:before,.fa-battery-quarter:before{content:"\f243"}.fa-radio:before{content:"\f8d7"}.fa-baby-carriage:before,.fa-carriage-baby:before{content:"\f77d"}.fa-traffic-light:before{content:"\f637"}.fa-thermometer:before{content:"\f491"}.fa-vr-cardboard:before{content:"\f729"}.fa-hand-middle-finger:before{content:"\f806"}.fa-percent:before,.fa-percentage:before{content:"\25"}.fa-truck-moving:before{content:"\f4df"}.fa-glass-water-droplet:before{content:"\e4f5"}.fa-display:before{content:"\e163"}.fa-face-smile:before,.fa-smile:before{content:"\f118"}.fa-thumb-tack:before,.fa-thumbtack:before{content:"\f08d"}.fa-trophy:before{content:"\f091"}.fa-person-praying:before,.fa-pray:before{content:"\f683"}.fa-hammer:before{content:"\f6e3"}.fa-hand-peace:before{content:"\f25b"}.fa-rotate:before,.fa-sync-alt:before{content:"\f2f1"}.fa-spinner:before{content:"\f110"}.fa-robot:before{content:"\f544"}.fa-peace:before{content:"\f67c"}.fa-cogs:before,.fa-gears:before{content:"\f085"}.fa-warehouse:before{content:"\f494"}.fa-arrow-up-right-dots:before{content:"\e4b7"}.fa-splotch:before{content:"\f5bc"}.fa-face-grin-hearts:before,.fa-grin-hearts:before{content:"\f584"}.fa-dice-four:before{content:"\f524"}.fa-sim-card:before{content:"\f7c4"}.fa-transgender-alt:before,.fa-transgender:before{content:"\f225"}.fa-mercury:before{content:"\f223"}.fa-arrow-turn-down:before,.fa-level-down:before{content:"\f149"}.fa-person-falling-burst:before{content:"\e547"}.fa-award:before{content:"\f559"}.fa-ticket-alt:before,.fa-ticket-simple:before{content:"\f3ff"}.fa-building:before{content:"\f1ad"}.fa-angle-double-left:before,.fa-angles-left:before{content:"\f100"}.fa-qrcode:before{content:"\f029"}.fa-clock-rotate-left:before,.fa-history:before{content:"\f1da"}.fa-face-grin-beam-sweat:before,.fa-grin-beam-sweat:before{content:"\f583"}.fa-arrow-right-from-file:before,.fa-file-export:before{content:"\f56e"}.fa-shield-blank:before,.fa-shield:before{content:"\f132"}.fa-arrow-up-short-wide:before,.fa-sort-amount-up-alt:before{content:"\f885"}.fa-house-medical:before{content:"\e3b2"}.fa-golf-ball-tee:before,.fa-golf-ball:before{content:"\f450"}.fa-chevron-circle-left:before,.fa-circle-chevron-left:before{content:"\f137"}.fa-house-chimney-window:before{content:"\e00d"}.fa-pen-nib:before{content:"\f5ad"}.fa-tent-arrow-turn-left:before{content:"\e580"}.fa-tents:before{content:"\e582"}.fa-magic:before,.fa-wand-magic:before{content:"\f0d0"}.fa-dog:before{content:"\f6d3"}.fa-carrot:before{content:"\f787"}.fa-moon:before{content:"\f186"}.fa-wine-glass-alt:before,.fa-wine-glass-empty:before{content:"\f5ce"}.fa-cheese:before{content:"\f7ef"}.fa-yin-yang:before{content:"\f6ad"}.fa-music:before{content:"\f001"}.fa-code-commit:before{content:"\f386"}.fa-temperature-low:before{content:"\f76b"}.fa-biking:before,.fa-person-biking:before{content:"\f84a"}.fa-broom:before{content:"\f51a"}.fa-shield-heart:before{content:"\e574"}.fa-gopuram:before{content:"\f664"}.fa-earth-oceania:before,.fa-globe-oceania:before{content:"\e47b"}.fa-square-xmark:before,.fa-times-square:before,.fa-xmark-square:before{content:"\f2d3"}.fa-hashtag:before{content:"\23"}.fa-expand-alt:before,.fa-up-right-and-down-left-from-center:before{content:"\f424"}.fa-oil-can:before{content:"\f613"}.fa-t:before{content:"\54"}.fa-hippo:before{content:"\f6ed"}.fa-chart-column:before{content:"\e0e3"}.fa-infinity:before{content:"\f534"}.fa-vial-circle-check:before{content:"\e596"}.fa-person-arrow-down-to-line:before{content:"\e538"}.fa-voicemail:before{content:"\f897"}.fa-fan:before{content:"\f863"}.fa-person-walking-luggage:before{content:"\e554"}.fa-arrows-alt-v:before,.fa-up-down:before{content:"\f338"}.fa-cloud-moon-rain:before{content:"\f73c"}.fa-calendar:before{content:"\f133"}.fa-trailer:before{content:"\e041"}.fa-bahai:before,.fa-haykal:before{content:"\f666"}.fa-sd-card:before{content:"\f7c2"}.fa-dragon:before{content:"\f6d5"}.fa-shoe-prints:before{content:"\f54b"}.fa-circle-plus:before,.fa-plus-circle:before{content:"\f055"}.fa-face-grin-tongue-wink:before,.fa-grin-tongue-wink:before{content:"\f58b"}.fa-hand-holding:before{content:"\f4bd"}.fa-plug-circle-exclamation:before{content:"\e55d"}.fa-chain-broken:before,.fa-chain-slash:before,.fa-link-slash:before,.fa-unlink:before{content:"\f127"}.fa-clone:before{content:"\f24d"}.fa-person-walking-arrow-loop-left:before{content:"\e551"}.fa-arrow-up-z-a:before,.fa-sort-alpha-up-alt:before{content:"\f882"}.fa-fire-alt:before,.fa-fire-flame-curved:before{content:"\f7e4"}.fa-tornado:before{content:"\f76f"}.fa-file-circle-plus:before{content:"\e494"}.fa-book-quran:before,.fa-quran:before{content:"\f687"}.fa-anchor:before{content:"\f13d"}.fa-border-all:before{content:"\f84c"}.fa-angry:before,.fa-face-angry:before{content:"\f556"}.fa-cookie-bite:before{content:"\f564"}.fa-arrow-trend-down:before{content:"\e097"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-draw-polygon:before{content:"\f5ee"}.fa-balance-scale:before,.fa-scale-balanced:before{content:"\f24e"}.fa-gauge-simple-high:before,.fa-tachometer-fast:before,.fa-tachometer:before{content:"\f62a"}.fa-shower:before{content:"\f2cc"}.fa-desktop-alt:before,.fa-desktop:before{content:"\f390"}.fa-m:before{content:"\4d"}.fa-table-list:before,.fa-th-list:before{content:"\f00b"}.fa-comment-sms:before,.fa-sms:before{content:"\f7cd"}.fa-book:before{content:"\f02d"}.fa-user-plus:before{content:"\f234"}.fa-check:before{content:"\f00c"}.fa-battery-4:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-house-circle-check:before{content:"\e509"}.fa-angle-left:before{content:"\f104"}.fa-diagram-successor:before{content:"\e47a"}.fa-truck-arrow-right:before{content:"\e58b"}.fa-arrows-split-up-and-left:before{content:"\e4bc"}.fa-fist-raised:before,.fa-hand-fist:before{content:"\f6de"}.fa-cloud-moon:before{content:"\f6c3"}.fa-briefcase:before{content:"\f0b1"}.fa-person-falling:before{content:"\e546"}.fa-image-portrait:before,.fa-portrait:before{content:"\f3e0"}.fa-user-tag:before{content:"\f507"}.fa-rug:before{content:"\e569"}.fa-earth-europe:before,.fa-globe-europe:before{content:"\f7a2"}.fa-cart-flatbed-suitcase:before,.fa-luggage-cart:before{content:"\f59d"}.fa-rectangle-times:before,.fa-rectangle-xmark:before,.fa-times-rectangle:before,.fa-window-close:before{content:"\f410"}.fa-baht-sign:before{content:"\e0ac"}.fa-book-open:before{content:"\f518"}.fa-book-journal-whills:before,.fa-journal-whills:before{content:"\f66a"}.fa-handcuffs:before{content:"\e4f8"}.fa-exclamation-triangle:before,.fa-triangle-exclamation:before,.fa-warning:before{content:"\f071"}.fa-database:before{content:"\f1c0"}.fa-arrow-turn-right:before,.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-bottle-droplet:before{content:"\e4c4"}.fa-mask-face:before{content:"\e1d7"}.fa-hill-rockslide:before{content:"\e508"}.fa-exchange-alt:before,.fa-right-left:before{content:"\f362"}.fa-paper-plane:before{content:"\f1d8"}.fa-road-circle-exclamation:before{content:"\e565"}.fa-dungeon:before{content:"\f6d9"}.fa-align-right:before{content:"\f038"}.fa-money-bill-1-wave:before,.fa-money-bill-wave-alt:before{content:"\f53b"}.fa-life-ring:before{content:"\f1cd"}.fa-hands:before,.fa-sign-language:before,.fa-signing:before{content:"\f2a7"}.fa-calendar-day:before{content:"\f783"}.fa-ladder-water:before,.fa-swimming-pool:before,.fa-water-ladder:before{content:"\f5c5"}.fa-arrows-up-down:before,.fa-arrows-v:before{content:"\f07d"}.fa-face-grimace:before,.fa-grimace:before{content:"\f57f"}.fa-wheelchair-alt:before,.fa-wheelchair-move:before{content:"\e2ce"}.fa-level-down-alt:before,.fa-turn-down:before{content:"\f3be"}.fa-person-walking-arrow-right:before{content:"\e552"}.fa-envelope-square:before,.fa-square-envelope:before{content:"\f199"}.fa-dice:before{content:"\f522"}.fa-bowling-ball:before{content:"\f436"}.fa-brain:before{content:"\f5dc"}.fa-band-aid:before,.fa-bandage:before{content:"\f462"}.fa-calendar-minus:before{content:"\f272"}.fa-circle-xmark:before,.fa-times-circle:before,.fa-xmark-circle:before{content:"\f057"}.fa-gifts:before{content:"\f79c"}.fa-hotel:before{content:"\f594"}.fa-earth-asia:before,.fa-globe-asia:before{content:"\f57e"}.fa-id-card-alt:before,.fa-id-card-clip:before{content:"\f47f"}.fa-magnifying-glass-plus:before,.fa-search-plus:before{content:"\f00e"}.fa-thumbs-up:before{content:"\f164"}.fa-user-clock:before{content:"\f4fd"}.fa-allergies:before,.fa-hand-dots:before{content:"\f461"}.fa-file-invoice:before{content:"\f570"}.fa-window-minimize:before{content:"\f2d1"}.fa-coffee:before,.fa-mug-saucer:before{content:"\f0f4"}.fa-brush:before{content:"\f55d"}.fa-mask:before{content:"\f6fa"}.fa-magnifying-glass-minus:before,.fa-search-minus:before{content:"\f010"}.fa-ruler-vertical:before{content:"\f548"}.fa-user-alt:before,.fa-user-large:before{content:"\f406"}.fa-train-tram:before{content:"\e5b4"}.fa-user-nurse:before{content:"\f82f"}.fa-syringe:before{content:"\f48e"}.fa-cloud-sun:before{content:"\f6c4"}.fa-stopwatch-20:before{content:"\e06f"}.fa-square-full:before{content:"\f45c"}.fa-magnet:before{content:"\f076"}.fa-jar:before{content:"\e516"}.fa-note-sticky:before,.fa-sticky-note:before{content:"\f249"}.fa-bug-slash:before{content:"\e490"}.fa-arrow-up-from-water-pump:before{content:"\e4b6"}.fa-bone:before{content:"\f5d7"}.fa-user-injured:before{content:"\f728"}.fa-face-sad-tear:before,.fa-sad-tear:before{content:"\f5b4"}.fa-plane:before{content:"\f072"}.fa-tent-arrows-down:before{content:"\e581"}.fa-exclamation:before{content:"\21"}.fa-arrows-spin:before{content:"\e4bb"}.fa-print:before{content:"\f02f"}.fa-try:before,.fa-turkish-lira-sign:before,.fa-turkish-lira:before{content:"\e2bb"}.fa-dollar-sign:before,.fa-dollar:before,.fa-usd:before{content:"\24"}.fa-x:before{content:"\58"}.fa-magnifying-glass-dollar:before,.fa-search-dollar:before{content:"\f688"}.fa-users-cog:before,.fa-users-gear:before{content:"\f509"}.fa-person-military-pointing:before{content:"\e54a"}.fa-bank:before,.fa-building-columns:before,.fa-institution:before,.fa-museum:before,.fa-university:before{content:"\f19c"}.fa-umbrella:before{content:"\f0e9"}.fa-trowel:before{content:"\e589"}.fa-d:before{content:"\44"}.fa-stapler:before{content:"\e5af"}.fa-masks-theater:before,.fa-theater-masks:before{content:"\f630"}.fa-kip-sign:before{content:"\e1c4"}.fa-hand-point-left:before{content:"\f0a5"}.fa-handshake-alt:before,.fa-handshake-simple:before{content:"\f4c6"}.fa-fighter-jet:before,.fa-jet-fighter:before{content:"\f0fb"}.fa-share-alt-square:before,.fa-square-share-nodes:before{content:"\f1e1"}.fa-barcode:before{content:"\f02a"}.fa-plus-minus:before{content:"\e43c"}.fa-video-camera:before,.fa-video:before{content:"\f03d"}.fa-graduation-cap:before,.fa-mortar-board:before{content:"\f19d"}.fa-hand-holding-medical:before{content:"\e05c"}.fa-person-circle-check:before{content:"\e53e"}.fa-level-up-alt:before,.fa-turn-up:before{content:"\f3bf"} +.fa-sr-only,.fa-sr-only-focusable:not(:focus),.sr-only,.sr-only-focusable:not(:focus){position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}:host,:root{--fa-style-family-brands:"Font Awesome 6 Brands";--fa-font-brands:normal 400 1em/1 "Font Awesome 6 Brands"}@font-face{font-family:"Font Awesome 6 Brands";font-style:normal;font-weight:400;font-display:block;src: url("../webfonts/fa-brands-400.woff2") format("woff2"), url("../webfonts/fa-brands-400.ttf") format("truetype"); }.fa-brands,.fab{font-weight:400}.fa-monero:before{content:"\f3d0"}.fa-hooli:before{content:"\f427"}.fa-yelp:before{content:"\f1e9"}.fa-cc-visa:before{content:"\f1f0"}.fa-lastfm:before{content:"\f202"}.fa-shopware:before{content:"\f5b5"}.fa-creative-commons-nc:before{content:"\f4e8"}.fa-aws:before{content:"\f375"}.fa-redhat:before{content:"\f7bc"}.fa-yoast:before{content:"\f2b1"}.fa-cloudflare:before{content:"\e07d"}.fa-ups:before{content:"\f7e0"}.fa-wpexplorer:before{content:"\f2de"}.fa-dyalog:before{content:"\f399"}.fa-bity:before{content:"\f37a"}.fa-stackpath:before{content:"\f842"}.fa-buysellads:before{content:"\f20d"}.fa-first-order:before{content:"\f2b0"}.fa-modx:before{content:"\f285"}.fa-guilded:before{content:"\e07e"}.fa-vnv:before{content:"\f40b"}.fa-js-square:before,.fa-square-js:before{content:"\f3b9"}.fa-microsoft:before{content:"\f3ca"}.fa-qq:before{content:"\f1d6"}.fa-orcid:before{content:"\f8d2"}.fa-java:before{content:"\f4e4"}.fa-invision:before{content:"\f7b0"}.fa-creative-commons-pd-alt:before{content:"\f4ed"}.fa-centercode:before{content:"\f380"}.fa-glide-g:before{content:"\f2a6"}.fa-drupal:before{content:"\f1a9"}.fa-hire-a-helper:before{content:"\f3b0"}.fa-creative-commons-by:before{content:"\f4e7"}.fa-unity:before{content:"\e049"}.fa-whmcs:before{content:"\f40d"}.fa-rocketchat:before{content:"\f3e8"}.fa-vk:before{content:"\f189"}.fa-untappd:before{content:"\f405"}.fa-mailchimp:before{content:"\f59e"}.fa-css3-alt:before{content:"\f38b"}.fa-reddit-square:before,.fa-square-reddit:before{content:"\f1a2"}.fa-vimeo-v:before{content:"\f27d"}.fa-contao:before{content:"\f26d"}.fa-square-font-awesome:before{content:"\e5ad"}.fa-deskpro:before{content:"\f38f"}.fa-sistrix:before{content:"\f3ee"}.fa-instagram-square:before,.fa-square-instagram:before{content:"\e055"}.fa-battle-net:before{content:"\f835"}.fa-the-red-yeti:before{content:"\f69d"}.fa-hacker-news-square:before,.fa-square-hacker-news:before{content:"\f3af"}.fa-edge:before{content:"\f282"}.fa-napster:before{content:"\f3d2"}.fa-snapchat-square:before,.fa-square-snapchat:before{content:"\f2ad"}.fa-google-plus-g:before{content:"\f0d5"}.fa-artstation:before{content:"\f77a"}.fa-markdown:before{content:"\f60f"}.fa-sourcetree:before{content:"\f7d3"}.fa-google-plus:before{content:"\f2b3"}.fa-diaspora:before{content:"\f791"}.fa-foursquare:before{content:"\f180"}.fa-stack-overflow:before{content:"\f16c"}.fa-github-alt:before{content:"\f113"}.fa-phoenix-squadron:before{content:"\f511"}.fa-pagelines:before{content:"\f18c"}.fa-algolia:before{content:"\f36c"}.fa-red-river:before{content:"\f3e3"}.fa-creative-commons-sa:before{content:"\f4ef"}.fa-safari:before{content:"\f267"}.fa-google:before{content:"\f1a0"}.fa-font-awesome-alt:before,.fa-square-font-awesome-stroke:before{content:"\f35c"}.fa-atlassian:before{content:"\f77b"}.fa-linkedin-in:before{content:"\f0e1"}.fa-digital-ocean:before{content:"\f391"}.fa-nimblr:before{content:"\f5a8"}.fa-chromecast:before{content:"\f838"}.fa-evernote:before{content:"\f839"}.fa-hacker-news:before{content:"\f1d4"}.fa-creative-commons-sampling:before{content:"\f4f0"}.fa-adversal:before{content:"\f36a"}.fa-creative-commons:before{content:"\f25e"}.fa-watchman-monitoring:before{content:"\e087"}.fa-fonticons:before{content:"\f280"}.fa-weixin:before{content:"\f1d7"}.fa-shirtsinbulk:before{content:"\f214"}.fa-codepen:before{content:"\f1cb"}.fa-git-alt:before{content:"\f841"}.fa-lyft:before{content:"\f3c3"}.fa-rev:before{content:"\f5b2"}.fa-windows:before{content:"\f17a"}.fa-wizards-of-the-coast:before{content:"\f730"}.fa-square-viadeo:before,.fa-viadeo-square:before{content:"\f2aa"}.fa-meetup:before{content:"\f2e0"}.fa-centos:before{content:"\f789"}.fa-adn:before{content:"\f170"}.fa-cloudsmith:before{content:"\f384"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-dribbble-square:before,.fa-square-dribbble:before{content:"\f397"}.fa-codiepie:before{content:"\f284"}.fa-node:before{content:"\f419"}.fa-mix:before{content:"\f3cb"}.fa-steam:before{content:"\f1b6"}.fa-cc-apple-pay:before{content:"\f416"}.fa-scribd:before{content:"\f28a"}.fa-openid:before{content:"\f19b"}.fa-instalod:before{content:"\e081"}.fa-expeditedssl:before{content:"\f23e"}.fa-sellcast:before{content:"\f2da"}.fa-square-twitter:before,.fa-twitter-square:before{content:"\f081"}.fa-r-project:before{content:"\f4f7"}.fa-delicious:before{content:"\f1a5"}.fa-freebsd:before{content:"\f3a4"}.fa-vuejs:before{content:"\f41f"}.fa-accusoft:before{content:"\f369"}.fa-ioxhost:before{content:"\f208"}.fa-fonticons-fi:before{content:"\f3a2"}.fa-app-store:before{content:"\f36f"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-itunes-note:before{content:"\f3b5"}.fa-golang:before{content:"\e40f"}.fa-kickstarter:before{content:"\f3bb"}.fa-grav:before{content:"\f2d6"}.fa-weibo:before{content:"\f18a"}.fa-uncharted:before{content:"\e084"}.fa-firstdraft:before{content:"\f3a1"}.fa-square-youtube:before,.fa-youtube-square:before{content:"\f431"}.fa-wikipedia-w:before{content:"\f266"}.fa-rendact:before,.fa-wpressr:before{content:"\f3e4"}.fa-angellist:before{content:"\f209"}.fa-galactic-republic:before{content:"\f50c"}.fa-nfc-directional:before{content:"\e530"}.fa-skype:before{content:"\f17e"}.fa-joget:before{content:"\f3b7"}.fa-fedora:before{content:"\f798"}.fa-stripe-s:before{content:"\f42a"}.fa-meta:before{content:"\e49b"}.fa-laravel:before{content:"\f3bd"}.fa-hotjar:before{content:"\f3b1"}.fa-bluetooth-b:before{content:"\f294"}.fa-sticker-mule:before{content:"\f3f7"}.fa-creative-commons-zero:before{content:"\f4f3"}.fa-hips:before{content:"\f452"}.fa-behance:before{content:"\f1b4"}.fa-reddit:before{content:"\f1a1"}.fa-discord:before{content:"\f392"}.fa-chrome:before{content:"\f268"}.fa-app-store-ios:before{content:"\f370"}.fa-cc-discover:before{content:"\f1f2"}.fa-wpbeginner:before{content:"\f297"}.fa-confluence:before{content:"\f78d"}.fa-mdb:before{content:"\f8ca"}.fa-dochub:before{content:"\f394"}.fa-accessible-icon:before{content:"\f368"}.fa-ebay:before{content:"\f4f4"}.fa-amazon:before{content:"\f270"}.fa-unsplash:before{content:"\e07c"}.fa-yarn:before{content:"\f7e3"}.fa-square-steam:before,.fa-steam-square:before{content:"\f1b7"}.fa-500px:before{content:"\f26e"}.fa-square-vimeo:before,.fa-vimeo-square:before{content:"\f194"}.fa-asymmetrik:before{content:"\f372"}.fa-font-awesome-flag:before,.fa-font-awesome-logo-full:before,.fa-font-awesome:before{content:"\f2b4"}.fa-gratipay:before{content:"\f184"}.fa-apple:before{content:"\f179"}.fa-hive:before{content:"\e07f"}.fa-gitkraken:before{content:"\f3a6"}.fa-keybase:before{content:"\f4f5"}.fa-apple-pay:before{content:"\f415"}.fa-padlet:before{content:"\e4a0"}.fa-amazon-pay:before{content:"\f42c"}.fa-github-square:before,.fa-square-github:before{content:"\f092"}.fa-stumbleupon:before{content:"\f1a4"}.fa-fedex:before{content:"\f797"}.fa-phoenix-framework:before{content:"\f3dc"}.fa-shopify:before{content:"\e057"}.fa-neos:before{content:"\f612"}.fa-hackerrank:before{content:"\f5f7"}.fa-researchgate:before{content:"\f4f8"}.fa-swift:before{content:"\f8e1"}.fa-angular:before{content:"\f420"}.fa-speakap:before{content:"\f3f3"}.fa-angrycreative:before{content:"\f36e"}.fa-y-combinator:before{content:"\f23b"}.fa-empire:before{content:"\f1d1"}.fa-envira:before{content:"\f299"}.fa-gitlab-square:before,.fa-square-gitlab:before{content:"\e5ae"}.fa-studiovinari:before{content:"\f3f8"}.fa-pied-piper:before{content:"\f2ae"}.fa-wordpress:before{content:"\f19a"}.fa-product-hunt:before{content:"\f288"}.fa-firefox:before{content:"\f269"}.fa-linode:before{content:"\f2b8"}.fa-goodreads:before{content:"\f3a8"}.fa-odnoklassniki-square:before,.fa-square-odnoklassniki:before{content:"\f264"}.fa-jsfiddle:before{content:"\f1cc"}.fa-sith:before{content:"\f512"}.fa-themeisle:before{content:"\f2b2"}.fa-page4:before{content:"\f3d7"}.fa-hashnode:before{content:"\e499"}.fa-react:before{content:"\f41b"}.fa-cc-paypal:before{content:"\f1f4"}.fa-squarespace:before{content:"\f5be"}.fa-cc-stripe:before{content:"\f1f5"}.fa-creative-commons-share:before{content:"\f4f2"}.fa-bitcoin:before{content:"\f379"}.fa-keycdn:before{content:"\f3ba"}.fa-opera:before{content:"\f26a"}.fa-itch-io:before{content:"\f83a"}.fa-umbraco:before{content:"\f8e8"}.fa-galactic-senate:before{content:"\f50d"}.fa-ubuntu:before{content:"\f7df"}.fa-draft2digital:before{content:"\f396"}.fa-stripe:before{content:"\f429"}.fa-houzz:before{content:"\f27c"}.fa-gg:before{content:"\f260"}.fa-dhl:before{content:"\f790"}.fa-pinterest-square:before,.fa-square-pinterest:before{content:"\f0d3"}.fa-xing:before{content:"\f168"}.fa-blackberry:before{content:"\f37b"}.fa-creative-commons-pd:before{content:"\f4ec"}.fa-playstation:before{content:"\f3df"}.fa-quinscape:before{content:"\f459"}.fa-less:before{content:"\f41d"}.fa-blogger-b:before{content:"\f37d"}.fa-opencart:before{content:"\f23d"}.fa-vine:before{content:"\f1ca"}.fa-paypal:before{content:"\f1ed"}.fa-gitlab:before{content:"\f296"}.fa-typo3:before{content:"\f42b"}.fa-reddit-alien:before{content:"\f281"}.fa-yahoo:before{content:"\f19e"}.fa-dailymotion:before{content:"\e052"}.fa-affiliatetheme:before{content:"\f36b"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-bootstrap:before{content:"\f836"}.fa-odnoklassniki:before{content:"\f263"}.fa-nfc-symbol:before{content:"\e531"}.fa-ethereum:before{content:"\f42e"}.fa-speaker-deck:before{content:"\f83c"}.fa-creative-commons-nc-eu:before{content:"\f4e9"}.fa-patreon:before{content:"\f3d9"}.fa-avianex:before{content:"\f374"}.fa-ello:before{content:"\f5f1"}.fa-gofore:before{content:"\f3a7"}.fa-bimobject:before{content:"\f378"}.fa-facebook-f:before{content:"\f39e"}.fa-google-plus-square:before,.fa-square-google-plus:before{content:"\f0d4"}.fa-mandalorian:before{content:"\f50f"}.fa-first-order-alt:before{content:"\f50a"}.fa-osi:before{content:"\f41a"}.fa-google-wallet:before{content:"\f1ee"}.fa-d-and-d-beyond:before{content:"\f6ca"}.fa-periscope:before{content:"\f3da"}.fa-fulcrum:before{content:"\f50b"}.fa-cloudscale:before{content:"\f383"}.fa-forumbee:before{content:"\f211"}.fa-mizuni:before{content:"\f3cc"}.fa-schlix:before{content:"\f3ea"}.fa-square-xing:before,.fa-xing-square:before{content:"\f169"}.fa-bandcamp:before{content:"\f2d5"}.fa-wpforms:before{content:"\f298"}.fa-cloudversify:before{content:"\f385"}.fa-usps:before{content:"\f7e1"}.fa-megaport:before{content:"\f5a3"}.fa-magento:before{content:"\f3c4"}.fa-spotify:before{content:"\f1bc"}.fa-optin-monster:before{content:"\f23c"}.fa-fly:before{content:"\f417"}.fa-aviato:before{content:"\f421"}.fa-itunes:before{content:"\f3b4"}.fa-cuttlefish:before{content:"\f38c"}.fa-blogger:before{content:"\f37c"}.fa-flickr:before{content:"\f16e"}.fa-viber:before{content:"\f409"}.fa-soundcloud:before{content:"\f1be"}.fa-digg:before{content:"\f1a6"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-symfony:before{content:"\f83d"}.fa-maxcdn:before{content:"\f136"}.fa-etsy:before{content:"\f2d7"}.fa-facebook-messenger:before{content:"\f39f"}.fa-audible:before{content:"\f373"}.fa-think-peaks:before{content:"\f731"}.fa-bilibili:before{content:"\e3d9"}.fa-erlang:before{content:"\f39d"}.fa-cotton-bureau:before{content:"\f89e"}.fa-dashcube:before{content:"\f210"}.fa-42-group:before,.fa-innosoft:before{content:"\e080"}.fa-stack-exchange:before{content:"\f18d"}.fa-elementor:before{content:"\f430"}.fa-pied-piper-square:before,.fa-square-pied-piper:before{content:"\e01e"}.fa-creative-commons-nd:before{content:"\f4eb"}.fa-palfed:before{content:"\f3d8"}.fa-superpowers:before{content:"\f2dd"}.fa-resolving:before{content:"\f3e7"}.fa-xbox:before{content:"\f412"}.fa-searchengin:before{content:"\f3eb"}.fa-tiktok:before{content:"\e07b"}.fa-facebook-square:before,.fa-square-facebook:before{content:"\f082"}.fa-renren:before{content:"\f18b"}.fa-linux:before{content:"\f17c"}.fa-glide:before{content:"\f2a5"}.fa-linkedin:before{content:"\f08c"}.fa-hubspot:before{content:"\f3b2"}.fa-deploydog:before{content:"\f38e"}.fa-twitch:before{content:"\f1e8"}.fa-ravelry:before{content:"\f2d9"}.fa-mixer:before{content:"\e056"}.fa-lastfm-square:before,.fa-square-lastfm:before{content:"\f203"}.fa-vimeo:before{content:"\f40a"}.fa-mendeley:before{content:"\f7b3"}.fa-uniregistry:before{content:"\f404"}.fa-figma:before{content:"\f799"}.fa-creative-commons-remix:before{content:"\f4ee"}.fa-cc-amazon-pay:before{content:"\f42d"}.fa-dropbox:before{content:"\f16b"}.fa-instagram:before{content:"\f16d"}.fa-cmplid:before{content:"\e360"}.fa-facebook:before{content:"\f09a"}.fa-gripfire:before{content:"\f3ac"}.fa-jedi-order:before{content:"\f50e"}.fa-uikit:before{content:"\f403"}.fa-fort-awesome-alt:before{content:"\f3a3"}.fa-phabricator:before{content:"\f3db"}.fa-ussunnah:before{content:"\f407"}.fa-earlybirds:before{content:"\f39a"}.fa-trade-federation:before{content:"\f513"}.fa-autoprefixer:before{content:"\f41c"}.fa-whatsapp:before{content:"\f232"}.fa-slideshare:before{content:"\f1e7"}.fa-google-play:before{content:"\f3ab"}.fa-viadeo:before{content:"\f2a9"}.fa-line:before{content:"\f3c0"}.fa-google-drive:before{content:"\f3aa"}.fa-servicestack:before{content:"\f3ec"}.fa-simplybuilt:before{content:"\f215"}.fa-bitbucket:before{content:"\f171"}.fa-imdb:before{content:"\f2d8"}.fa-deezer:before{content:"\e077"}.fa-raspberry-pi:before{content:"\f7bb"}.fa-jira:before{content:"\f7b1"}.fa-docker:before{content:"\f395"}.fa-screenpal:before{content:"\e570"}.fa-bluetooth:before{content:"\f293"}.fa-gitter:before{content:"\f426"}.fa-d-and-d:before{content:"\f38d"}.fa-microblog:before{content:"\e01a"}.fa-cc-diners-club:before{content:"\f24c"}.fa-gg-circle:before{content:"\f261"}.fa-pied-piper-hat:before{content:"\f4e5"}.fa-kickstarter-k:before{content:"\f3bc"}.fa-yandex:before{content:"\f413"}.fa-readme:before{content:"\f4d5"}.fa-html5:before{content:"\f13b"}.fa-sellsy:before{content:"\f213"}.fa-sass:before{content:"\f41e"}.fa-wirsindhandwerk:before,.fa-wsh:before{content:"\e2d0"}.fa-buromobelexperte:before{content:"\f37f"}.fa-salesforce:before{content:"\f83b"}.fa-octopus-deploy:before{content:"\e082"}.fa-medapps:before{content:"\f3c6"}.fa-ns8:before{content:"\f3d5"}.fa-pinterest-p:before{content:"\f231"}.fa-apper:before{content:"\f371"}.fa-fort-awesome:before{content:"\f286"}.fa-waze:before{content:"\f83f"}.fa-cc-jcb:before{content:"\f24b"}.fa-snapchat-ghost:before,.fa-snapchat:before{content:"\f2ab"}.fa-fantasy-flight-games:before{content:"\f6dc"}.fa-rust:before{content:"\e07a"}.fa-wix:before{content:"\f5cf"}.fa-behance-square:before,.fa-square-behance:before{content:"\f1b5"}.fa-supple:before{content:"\f3f9"}.fa-rebel:before{content:"\f1d0"}.fa-css3:before{content:"\f13c"}.fa-staylinked:before{content:"\f3f5"}.fa-kaggle:before{content:"\f5fa"}.fa-space-awesome:before{content:"\e5ac"}.fa-deviantart:before{content:"\f1bd"}.fa-cpanel:before{content:"\f388"}.fa-goodreads-g:before{content:"\f3a9"}.fa-git-square:before,.fa-square-git:before{content:"\f1d2"}.fa-square-tumblr:before,.fa-tumblr-square:before{content:"\f174"}.fa-trello:before{content:"\f181"}.fa-creative-commons-nc-jp:before{content:"\f4ea"}.fa-get-pocket:before{content:"\f265"}.fa-perbyte:before{content:"\e083"}.fa-grunt:before{content:"\f3ad"}.fa-weebly:before{content:"\f5cc"}.fa-connectdevelop:before{content:"\f20e"}.fa-leanpub:before{content:"\f212"}.fa-black-tie:before{content:"\f27e"}.fa-themeco:before{content:"\f5c6"}.fa-python:before{content:"\f3e2"}.fa-android:before{content:"\f17b"}.fa-bots:before{content:"\e340"}.fa-free-code-camp:before{content:"\f2c5"}.fa-hornbill:before{content:"\f592"}.fa-js:before{content:"\f3b8"}.fa-ideal:before{content:"\e013"}.fa-git:before{content:"\f1d3"}.fa-dev:before{content:"\f6cc"}.fa-sketch:before{content:"\f7c6"}.fa-yandex-international:before{content:"\f414"}.fa-cc-amex:before{content:"\f1f3"}.fa-uber:before{content:"\f402"}.fa-github:before{content:"\f09b"}.fa-php:before{content:"\f457"}.fa-alipay:before{content:"\f642"}.fa-youtube:before{content:"\f167"}.fa-skyatlas:before{content:"\f216"}.fa-firefox-browser:before{content:"\e007"}.fa-replyd:before{content:"\f3e6"}.fa-suse:before{content:"\f7d6"}.fa-jenkins:before{content:"\f3b6"}.fa-twitter:before{content:"\f099"}.fa-rockrms:before{content:"\f3e9"}.fa-pinterest:before{content:"\f0d2"}.fa-buffer:before{content:"\f837"}.fa-npm:before{content:"\f3d4"}.fa-yammer:before{content:"\f840"}.fa-btc:before{content:"\f15a"}.fa-dribbble:before{content:"\f17d"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-internet-explorer:before{content:"\f26b"}.fa-stubber:before{content:"\e5c7"}.fa-telegram-plane:before,.fa-telegram:before{content:"\f2c6"}.fa-old-republic:before{content:"\f510"}.fa-odysee:before{content:"\e5c6"}.fa-square-whatsapp:before,.fa-whatsapp-square:before{content:"\f40c"}.fa-node-js:before{content:"\f3d3"}.fa-edge-legacy:before{content:"\e078"}.fa-slack-hash:before,.fa-slack:before{content:"\f198"}.fa-medrt:before{content:"\f3c8"}.fa-usb:before{content:"\f287"}.fa-tumblr:before{content:"\f173"}.fa-vaadin:before{content:"\f408"}.fa-quora:before{content:"\f2c4"}.fa-reacteurope:before{content:"\f75d"}.fa-medium-m:before,.fa-medium:before{content:"\f23a"}.fa-amilia:before{content:"\f36d"}.fa-mixcloud:before{content:"\f289"}.fa-flipboard:before{content:"\f44d"}.fa-viacoin:before{content:"\f237"}.fa-critical-role:before{content:"\f6c9"}.fa-sitrox:before{content:"\e44a"}.fa-discourse:before{content:"\f393"}.fa-joomla:before{content:"\f1aa"}.fa-mastodon:before{content:"\f4f6"}.fa-airbnb:before{content:"\f834"}.fa-wolf-pack-battalion:before{content:"\f514"}.fa-buy-n-large:before{content:"\f8a6"}.fa-gulp:before{content:"\f3ae"}.fa-creative-commons-sampling-plus:before{content:"\f4f1"}.fa-strava:before{content:"\f428"}.fa-ember:before{content:"\f423"}.fa-canadian-maple-leaf:before{content:"\f785"}.fa-teamspeak:before{content:"\f4f9"}.fa-pushed:before{content:"\f3e1"}.fa-wordpress-simple:before{content:"\f411"}.fa-nutritionix:before{content:"\f3d6"}.fa-wodu:before{content:"\e088"}.fa-google-pay:before{content:"\e079"}.fa-intercom:before{content:"\f7af"}.fa-zhihu:before{content:"\f63f"}.fa-korvue:before{content:"\f42f"}.fa-pix:before{content:"\e43a"}.fa-steam-symbol:before{content:"\f3f6"}:host,:root{--fa-font-regular:normal 400 1em/1 "Font Awesome 6 Free"}@font-face{font-family:"Font Awesome 6 Free";font-style:normal;font-weight:400;font-display:block;src: url("../webfonts/fa-regular-400.woff2") format("woff2"), url("../webfonts/fa-regular-400.ttf") format("truetype"); }.fa-regular,.far{font-weight:400}:host,:root{--fa-style-family-classic:"Font Awesome 6 Free";--fa-font-solid:normal 900 1em/1 "Font Awesome 6 Free"}@font-face{font-family:"Font Awesome 6 Free";font-style:normal;font-weight:900;font-display:block;src: url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.ttf") format("truetype"); }.fa-solid,.fas{font-weight:900}@font-face{font-family:"Font Awesome 5 Brands";font-display:block;font-weight:400;src: url("../webfonts/fa-brands-400.woff2") format("woff2"), url("../webfonts/fa-brands-400.ttf") format("truetype"); }@font-face{font-family:"Font Awesome 5 Free";font-display:block;font-weight:900;src: url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.ttf") format("truetype"); }@font-face{font-family:"Font Awesome 5 Free";font-display:block;font-weight:400;src: url("../webfonts/fa-regular-400.woff2") format("woff2"), url("../webfonts/fa-regular-400.ttf") format("truetype"); }@font-face{font-family:"FontAwesome";font-display:block;src: url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.ttf") format("truetype"); }@font-face{font-family:"FontAwesome";font-display:block;src: url("../webfonts/fa-brands-400.woff2") format("woff2"), url("../webfonts/fa-brands-400.ttf") format("truetype"); }@font-face{font-family:"FontAwesome";font-display:block;src: url("../webfonts/fa-regular-400.woff2") format("woff2"), url("../webfonts/fa-regular-400.ttf") format("truetype"); }@font-face{font-family:"FontAwesome";font-display:block;src: url("../webfonts/fa-v4compatibility.woff2") format("woff2"), url("../webfonts/fa-v4compatibility.ttf") format("truetype"); } \ No newline at end of file diff --git a/docs/site_libs/font-awesome-6.4.0/css/v4-shims.css b/docs/site_libs/font-awesome-6.4.0/css/v4-shims.css new file mode 100644 index 0000000..8544df2 --- /dev/null +++ b/docs/site_libs/font-awesome-6.4.0/css/v4-shims.css @@ -0,0 +1,2194 @@ +/*! + * Font Awesome Free 6.4.0 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + * Copyright 2023 Fonticons, Inc. + */ +.fa.fa-glass:before { + content: "\f000"; } + +.fa.fa-envelope-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-envelope-o:before { + content: "\f0e0"; } + +.fa.fa-star-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-star-o:before { + content: "\f005"; } + +.fa.fa-remove:before { + content: "\f00d"; } + +.fa.fa-close:before { + content: "\f00d"; } + +.fa.fa-gear:before { + content: "\f013"; } + +.fa.fa-trash-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-trash-o:before { + content: "\f2ed"; } + +.fa.fa-home:before { + content: "\f015"; } + +.fa.fa-file-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-file-o:before { + content: "\f15b"; } + +.fa.fa-clock-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-clock-o:before { + content: "\f017"; } + +.fa.fa-arrow-circle-o-down { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-arrow-circle-o-down:before { + content: "\f358"; } + +.fa.fa-arrow-circle-o-up { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-arrow-circle-o-up:before { + content: "\f35b"; } + +.fa.fa-play-circle-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-play-circle-o:before { + content: "\f144"; } + +.fa.fa-repeat:before { + content: "\f01e"; } + +.fa.fa-rotate-right:before { + content: "\f01e"; } + +.fa.fa-refresh:before { + content: "\f021"; } + +.fa.fa-list-alt { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-list-alt:before { + content: "\f022"; } + +.fa.fa-dedent:before { + content: "\f03b"; } + +.fa.fa-video-camera:before { + content: "\f03d"; } + +.fa.fa-picture-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-picture-o:before { + content: "\f03e"; } + +.fa.fa-photo { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-photo:before { + content: "\f03e"; } + +.fa.fa-image { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-image:before { + content: "\f03e"; } + +.fa.fa-map-marker:before { + content: "\f3c5"; } + +.fa.fa-pencil-square-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-pencil-square-o:before { + content: "\f044"; } + +.fa.fa-edit { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-edit:before { + content: "\f044"; } + +.fa.fa-share-square-o:before { + content: "\f14d"; } + +.fa.fa-check-square-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-check-square-o:before { + content: "\f14a"; } + +.fa.fa-arrows:before { + content: "\f0b2"; } + +.fa.fa-times-circle-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-times-circle-o:before { + content: "\f057"; } + +.fa.fa-check-circle-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-check-circle-o:before { + content: "\f058"; } + +.fa.fa-mail-forward:before { + content: "\f064"; } + +.fa.fa-expand:before { + content: "\f424"; } + +.fa.fa-compress:before { + content: "\f422"; } + +.fa.fa-eye { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-eye-slash { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-warning:before { + content: "\f071"; } + +.fa.fa-calendar:before { + content: "\f073"; } + +.fa.fa-arrows-v:before { + content: "\f338"; } + +.fa.fa-arrows-h:before { + content: "\f337"; } + +.fa.fa-bar-chart:before { + content: "\e0e3"; } + +.fa.fa-bar-chart-o:before { + content: "\e0e3"; } + +.fa.fa-twitter-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-twitter-square:before { + content: "\f081"; } + +.fa.fa-facebook-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-facebook-square:before { + content: "\f082"; } + +.fa.fa-gears:before { + content: "\f085"; } + +.fa.fa-thumbs-o-up { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-thumbs-o-up:before { + content: "\f164"; } + +.fa.fa-thumbs-o-down { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-thumbs-o-down:before { + content: "\f165"; } + +.fa.fa-heart-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-heart-o:before { + content: "\f004"; } + +.fa.fa-sign-out:before { + content: "\f2f5"; } + +.fa.fa-linkedin-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-linkedin-square:before { + content: "\f08c"; } + +.fa.fa-thumb-tack:before { + content: "\f08d"; } + +.fa.fa-external-link:before { + content: "\f35d"; } + +.fa.fa-sign-in:before { + content: "\f2f6"; } + +.fa.fa-github-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-github-square:before { + content: "\f092"; } + +.fa.fa-lemon-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-lemon-o:before { + content: "\f094"; } + +.fa.fa-square-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-square-o:before { + content: "\f0c8"; } + +.fa.fa-bookmark-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-bookmark-o:before { + content: "\f02e"; } + +.fa.fa-twitter { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-facebook { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-facebook:before { + content: "\f39e"; } + +.fa.fa-facebook-f { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-facebook-f:before { + content: "\f39e"; } + +.fa.fa-github { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-credit-card { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-feed:before { + content: "\f09e"; } + +.fa.fa-hdd-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-hdd-o:before { + content: "\f0a0"; } + +.fa.fa-hand-o-right { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-hand-o-right:before { + content: "\f0a4"; } + +.fa.fa-hand-o-left { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-hand-o-left:before { + content: "\f0a5"; } + +.fa.fa-hand-o-up { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-hand-o-up:before { + content: "\f0a6"; } + +.fa.fa-hand-o-down { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-hand-o-down:before { + content: "\f0a7"; } + +.fa.fa-globe:before { + content: "\f57d"; } + +.fa.fa-tasks:before { + content: "\f828"; } + +.fa.fa-arrows-alt:before { + content: "\f31e"; } + +.fa.fa-group:before { + content: "\f0c0"; } + +.fa.fa-chain:before { + content: "\f0c1"; } + +.fa.fa-cut:before { + content: "\f0c4"; } + +.fa.fa-files-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-files-o:before { + content: "\f0c5"; } + +.fa.fa-floppy-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-floppy-o:before { + content: "\f0c7"; } + +.fa.fa-save { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-save:before { + content: "\f0c7"; } + +.fa.fa-navicon:before { + content: "\f0c9"; } + +.fa.fa-reorder:before { + content: "\f0c9"; } + +.fa.fa-magic:before { + content: "\e2ca"; } + +.fa.fa-pinterest { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-pinterest-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-pinterest-square:before { + content: "\f0d3"; } + +.fa.fa-google-plus-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-google-plus-square:before { + content: "\f0d4"; } + +.fa.fa-google-plus { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-google-plus:before { + content: "\f0d5"; } + +.fa.fa-money:before { + content: "\f3d1"; } + +.fa.fa-unsorted:before { + content: "\f0dc"; } + +.fa.fa-sort-desc:before { + content: "\f0dd"; } + +.fa.fa-sort-asc:before { + content: "\f0de"; } + +.fa.fa-linkedin { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-linkedin:before { + content: "\f0e1"; } + +.fa.fa-rotate-left:before { + content: "\f0e2"; } + +.fa.fa-legal:before { + content: "\f0e3"; } + +.fa.fa-tachometer:before { + content: "\f625"; } + +.fa.fa-dashboard:before { + content: "\f625"; } + +.fa.fa-comment-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-comment-o:before { + content: "\f075"; } + +.fa.fa-comments-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-comments-o:before { + content: "\f086"; } + +.fa.fa-flash:before { + content: "\f0e7"; } + +.fa.fa-clipboard:before { + content: "\f0ea"; } + +.fa.fa-lightbulb-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-lightbulb-o:before { + content: "\f0eb"; } + +.fa.fa-exchange:before { + content: "\f362"; } + +.fa.fa-cloud-download:before { + content: "\f0ed"; } + +.fa.fa-cloud-upload:before { + content: "\f0ee"; } + +.fa.fa-bell-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-bell-o:before { + content: "\f0f3"; } + +.fa.fa-cutlery:before { + content: "\f2e7"; } + +.fa.fa-file-text-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-file-text-o:before { + content: "\f15c"; } + +.fa.fa-building-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-building-o:before { + content: "\f1ad"; } + +.fa.fa-hospital-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-hospital-o:before { + content: "\f0f8"; } + +.fa.fa-tablet:before { + content: "\f3fa"; } + +.fa.fa-mobile:before { + content: "\f3cd"; } + +.fa.fa-mobile-phone:before { + content: "\f3cd"; } + +.fa.fa-circle-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-circle-o:before { + content: "\f111"; } + +.fa.fa-mail-reply:before { + content: "\f3e5"; } + +.fa.fa-github-alt { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-folder-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-folder-o:before { + content: "\f07b"; } + +.fa.fa-folder-open-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-folder-open-o:before { + content: "\f07c"; } + +.fa.fa-smile-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-smile-o:before { + content: "\f118"; } + +.fa.fa-frown-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-frown-o:before { + content: "\f119"; } + +.fa.fa-meh-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-meh-o:before { + content: "\f11a"; } + +.fa.fa-keyboard-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-keyboard-o:before { + content: "\f11c"; } + +.fa.fa-flag-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-flag-o:before { + content: "\f024"; } + +.fa.fa-mail-reply-all:before { + content: "\f122"; } + +.fa.fa-star-half-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-star-half-o:before { + content: "\f5c0"; } + +.fa.fa-star-half-empty { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-star-half-empty:before { + content: "\f5c0"; } + +.fa.fa-star-half-full { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-star-half-full:before { + content: "\f5c0"; } + +.fa.fa-code-fork:before { + content: "\f126"; } + +.fa.fa-chain-broken:before { + content: "\f127"; } + +.fa.fa-unlink:before { + content: "\f127"; } + +.fa.fa-calendar-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-calendar-o:before { + content: "\f133"; } + +.fa.fa-maxcdn { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-html5 { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-css3 { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-unlock-alt:before { + content: "\f09c"; } + +.fa.fa-minus-square-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-minus-square-o:before { + content: "\f146"; } + +.fa.fa-level-up:before { + content: "\f3bf"; } + +.fa.fa-level-down:before { + content: "\f3be"; } + +.fa.fa-pencil-square:before { + content: "\f14b"; } + +.fa.fa-external-link-square:before { + content: "\f360"; } + +.fa.fa-compass { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-caret-square-o-down { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-caret-square-o-down:before { + content: "\f150"; } + +.fa.fa-toggle-down { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-toggle-down:before { + content: "\f150"; } + +.fa.fa-caret-square-o-up { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-caret-square-o-up:before { + content: "\f151"; } + +.fa.fa-toggle-up { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-toggle-up:before { + content: "\f151"; } + +.fa.fa-caret-square-o-right { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-caret-square-o-right:before { + content: "\f152"; } + +.fa.fa-toggle-right { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-toggle-right:before { + content: "\f152"; } + +.fa.fa-eur:before { + content: "\f153"; } + +.fa.fa-euro:before { + content: "\f153"; } + +.fa.fa-gbp:before { + content: "\f154"; } + +.fa.fa-usd:before { + content: "\24"; } + +.fa.fa-dollar:before { + content: "\24"; } + +.fa.fa-inr:before { + content: "\e1bc"; } + +.fa.fa-rupee:before { + content: "\e1bc"; } + +.fa.fa-jpy:before { + content: "\f157"; } + +.fa.fa-cny:before { + content: "\f157"; } + +.fa.fa-rmb:before { + content: "\f157"; } + +.fa.fa-yen:before { + content: "\f157"; } + +.fa.fa-rub:before { + content: "\f158"; } + +.fa.fa-ruble:before { + content: "\f158"; } + +.fa.fa-rouble:before { + content: "\f158"; } + +.fa.fa-krw:before { + content: "\f159"; } + +.fa.fa-won:before { + content: "\f159"; } + +.fa.fa-btc { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-bitcoin { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-bitcoin:before { + content: "\f15a"; } + +.fa.fa-file-text:before { + content: "\f15c"; } + +.fa.fa-sort-alpha-asc:before { + content: "\f15d"; } + +.fa.fa-sort-alpha-desc:before { + content: "\f881"; } + +.fa.fa-sort-amount-asc:before { + content: "\f884"; } + +.fa.fa-sort-amount-desc:before { + content: "\f160"; } + +.fa.fa-sort-numeric-asc:before { + content: "\f162"; } + +.fa.fa-sort-numeric-desc:before { + content: "\f886"; } + +.fa.fa-youtube-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-youtube-square:before { + content: "\f431"; } + +.fa.fa-youtube { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-xing { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-xing-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-xing-square:before { + content: "\f169"; } + +.fa.fa-youtube-play { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-youtube-play:before { + content: "\f167"; } + +.fa.fa-dropbox { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-stack-overflow { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-instagram { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-flickr { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-adn { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-bitbucket { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-bitbucket-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-bitbucket-square:before { + content: "\f171"; } + +.fa.fa-tumblr { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-tumblr-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-tumblr-square:before { + content: "\f174"; } + +.fa.fa-long-arrow-down:before { + content: "\f309"; } + +.fa.fa-long-arrow-up:before { + content: "\f30c"; } + +.fa.fa-long-arrow-left:before { + content: "\f30a"; } + +.fa.fa-long-arrow-right:before { + content: "\f30b"; } + +.fa.fa-apple { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-windows { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-android { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-linux { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-dribbble { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-skype { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-foursquare { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-trello { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-gratipay { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-gittip { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-gittip:before { + content: "\f184"; } + +.fa.fa-sun-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-sun-o:before { + content: "\f185"; } + +.fa.fa-moon-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-moon-o:before { + content: "\f186"; } + +.fa.fa-vk { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-weibo { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-renren { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-pagelines { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-stack-exchange { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-arrow-circle-o-right { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-arrow-circle-o-right:before { + content: "\f35a"; } + +.fa.fa-arrow-circle-o-left { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-arrow-circle-o-left:before { + content: "\f359"; } + +.fa.fa-caret-square-o-left { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-caret-square-o-left:before { + content: "\f191"; } + +.fa.fa-toggle-left { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-toggle-left:before { + content: "\f191"; } + +.fa.fa-dot-circle-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-dot-circle-o:before { + content: "\f192"; } + +.fa.fa-vimeo-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-vimeo-square:before { + content: "\f194"; } + +.fa.fa-try:before { + content: "\e2bb"; } + +.fa.fa-turkish-lira:before { + content: "\e2bb"; } + +.fa.fa-plus-square-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-plus-square-o:before { + content: "\f0fe"; } + +.fa.fa-slack { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-wordpress { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-openid { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-institution:before { + content: "\f19c"; } + +.fa.fa-bank:before { + content: "\f19c"; } + +.fa.fa-mortar-board:before { + content: "\f19d"; } + +.fa.fa-yahoo { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-google { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-reddit { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-reddit-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-reddit-square:before { + content: "\f1a2"; } + +.fa.fa-stumbleupon-circle { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-stumbleupon { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-delicious { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-digg { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-pied-piper-pp { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-pied-piper-alt { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-drupal { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-joomla { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-behance { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-behance-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-behance-square:before { + content: "\f1b5"; } + +.fa.fa-steam { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-steam-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-steam-square:before { + content: "\f1b7"; } + +.fa.fa-automobile:before { + content: "\f1b9"; } + +.fa.fa-cab:before { + content: "\f1ba"; } + +.fa.fa-spotify { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-deviantart { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-soundcloud { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-file-pdf-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-file-pdf-o:before { + content: "\f1c1"; } + +.fa.fa-file-word-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-file-word-o:before { + content: "\f1c2"; } + +.fa.fa-file-excel-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-file-excel-o:before { + content: "\f1c3"; } + +.fa.fa-file-powerpoint-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-file-powerpoint-o:before { + content: "\f1c4"; } + +.fa.fa-file-image-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-file-image-o:before { + content: "\f1c5"; } + +.fa.fa-file-photo-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-file-photo-o:before { + content: "\f1c5"; } + +.fa.fa-file-picture-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-file-picture-o:before { + content: "\f1c5"; } + +.fa.fa-file-archive-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-file-archive-o:before { + content: "\f1c6"; } + +.fa.fa-file-zip-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-file-zip-o:before { + content: "\f1c6"; } + +.fa.fa-file-audio-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-file-audio-o:before { + content: "\f1c7"; } + +.fa.fa-file-sound-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-file-sound-o:before { + content: "\f1c7"; } + +.fa.fa-file-video-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-file-video-o:before { + content: "\f1c8"; } + +.fa.fa-file-movie-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-file-movie-o:before { + content: "\f1c8"; } + +.fa.fa-file-code-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-file-code-o:before { + content: "\f1c9"; } + +.fa.fa-vine { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-codepen { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-jsfiddle { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-life-bouy:before { + content: "\f1cd"; } + +.fa.fa-life-buoy:before { + content: "\f1cd"; } + +.fa.fa-life-saver:before { + content: "\f1cd"; } + +.fa.fa-support:before { + content: "\f1cd"; } + +.fa.fa-circle-o-notch:before { + content: "\f1ce"; } + +.fa.fa-rebel { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-ra { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-ra:before { + content: "\f1d0"; } + +.fa.fa-resistance { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-resistance:before { + content: "\f1d0"; } + +.fa.fa-empire { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-ge { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-ge:before { + content: "\f1d1"; } + +.fa.fa-git-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-git-square:before { + content: "\f1d2"; } + +.fa.fa-git { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-hacker-news { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-y-combinator-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-y-combinator-square:before { + content: "\f1d4"; } + +.fa.fa-yc-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-yc-square:before { + content: "\f1d4"; } + +.fa.fa-tencent-weibo { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-qq { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-weixin { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-wechat { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-wechat:before { + content: "\f1d7"; } + +.fa.fa-send:before { + content: "\f1d8"; } + +.fa.fa-paper-plane-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-paper-plane-o:before { + content: "\f1d8"; } + +.fa.fa-send-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-send-o:before { + content: "\f1d8"; } + +.fa.fa-circle-thin { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-circle-thin:before { + content: "\f111"; } + +.fa.fa-header:before { + content: "\f1dc"; } + +.fa.fa-futbol-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-futbol-o:before { + content: "\f1e3"; } + +.fa.fa-soccer-ball-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-soccer-ball-o:before { + content: "\f1e3"; } + +.fa.fa-slideshare { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-twitch { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-yelp { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-newspaper-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-newspaper-o:before { + content: "\f1ea"; } + +.fa.fa-paypal { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-google-wallet { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-cc-visa { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-cc-mastercard { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-cc-discover { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-cc-amex { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-cc-paypal { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-cc-stripe { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-bell-slash-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-bell-slash-o:before { + content: "\f1f6"; } + +.fa.fa-trash:before { + content: "\f2ed"; } + +.fa.fa-copyright { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-eyedropper:before { + content: "\f1fb"; } + +.fa.fa-area-chart:before { + content: "\f1fe"; } + +.fa.fa-pie-chart:before { + content: "\f200"; } + +.fa.fa-line-chart:before { + content: "\f201"; } + +.fa.fa-lastfm { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-lastfm-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-lastfm-square:before { + content: "\f203"; } + +.fa.fa-ioxhost { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-angellist { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-cc { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-cc:before { + content: "\f20a"; } + +.fa.fa-ils:before { + content: "\f20b"; } + +.fa.fa-shekel:before { + content: "\f20b"; } + +.fa.fa-sheqel:before { + content: "\f20b"; } + +.fa.fa-buysellads { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-connectdevelop { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-dashcube { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-forumbee { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-leanpub { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-sellsy { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-shirtsinbulk { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-simplybuilt { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-skyatlas { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-diamond { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-diamond:before { + content: "\f3a5"; } + +.fa.fa-transgender:before { + content: "\f224"; } + +.fa.fa-intersex:before { + content: "\f224"; } + +.fa.fa-transgender-alt:before { + content: "\f225"; } + +.fa.fa-facebook-official { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-facebook-official:before { + content: "\f09a"; } + +.fa.fa-pinterest-p { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-whatsapp { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-hotel:before { + content: "\f236"; } + +.fa.fa-viacoin { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-medium { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-y-combinator { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-yc { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-yc:before { + content: "\f23b"; } + +.fa.fa-optin-monster { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-opencart { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-expeditedssl { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-battery-4:before { + content: "\f240"; } + +.fa.fa-battery:before { + content: "\f240"; } + +.fa.fa-battery-3:before { + content: "\f241"; } + +.fa.fa-battery-2:before { + content: "\f242"; } + +.fa.fa-battery-1:before { + content: "\f243"; } + +.fa.fa-battery-0:before { + content: "\f244"; } + +.fa.fa-object-group { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-object-ungroup { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-sticky-note-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-sticky-note-o:before { + content: "\f249"; } + +.fa.fa-cc-jcb { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-cc-diners-club { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-clone { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-hourglass-o:before { + content: "\f254"; } + +.fa.fa-hourglass-1:before { + content: "\f251"; } + +.fa.fa-hourglass-2:before { + content: "\f252"; } + +.fa.fa-hourglass-3:before { + content: "\f253"; } + +.fa.fa-hand-rock-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-hand-rock-o:before { + content: "\f255"; } + +.fa.fa-hand-grab-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-hand-grab-o:before { + content: "\f255"; } + +.fa.fa-hand-paper-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-hand-paper-o:before { + content: "\f256"; } + +.fa.fa-hand-stop-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-hand-stop-o:before { + content: "\f256"; } + +.fa.fa-hand-scissors-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-hand-scissors-o:before { + content: "\f257"; } + +.fa.fa-hand-lizard-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-hand-lizard-o:before { + content: "\f258"; } + +.fa.fa-hand-spock-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-hand-spock-o:before { + content: "\f259"; } + +.fa.fa-hand-pointer-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-hand-pointer-o:before { + content: "\f25a"; } + +.fa.fa-hand-peace-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-hand-peace-o:before { + content: "\f25b"; } + +.fa.fa-registered { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-creative-commons { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-gg { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-gg-circle { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-odnoklassniki { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-odnoklassniki-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-odnoklassniki-square:before { + content: "\f264"; } + +.fa.fa-get-pocket { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-wikipedia-w { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-safari { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-chrome { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-firefox { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-opera { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-internet-explorer { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-television:before { + content: "\f26c"; } + +.fa.fa-contao { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-500px { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-amazon { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-calendar-plus-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-calendar-plus-o:before { + content: "\f271"; } + +.fa.fa-calendar-minus-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-calendar-minus-o:before { + content: "\f272"; } + +.fa.fa-calendar-times-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-calendar-times-o:before { + content: "\f273"; } + +.fa.fa-calendar-check-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-calendar-check-o:before { + content: "\f274"; } + +.fa.fa-map-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-map-o:before { + content: "\f279"; } + +.fa.fa-commenting:before { + content: "\f4ad"; } + +.fa.fa-commenting-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-commenting-o:before { + content: "\f4ad"; } + +.fa.fa-houzz { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-vimeo { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-vimeo:before { + content: "\f27d"; } + +.fa.fa-black-tie { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-fonticons { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-reddit-alien { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-edge { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-credit-card-alt:before { + content: "\f09d"; } + +.fa.fa-codiepie { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-modx { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-fort-awesome { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-usb { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-product-hunt { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-mixcloud { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-scribd { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-pause-circle-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-pause-circle-o:before { + content: "\f28b"; } + +.fa.fa-stop-circle-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-stop-circle-o:before { + content: "\f28d"; } + +.fa.fa-bluetooth { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-bluetooth-b { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-gitlab { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-wpbeginner { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-wpforms { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-envira { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-wheelchair-alt { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-wheelchair-alt:before { + content: "\f368"; } + +.fa.fa-question-circle-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-question-circle-o:before { + content: "\f059"; } + +.fa.fa-volume-control-phone:before { + content: "\f2a0"; } + +.fa.fa-asl-interpreting:before { + content: "\f2a3"; } + +.fa.fa-deafness:before { + content: "\f2a4"; } + +.fa.fa-hard-of-hearing:before { + content: "\f2a4"; } + +.fa.fa-glide { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-glide-g { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-signing:before { + content: "\f2a7"; } + +.fa.fa-viadeo { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-viadeo-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-viadeo-square:before { + content: "\f2aa"; } + +.fa.fa-snapchat { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-snapchat-ghost { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-snapchat-ghost:before { + content: "\f2ab"; } + +.fa.fa-snapchat-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-snapchat-square:before { + content: "\f2ad"; } + +.fa.fa-pied-piper { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-first-order { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-yoast { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-themeisle { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-google-plus-official { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-google-plus-official:before { + content: "\f2b3"; } + +.fa.fa-google-plus-circle { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-google-plus-circle:before { + content: "\f2b3"; } + +.fa.fa-font-awesome { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-fa { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-fa:before { + content: "\f2b4"; } + +.fa.fa-handshake-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-handshake-o:before { + content: "\f2b5"; } + +.fa.fa-envelope-open-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-envelope-open-o:before { + content: "\f2b6"; } + +.fa.fa-linode { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-address-book-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-address-book-o:before { + content: "\f2b9"; } + +.fa.fa-vcard:before { + content: "\f2bb"; } + +.fa.fa-address-card-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-address-card-o:before { + content: "\f2bb"; } + +.fa.fa-vcard-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-vcard-o:before { + content: "\f2bb"; } + +.fa.fa-user-circle-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-user-circle-o:before { + content: "\f2bd"; } + +.fa.fa-user-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-user-o:before { + content: "\f007"; } + +.fa.fa-id-badge { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-drivers-license:before { + content: "\f2c2"; } + +.fa.fa-id-card-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-id-card-o:before { + content: "\f2c2"; } + +.fa.fa-drivers-license-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-drivers-license-o:before { + content: "\f2c2"; } + +.fa.fa-quora { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-free-code-camp { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-telegram { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-thermometer-4:before { + content: "\f2c7"; } + +.fa.fa-thermometer:before { + content: "\f2c7"; } + +.fa.fa-thermometer-3:before { + content: "\f2c8"; } + +.fa.fa-thermometer-2:before { + content: "\f2c9"; } + +.fa.fa-thermometer-1:before { + content: "\f2ca"; } + +.fa.fa-thermometer-0:before { + content: "\f2cb"; } + +.fa.fa-bathtub:before { + content: "\f2cd"; } + +.fa.fa-s15:before { + content: "\f2cd"; } + +.fa.fa-window-maximize { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-window-restore { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-times-rectangle:before { + content: "\f410"; } + +.fa.fa-window-close-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-window-close-o:before { + content: "\f410"; } + +.fa.fa-times-rectangle-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-times-rectangle-o:before { + content: "\f410"; } + +.fa.fa-bandcamp { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-grav { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-etsy { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-imdb { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-ravelry { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-eercast { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-eercast:before { + content: "\f2da"; } + +.fa.fa-snowflake-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-snowflake-o:before { + content: "\f2dc"; } + +.fa.fa-superpowers { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-wpexplorer { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-meetup { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } diff --git a/docs/site_libs/font-awesome-6.4.0/css/v4-shims.min.css b/docs/site_libs/font-awesome-6.4.0/css/v4-shims.min.css new file mode 100644 index 0000000..cfaf59c --- /dev/null +++ b/docs/site_libs/font-awesome-6.4.0/css/v4-shims.min.css @@ -0,0 +1,6 @@ +/*! + * Font Awesome Free 6.4.0 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + * Copyright 2023 Fonticons, Inc. + */ +.fa.fa-glass:before{content:"\f000"}.fa.fa-envelope-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-envelope-o:before{content:"\f0e0"}.fa.fa-star-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-star-o:before{content:"\f005"}.fa.fa-close:before,.fa.fa-remove:before{content:"\f00d"}.fa.fa-gear:before{content:"\f013"}.fa.fa-trash-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-trash-o:before{content:"\f2ed"}.fa.fa-home:before{content:"\f015"}.fa.fa-file-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-o:before{content:"\f15b"}.fa.fa-clock-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-clock-o:before{content:"\f017"}.fa.fa-arrow-circle-o-down{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-arrow-circle-o-down:before{content:"\f358"}.fa.fa-arrow-circle-o-up{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-arrow-circle-o-up:before{content:"\f35b"}.fa.fa-play-circle-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-play-circle-o:before{content:"\f144"}.fa.fa-repeat:before,.fa.fa-rotate-right:before{content:"\f01e"}.fa.fa-refresh:before{content:"\f021"}.fa.fa-list-alt{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-list-alt:before{content:"\f022"}.fa.fa-dedent:before{content:"\f03b"}.fa.fa-video-camera:before{content:"\f03d"}.fa.fa-picture-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-picture-o:before{content:"\f03e"}.fa.fa-photo{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-photo:before{content:"\f03e"}.fa.fa-image{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-image:before{content:"\f03e"}.fa.fa-map-marker:before{content:"\f3c5"}.fa.fa-pencil-square-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-pencil-square-o:before{content:"\f044"}.fa.fa-edit{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-edit:before{content:"\f044"}.fa.fa-share-square-o:before{content:"\f14d"}.fa.fa-check-square-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-check-square-o:before{content:"\f14a"}.fa.fa-arrows:before{content:"\f0b2"}.fa.fa-times-circle-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-times-circle-o:before{content:"\f057"}.fa.fa-check-circle-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-check-circle-o:before{content:"\f058"}.fa.fa-mail-forward:before{content:"\f064"}.fa.fa-expand:before{content:"\f424"}.fa.fa-compress:before{content:"\f422"}.fa.fa-eye,.fa.fa-eye-slash{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-warning:before{content:"\f071"}.fa.fa-calendar:before{content:"\f073"}.fa.fa-arrows-v:before{content:"\f338"}.fa.fa-arrows-h:before{content:"\f337"}.fa.fa-bar-chart-o:before,.fa.fa-bar-chart:before{content:"\e0e3"}.fa.fa-twitter-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-twitter-square:before{content:"\f081"}.fa.fa-facebook-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-facebook-square:before{content:"\f082"}.fa.fa-gears:before{content:"\f085"}.fa.fa-thumbs-o-up{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-thumbs-o-up:before{content:"\f164"}.fa.fa-thumbs-o-down{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-thumbs-o-down:before{content:"\f165"}.fa.fa-heart-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-heart-o:before{content:"\f004"}.fa.fa-sign-out:before{content:"\f2f5"}.fa.fa-linkedin-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-linkedin-square:before{content:"\f08c"}.fa.fa-thumb-tack:before{content:"\f08d"}.fa.fa-external-link:before{content:"\f35d"}.fa.fa-sign-in:before{content:"\f2f6"}.fa.fa-github-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-github-square:before{content:"\f092"}.fa.fa-lemon-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-lemon-o:before{content:"\f094"}.fa.fa-square-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-square-o:before{content:"\f0c8"}.fa.fa-bookmark-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-bookmark-o:before{content:"\f02e"}.fa.fa-facebook,.fa.fa-twitter{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-facebook:before{content:"\f39e"}.fa.fa-facebook-f{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-facebook-f:before{content:"\f39e"}.fa.fa-github{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-credit-card{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-feed:before{content:"\f09e"}.fa.fa-hdd-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hdd-o:before{content:"\f0a0"}.fa.fa-hand-o-right{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-o-right:before{content:"\f0a4"}.fa.fa-hand-o-left{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-o-left:before{content:"\f0a5"}.fa.fa-hand-o-up{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-o-up:before{content:"\f0a6"}.fa.fa-hand-o-down{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-o-down:before{content:"\f0a7"}.fa.fa-globe:before{content:"\f57d"}.fa.fa-tasks:before{content:"\f828"}.fa.fa-arrows-alt:before{content:"\f31e"}.fa.fa-group:before{content:"\f0c0"}.fa.fa-chain:before{content:"\f0c1"}.fa.fa-cut:before{content:"\f0c4"}.fa.fa-files-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-files-o:before{content:"\f0c5"}.fa.fa-floppy-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-floppy-o:before{content:"\f0c7"}.fa.fa-save{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-save:before{content:"\f0c7"}.fa.fa-navicon:before,.fa.fa-reorder:before{content:"\f0c9"}.fa.fa-magic:before{content:"\e2ca"}.fa.fa-pinterest,.fa.fa-pinterest-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-pinterest-square:before{content:"\f0d3"}.fa.fa-google-plus-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-google-plus-square:before{content:"\f0d4"}.fa.fa-google-plus{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-google-plus:before{content:"\f0d5"}.fa.fa-money:before{content:"\f3d1"}.fa.fa-unsorted:before{content:"\f0dc"}.fa.fa-sort-desc:before{content:"\f0dd"}.fa.fa-sort-asc:before{content:"\f0de"}.fa.fa-linkedin{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-linkedin:before{content:"\f0e1"}.fa.fa-rotate-left:before{content:"\f0e2"}.fa.fa-legal:before{content:"\f0e3"}.fa.fa-dashboard:before,.fa.fa-tachometer:before{content:"\f625"}.fa.fa-comment-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-comment-o:before{content:"\f075"}.fa.fa-comments-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-comments-o:before{content:"\f086"}.fa.fa-flash:before{content:"\f0e7"}.fa.fa-clipboard:before{content:"\f0ea"}.fa.fa-lightbulb-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-lightbulb-o:before{content:"\f0eb"}.fa.fa-exchange:before{content:"\f362"}.fa.fa-cloud-download:before{content:"\f0ed"}.fa.fa-cloud-upload:before{content:"\f0ee"}.fa.fa-bell-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-bell-o:before{content:"\f0f3"}.fa.fa-cutlery:before{content:"\f2e7"}.fa.fa-file-text-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-text-o:before{content:"\f15c"}.fa.fa-building-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-building-o:before{content:"\f1ad"}.fa.fa-hospital-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hospital-o:before{content:"\f0f8"}.fa.fa-tablet:before{content:"\f3fa"}.fa.fa-mobile-phone:before,.fa.fa-mobile:before{content:"\f3cd"}.fa.fa-circle-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-circle-o:before{content:"\f111"}.fa.fa-mail-reply:before{content:"\f3e5"}.fa.fa-github-alt{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-folder-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-folder-o:before{content:"\f07b"}.fa.fa-folder-open-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-folder-open-o:before{content:"\f07c"}.fa.fa-smile-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-smile-o:before{content:"\f118"}.fa.fa-frown-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-frown-o:before{content:"\f119"}.fa.fa-meh-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-meh-o:before{content:"\f11a"}.fa.fa-keyboard-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-keyboard-o:before{content:"\f11c"}.fa.fa-flag-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-flag-o:before{content:"\f024"}.fa.fa-mail-reply-all:before{content:"\f122"}.fa.fa-star-half-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-star-half-o:before{content:"\f5c0"}.fa.fa-star-half-empty{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-star-half-empty:before{content:"\f5c0"}.fa.fa-star-half-full{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-star-half-full:before{content:"\f5c0"}.fa.fa-code-fork:before{content:"\f126"}.fa.fa-chain-broken:before,.fa.fa-unlink:before{content:"\f127"}.fa.fa-calendar-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-calendar-o:before{content:"\f133"}.fa.fa-css3,.fa.fa-html5,.fa.fa-maxcdn{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-unlock-alt:before{content:"\f09c"}.fa.fa-minus-square-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-minus-square-o:before{content:"\f146"}.fa.fa-level-up:before{content:"\f3bf"}.fa.fa-level-down:before{content:"\f3be"}.fa.fa-pencil-square:before{content:"\f14b"}.fa.fa-external-link-square:before{content:"\f360"}.fa.fa-compass{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-caret-square-o-down{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-caret-square-o-down:before{content:"\f150"}.fa.fa-toggle-down{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-toggle-down:before{content:"\f150"}.fa.fa-caret-square-o-up{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-caret-square-o-up:before{content:"\f151"}.fa.fa-toggle-up{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-toggle-up:before{content:"\f151"}.fa.fa-caret-square-o-right{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-caret-square-o-right:before{content:"\f152"}.fa.fa-toggle-right{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-toggle-right:before{content:"\f152"}.fa.fa-eur:before,.fa.fa-euro:before{content:"\f153"}.fa.fa-gbp:before{content:"\f154"}.fa.fa-dollar:before,.fa.fa-usd:before{content:"\24"}.fa.fa-inr:before,.fa.fa-rupee:before{content:"\e1bc"}.fa.fa-cny:before,.fa.fa-jpy:before,.fa.fa-rmb:before,.fa.fa-yen:before{content:"\f157"}.fa.fa-rouble:before,.fa.fa-rub:before,.fa.fa-ruble:before{content:"\f158"}.fa.fa-krw:before,.fa.fa-won:before{content:"\f159"}.fa.fa-bitcoin,.fa.fa-btc{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-bitcoin:before{content:"\f15a"}.fa.fa-file-text:before{content:"\f15c"}.fa.fa-sort-alpha-asc:before{content:"\f15d"}.fa.fa-sort-alpha-desc:before{content:"\f881"}.fa.fa-sort-amount-asc:before{content:"\f884"}.fa.fa-sort-amount-desc:before{content:"\f160"}.fa.fa-sort-numeric-asc:before{content:"\f162"}.fa.fa-sort-numeric-desc:before{content:"\f886"}.fa.fa-youtube-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-youtube-square:before{content:"\f431"}.fa.fa-xing,.fa.fa-xing-square,.fa.fa-youtube{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-xing-square:before{content:"\f169"}.fa.fa-youtube-play{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-youtube-play:before{content:"\f167"}.fa.fa-adn,.fa.fa-bitbucket,.fa.fa-bitbucket-square,.fa.fa-dropbox,.fa.fa-flickr,.fa.fa-instagram,.fa.fa-stack-overflow{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-bitbucket-square:before{content:"\f171"}.fa.fa-tumblr,.fa.fa-tumblr-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-tumblr-square:before{content:"\f174"}.fa.fa-long-arrow-down:before{content:"\f309"}.fa.fa-long-arrow-up:before{content:"\f30c"}.fa.fa-long-arrow-left:before{content:"\f30a"}.fa.fa-long-arrow-right:before{content:"\f30b"}.fa.fa-android,.fa.fa-apple,.fa.fa-dribbble,.fa.fa-foursquare,.fa.fa-gittip,.fa.fa-gratipay,.fa.fa-linux,.fa.fa-skype,.fa.fa-trello,.fa.fa-windows{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-gittip:before{content:"\f184"}.fa.fa-sun-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-sun-o:before{content:"\f185"}.fa.fa-moon-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-moon-o:before{content:"\f186"}.fa.fa-pagelines,.fa.fa-renren,.fa.fa-stack-exchange,.fa.fa-vk,.fa.fa-weibo{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-arrow-circle-o-right{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-arrow-circle-o-right:before{content:"\f35a"}.fa.fa-arrow-circle-o-left{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-arrow-circle-o-left:before{content:"\f359"}.fa.fa-caret-square-o-left{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-caret-square-o-left:before{content:"\f191"}.fa.fa-toggle-left{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-toggle-left:before{content:"\f191"}.fa.fa-dot-circle-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-dot-circle-o:before{content:"\f192"}.fa.fa-vimeo-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-vimeo-square:before{content:"\f194"}.fa.fa-try:before,.fa.fa-turkish-lira:before{content:"\e2bb"}.fa.fa-plus-square-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-plus-square-o:before{content:"\f0fe"}.fa.fa-openid,.fa.fa-slack,.fa.fa-wordpress{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-bank:before,.fa.fa-institution:before{content:"\f19c"}.fa.fa-mortar-board:before{content:"\f19d"}.fa.fa-google,.fa.fa-reddit,.fa.fa-reddit-square,.fa.fa-yahoo{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-reddit-square:before{content:"\f1a2"}.fa.fa-behance,.fa.fa-behance-square,.fa.fa-delicious,.fa.fa-digg,.fa.fa-drupal,.fa.fa-joomla,.fa.fa-pied-piper-alt,.fa.fa-pied-piper-pp,.fa.fa-stumbleupon,.fa.fa-stumbleupon-circle{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-behance-square:before{content:"\f1b5"}.fa.fa-steam,.fa.fa-steam-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-steam-square:before{content:"\f1b7"}.fa.fa-automobile:before{content:"\f1b9"}.fa.fa-cab:before{content:"\f1ba"}.fa.fa-deviantart,.fa.fa-soundcloud,.fa.fa-spotify{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-file-pdf-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-pdf-o:before{content:"\f1c1"}.fa.fa-file-word-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-word-o:before{content:"\f1c2"}.fa.fa-file-excel-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-excel-o:before{content:"\f1c3"}.fa.fa-file-powerpoint-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-powerpoint-o:before{content:"\f1c4"}.fa.fa-file-image-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-image-o:before{content:"\f1c5"}.fa.fa-file-photo-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-photo-o:before{content:"\f1c5"}.fa.fa-file-picture-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-picture-o:before{content:"\f1c5"}.fa.fa-file-archive-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-archive-o:before{content:"\f1c6"}.fa.fa-file-zip-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-zip-o:before{content:"\f1c6"}.fa.fa-file-audio-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-audio-o:before{content:"\f1c7"}.fa.fa-file-sound-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-sound-o:before{content:"\f1c7"}.fa.fa-file-video-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-video-o:before{content:"\f1c8"}.fa.fa-file-movie-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-movie-o:before{content:"\f1c8"}.fa.fa-file-code-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-code-o:before{content:"\f1c9"}.fa.fa-codepen,.fa.fa-jsfiddle,.fa.fa-vine{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-life-bouy:before,.fa.fa-life-buoy:before,.fa.fa-life-saver:before,.fa.fa-support:before{content:"\f1cd"}.fa.fa-circle-o-notch:before{content:"\f1ce"}.fa.fa-ra,.fa.fa-rebel{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-ra:before{content:"\f1d0"}.fa.fa-resistance{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-resistance:before{content:"\f1d0"}.fa.fa-empire,.fa.fa-ge{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-ge:before{content:"\f1d1"}.fa.fa-git-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-git-square:before{content:"\f1d2"}.fa.fa-git,.fa.fa-hacker-news,.fa.fa-y-combinator-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-y-combinator-square:before{content:"\f1d4"}.fa.fa-yc-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-yc-square:before{content:"\f1d4"}.fa.fa-qq,.fa.fa-tencent-weibo,.fa.fa-wechat,.fa.fa-weixin{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-wechat:before{content:"\f1d7"}.fa.fa-send:before{content:"\f1d8"}.fa.fa-paper-plane-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-paper-plane-o:before{content:"\f1d8"}.fa.fa-send-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-send-o:before{content:"\f1d8"}.fa.fa-circle-thin{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-circle-thin:before{content:"\f111"}.fa.fa-header:before{content:"\f1dc"}.fa.fa-futbol-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-futbol-o:before{content:"\f1e3"}.fa.fa-soccer-ball-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-soccer-ball-o:before{content:"\f1e3"}.fa.fa-slideshare,.fa.fa-twitch,.fa.fa-yelp{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-newspaper-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-newspaper-o:before{content:"\f1ea"}.fa.fa-cc-amex,.fa.fa-cc-discover,.fa.fa-cc-mastercard,.fa.fa-cc-paypal,.fa.fa-cc-stripe,.fa.fa-cc-visa,.fa.fa-google-wallet,.fa.fa-paypal{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-bell-slash-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-bell-slash-o:before{content:"\f1f6"}.fa.fa-trash:before{content:"\f2ed"}.fa.fa-copyright{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-eyedropper:before{content:"\f1fb"}.fa.fa-area-chart:before{content:"\f1fe"}.fa.fa-pie-chart:before{content:"\f200"}.fa.fa-line-chart:before{content:"\f201"}.fa.fa-lastfm,.fa.fa-lastfm-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-lastfm-square:before{content:"\f203"}.fa.fa-angellist,.fa.fa-ioxhost{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-cc{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-cc:before{content:"\f20a"}.fa.fa-ils:before,.fa.fa-shekel:before,.fa.fa-sheqel:before{content:"\f20b"}.fa.fa-buysellads,.fa.fa-connectdevelop,.fa.fa-dashcube,.fa.fa-forumbee,.fa.fa-leanpub,.fa.fa-sellsy,.fa.fa-shirtsinbulk,.fa.fa-simplybuilt,.fa.fa-skyatlas{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-diamond{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-diamond:before{content:"\f3a5"}.fa.fa-intersex:before,.fa.fa-transgender:before{content:"\f224"}.fa.fa-transgender-alt:before{content:"\f225"}.fa.fa-facebook-official{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-facebook-official:before{content:"\f09a"}.fa.fa-pinterest-p,.fa.fa-whatsapp{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-hotel:before{content:"\f236"}.fa.fa-medium,.fa.fa-viacoin,.fa.fa-y-combinator,.fa.fa-yc{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-yc:before{content:"\f23b"}.fa.fa-expeditedssl,.fa.fa-opencart,.fa.fa-optin-monster{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-battery-4:before,.fa.fa-battery:before{content:"\f240"}.fa.fa-battery-3:before{content:"\f241"}.fa.fa-battery-2:before{content:"\f242"}.fa.fa-battery-1:before{content:"\f243"}.fa.fa-battery-0:before{content:"\f244"}.fa.fa-object-group,.fa.fa-object-ungroup,.fa.fa-sticky-note-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-sticky-note-o:before{content:"\f249"}.fa.fa-cc-diners-club,.fa.fa-cc-jcb{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-clone{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hourglass-o:before{content:"\f254"}.fa.fa-hourglass-1:before{content:"\f251"}.fa.fa-hourglass-2:before{content:"\f252"}.fa.fa-hourglass-3:before{content:"\f253"}.fa.fa-hand-rock-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-rock-o:before{content:"\f255"}.fa.fa-hand-grab-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-grab-o:before{content:"\f255"}.fa.fa-hand-paper-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-paper-o:before{content:"\f256"}.fa.fa-hand-stop-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-stop-o:before{content:"\f256"}.fa.fa-hand-scissors-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-scissors-o:before{content:"\f257"}.fa.fa-hand-lizard-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-lizard-o:before{content:"\f258"}.fa.fa-hand-spock-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-spock-o:before{content:"\f259"}.fa.fa-hand-pointer-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-pointer-o:before{content:"\f25a"}.fa.fa-hand-peace-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-peace-o:before{content:"\f25b"}.fa.fa-registered{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-creative-commons,.fa.fa-gg,.fa.fa-gg-circle,.fa.fa-odnoklassniki,.fa.fa-odnoklassniki-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-odnoklassniki-square:before{content:"\f264"}.fa.fa-chrome,.fa.fa-firefox,.fa.fa-get-pocket,.fa.fa-internet-explorer,.fa.fa-opera,.fa.fa-safari,.fa.fa-wikipedia-w{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-television:before{content:"\f26c"}.fa.fa-500px,.fa.fa-amazon,.fa.fa-contao{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-calendar-plus-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-calendar-plus-o:before{content:"\f271"}.fa.fa-calendar-minus-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-calendar-minus-o:before{content:"\f272"}.fa.fa-calendar-times-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-calendar-times-o:before{content:"\f273"}.fa.fa-calendar-check-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-calendar-check-o:before{content:"\f274"}.fa.fa-map-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-map-o:before{content:"\f279"}.fa.fa-commenting:before{content:"\f4ad"}.fa.fa-commenting-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-commenting-o:before{content:"\f4ad"}.fa.fa-houzz,.fa.fa-vimeo{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-vimeo:before{content:"\f27d"}.fa.fa-black-tie,.fa.fa-edge,.fa.fa-fonticons,.fa.fa-reddit-alien{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-credit-card-alt:before{content:"\f09d"}.fa.fa-codiepie,.fa.fa-fort-awesome,.fa.fa-mixcloud,.fa.fa-modx,.fa.fa-product-hunt,.fa.fa-scribd,.fa.fa-usb{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-pause-circle-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-pause-circle-o:before{content:"\f28b"}.fa.fa-stop-circle-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-stop-circle-o:before{content:"\f28d"}.fa.fa-bluetooth,.fa.fa-bluetooth-b,.fa.fa-envira,.fa.fa-gitlab,.fa.fa-wheelchair-alt,.fa.fa-wpbeginner,.fa.fa-wpforms{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-wheelchair-alt:before{content:"\f368"}.fa.fa-question-circle-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-question-circle-o:before{content:"\f059"}.fa.fa-volume-control-phone:before{content:"\f2a0"}.fa.fa-asl-interpreting:before{content:"\f2a3"}.fa.fa-deafness:before,.fa.fa-hard-of-hearing:before{content:"\f2a4"}.fa.fa-glide,.fa.fa-glide-g{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-signing:before{content:"\f2a7"}.fa.fa-viadeo,.fa.fa-viadeo-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-viadeo-square:before{content:"\f2aa"}.fa.fa-snapchat,.fa.fa-snapchat-ghost{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-snapchat-ghost:before{content:"\f2ab"}.fa.fa-snapchat-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-snapchat-square:before{content:"\f2ad"}.fa.fa-first-order,.fa.fa-google-plus-official,.fa.fa-pied-piper,.fa.fa-themeisle,.fa.fa-yoast{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-google-plus-official:before{content:"\f2b3"}.fa.fa-google-plus-circle{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-google-plus-circle:before{content:"\f2b3"}.fa.fa-fa,.fa.fa-font-awesome{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-fa:before{content:"\f2b4"}.fa.fa-handshake-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-handshake-o:before{content:"\f2b5"}.fa.fa-envelope-open-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-envelope-open-o:before{content:"\f2b6"}.fa.fa-linode{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-address-book-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-address-book-o:before{content:"\f2b9"}.fa.fa-vcard:before{content:"\f2bb"}.fa.fa-address-card-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-address-card-o:before{content:"\f2bb"}.fa.fa-vcard-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-vcard-o:before{content:"\f2bb"}.fa.fa-user-circle-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-user-circle-o:before{content:"\f2bd"}.fa.fa-user-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-user-o:before{content:"\f007"}.fa.fa-id-badge{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-drivers-license:before{content:"\f2c2"}.fa.fa-id-card-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-id-card-o:before{content:"\f2c2"}.fa.fa-drivers-license-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-drivers-license-o:before{content:"\f2c2"}.fa.fa-free-code-camp,.fa.fa-quora,.fa.fa-telegram{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-thermometer-4:before,.fa.fa-thermometer:before{content:"\f2c7"}.fa.fa-thermometer-3:before{content:"\f2c8"}.fa.fa-thermometer-2:before{content:"\f2c9"}.fa.fa-thermometer-1:before{content:"\f2ca"}.fa.fa-thermometer-0:before{content:"\f2cb"}.fa.fa-bathtub:before,.fa.fa-s15:before{content:"\f2cd"}.fa.fa-window-maximize,.fa.fa-window-restore{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-times-rectangle:before{content:"\f410"}.fa.fa-window-close-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-window-close-o:before{content:"\f410"}.fa.fa-times-rectangle-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-times-rectangle-o:before{content:"\f410"}.fa.fa-bandcamp,.fa.fa-eercast,.fa.fa-etsy,.fa.fa-grav,.fa.fa-imdb,.fa.fa-ravelry{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-eercast:before{content:"\f2da"}.fa.fa-snowflake-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-snowflake-o:before{content:"\f2dc"}.fa.fa-meetup,.fa.fa-superpowers,.fa.fa-wpexplorer{font-family:"Font Awesome 6 Brands";font-weight:400} \ No newline at end of file diff --git a/docs/site_libs/font-awesome-6.4.0/webfonts/fa-brands-400.ttf b/docs/site_libs/font-awesome-6.4.0/webfonts/fa-brands-400.ttf new file mode 100644 index 0000000..774d51a Binary files /dev/null and b/docs/site_libs/font-awesome-6.4.0/webfonts/fa-brands-400.ttf differ diff --git a/docs/site_libs/font-awesome-6.4.0/webfonts/fa-brands-400.woff2 b/docs/site_libs/font-awesome-6.4.0/webfonts/fa-brands-400.woff2 new file mode 100644 index 0000000..71e3185 Binary files /dev/null and b/docs/site_libs/font-awesome-6.4.0/webfonts/fa-brands-400.woff2 differ diff --git a/docs/site_libs/font-awesome-6.4.0/webfonts/fa-regular-400.ttf b/docs/site_libs/font-awesome-6.4.0/webfonts/fa-regular-400.ttf new file mode 100644 index 0000000..8a9d634 Binary files /dev/null and b/docs/site_libs/font-awesome-6.4.0/webfonts/fa-regular-400.ttf differ diff --git a/docs/site_libs/font-awesome-6.4.0/webfonts/fa-regular-400.woff2 b/docs/site_libs/font-awesome-6.4.0/webfonts/fa-regular-400.woff2 new file mode 100644 index 0000000..7f02168 Binary files /dev/null and b/docs/site_libs/font-awesome-6.4.0/webfonts/fa-regular-400.woff2 differ diff --git a/docs/site_libs/font-awesome-6.4.0/webfonts/fa-solid-900.ttf b/docs/site_libs/font-awesome-6.4.0/webfonts/fa-solid-900.ttf new file mode 100644 index 0000000..993dbe1 Binary files /dev/null and b/docs/site_libs/font-awesome-6.4.0/webfonts/fa-solid-900.ttf differ diff --git a/docs/site_libs/font-awesome-6.4.0/webfonts/fa-solid-900.woff2 b/docs/site_libs/font-awesome-6.4.0/webfonts/fa-solid-900.woff2 new file mode 100644 index 0000000..5c16cd3 Binary files /dev/null and b/docs/site_libs/font-awesome-6.4.0/webfonts/fa-solid-900.woff2 differ diff --git a/docs/site_libs/font-awesome-6.4.0/webfonts/fa-v4compatibility.ttf b/docs/site_libs/font-awesome-6.4.0/webfonts/fa-v4compatibility.ttf new file mode 100644 index 0000000..ab6ae22 Binary files /dev/null and b/docs/site_libs/font-awesome-6.4.0/webfonts/fa-v4compatibility.ttf differ diff --git a/docs/site_libs/font-awesome-6.4.0/webfonts/fa-v4compatibility.woff2 b/docs/site_libs/font-awesome-6.4.0/webfonts/fa-v4compatibility.woff2 new file mode 100644 index 0000000..9027e38 Binary files /dev/null and b/docs/site_libs/font-awesome-6.4.0/webfonts/fa-v4compatibility.woff2 differ diff --git a/docs/site_libs/htmlwidgets-1.6.2/htmlwidgets.js b/docs/site_libs/htmlwidgets-1.6.2/htmlwidgets.js new file mode 100644 index 0000000..1067d02 --- /dev/null +++ b/docs/site_libs/htmlwidgets-1.6.2/htmlwidgets.js @@ -0,0 +1,901 @@ +(function() { + // If window.HTMLWidgets is already defined, then use it; otherwise create a + // new object. This allows preceding code to set options that affect the + // initialization process (though none currently exist). + window.HTMLWidgets = window.HTMLWidgets || {}; + + // See if we're running in a viewer pane. If not, we're in a web browser. + var viewerMode = window.HTMLWidgets.viewerMode = + /\bviewer_pane=1\b/.test(window.location); + + // See if we're running in Shiny mode. If not, it's a static document. + // Note that static widgets can appear in both Shiny and static modes, but + // obviously, Shiny widgets can only appear in Shiny apps/documents. + var shinyMode = window.HTMLWidgets.shinyMode = + typeof(window.Shiny) !== "undefined" && !!window.Shiny.outputBindings; + + // We can't count on jQuery being available, so we implement our own + // version if necessary. + function querySelectorAll(scope, selector) { + if (typeof(jQuery) !== "undefined" && scope instanceof jQuery) { + return scope.find(selector); + } + if (scope.querySelectorAll) { + return scope.querySelectorAll(selector); + } + } + + function asArray(value) { + if (value === null) + return []; + if ($.isArray(value)) + return value; + return [value]; + } + + // Implement jQuery's extend + function extend(target /*, ... */) { + if (arguments.length == 1) { + return target; + } + for (var i = 1; i < arguments.length; i++) { + var source = arguments[i]; + for (var prop in source) { + if (source.hasOwnProperty(prop)) { + target[prop] = source[prop]; + } + } + } + return target; + } + + // IE8 doesn't support Array.forEach. + function forEach(values, callback, thisArg) { + if (values.forEach) { + values.forEach(callback, thisArg); + } else { + for (var i = 0; i < values.length; i++) { + callback.call(thisArg, values[i], i, values); + } + } + } + + // Replaces the specified method with the return value of funcSource. + // + // Note that funcSource should not BE the new method, it should be a function + // that RETURNS the new method. funcSource receives a single argument that is + // the overridden method, it can be called from the new method. The overridden + // method can be called like a regular function, it has the target permanently + // bound to it so "this" will work correctly. + function overrideMethod(target, methodName, funcSource) { + var superFunc = target[methodName] || function() {}; + var superFuncBound = function() { + return superFunc.apply(target, arguments); + }; + target[methodName] = funcSource(superFuncBound); + } + + // Add a method to delegator that, when invoked, calls + // delegatee.methodName. If there is no such method on + // the delegatee, but there was one on delegator before + // delegateMethod was called, then the original version + // is invoked instead. + // For example: + // + // var a = { + // method1: function() { console.log('a1'); } + // method2: function() { console.log('a2'); } + // }; + // var b = { + // method1: function() { console.log('b1'); } + // }; + // delegateMethod(a, b, "method1"); + // delegateMethod(a, b, "method2"); + // a.method1(); + // a.method2(); + // + // The output would be "b1", "a2". + function delegateMethod(delegator, delegatee, methodName) { + var inherited = delegator[methodName]; + delegator[methodName] = function() { + var target = delegatee; + var method = delegatee[methodName]; + + // The method doesn't exist on the delegatee. Instead, + // call the method on the delegator, if it exists. + if (!method) { + target = delegator; + method = inherited; + } + + if (method) { + return method.apply(target, arguments); + } + }; + } + + // Implement a vague facsimilie of jQuery's data method + function elementData(el, name, value) { + if (arguments.length == 2) { + return el["htmlwidget_data_" + name]; + } else if (arguments.length == 3) { + el["htmlwidget_data_" + name] = value; + return el; + } else { + throw new Error("Wrong number of arguments for elementData: " + + arguments.length); + } + } + + // http://stackoverflow.com/questions/3446170/escape-string-for-use-in-javascript-regex + function escapeRegExp(str) { + return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&"); + } + + function hasClass(el, className) { + var re = new RegExp("\\b" + escapeRegExp(className) + "\\b"); + return re.test(el.className); + } + + // elements - array (or array-like object) of HTML elements + // className - class name to test for + // include - if true, only return elements with given className; + // if false, only return elements *without* given className + function filterByClass(elements, className, include) { + var results = []; + for (var i = 0; i < elements.length; i++) { + if (hasClass(elements[i], className) == include) + results.push(elements[i]); + } + return results; + } + + function on(obj, eventName, func) { + if (obj.addEventListener) { + obj.addEventListener(eventName, func, false); + } else if (obj.attachEvent) { + obj.attachEvent(eventName, func); + } + } + + function off(obj, eventName, func) { + if (obj.removeEventListener) + obj.removeEventListener(eventName, func, false); + else if (obj.detachEvent) { + obj.detachEvent(eventName, func); + } + } + + // Translate array of values to top/right/bottom/left, as usual with + // the "padding" CSS property + // https://developer.mozilla.org/en-US/docs/Web/CSS/padding + function unpackPadding(value) { + if (typeof(value) === "number") + value = [value]; + if (value.length === 1) { + return {top: value[0], right: value[0], bottom: value[0], left: value[0]}; + } + if (value.length === 2) { + return {top: value[0], right: value[1], bottom: value[0], left: value[1]}; + } + if (value.length === 3) { + return {top: value[0], right: value[1], bottom: value[2], left: value[1]}; + } + if (value.length === 4) { + return {top: value[0], right: value[1], bottom: value[2], left: value[3]}; + } + } + + // Convert an unpacked padding object to a CSS value + function paddingToCss(paddingObj) { + return paddingObj.top + "px " + paddingObj.right + "px " + paddingObj.bottom + "px " + paddingObj.left + "px"; + } + + // Makes a number suitable for CSS + function px(x) { + if (typeof(x) === "number") + return x + "px"; + else + return x; + } + + // Retrieves runtime widget sizing information for an element. + // The return value is either null, or an object with fill, padding, + // defaultWidth, defaultHeight fields. + function sizingPolicy(el) { + var sizingEl = document.querySelector("script[data-for='" + el.id + "'][type='application/htmlwidget-sizing']"); + if (!sizingEl) + return null; + var sp = JSON.parse(sizingEl.textContent || sizingEl.text || "{}"); + if (viewerMode) { + return sp.viewer; + } else { + return sp.browser; + } + } + + // @param tasks Array of strings (or falsy value, in which case no-op). + // Each element must be a valid JavaScript expression that yields a + // function. Or, can be an array of objects with "code" and "data" + // properties; in this case, the "code" property should be a string + // of JS that's an expr that yields a function, and "data" should be + // an object that will be added as an additional argument when that + // function is called. + // @param target The object that will be "this" for each function + // execution. + // @param args Array of arguments to be passed to the functions. (The + // same arguments will be passed to all functions.) + function evalAndRun(tasks, target, args) { + if (tasks) { + forEach(tasks, function(task) { + var theseArgs = args; + if (typeof(task) === "object") { + theseArgs = theseArgs.concat([task.data]); + task = task.code; + } + var taskFunc = tryEval(task); + if (typeof(taskFunc) !== "function") { + throw new Error("Task must be a function! Source:\n" + task); + } + taskFunc.apply(target, theseArgs); + }); + } + } + + // Attempt eval() both with and without enclosing in parentheses. + // Note that enclosing coerces a function declaration into + // an expression that eval() can parse + // (otherwise, a SyntaxError is thrown) + function tryEval(code) { + var result = null; + try { + result = eval("(" + code + ")"); + } catch(error) { + if (!(error instanceof SyntaxError)) { + throw error; + } + try { + result = eval(code); + } catch(e) { + if (e instanceof SyntaxError) { + throw error; + } else { + throw e; + } + } + } + return result; + } + + function initSizing(el) { + var sizing = sizingPolicy(el); + if (!sizing) + return; + + var cel = document.getElementById("htmlwidget_container"); + if (!cel) + return; + + if (typeof(sizing.padding) !== "undefined") { + document.body.style.margin = "0"; + document.body.style.padding = paddingToCss(unpackPadding(sizing.padding)); + } + + if (sizing.fill) { + document.body.style.overflow = "hidden"; + document.body.style.width = "100%"; + document.body.style.height = "100%"; + document.documentElement.style.width = "100%"; + document.documentElement.style.height = "100%"; + cel.style.position = "absolute"; + var pad = unpackPadding(sizing.padding); + cel.style.top = pad.top + "px"; + cel.style.right = pad.right + "px"; + cel.style.bottom = pad.bottom + "px"; + cel.style.left = pad.left + "px"; + el.style.width = "100%"; + el.style.height = "100%"; + + return { + getWidth: function() { return cel.getBoundingClientRect().width; }, + getHeight: function() { return cel.getBoundingClientRect().height; } + }; + + } else { + el.style.width = px(sizing.width); + el.style.height = px(sizing.height); + + return { + getWidth: function() { return cel.getBoundingClientRect().width; }, + getHeight: function() { return cel.getBoundingClientRect().height; } + }; + } + } + + // Default implementations for methods + var defaults = { + find: function(scope) { + return querySelectorAll(scope, "." + this.name); + }, + renderError: function(el, err) { + var $el = $(el); + + this.clearError(el); + + // Add all these error classes, as Shiny does + var errClass = "shiny-output-error"; + if (err.type !== null) { + // use the classes of the error condition as CSS class names + errClass = errClass + " " + $.map(asArray(err.type), function(type) { + return errClass + "-" + type; + }).join(" "); + } + errClass = errClass + " htmlwidgets-error"; + + // Is el inline or block? If inline or inline-block, just display:none it + // and add an inline error. + var display = $el.css("display"); + $el.data("restore-display-mode", display); + + if (display === "inline" || display === "inline-block") { + $el.hide(); + if (err.message !== "") { + var errorSpan = $("").addClass(errClass); + errorSpan.text(err.message); + $el.after(errorSpan); + } + } else if (display === "block") { + // If block, add an error just after the el, set visibility:none on the + // el, and position the error to be on top of the el. + // Mark it with a unique ID and CSS class so we can remove it later. + $el.css("visibility", "hidden"); + if (err.message !== "") { + var errorDiv = $("
    ").addClass(errClass).css("position", "absolute") + .css("top", el.offsetTop) + .css("left", el.offsetLeft) + // setting width can push out the page size, forcing otherwise + // unnecessary scrollbars to appear and making it impossible for + // the element to shrink; so use max-width instead + .css("maxWidth", el.offsetWidth) + .css("height", el.offsetHeight); + errorDiv.text(err.message); + $el.after(errorDiv); + + // Really dumb way to keep the size/position of the error in sync with + // the parent element as the window is resized or whatever. + var intId = setInterval(function() { + if (!errorDiv[0].parentElement) { + clearInterval(intId); + return; + } + errorDiv + .css("top", el.offsetTop) + .css("left", el.offsetLeft) + .css("maxWidth", el.offsetWidth) + .css("height", el.offsetHeight); + }, 500); + } + } + }, + clearError: function(el) { + var $el = $(el); + var display = $el.data("restore-display-mode"); + $el.data("restore-display-mode", null); + + if (display === "inline" || display === "inline-block") { + if (display) + $el.css("display", display); + $(el.nextSibling).filter(".htmlwidgets-error").remove(); + } else if (display === "block"){ + $el.css("visibility", "inherit"); + $(el.nextSibling).filter(".htmlwidgets-error").remove(); + } + }, + sizing: {} + }; + + // Called by widget bindings to register a new type of widget. The definition + // object can contain the following properties: + // - name (required) - A string indicating the binding name, which will be + // used by default as the CSS classname to look for. + // - initialize (optional) - A function(el) that will be called once per + // widget element; if a value is returned, it will be passed as the third + // value to renderValue. + // - renderValue (required) - A function(el, data, initValue) that will be + // called with data. Static contexts will cause this to be called once per + // element; Shiny apps will cause this to be called multiple times per + // element, as the data changes. + window.HTMLWidgets.widget = function(definition) { + if (!definition.name) { + throw new Error("Widget must have a name"); + } + if (!definition.type) { + throw new Error("Widget must have a type"); + } + // Currently we only support output widgets + if (definition.type !== "output") { + throw new Error("Unrecognized widget type '" + definition.type + "'"); + } + // TODO: Verify that .name is a valid CSS classname + + // Support new-style instance-bound definitions. Old-style class-bound + // definitions have one widget "object" per widget per type/class of + // widget; the renderValue and resize methods on such widget objects + // take el and instance arguments, because the widget object can't + // store them. New-style instance-bound definitions have one widget + // object per widget instance; the definition that's passed in doesn't + // provide renderValue or resize methods at all, just the single method + // factory(el, width, height) + // which returns an object that has renderValue(x) and resize(w, h). + // This enables a far more natural programming style for the widget + // author, who can store per-instance state using either OO-style + // instance fields or functional-style closure variables (I guess this + // is in contrast to what can only be called C-style pseudo-OO which is + // what we required before). + if (definition.factory) { + definition = createLegacyDefinitionAdapter(definition); + } + + if (!definition.renderValue) { + throw new Error("Widget must have a renderValue function"); + } + + // For static rendering (non-Shiny), use a simple widget registration + // scheme. We also use this scheme for Shiny apps/documents that also + // contain static widgets. + window.HTMLWidgets.widgets = window.HTMLWidgets.widgets || []; + // Merge defaults into the definition; don't mutate the original definition. + var staticBinding = extend({}, defaults, definition); + overrideMethod(staticBinding, "find", function(superfunc) { + return function(scope) { + var results = superfunc(scope); + // Filter out Shiny outputs, we only want the static kind + return filterByClass(results, "html-widget-output", false); + }; + }); + window.HTMLWidgets.widgets.push(staticBinding); + + if (shinyMode) { + // Shiny is running. Register the definition with an output binding. + // The definition itself will not be the output binding, instead + // we will make an output binding object that delegates to the + // definition. This is because we foolishly used the same method + // name (renderValue) for htmlwidgets definition and Shiny bindings + // but they actually have quite different semantics (the Shiny + // bindings receive data that includes lots of metadata that it + // strips off before calling htmlwidgets renderValue). We can't + // just ignore the difference because in some widgets it's helpful + // to call this.renderValue() from inside of resize(), and if + // we're not delegating, then that call will go to the Shiny + // version instead of the htmlwidgets version. + + // Merge defaults with definition, without mutating either. + var bindingDef = extend({}, defaults, definition); + + // This object will be our actual Shiny binding. + var shinyBinding = new Shiny.OutputBinding(); + + // With a few exceptions, we'll want to simply use the bindingDef's + // version of methods if they are available, otherwise fall back to + // Shiny's defaults. NOTE: If Shiny's output bindings gain additional + // methods in the future, and we want them to be overrideable by + // HTMLWidget binding definitions, then we'll need to add them to this + // list. + delegateMethod(shinyBinding, bindingDef, "getId"); + delegateMethod(shinyBinding, bindingDef, "onValueChange"); + delegateMethod(shinyBinding, bindingDef, "onValueError"); + delegateMethod(shinyBinding, bindingDef, "renderError"); + delegateMethod(shinyBinding, bindingDef, "clearError"); + delegateMethod(shinyBinding, bindingDef, "showProgress"); + + // The find, renderValue, and resize are handled differently, because we + // want to actually decorate the behavior of the bindingDef methods. + + shinyBinding.find = function(scope) { + var results = bindingDef.find(scope); + + // Only return elements that are Shiny outputs, not static ones + var dynamicResults = results.filter(".html-widget-output"); + + // It's possible that whatever caused Shiny to think there might be + // new dynamic outputs, also caused there to be new static outputs. + // Since there might be lots of different htmlwidgets bindings, we + // schedule execution for later--no need to staticRender multiple + // times. + if (results.length !== dynamicResults.length) + scheduleStaticRender(); + + return dynamicResults; + }; + + // Wrap renderValue to handle initialization, which unfortunately isn't + // supported natively by Shiny at the time of this writing. + + shinyBinding.renderValue = function(el, data) { + Shiny.renderDependencies(data.deps); + // Resolve strings marked as javascript literals to objects + if (!(data.evals instanceof Array)) data.evals = [data.evals]; + for (var i = 0; data.evals && i < data.evals.length; i++) { + window.HTMLWidgets.evaluateStringMember(data.x, data.evals[i]); + } + if (!bindingDef.renderOnNullValue) { + if (data.x === null) { + el.style.visibility = "hidden"; + return; + } else { + el.style.visibility = "inherit"; + } + } + if (!elementData(el, "initialized")) { + initSizing(el); + + elementData(el, "initialized", true); + if (bindingDef.initialize) { + var rect = el.getBoundingClientRect(); + var result = bindingDef.initialize(el, rect.width, rect.height); + elementData(el, "init_result", result); + } + } + bindingDef.renderValue(el, data.x, elementData(el, "init_result")); + evalAndRun(data.jsHooks.render, elementData(el, "init_result"), [el, data.x]); + }; + + // Only override resize if bindingDef implements it + if (bindingDef.resize) { + shinyBinding.resize = function(el, width, height) { + // Shiny can call resize before initialize/renderValue have been + // called, which doesn't make sense for widgets. + if (elementData(el, "initialized")) { + bindingDef.resize(el, width, height, elementData(el, "init_result")); + } + }; + } + + Shiny.outputBindings.register(shinyBinding, bindingDef.name); + } + }; + + var scheduleStaticRenderTimerId = null; + function scheduleStaticRender() { + if (!scheduleStaticRenderTimerId) { + scheduleStaticRenderTimerId = setTimeout(function() { + scheduleStaticRenderTimerId = null; + window.HTMLWidgets.staticRender(); + }, 1); + } + } + + // Render static widgets after the document finishes loading + // Statically render all elements that are of this widget's class + window.HTMLWidgets.staticRender = function() { + var bindings = window.HTMLWidgets.widgets || []; + forEach(bindings, function(binding) { + var matches = binding.find(document.documentElement); + forEach(matches, function(el) { + var sizeObj = initSizing(el, binding); + + var getSize = function(el) { + if (sizeObj) { + return {w: sizeObj.getWidth(), h: sizeObj.getHeight()} + } else { + var rect = el.getBoundingClientRect(); + return {w: rect.width, h: rect.height} + } + }; + + if (hasClass(el, "html-widget-static-bound")) + return; + el.className = el.className + " html-widget-static-bound"; + + var initResult; + if (binding.initialize) { + var size = getSize(el); + initResult = binding.initialize(el, size.w, size.h); + elementData(el, "init_result", initResult); + } + + if (binding.resize) { + var lastSize = getSize(el); + var resizeHandler = function(e) { + var size = getSize(el); + if (size.w === 0 && size.h === 0) + return; + if (size.w === lastSize.w && size.h === lastSize.h) + return; + lastSize = size; + binding.resize(el, size.w, size.h, initResult); + }; + + on(window, "resize", resizeHandler); + + // This is needed for cases where we're running in a Shiny + // app, but the widget itself is not a Shiny output, but + // rather a simple static widget. One example of this is + // an rmarkdown document that has runtime:shiny and widget + // that isn't in a render function. Shiny only knows to + // call resize handlers for Shiny outputs, not for static + // widgets, so we do it ourselves. + if (window.jQuery) { + window.jQuery(document).on( + "shown.htmlwidgets shown.bs.tab.htmlwidgets shown.bs.collapse.htmlwidgets", + resizeHandler + ); + window.jQuery(document).on( + "hidden.htmlwidgets hidden.bs.tab.htmlwidgets hidden.bs.collapse.htmlwidgets", + resizeHandler + ); + } + + // This is needed for the specific case of ioslides, which + // flips slides between display:none and display:block. + // Ideally we would not have to have ioslide-specific code + // here, but rather have ioslides raise a generic event, + // but the rmarkdown package just went to CRAN so the + // window to getting that fixed may be long. + if (window.addEventListener) { + // It's OK to limit this to window.addEventListener + // browsers because ioslides itself only supports + // such browsers. + on(document, "slideenter", resizeHandler); + on(document, "slideleave", resizeHandler); + } + } + + var scriptData = document.querySelector("script[data-for='" + el.id + "'][type='application/json']"); + if (scriptData) { + var data = JSON.parse(scriptData.textContent || scriptData.text); + // Resolve strings marked as javascript literals to objects + if (!(data.evals instanceof Array)) data.evals = [data.evals]; + for (var k = 0; data.evals && k < data.evals.length; k++) { + window.HTMLWidgets.evaluateStringMember(data.x, data.evals[k]); + } + binding.renderValue(el, data.x, initResult); + evalAndRun(data.jsHooks.render, initResult, [el, data.x]); + } + }); + }); + + invokePostRenderHandlers(); + } + + + function has_jQuery3() { + if (!window.jQuery) { + return false; + } + var $version = window.jQuery.fn.jquery; + var $major_version = parseInt($version.split(".")[0]); + return $major_version >= 3; + } + + /* + / Shiny 1.4 bumped jQuery from 1.x to 3.x which means jQuery's + / on-ready handler (i.e., $(fn)) is now asyncronous (i.e., it now + / really means $(setTimeout(fn)). + / https://jquery.com/upgrade-guide/3.0/#breaking-change-document-ready-handlers-are-now-asynchronous + / + / Since Shiny uses $() to schedule initShiny, shiny>=1.4 calls initShiny + / one tick later than it did before, which means staticRender() is + / called renderValue() earlier than (advanced) widget authors might be expecting. + / https://github.com/rstudio/shiny/issues/2630 + / + / For a concrete example, leaflet has some methods (e.g., updateBounds) + / which reference Shiny methods registered in initShiny (e.g., setInputValue). + / Since leaflet is privy to this life-cycle, it knows to use setTimeout() to + / delay execution of those methods (until Shiny methods are ready) + / https://github.com/rstudio/leaflet/blob/18ec981/javascript/src/index.js#L266-L268 + / + / Ideally widget authors wouldn't need to use this setTimeout() hack that + / leaflet uses to call Shiny methods on a staticRender(). In the long run, + / the logic initShiny should be broken up so that method registration happens + / right away, but binding happens later. + */ + function maybeStaticRenderLater() { + if (shinyMode && has_jQuery3()) { + window.jQuery(window.HTMLWidgets.staticRender); + } else { + window.HTMLWidgets.staticRender(); + } + } + + if (document.addEventListener) { + document.addEventListener("DOMContentLoaded", function() { + document.removeEventListener("DOMContentLoaded", arguments.callee, false); + maybeStaticRenderLater(); + }, false); + } else if (document.attachEvent) { + document.attachEvent("onreadystatechange", function() { + if (document.readyState === "complete") { + document.detachEvent("onreadystatechange", arguments.callee); + maybeStaticRenderLater(); + } + }); + } + + + window.HTMLWidgets.getAttachmentUrl = function(depname, key) { + // If no key, default to the first item + if (typeof(key) === "undefined") + key = 1; + + var link = document.getElementById(depname + "-" + key + "-attachment"); + if (!link) { + throw new Error("Attachment " + depname + "/" + key + " not found in document"); + } + return link.getAttribute("href"); + }; + + window.HTMLWidgets.dataframeToD3 = function(df) { + var names = []; + var length; + for (var name in df) { + if (df.hasOwnProperty(name)) + names.push(name); + if (typeof(df[name]) !== "object" || typeof(df[name].length) === "undefined") { + throw new Error("All fields must be arrays"); + } else if (typeof(length) !== "undefined" && length !== df[name].length) { + throw new Error("All fields must be arrays of the same length"); + } + length = df[name].length; + } + var results = []; + var item; + for (var row = 0; row < length; row++) { + item = {}; + for (var col = 0; col < names.length; col++) { + item[names[col]] = df[names[col]][row]; + } + results.push(item); + } + return results; + }; + + window.HTMLWidgets.transposeArray2D = function(array) { + if (array.length === 0) return array; + var newArray = array[0].map(function(col, i) { + return array.map(function(row) { + return row[i] + }) + }); + return newArray; + }; + // Split value at splitChar, but allow splitChar to be escaped + // using escapeChar. Any other characters escaped by escapeChar + // will be included as usual (including escapeChar itself). + function splitWithEscape(value, splitChar, escapeChar) { + var results = []; + var escapeMode = false; + var currentResult = ""; + for (var pos = 0; pos < value.length; pos++) { + if (!escapeMode) { + if (value[pos] === splitChar) { + results.push(currentResult); + currentResult = ""; + } else if (value[pos] === escapeChar) { + escapeMode = true; + } else { + currentResult += value[pos]; + } + } else { + currentResult += value[pos]; + escapeMode = false; + } + } + if (currentResult !== "") { + results.push(currentResult); + } + return results; + } + // Function authored by Yihui/JJ Allaire + window.HTMLWidgets.evaluateStringMember = function(o, member) { + var parts = splitWithEscape(member, '.', '\\'); + for (var i = 0, l = parts.length; i < l; i++) { + var part = parts[i]; + // part may be a character or 'numeric' member name + if (o !== null && typeof o === "object" && part in o) { + if (i == (l - 1)) { // if we are at the end of the line then evalulate + if (typeof o[part] === "string") + o[part] = tryEval(o[part]); + } else { // otherwise continue to next embedded object + o = o[part]; + } + } + } + }; + + // Retrieve the HTMLWidget instance (i.e. the return value of an + // HTMLWidget binding's initialize() or factory() function) + // associated with an element, or null if none. + window.HTMLWidgets.getInstance = function(el) { + return elementData(el, "init_result"); + }; + + // Finds the first element in the scope that matches the selector, + // and returns the HTMLWidget instance (i.e. the return value of + // an HTMLWidget binding's initialize() or factory() function) + // associated with that element, if any. If no element matches the + // selector, or the first matching element has no HTMLWidget + // instance associated with it, then null is returned. + // + // The scope argument is optional, and defaults to window.document. + window.HTMLWidgets.find = function(scope, selector) { + if (arguments.length == 1) { + selector = scope; + scope = document; + } + + var el = scope.querySelector(selector); + if (el === null) { + return null; + } else { + return window.HTMLWidgets.getInstance(el); + } + }; + + // Finds all elements in the scope that match the selector, and + // returns the HTMLWidget instances (i.e. the return values of + // an HTMLWidget binding's initialize() or factory() function) + // associated with the elements, in an array. If elements that + // match the selector don't have an associated HTMLWidget + // instance, the returned array will contain nulls. + // + // The scope argument is optional, and defaults to window.document. + window.HTMLWidgets.findAll = function(scope, selector) { + if (arguments.length == 1) { + selector = scope; + scope = document; + } + + var nodes = scope.querySelectorAll(selector); + var results = []; + for (var i = 0; i < nodes.length; i++) { + results.push(window.HTMLWidgets.getInstance(nodes[i])); + } + return results; + }; + + var postRenderHandlers = []; + function invokePostRenderHandlers() { + while (postRenderHandlers.length) { + var handler = postRenderHandlers.shift(); + if (handler) { + handler(); + } + } + } + + // Register the given callback function to be invoked after the + // next time static widgets are rendered. + window.HTMLWidgets.addPostRenderHandler = function(callback) { + postRenderHandlers.push(callback); + }; + + // Takes a new-style instance-bound definition, and returns an + // old-style class-bound definition. This saves us from having + // to rewrite all the logic in this file to accomodate both + // types of definitions. + function createLegacyDefinitionAdapter(defn) { + var result = { + name: defn.name, + type: defn.type, + initialize: function(el, width, height) { + return defn.factory(el, width, height); + }, + renderValue: function(el, x, instance) { + return instance.renderValue(x); + }, + resize: function(el, width, height, instance) { + return instance.resize(width, height); + } + }; + + if (defn.find) + result.find = defn.find; + if (defn.renderError) + result.renderError = defn.renderError; + if (defn.clearError) + result.clearError = defn.clearError; + + return result; + } +})(); diff --git a/docs/site_libs/navigation-1.1/codefolding.js b/docs/site_libs/navigation-1.1/codefolding.js index 97fffb2..66e09df 100644 --- a/docs/site_libs/navigation-1.1/codefolding.js +++ b/docs/site_libs/navigation-1.1/codefolding.js @@ -31,7 +31,7 @@ window.initializeCodeFolding = function(show) { $(this).detach().appendTo(div); // add a show code button right above - var showCodeText = $('' + (showThis ? 'Hide' : 'Code') + ''); + var showCodeText = $('' + (showThis ? 'Hide' : 'Show') + ''); var showCodeButton = $(''); showCodeButton.append(showCodeText); showCodeButton @@ -57,7 +57,7 @@ window.initializeCodeFolding = function(show) { // * Change text // * add a class for intermediate states styling div.on('hide.bs.collapse', function () { - showCodeText.text('Code'); + showCodeText.text('Show'); showCodeButton.addClass('btn-collapsing'); }); div.on('hidden.bs.collapse', function () { diff --git a/docs/site_libs/visNetwork-binding-2.1.2/visNetwork.js b/docs/site_libs/visNetwork-binding-2.1.2/visNetwork.js new file mode 100644 index 0000000..4099287 --- /dev/null +++ b/docs/site_libs/visNetwork-binding-2.1.2/visNetwork.js @@ -0,0 +1,4371 @@ +// Production steps of ECMA-262, Edition 6, 22.1.2.1 +// Référence : https://people.mozilla.org/~jorendorff/es6-draft.html#sec-array.from +if (!Array.from) { + Array.from = (function () { + var toStr = Object.prototype.toString; + var isCallable = function (fn) { + return typeof fn === 'function' || toStr.call(fn) === '[object Function]'; + }; + var toInteger = function (value) { + var number = Number(value); + if (isNaN(number)) { return 0; } + if (number === 0 || !isFinite(number)) { return number; } + return (number > 0 ? 1 : -1) * Math.floor(Math.abs(number)); + }; + var maxSafeInteger = Math.pow(2, 53) - 1; + var toLength = function (value) { + var len = toInteger(value); + return Math.min(Math.max(len, 0), maxSafeInteger); + }; + + // La propriété length de la méthode vaut 1. + return function from(arrayLike/*, mapFn, thisArg */) { + // 1. Soit C, la valeur this + var C = this; + + // 2. Soit items le ToObject(arrayLike). + var items = Object(arrayLike); + + // 3. ReturnIfAbrupt(items). + if (arrayLike == null) { + throw new TypeError("Array.from doit utiliser un objet semblable à un tableau - null ou undefined ne peuvent pas être utilisés"); + } + + // 4. Si mapfn est undefined, le mapping sera false. + var mapFn = arguments.length > 1 ? arguments[1] : void undefined; + var T; + if (typeof mapFn !== 'undefined') { + // 5. sinon + // 5. a. si IsCallable(mapfn) est false, on lève une TypeError. + if (!isCallable(mapFn)) { + throw new TypeError('Array.from: lorsqu il est utilisé le deuxième argument doit être une fonction'); + } + + // 5. b. si thisArg a été fourni, T sera thisArg ; sinon T sera undefined. + if (arguments.length > 2) { + T = arguments[2]; + } + } + + // 10. Soit lenValue pour Get(items, "length"). + // 11. Soit len pour ToLength(lenValue). + var len = toLength(items.length); + + // 13. Si IsConstructor(C) vaut true, alors + // 13. a. Soit A le résultat de l'appel à la méthode interne [[Construct]] avec une liste en argument qui contient l'élément len. + // 14. a. Sinon, soit A le résultat de ArrayCreate(len). + var A = isCallable(C) ? Object(new C(len)) : new Array(len); + + // 16. Soit k égal à 0. + var k = 0; // 17. On répète tant que k < len… + var kValue; + while (k < len) { + kValue = items[k]; + if (mapFn) { + A[k] = typeof T === 'undefined' ? mapFn(kValue, k) : mapFn.call(T, kValue, k); + } else { + A[k] = kValue; + } + k += 1; + } + // 18. Soit putStatus égal à Put(A, "length", len, true). + A.length = len; // 20. On renvoie A. + return A; + }; + }()); +}; + + +// https://tc39.github.io/ecma262/#sec-array.prototype.includes +if (!Array.prototype.includes) { + Object.defineProperty(Array.prototype, 'includes', { + value: function(searchElement, fromIndex) { + + if (this == null) { + throw new TypeError('"this" est nul ou non défini'); + } + + // 1. Soit o égal à ? Object(cette valeur). + var o = Object(this); + + // 2. Soit len égal à ? Length(? Get(o, "length")). + var len = o.length >>> 0; + + // 3. Si len = 0, renvoyer "false". + if (len === 0) { + return false; + } + + // 4. Soit n = ? ToInteger(fromIndex). + // Pour la cohérence du code, on gardera le nom anglais "fromIndex" pour la variable auparavant appelée "indiceDépart" + // (Si fromIndex n'est pas défini, cette étape produit la valeur 0.) + var n = fromIndex | 0; + + // 5. Si n ≥ 0, + // a. Alors k = n. + // 6. Sinon, si n < 0, + // a. Alors k = len + n. + // b. Si k < 0, alors k = 0. + var k = Math.max(n >= 0 ? n : len - Math.abs(n), 0); + + function sameValueZero(x, y) { + return x === y || (typeof x === 'number' && typeof y === 'number' && isNaN(x) && isNaN(y)); + } + + // 7. Répéter tant que k < len + while (k < len) { + // a. Soit elementK le résultat de ? Get(O, ! ToString(k)). + // b. Si SameValueZero(searchElement, elementK) est vrai, renvoyer "true". + if (sameValueZero(o[k], searchElement)) { + return true; + } + // c. Augmenter la valeur de k de 1. + k++; + } + + // 8. Renvoyer "false" + return false; + } + }); +} + +// Add shim for Function.prototype.bind() from: +// https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Function/bind#Compatibility +// for fix some RStudio viewer bug (Desktop / windows) +if (!Function.prototype.bind) { + Function.prototype.bind = function (oThis) { + if (typeof this !== "function") { + // closest thing possible to the ECMAScript 5 internal IsCallable function + throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable"); + } + + var aArgs = Array.prototype.slice.call(arguments, 1), + fToBind = this, + fNOP = function () {}, + fBound = function () { + return fToBind.apply(this instanceof fNOP && oThis + ? this + : oThis, + aArgs.concat(Array.prototype.slice.call(arguments))); + }; + + fNOP.prototype = this.prototype; + fBound.prototype = new fNOP(); + + return fBound; + }; +} + +//-------------------------------------------- +// functions to reset edges after hard to read +//-------------------------------------------- + +// for edges +function edgeAsHardToRead(edge, hideColor1, hideColor2, network, type){ + //console.info("edgeAsHardToRead") + + if(type === "edge"){ + //console.info("edge") + //console.info(edge.id) + + // saving color information (if we have) + if (edge.hiddenColor === undefined && edge.color !== hideColor1 && edge.color !== hideColor2) { + edge.hiddenColor = edge.color; + } + // set "hard to read" color + edge.color = hideColor1; + + // reset and save label + if (edge.hiddenLabel === undefined) { + edge.hiddenLabel = edge.label; + edge.label = undefined; + } + edge.isHardToRead = true; + } else { + //console.info("cluster") + //console.info(edge.id) + //console.info(edge) + // saving color information (if we have) + if (edge.hiddenColor === undefined && edge.color !== hideColor1 && edge.color !== hideColor2) { + //network.clustering.updateEdge(edge.id, {hiddenColor : edge.color}); + edge.hiddenColor = edge.color; + } + // set "hard to read" color + edge.color = hideColor1; + //network.clustering.updateEdge(edge.id, {color : hideColor1}); + //edge.color = hideColor1; + // reset and save label + if (edge.hiddenLabel === undefined) { + edge.hiddenLabel = edge.label; + edge.label = undefined; + } + edge.isHardToRead = true; + } + +} + +function resetOneEdge(edge, hideColor1, hideColor2, type){ + + /*console.info("resetOneEdge") + console.info(type) + console.info(edge.id) + console.info(edge) + console.info("edge.hiddenColor") + console.info(edge.hiddenColor)*/ + + var treat_egde = false; + if(type === "cluster"){ + if(edge.isHardToRead !== undefined){ // we have to reset this node + if(edge.isHardToRead){ + treat_egde = true; + } else if(edge.isHardToRead === false && (edge.color.color === hideColor1 || edge.color.color === hideColor2)){ + treat_egde = true; + } + } else if(edge.color.color === hideColor1 || edge.color.color === hideColor2){ + treat_egde = true; + } + + if(treat_egde){ + // get back color + if (edge.hiddenColor !== undefined) { + edge.color = edge.hiddenColor; + edge.hiddenColor = undefined; + }else{ + delete edge.color; + } + + // finally, get back label + if (edge.hiddenLabel !== undefined) { + edge.label = edge.hiddenLabel; + edge.hiddenLabel = undefined; + } + edge.isHardToRead = false; + } + } else { + // get back color + if (edge.hiddenColor !== undefined) { + edge.color = edge.hiddenColor; + edge.hiddenColor = undefined; + }else{ + edge.color = null; + } + + // finally, get back label + if (edge.hiddenLabel !== undefined) { + edge.label = edge.hiddenLabel; + edge.hiddenLabel = undefined; + } + edge.isHardToRead = false; + } +} + +function resetAllEdges(edges, hideColor1, hideColor2, network){ + + var edgesToReset = edges.get({ + fields: ['id', 'color', 'hiddenColor', 'label', 'hiddenLabel'], + filter: function (item) { + return item.isHardToRead === true; + }, + returnType :'Array' + }); + + var is_cluster_edges = false; + var edges_in_clusters; + if(network !== undefined){ + edges_in_clusters = network.body.modules.clustering.clusteredEdges; + if(Object.keys(edges_in_clusters).length > 0){ + is_cluster_edges = true; + edges_in_clusters = Object.keys(edges_in_clusters); + } else { + edges_in_clusters = []; + } + } + + var treat_edges_in_clusters = []; + // all edges get their own color and their label back + for (var i = 0; i < edgesToReset.length; i++) { + resetOneEdge(edgesToReset[i], hideColor1, hideColor2,type = "edge"); + if(is_cluster_edges){ + if(indexOf.call(edges_in_clusters, edgesToReset[i].id, true) > -1){ + var tmp_cluster_id = network.clustering.getClusteredEdges(edgesToReset[i].id); + if(tmp_cluster_id.length > 1){ + tmp_cluster_id = tmp_cluster_id[0]; + treat_edges_in_clusters.push(tmp_cluster_id); + resetOneEdge(network.body.edges[tmp_cluster_id].options, hideColor1, hideColor2, type = "cluster"); + } + } + } + } + + // some misunderstood bug on some cluster edges... so have a (bad) fix... + var edges_in_clusters_ctrl = edges_in_clusters.filter(function(word,index){ + if(word.match(/^clusterEdge/i)){ + if(indexOf.call(treat_edges_in_clusters, word, true) === -1){ + return true; + } else { + return false; + } + + }else{ + return false; + } + }); + + if(is_cluster_edges){ + if(edges_in_clusters_ctrl.length > 0){ + for (var j = 0; j < edges_in_clusters_ctrl.length; j++) { + if(network.body.edges[edges_in_clusters_ctrl[j]] !== undefined){ + resetOneEdge(network.body.edges[edges_in_clusters_ctrl[j]].options, hideColor1, hideColor2, type = "cluster"); + } + } + } + } + + edges.update(edgesToReset); +} + +//-------------------------------------------- +// functions to reset nodes after hard to read +//-------------------------------------------- + +// for classic node +function simpleResetNode(node, type){ + if(type === "node"){ + // get back color + if (node.hiddenColor !== undefined) { + node.color = node.hiddenColor; + node.hiddenColor = undefined; + }else{ + if(node.group !== undefined){ + node.color = undefined; + } else { + node.color = null; + } + } + } else { + if (Object.keys(node.options.hiddenColor).length > 2){ + node.setOptions({color : node.options.hiddenColor, hiddenColor : undefined}); + }else{ + if(node.options.group !== undefined){ + node.setOptions({color : undefined}); + } else { + node.setOptions({color : null}); + } + } + } +} + +// for icon node +function simpleIconResetNode(node, type){ + if(type === "node"){ + // icon color + node.icon.color = node.hiddenColor; + node.hiddenColor = undefined; + // get back color + if (node.hiddenColorForLabel !== undefined) { + node.color = node.hiddenColorForLabel; + node.hiddenColorForLabel = undefined; + }else{ + if(node.group !== undefined){ + node.color = undefined; + } else { + node.color = null; + } + } + } else { + node.setOptions({icon : { color : node.options.hiddenColor}, hiddenColor : undefined}); + if (node.options.hiddenColorForLabel !== undefined) { + node.setOptions({color : node.options.hiddenColorForLabel, hiddenColorForLabel : undefined}); + }else{ + if(node.options.group !== undefined){ + node.setOptions({color : undefined}); + } else { + node.setOptions({color : null}); + } + } + } +} + +// for image node +function simpleImageResetNode(node, imageType, type){ + if(type === "node"){ + // get back color + if (node.hiddenColor !== undefined) { + node.color = node.hiddenColor; + node.hiddenColor = undefined; + }else{ + if(node.group !== undefined){ + node.color = undefined; + } else { + node.color = null; + } + } + // and set shape as image/circularImage + node.shape = imageType; + } else { + if (Object.keys(node.options.hiddenColor).length > 2) { + node.setOptions({color : node.options.hiddenColor, hiddenColor : undefined}); + }else{ + if(node.options.group !== undefined){ + node.setOptions({color : undefined}); + } else { + node.setOptions({color : null}); + } + } + node.setOptions({shape : imageType}); + } +} + +// Global function to reset one cluster +function resetOneCluster(node, options, network){ + if(node !== undefined){ + if(node.options.isHardToRead !== undefined){ // we have to reset this node + if(node.options.isHardToRead){ + var final_shape; + var shape_group = false; + var is_group = false; + // have a group information & a shape defined in group ? + if(node.options.group !== undefined && options.groups !== undefined){ + if(options.groups[node.options.group] !== undefined){ + is_group = true; + if(options.groups[node.options.group].shape !== undefined){ + shape_group = true; + } + } + } + // have a global shape in nodes options ? + var shape_options = false; + if(options.nodes !== undefined){ + if(options.nodes.shape !== undefined){ + shape_options = true; + } + } + // set final shape (individual > group > global) + if(node.options.hiddenImage !== undefined){ + final_shape = node.options.hiddenImage; + } else if(node.options.shape !== undefined){ + final_shape = node.options.shape; + } else if(shape_group){ + final_shape = options.groups[node.options.group].shape; + } else if(shape_options){ + final_shape = options.nodes.shape; + } + + node.setOptions({bodyHiddenColor : network.body.nodes[node.id].options.color}); + // and call good reset function + if(final_shape === "icon"){ + simpleIconResetNode(node, "cluster"); + } else if(final_shape === "image"){ + simpleImageResetNode(node, "image", "cluster"); + } else if(final_shape === "circularImage"){ + simpleImageResetNode(node, "circularImage", "cluster"); + } else { + simpleResetNode(node, "cluster"); + } + // finally, get back label + if (node.options.hiddenLabel !== undefined) { + node.setOptions({label : node.options.hiddenLabel, hiddenLabel : undefined}); + } + node.options.isHardToRead = false; + } + } + } +} + +// Global function to reset one node +function resetOneNode(node, options, network){ + if(node !== undefined){ + if(node.isHardToRead !== undefined){ // we have to reset this node + if(node.isHardToRead){ + var final_shape; + var shape_group = false; + var is_group = false; + // have a group information & a shape defined in group ? + if(node.group !== undefined && options.groups !== undefined){ + if(options.groups[node.group] !== undefined){ + is_group = true; + if(options.groups[node.group].shape !== undefined){ + shape_group = true; + } + } + } + // have a global shape in nodes options ? + var shape_options = false; + if(options.nodes !== undefined){ + if(options.nodes.shape !== undefined){ + shape_options = true; + } + } + // set final shape (individual > group > global) + if(node.hiddenImage !== undefined){ + final_shape = node.hiddenImage; + } else if(node.shape !== undefined){ + final_shape = node.shape; + } else if(shape_group){ + final_shape = options.groups[node.group].shape; + } else if(shape_options){ + final_shape = options.nodes.shape; + } + + // reset body information + network.body.nodes[node.id].options.color = node.bodyHiddenColor; + + // and call good reset function + if(final_shape === "icon"){ + simpleIconResetNode(node, "node"); + } else if(final_shape === "image"){ + simpleImageResetNode(node, "image", "node"); + } else if(final_shape === "circularImage"){ + simpleImageResetNode(node, "circularImage", "node"); + } else { + simpleResetNode(node, "node"); + } + // finally, get back label + if (node.hiddenLabel !== undefined) { + node.label = node.hiddenLabel; + node.hiddenLabel = undefined; + } + node.isHardToRead = false; + } + } + } +} + +// Global function to reset all node +function resetAllNodes(nodes, update, options, network, all){ + + if(all === false){ + var nodesToReset = nodes.get({ + filter: function (item) { + return item.isHardToRead === true; + }, + returnType :'Array' + }); + } else { + var nodesToReset = nodes.get({returnType :'Array'}); + } + + var have_cluster_nodes = false; + var nodes_in_clusters; + if(network !== undefined){ + nodes_in_clusters = network.body.modules.clustering.clusteredNodes; + if(Object.keys(nodes_in_clusters).length > 0){ + have_cluster_nodes = true; + nodes_in_clusters = Object.keys(nodes_in_clusters); + } else { + nodes_in_clusters = []; + } + } + + for (var i = 0; i < nodesToReset.length; i++) { + resetOneNode(nodesToReset[i], options, network, type = "node"); + // reset coordinates + nodesToReset[i].x = undefined; + nodesToReset[i].y = undefined; + if(have_cluster_nodes){ + if(indexOf.call(nodes_in_clusters, nodesToReset[i].id, true) > -1){ + var tmp_cluster_id = network.clustering.findNode(nodesToReset[i].id); + // in case of multiple cluster... + for(var j = 0; j < (tmp_cluster_id.length-1); j++) { + resetOneCluster(network.body.nodes[tmp_cluster_id[j]], options, network); + } + } + } + } + if(update){ + nodes.update(nodesToReset); + } +} + +//-------------------------------------------- +// functions to set nodes as hard to read +//-------------------------------------------- + +// for classic node +function simpleNodeAsHardToRead(node, hideColor1, hideColor2, type){ + + + // classic nodes + if(type === "node"){ + // saving color information (if we have) + if (node.hiddenColor === undefined && node.color !== hideColor1 && node.color !== hideColor2) { + node.hiddenColor = node.color; + } + + // set "hard to read" color + node.color = hideColor1; + // reset and save label + if (node.hiddenLabel === undefined) { + node.hiddenLabel = node.label; + node.label = undefined; + } + // cluster + } else { + // saving color information (if we have) + if (node.options.hiddenColor === undefined && node.options.color !== hideColor1 && node.options.color !== hideColor2) { + node.setOptions({hiddenColor : node.options.color}); + } + // set "hard to read" color + node.setOptions({color : hideColor1}); + // reset and save label + if (node.options.hiddenLabel === undefined) { + node.setOptions({hiddenLabel : node.options.label}); + node.setOptions({label : undefined}); + } + } +} + +// for icon node +function iconsNodeAsHardToRead(node, hideColor1, hideColor2, icon_color, type){ + // classic nodes + if(type === "node"){ + // individual information + if(node.icon !== undefined && node.icon !== null && node.icon !== {}){ + node.iconDefined = true; + } else { // information in group : have to as individual + node.icon = {}; + node.iconDefined = false; + } + // set "hard to read" color + node.icon.color = hideColor1; + node.hiddenColor = icon_color; + // for edges....saving color information (if we have) + if (node.hiddenColorForLabel === undefined && node.color !== hideColor1 && node.color !== hideColor2) { + node.hiddenColorForLabel = node.color; + } + // set "hard to read" color + node.color = hideColor1; + // reset and save label + if (node.hiddenLabel === undefined) { + node.hiddenLabel = node.label; + node.label = undefined; + } + } else { + // individual information + if(node.options.icon !== undefined && node.options.icon !== null && node.options.icon !== {}){ + node.setOptions({iconDefined : true}); + } else { // information in group : have to as individual + node.setOptions({iconDefined : false, icon:{}}); + } + // set "hard to read" color + node.setOptions({hiddenColor : icon_color, icon:{color : hideColor1}}); + // for edges....saving color information (if we have) + if (node.options.hiddenColorForLabel === undefined && node.options.color !== hideColor1 && node.options.color !== hideColor2) { + node.setOptions({hiddenColorForLabel : node.options.color}); + } + // set "hard to read" color + node.setOptions({color : hideColor1}); + // reset and save label + if (node.options.hiddenLabel === undefined) { + node.setOptions({hiddenLabel : node.options.label, label : undefined}); + } + } +} + +// for image node +function imageNodeAsHardToRead(node, imageType, hideColor1, hideColor2, type){ + // classic nodes + if(type === "node"){ + // saving color information (if we have) + if (node.hiddenColor === undefined && node.color !== hideColor1 && node.color !== hideColor2) { + node.hiddenColor = node.color; + } + // set "hard to read" color + node.color = hideColor1; + // reset and save label + if (node.hiddenLabel === undefined) { + node.hiddenLabel = node.label; + node.label = undefined; + } + // keep shape information, and set a new + if(imageType === "image"){ + node.hiddenImage = imageType; + node.shape = "square"; + }else if(imageType === "circularImage"){ + node.hiddenImage = imageType; + node.shape = "dot"; + } + } else { + // saving color information (if we have) + if (node.options.hiddenColor === undefined && node.options.color !== hideColor1 && node.options.color !== hideColor2) { + node.setOptions({hiddenColor : node.options.color}); + } + // set "hard to read" color + node.setOptions({color : hideColor1}); + // reset and save label + if (node.options.hiddenLabel === undefined) { + node.setOptions({hiddenLabel : node.options.label, label : undefined}); + } + if(imageType === "image"){ + node.setOptions({hiddenImage : "image", shape : "square"}); + } else if(imageType === "circularImage"){ + node.setOptions({hiddenImage : "circularImage", shape : "dot"}); + } + node.hiddenImage = imageType; + } +} + +// Global function to set one node as hard to read +function nodeAsHardToRead(node, options, hideColor1, hideColor2, network, type){ + var final_shape; + var shape_group = false; + var is_group = false; + + + if(node.isHardToRead === false || node.isHardToRead === undefined){ + + // have a group information & a shape defined in group ? + if(node.group !== undefined && options.groups !== undefined){ + if(options.groups[node.group] !== undefined){ + is_group = true; + if(options.groups[node.group].shape !== undefined){ + shape_group = true; + } + } + } + // have a group information & a shape defined in group ? + var shape_options = false; + if(options.nodes !== undefined){ + if(options.nodes.shape !== undefined){ + shape_options = true; + } + } + // set final shape (individual > group > global) + if(node.shape !== undefined){ + final_shape = node.shape; + } else if(shape_group){ + final_shape = options.groups[node.group].shape; + } else if(shape_options){ + final_shape = options.nodes.shape; + } + + // information save in body nodes + if(type === "node"){ + node.bodyHiddenColor = clone(network.body.nodes[node.id].options.color); + } else { + node.setOptions({bodyHiddenColor : clone(network.body.nodes[node.id].options.color)}); + } + + // and call good function + if(final_shape === "icon"){ + // find color for icon + var icon_color = "#2B7CE9"; + var find_color = false; + // in nodes ? + if(node.icon !== undefined){ + if(node.icon.color !== undefined){ + icon_color = node.icon.color; + find_color = true; + } + } + // or in group ? + if(find_color === false && is_group && options.groups !== undefined && options.groups[node.group].icon !== undefined){ + if(options.groups[node.group].icon.color !== undefined){ + icon_color = options.groups[node.group].icon.color; + find_color = true; + } + } + // in global node ? + if(find_color === false && options.nodes.icon !== undefined){ + if(options.nodes.icon.color !== undefined){ + icon_color = options.nodes.icon.color; + } + } + iconsNodeAsHardToRead(node, hideColor1, hideColor2, icon_color, type); + } else if(final_shape === "image"){ + imageNodeAsHardToRead(node, "image", hideColor1, hideColor2, type); + } else if(final_shape === "circularImage"){ + imageNodeAsHardToRead(node, "circularImage", hideColor1, hideColor2, type); + } else { + simpleNodeAsHardToRead(node, hideColor1, hideColor2, type); + } + + // finally set isHardToRead + if(type === "node"){ + node.isHardToRead = true; + } else { + node.setOptions({isHardToRead : true}); + } + // special case of just to label + } else if(node.isHardToRead === true && node.label !== undefined){ + if(type === "node"){ + node.hiddenLabel = node.label; + node.label = undefined; + } else { + node.setOptions({hiddenLabel : node.options.label, label : undefined}) + } + } +} + +//---------------------------------------------------------------- +// Revrite HTMLWidgets.dataframeToD3() for passing custom +// properties directly in data.frame (color.background) for example +//---------------------------------------------------------------- +function visNetworkdataframeToD3(df, type) { + + // variables we have specially to control + /*var nodesctrl = ["color", "fixed", "font", "icon", "shadow", "scaling", "shapeProperties", "chosen", "heightConstraint", "image", "margin", "widthConstraint"]; + var edgesctrl = ["color", "font", "arrows", "shadow", "smooth", "scaling", "chosen", "widthConstraint"];*/ + + var names = []; + var colnames = []; + var length; + var toctrl; + var ctrlname; + + for (var name in df) { + if (df.hasOwnProperty(name)) + colnames.push(name); + ctrlname = name.split("."); + if(ctrlname.length === 1){ + names.push( new Array(name)); + } else { + /*if(type === "nodes"){ + toctrl = indexOf.call(nodesctrl, ctrlname[0], true); + } else if(type === "edges"){ + toctrl = indexOf.call(edgesctrl, ctrlname[0], true); + } + if(toctrl > -1){*/ + names.push(ctrlname); + /*} else { + names.push(new Array(name)); + }*/ + } + if (typeof(df[name]) !== "object" || typeof(df[name].length) === "undefined") { + throw new Error("All fields must be arrays"); + } else if (typeof(length) !== "undefined" && length !== df[name].length) { + throw new Error("All fields must be arrays of the same length"); + } + length = df[name].length; + } + + var results = []; + var item; + for (var row = 0; row < length; row++) { + item = {}; + for (var col = 0; col < names.length; col++) { + if(df[colnames[col]][row] !== null){ + if(names[col].length === 1){ + if(names[col][0] === "dashes"){ + item[names[col]] = eval(df[colnames[col]][row]); + } else { + item[names[col]] = df[colnames[col]][row]; + } + } else if(names[col].length === 2){ + if(item[names[col][0]] === undefined){ + item[names[col][0]] = {}; + } + if(names[col][0] === "icon" && names[col][1] === "code"){ + item[names[col][0]][names[col][1]] = JSON.parse( '"'+'\\u' + df[colnames[col]][row] + '"'); + } else if(names[col][0] === "icon" && names[col][1] === "color"){ + item.color = df[colnames[col]][row]; + item[names[col][0]][names[col][1]] = df[colnames[col]][row]; + } else if(names[col][0] === "icon" && names[col][1] === "face"){ + if(df[colnames[col]][row] === "'Font Awesome 5 Free'"){ + item.icon.weight = "bold"; + } + item[names[col][0]][names[col][1]] = df[colnames[col]][row]; + } else{ + item[names[col][0]][names[col][1]] = df[colnames[col]][row]; + } + } else if(names[col].length === 3){ + if(item[names[col][0]] === undefined){ + item[names[col][0]] = {}; + } + if(item[names[col][0]][names[col][1]] === undefined){ + item[names[col][0]][names[col][1]] = {}; + } + item[names[col][0]][names[col][1]][names[col][2]] = df[colnames[col]][row]; + } else if(names[col].length === 4){ + if(item[names[col][0]] === undefined){ + item[names[col][0]] = {}; + } + if(item[names[col][0]][names[col][1]] === undefined){ + item[names[col][0]][names[col][1]] = {}; + } + if(item[names[col][0]][names[col][1]][names[col][2]] === undefined){ + item[names[col][0]][names[col][1]][names[col][2]] = {}; + } + item[names[col][0]][names[col][1]][names[col][2]][names[col][3]] = df[colnames[col]][row]; + } + } + } + results.push(item); + } + return results; +} + +//---------------------------------------------------------------- +// Some utils functions +//---------------------------------------------------------------- + +//unique element in array +function uniqueArray(arr, exclude_cluster, network) { + var a = []; + for (var i=0, l=arr.length; i -1; + }, + returnType :'Array' + }); + + currentConnectedToNodes = []; + var currentlength = otherLevelNodes.length; + for (j = 0; j < connectedToNodes.length; j++) { + otherLevelNodes = uniqueArray(otherLevelNodes.concat(connectedToNodes[j].to), false, network); + currentConnectedToNodes = uniqueArray(currentConnectedToNodes.concat(connectedToNodes[j].to), false, network); + } + if (otherLevelNodes.length === currentlength) { break; } + } + + var finalFirstLevelNodes = []; + for (j = 0; j < firstLevelNodes.length; j++) { + var findnode = network.clustering.findNode(firstLevelNodes[j]) + if(findnode.length === 1){ + finalFirstLevelNodes = finalFirstLevelNodes.concat(firstLevelNodes[j]); + } else { + finalFirstLevelNodes = finalFirstLevelNodes.concat(findnode[0]); + } + } + + var finalClusterNodes = []; + for (j = 0; j < otherLevelNodes.length; j++) { + var findnode = network.clustering.findNode(otherLevelNodes[j]) + if(findnode.length === 1){ + finalClusterNodes = finalClusterNodes.concat(otherLevelNodes[j]); + } else { + finalClusterNodes = finalClusterNodes.concat(findnode[0]); + } + } + + if(set_position){ + network.storePositions(); + } + + var clusterOptions = { + joinCondition: function (nodesOptions) { + return nodesOptions.id === selectedNode || indexOf.call(finalFirstLevelNodes, nodesOptions.id, true) > -1 || + indexOf.call(finalClusterNodes, nodesOptions.id, true) > -1; + }, + processProperties: function(clusterOptions, childNodes) { + var click_node = network.body.data.nodes.get({ + filter: function (item) { + return item.id == selectedNode; + }, + returnType :'Array' + }); + + var is_hard_to_read = false; + if(click_node[0].isHardToRead !== undefined){ + is_hard_to_read = click_node[0].isHardToRead; + } + + for (var i in click_node[0]) { + if(i !== "id" && i !== "isHardToRead"){ + if(i === "label" && is_hard_to_read){ + clusterOptions[i]= click_node[0]["hiddenLabel"]; + } else if(i === "color" && is_hard_to_read) { + clusterOptions[i]= click_node[0]["hiddenColor"]; + } else { + clusterOptions[i]= click_node[0][i]; + } + } + } + + // gestion des tree + if(treeParams !== undefined){ + if(treeParams.updateShape){ + clusterOptions.label = clusterOptions.labelClust + clusterOptions.color = clusterOptions.colorClust + clusterOptions.shape = treeParams.shapeY + } + } + + if(clusterOptions.label !== undefined){ + clusterOptions.label = clusterOptions.label + " " + labelSuffix; + } else { + clusterOptions.label = labelSuffix; + } + + if(clusterOptions.borderWidth !== undefined){ + clusterOptions.borderWidth = clusterOptions.borderWidth * 3; + } else { + clusterOptions.borderWidth = 3; + } + + if(set_position){ + if(click_node[0].x !== undefined){ + clusterOptions.x = click_node[0].x; + } + if(click_node[0].y !== undefined){ + clusterOptions.y = click_node[0].y; + } + } + + if(clusterParams !== undefined){ + for (var j in clusterParams) { + clusterOptions[j]= clusterParams[j]; + } + } + + return clusterOptions; + }, + clusterNodeProperties: { + allowSingleNodeCluster: false + } + } + network.cluster(clusterOptions); + } + } + + } + if(resetHighlight){ + document.getElementById("nodeSelect"+elid).value = ""; + document.getElementById("nodeSelect"+elid).onchange(); + } + if(fit){ + network.fit(); + } + } +}; + +function uncollapsedNetwork(nodes, fit, resetHighlight, keepCoord, network, elid) { + var selectedNode; + var j; + var arr_nodes = []; + var cluster_node; + + var nodes_in_clusters = network.body.modules.clustering.clusteredNodes; + if(Object.keys(nodes_in_clusters).length > 0){ + nodes_in_clusters = Object.keys(nodes_in_clusters); + } else { + nodes_in_clusters = [] + } + + if(nodes !== undefined && nodes !== null){ + arr_nodes = nodes + } else { + arr_nodes = nodes_in_clusters; + } + + for (var inodes = 0; inodes < arr_nodes.length; inodes++) { + selectedNode = '' + arr_nodes[inodes]; + if(selectedNode !== undefined){ + if(network.isCluster(selectedNode)){ + if(keepCoord){ + network.openCluster(selectedNode, + {releaseFunction : function(clusterPosition, containedNodesPositions) { + return containedNodesPositions; + } + }); + } else { + network.openCluster(selectedNode) + } + } else { + if(indexOf.call(nodes_in_clusters, selectedNode, true) > -1){ + // not a cluster into a cluster... + if(selectedNode.search(/^cluster/i) === -1){ + cluster_node = network.clustering.findNode(selectedNode)[0]; + if(network.isCluster(cluster_node)){ + if(keepCoord){ + network.openCluster(cluster_node, + {releaseFunction : function(clusterPosition, containedNodesPositions) { + return containedNodesPositions; + } + }); + } else { + network.openCluster(cluster_node) + } + } + } + } + } + } + } + if(resetHighlight){ + document.getElementById("nodeSelect"+elid).value = ""; + document.getElementById("nodeSelect"+elid).onchange(); + } + if(fit){ + network.fit(); + } +}; + +//---------------------------------------------------------------- +// All available functions/methods with visNetworkProxy +//--------------------------------------------------------------- +if (HTMLWidgets.shinyMode){ + + // collapsed method + Shiny.addCustomMessageHandler('visShinyCollapse', function(data){ + // get container id + var el = document.getElementById("graph"+data.id); + if(el){ + collapsedNetwork(data.nodes, data.fit, data.resetHighlight, data.clusterOptions, data.labelSuffix, undefined, el.chart, data.id) + } + }); + + // uncollapsed method + Shiny.addCustomMessageHandler('visShinyUncollapse', function(data){ + // get container id + var el = document.getElementById("graph"+data.id); + if(el){ + uncollapsedNetwork(data.nodes, data.fit, data.resetHighlight, data.keepCoord, el.chart, data.id) + } + }); + + // event method + Shiny.addCustomMessageHandler('visShinyEvents', function(data){ + // get container id + var el = document.getElementById("graph"+data.id); + if(el){ + var network = el.chart; + + if(data.type === "once"){ + for (var key in data.events) { + eval('network.once("' + key + '",' + data.events[key] + ')'); + } + } else if(data.type === "on"){ + for (var key in data.events) { + eval('network.on("' + key + '",' + data.events[key] + ')'); + } + } else if(data.type === "off"){ + for (var key in data.events) { + eval('network.off("' + key + '",' + data.events[key] + ')'); + } + } + } + }); + + // moveNode method + Shiny.addCustomMessageHandler('visShinyMoveNode', function(data){ + // get container id + var el = document.getElementById("graph"+data.id); + if(el){ + var network = el.chart; + network.moveNode(data.nodeId, data.x, data.y); + } + }); + + // unselectAll method + Shiny.addCustomMessageHandler('visShinyUnselectAll', function(data){ + // get container id + var el = document.getElementById("graph"+data.id); + if(el){ + var network = el.chart; + + // reset selection + document.getElementById("nodeSelect"+data.id).value = ""; + document.getElementById("nodeSelect"+data.id).onchange(); + + if(document.getElementById(data.id).selectActive === true){ + document.getElementById("selectedBy"+data.id).value = ""; + document.getElementById("selectedBy"+data.id).onchange(); + } + + network.unselectAll(); + } + }); + + // updateOptions in the network + Shiny.addCustomMessageHandler('visShinyOptions', function(data){ + // get container id + var el = document.getElementById("graph"+data.id); + + if(el){ + var network = el.chart; + var options = el.options; + // configure + if(data.options.configure !== undefined){ + if(data.options.configure.container !== undefined){ + var dom_conf = document.getElementById(data.options.configure.container); + if(dom_conf !== null){ + data.options.configure.container = dom_conf; + } else { + data.options.configure.container = undefined; + } + } + } + + //************************* + // pre-treatment for icons (unicode) + //************************* + if(data.options.groups){ + for (var gr in data.options.groups){ + if(data.options.groups[gr].icon){ + if(data.options.groups[gr].icon.code){ + data.options.groups[gr].icon.code = JSON.parse( '"'+'\\u' + data.options.groups[gr].icon.code + '"'); + } + if(data.options.groups[gr].icon.face){ + if(data.options.groups[gr].icon.face === "'Font Awesome 5 Free'"){ + data.options.groups[gr].icon.weight = "bold" + } + } + if(data.options.groups[gr].icon.color){ + data.options.groups[gr].color = data.options.groups[gr].icon.color; + } + } + } + } + + if(data.options.nodes){ + if(data.options.nodes.icon){ + if(data.options.nodes.icon.code){ + data.options.nodes.icon.code = JSON.parse( '"'+'\\u' + data.options.nodes.icon.code + '"'); + } + if(data.options.nodes.icon.face){ + if(data.options.nodes.icon.face === "'Font Awesome 5 Free'"){ + data.options.nodes.icon.weight = "bold" + } + } + if(data.options.nodes.icon.color){ + data.options.nodes.color = data.options.nodes.icon.color; + } + } + } + + + update(options, data.options); + network.setOptions(options); + } + }); + + // setData the network + Shiny.addCustomMessageHandler('visShinySetData', function(data){ + // get container id + var el = document.getElementById("graph"+data.id); + if(el){ + var network = el.chart; + var newnodes = new vis.DataSet(); + var newedges = new vis.DataSet(); + + newnodes.add(visNetworkdataframeToD3(data.nodes, "nodes")); + newedges.add(visNetworkdataframeToD3(data.edges, "edges")); + var newdata = { + nodes: newnodes, + edges: newedges + }; + network.setData(newdata); + } + }); + + // fit to a specific node + Shiny.addCustomMessageHandler('visShinyFit', function(data){ + // get container id + var el = document.getElementById("graph"+data.id); + if(el){ + var network = el.chart; + network.fit(data.options); + } + }); + + // focus on a node in the network + Shiny.addCustomMessageHandler('visShinyFocus', function(data){ + // get container id + var el = document.getElementById("graph"+data.id); + if(el){ + var network = el.chart; + network.focus(data.focusId, data.options); + } + }); + + // stabilize the network + Shiny.addCustomMessageHandler('visShinyStabilize', function(data){ + // get container id + var el = document.getElementById("graph"+data.id); + if(el){ + var network = el.chart; + network.stabilize(data.options); + } + }); + + // startSimulation on network + Shiny.addCustomMessageHandler('visShinyStartSimulation', function(data){ + // get container id + var el = document.getElementById("graph"+data.id); + if(el){ + var network = el.chart; + network.startSimulation(); + } + }); + + // stopSimulation on network + Shiny.addCustomMessageHandler('visShinyStopSimulation', function(data){ + // get container id + var el = document.getElementById("graph"+data.id); + if(el){ + var network = el.chart; + network.stopSimulation(); + } + }); + + // get positions of the network + Shiny.addCustomMessageHandler('visShinyGetPositions', function(data){ + // get container id + var el = document.getElementById("graph"+data.id); + if(el){ + var network = el.chart; + var pos; + + if(data.nodes !== undefined){ + pos = network.getPositions(data.nodes); + }else{ + pos = network.getPositions(); + } + // return positions in shiny + Shiny.onInputChange(data.input, pos); + } + }); + + // get edges data + Shiny.addCustomMessageHandler('visShinyGetEdges', function(data){ + // get container id + var el = document.getElementById("graph"+data.id); + if(el){ + // return data in shiny + Shiny.onInputChange(data.input, el.edges.get({returnType:"Object"})); + } + }); + + // get nodes data + Shiny.addCustomMessageHandler('visShinyGetNodes', function(data){ + // get container id + var el = document.getElementById("graph"+data.id); + if(el){ + if(data.addCoordinates){ + el.chart.storePositions(); + } + // return data in shiny + Shiny.onInputChange(data.input, el.nodes.get({returnType:"Object"})); + } + }); + + // get selected edges + Shiny.addCustomMessageHandler('visShinyGetSelectedEdges', function(data){ + // get container id + var el = document.getElementById("graph"+data.id); + if(el){ + var network = el.chart; + var pos = network.getSelectedEdges(); + // return in shiny + Shiny.onInputChange(data.input, pos); + } + }); + + // get selected nodes + Shiny.addCustomMessageHandler('visShinyGetSelectedNodes', function(data){ + // get container id + var el = document.getElementById("graph"+data.id); + if(el){ + var network = el.chart; + var pos = network.getSelectedNodes(); + // return in shiny + Shiny.onInputChange(data.input, pos); + } + }); + + // getConnectedEdges + Shiny.addCustomMessageHandler('visShinyGetConnectedEdges', function(data){ + // get container id + var el = document.getElementById("graph"+data.id); + if(el){ + var network = el.chart; + var pos = network.getConnectedEdges(data.nodeId); + // return in shiny + Shiny.onInputChange(data.input, pos); + } + }); + + // getConnectedNodes + Shiny.addCustomMessageHandler('visShinyGetConnectedNodes', function(data){ + // get container id + var el = document.getElementById("graph"+data.id); + if(el){ + var network = el.chart; + var pos = network.getConnectedNodes(data.nodeId); + // return in shiny + Shiny.onInputChange(data.input, pos); + } + }); + + // getBoundingBox + Shiny.addCustomMessageHandler('visShinyGetBoundingBox', function(data){ + // get container id + var el = document.getElementById("graph"+data.id); + if(el){ + var network = el.chart; + var pos = network.getBoundingBox(data.nodeId); + // return in shiny + Shiny.onInputChange(data.input, pos); + } + }); + + // get selection + Shiny.addCustomMessageHandler('visShinyGetSelection', function(data){ + // get container id + var el = document.getElementById("graph"+data.id); + if(el){ + var network = el.chart; + var pos; + + pos = network.getSelection(); + + // return in shiny + Shiny.onInputChange(data.input, pos); + } + }); + + // get scale + Shiny.addCustomMessageHandler('visShinyGetScale', function(data){ + // get container id + var el = document.getElementById("graph"+data.id); + if(el){ + var network = el.chart; + var pos; + + pos = network.getScale(); + + // return in shiny + Shiny.onInputChange(data.input, pos); + } + }); + + // store positions + Shiny.addCustomMessageHandler('visShinyStorePositions', function(data){ + // get container id + var el = document.getElementById("graph"+data.id); + if(el){ + var network = el.chart; + network.storePositions(); + } + }); + + // get view position + Shiny.addCustomMessageHandler('visShinyGetViewPosition', function(data){ + // get container id + var el = document.getElementById("graph"+data.id); + if(el){ + var network = el.chart; + var pos; + + pos = network.getViewPosition(); + + // return in shiny + Shiny.onInputChange(data.input, pos); + } + }); + + // get view position + Shiny.addCustomMessageHandler('visShinyGetOptionsFromConfigurator', function(data){ + // get container id + var el = document.getElementById("graph"+data.id); + if(el){ + var network = el.chart; + // return in shiny + Shiny.onInputChange(data.input, network.getOptionsFromConfigurator()); + } + }); + + // Redraw the network + Shiny.addCustomMessageHandler('visShinyRedraw', function(data){ + // get container id + var el = document.getElementById("graph"+data.id); + if(el){ + el.chart.redraw(); + } + }); + + // select nodes + Shiny.addCustomMessageHandler('visShinySelectNodes', function(data){ + // get container id + var el = document.getElementById("graph"+data.id); + if(el){ + var network = el.chart; + if(data.selid !== null){ + network.selectNodes(data.selid, data.highlightEdges); + if(data.clickEvent){ + el.myclick({nodes : data.selid}); + } + }else{ + if(data.clickEvent){ + el.myclick({nodes : []}); + } + } + } + }); + + // select edges + Shiny.addCustomMessageHandler('visShinySelectEdges', function(data){ + // get container id + var el = document.getElementById("graph"+data.id); + if(el){ + var network = el.chart; + if(data.selid !== null){ + network.selectEdges(data.selid); + } + } + }); + + // set selection + Shiny.addCustomMessageHandler('visShinySetSelection', function(data){ + // get container id + var el = document.getElementById("graph"+data.id); + if(el){ + var network = el.chart; + if(data.selection.nodes !== null || data.selection.edges !== null){ + network.setSelection(data.selection, data.options); + } + if(data.clickEvent){ + if(data.selection.nodes !== null){ + el.myclick({nodes : data.selection.nodes}); + } else { + el.myclick({nodes : []}); + } + } + } + }); + + function updateVisOptions(data){ + // get container id + var graph = document.getElementById("graph"+data.id); + var el = document.getElementById(data.id); + var do_loop_by = false; + var option2; + var selectList2; + var selectList; + var reset = false; + + if(graph){ + // reset nodes before ? + if(document.getElementById(el.id).highlight){ + // need reset nodes + if(document.getElementById(el.id).highlightActive === true){ + reset = true; + } + } + if(reset){ + document.getElementById("nodeSelect"+data.id).value = ""; + document.getElementById("nodeSelect"+data.id).onchange(); + } + + // collapse init + if(data.options.collapse !== undefined){ + el.collapse = data.options.collapse.enabled; + el.collapseFit = data.options.collapse.fit; + el.collapseResetHighlight = data.options.collapse.resetHighlight; + el.collapseKeepCoord = data.options.collapse.keepCoord; + el.collapseLabelSuffix = data.options.collapse.labelSuffix; + el.clusterOptions = data.options.collapse.clusterOptions; + } + + // highlight init + if(data.options.highlight !== undefined){ + el.highlight = data.options.highlight.enabled; + el.degree = data.options.highlight.degree; + el.hoverNearest = data.options.highlight.hoverNearest; + el.highlightColor = data.options.highlight.hideColor; + el.highlightAlgorithm = data.options.highlight.algorithm; + el.highlightLabelOnly = data.options.labelOnly; + } + + // byselection init + if(data.options.byselection !== undefined){ + if(data.options.byselection.selected !== undefined){ + document.getElementById("selectedBy"+data.id).value = data.options.byselection.selected; + document.getElementById("selectedBy"+data.id).onchange(); + } + if(data.options.byselection.hideColor){ + el.byselectionColor = data.options.byselection.hideColor; + } + if(data.options.byselection.highlight !== undefined){ + el.byselectionHighlight = data.options.byselection.highlight; + } + } + + if(data.options.byselection !== undefined){ + selectList2 = document.getElementById("selectedBy"+data.id) + selectList2.options.length = 0; + if(data.options.byselection.enabled === true){ + option2 = document.createElement("option"); + option2.value = ""; + if(data.options.byselection.main === undefined){ + option2.text = "Select by " + data.options.byselection.variable; + } else { + option2.text = data.options.byselection.main; + } + + selectList2.appendChild(option2); + + if(data.options.byselection.values !== undefined){ + for (var i = 0; i < data.options.byselection.values.length; i++) { + option2 = document.createElement("option"); + option2.value = data.options.byselection.values[i]; + option2.text = data.options.byselection.values[i]; + selectList2.appendChild(option2); + } + }else{ + do_loop_by = true; + } + + el.byselection_variable = data.options.byselection.variable; + el.byselection_multiple = data.options.byselection.multiple; + selectList2.style.display = 'inline'; + if(data.options.byselection.style !== undefined){ + selectList2.setAttribute('style', data.options.byselection.style); + } + el.byselection = true; + } else { + selectList2.style.display = 'none'; + el.byselection = false; + // reset selection + if(el.selectActive === true){ + document.getElementById("selectedBy"+data.id).value = ""; + document.getElementById("selectedBy"+data.id).onchange(); + } + } + }else{ + // reset selection + if(el.selectActive === true){ + document.getElementById("selectedBy"+data.id).value = ""; + document.getElementById("selectedBy"+data.id).onchange(); + } + } + + if(do_loop_by){ + var allNodes = graph.nodes.get({returnType:"Object"}); + var byselection_values = []; + for (var nodeId in allNodes) { + if(do_loop_by){ + var current_sel_value = allNodes[nodeId][data.options.byselection.variable]; + if(data.options.byselection.multiple){ + current_sel_value = current_sel_value.split(",").map(Function.prototype.call, String.prototype.trim); + }else{ + current_sel_value = [current_sel_value]; + } + for(var ind_c in current_sel_value){ + if(indexOf.call(byselection_values, current_sel_value[ind_c], false) === -1){ + option2 = document.createElement("option"); + option2.value = current_sel_value[ind_c]; + option2.text = current_sel_value[ind_c]; + selectList2.appendChild(option2); + byselection_values.push(current_sel_value[ind_c]); + } + } + } + } + } + + // node id selection init + if(data.options.idselection !== undefined){ + selectList = document.getElementById("nodeSelect"+data.id) + selectList.options.length = 0; + if(data.options.idselection.enabled === true){ + setNodeIdList(selectList, data.options.idselection, graph.nodes) + el.idselection = true; + } else { + selectList.style.display = 'none'; + el.idselection = false; + } + if(data.options.idselection.useLabels !== undefined){ + el.idselection_useLabels = data.options.idselection.useLabels + } + } + + if(data.options.idselection !== undefined){ + if(data.options.idselection.enabled === true && data.options.idselection.selected !== undefined){ + document.getElementById("nodeSelect"+data.id).value = data.options.idselection.selected; + document.getElementById("nodeSelect"+data.id).onchange(); + } + } + } + }; + + Shiny.addCustomMessageHandler('visShinyCustomOptions', updateVisOptions); + + // udpate nodes data + Shiny.addCustomMessageHandler('visShinyUpdateNodes', function(data){ + // get container id + var el = document.getElementById("graph"+data.id); + var main_el = document.getElementById(data.id); + + if(data.legend === false){ + if(el){ + // get & transform nodes object + var tmpnodes = visNetworkdataframeToD3(data.nodes, "nodes"); + + // reset some parameters / data before + if (main_el.selectActive === true | main_el.highlightActive === true) { + + //reset nodes + resetAllEdges(el.edges, el.highlightColor, el.byselectionColor, el.chart); + resetAllNodes(el.nodes, true, el.options, el.chart, false); + + if (main_el.selectActive === true){ + main_el.selectActive = false; + resetList('selectedBy', data.id, 'selectedBy'); + } + if (main_el.highlightActive === true){ + main_el.highlightActive = false; + resetList('nodeSelect', data.id, 'selected'); + } + } + // update nodes + el.nodes.update(tmpnodes); + + // update options ? + if(data.updateOptions){ + var dataOptions = {}; + dataOptions.options = {}; + + var updateOpts = false; + if(document.getElementById("nodeSelect"+data.id).style.display === 'inline'){ + updateOpts = true; + dataOptions.id = data.id; + dataOptions.options.idselection = {enabled : true, useLabels : main_el.idselection_useLabels}; + } + + if(document.getElementById("selectedBy"+data.id).style.display === 'inline'){ + updateOpts = true; + dataOptions.id = data.id; + dataOptions.options.byselection = {enabled : true, variable : main_el.byselection_variable, multiple : main_el.byselection_multiple}; + } + + if(updateOpts){ + updateVisOptions(dataOptions); + } + } + } + } else if(data.legend === true){ + var legend_network = document.getElementById("legend"+data.id); + if(legend_network){ + // get & transform nodes object + var tmpnodes = visNetworkdataframeToD3(data.nodes, "nodes"); + // update nodes + legend_network.network.body.data.nodes.update(tmpnodes); + // fit + legend_network.network.fit(); + } + } + }); + + // udpate edges data + Shiny.addCustomMessageHandler('visShinyUpdateEdges', function(data){ + // get container id + var el = document.getElementById("graph"+data.id); + if(data.legend === false){ + if(el){ + // get edges object + var tmpedges = visNetworkdataframeToD3(data.edges, "edges"); + // reset edges + resetAllEdges(el.edges, el.highlightColor, el.byselectionColor, el.chart) + el.edges.update(tmpedges); + } + } else if(data.legend === true){ + var legend_network = document.getElementById("legend"+data.id); + if(legend_network){ + // get & transform nodes object + var tmpedges = visNetworkdataframeToD3(data.edges, "edges"); + // update edges + legend_network.network.body.data.edges.update(tmpedges); + // fit + legend_network.network.fit(); + } + } + }); + + // remove nodes + Shiny.addCustomMessageHandler('visShinyRemoveNodes', function(data){ + // get container id + var el = document.getElementById("graph"+data.id); + var main_el = document.getElementById(data.id); + if(data.legend === false){ + if(el){ + // reset some parameters / date before + if (main_el.selectActive === true | main_el.highlightActive === true) { + //reset nodes + resetAllNodes(el.nodes, true, el.options, el.chart, false); + + if (main_el.selectActive === true){ + main_el.selectActive = false; + resetList('selectedBy', data.id, 'selectedBy'); + } + if (main_el.highlightActive === true){ + main_el.highlightActive = false; + resetList('nodeSelect', data.id, 'selected'); + } + } + // remove nodes + el.nodes.remove(data.rmid); + + // update options ? + if(data.updateOptions){ + var dataOptions = {}; + dataOptions.options = {}; + + var updateOpts = false; + if(document.getElementById("nodeSelect"+data.id).style.display === 'inline'){ + updateOpts = true; + dataOptions.id = data.id; + dataOptions.options.idselection = {enabled : true, useLabels : main_el.idselection_useLabels}; + } + + if(document.getElementById("selectedBy"+data.id).style.display === 'inline'){ + updateOpts = true; + dataOptions.id = data.id; + dataOptions.options.byselection = {enabled : true, variable : main_el.byselection_variable, multiple : main_el.byselection_multiple}; + } + + if(updateOpts){ + updateVisOptions(dataOptions); + } + } + } + } else if(data.legend === true){ + var legend_network = document.getElementById("legend"+data.id); + if(legend_network){ + // remove nodes + legend_network.network.body.data.nodes.remove(data.rmid); + // fit + legend_network.network.fit(); + } + } + }); + + // remove edges + Shiny.addCustomMessageHandler('visShinyRemoveEdges', function(data){ + // get container id + var el = document.getElementById("graph"+data.id); + if(data.legend === false){ + if(el){ + // reset edges + resetAllEdges(el.edges, el.highlightColor, el.byselectionColor, el.chart) + el.edges.remove(data.rmid); + } + } else if(data.legend === true){ + var legend_network = document.getElementById("legend"+data.id); + if(legend_network){ + // remove edges + legend_network.network.body.data.edges.remove(data.rmid); + // fit + legend_network.network.fit(); + } + } + }); + + // remove edges + Shiny.addCustomMessageHandler('visShinySetTitle', function(data){ + if(data.main !== null){ + var div_title = document.getElementById("title" + data.id); + if(div_title !== null){ + if(data.main.hidden === true){ + div_title.style.display = 'none'; + } else { + if(data.main.text !== undefined){ + if(data.main.text !== null){ + if(data.main.text.length > 0){ + div_title.innerHTML = data.main.text; + } else { + div_title.innerHTML = ""; + } + } + } + if(data.main.style !== undefined){ + if(data.main.style !== null){ + if(data.main.style.length > 0){ + div_title.setAttribute('style', data.main.style); + } + } + } + div_title.style.display = 'block'; + } + } + } + if(data.submain !== null){ + var div_subtitle = document.getElementById("subtitle" + data.id); + if(div_subtitle !== null){ + if(data.submain.hidden === true){ + div_subtitle.style.display = 'none'; + } else { + if(data.submain.text !== undefined){ + if(data.submain.text !== null){ + if(data.submain.text.length > 0){ + div_subtitle.innerHTML = data.submain.text; + } else { + div_subtitle.innerHTML = ""; + } + } + } + if(data.submain.style !== undefined){ + if(data.submain.style !== null){ + if(data.submain.style.length > 0){ + div_subtitle.setAttribute('style', data.submain.style); + } + } + } + div_subtitle.style.display = 'block'; + } + } + } + if(data.footer !== null){ + var div_footer = document.getElementById("footer" + data.id); + if(div_footer !== null){ + if(data.footer.hidden === true){ + div_footer.style.display = 'none'; + } else { + if(data.footer.text !== undefined){ + if(data.footer.text !== null){ + if(data.footer.text.length > 0){ + div_footer.innerHTML = data.footer.text; + } else { + div_footer.innerHTML = ""; + } + } + } + if(data.footer.style !== undefined){ + if(data.footer.style !== null){ + if(data.footer.style.length > 0){ + div_footer.setAttribute('style', data.footer.style); + } + } + } + div_footer.style.display = 'block'; + } + } + } + }); + + // updateTree + Shiny.addCustomMessageHandler('visShinyUpdateTree', function(data){ + // get container id + var el = document.getElementById(data.id); + if(el){ + if(el.tree){ + if(data.tree.updateShape != undefined){ + el.tree.updateShape = data.tree.updateShape + } + if(data.tree.shapeVar != undefined){ + el.tree.shapeVar = data.tree.shapeVar + } + if(data.tree.shapeY != undefined){ + el.tree.shapeY = data.tree.shapeY + } + } + } + }); +} + +//---------------------------------------------------------------- +// HTMLWidgets.widget Definition +//--------------------------------------------------------------- +HTMLWidgets.widget({ + + name: 'visNetwork', + + type: 'output', + + initialize: function(el, width, height) { + return { + }; + }, + + renderValue: function(el, x, instance) { + var data; + var nodes; + var edges; + + + // clustergin by zoom variables + var clusterIndex = 0; + var clusters = []; + var lastClusterZoomLevel = 0; + var clusterFactor; + var ctrlwait = 0; + + // legend control + var addlegend = false; + + // main div el.id + var el_id = document.getElementById(el.id); + + // test background + el_id.style.background = x.background; + + // clear el.id (for shiny...) + el_id.innerHTML = ""; + + // shared control with proxy function (is there a better way ?) + el_id.highlightActive = false; + el_id.selectActive = false; + el_id.idselection = x.idselection.enabled; + el_id.byselection = x.byselection.enabled; + + if(x.highlight !== undefined){ + el_id.highlight = x.highlight.enabled; + el_id.highlightColor = x.highlight.hideColor; + el_id.hoverNearest = x.highlight.hoverNearest; + el_id.degree = x.highlight.degree; + el_id.highlightAlgorithm = x.highlight.algorithm; + el_id.highlightLabelOnly = x.highlight.labelOnly; + } else { + el_id.highlight = false; + el_id.hoverNearest = false; + el_id.highlightColor = 'rgba(200,200,200,0.5)'; + el_id.degree = 1; + el_id.highlightAlgorithm = "all"; + el_id.highlightLabelOnly = true; + } + + if(x.byselection.enabled){ + el_id.byselectionColor = x.byselection.hideColor; + el_id.byselectionHighlight = x.byselection.highlight; + } else { + el_id.byselectionColor = 'rgba(200,200,200,0.5)'; + el_id.byselectionHighlight = false; + } + + if(x.idselection.enabled){ + el_id.idselection_useLabels = true; + } else { + el_id.idselection_useLabels = false; + } + + if(x.collapse !== undefined){ + if(x.collapse.enabled){ + el_id.collapse = true; + el_id.collapseFit = x.collapse.fit; + el_id.collapseResetHighlight = x.collapse.resetHighlight; + el_id.collapseKeepCoord = x.collapse.keepCoord; + el_id.collapseLabelSuffix = x.collapse.labelSuffix; + el_id.clusterOptions = x.collapse.clusterOptions; + } + } else { + el_id.collapse = false; + el_id.collapseFit = false; + el_id.collapseResetHighlight = false; + el_id.collapseKeepCoord = true; + el_id.collapseLabelSuffix = " (cluster)"; + el_id.clusterOptions = undefined; + } + + if(x.tree !== undefined){ + el_id.tree = x.tree; + } + + // configure + if(x.options.configure !== undefined){ + if(x.options.configure.container !== undefined){ + var dom_conf = document.getElementById(x.options.configure.container); + if(dom_conf !== null){ + x.options.configure.container = dom_conf; + } else { + x.options.configure.container = undefined; + } + } + } + + var changeInput = function(id, data) { + Shiny.onInputChange(el.id + '_' + id, data); + }; + + //************************* + //title + //************************* + var div_title = document.createElement('div'); + div_title.id = "title"+el.id; + div_title.setAttribute('style','font-family:Georgia, Times New Roman, Times, serif;font-weight:bold;font-size:20px;text-align:center;'); + div_title.style.display = 'none'; + el_id.appendChild(div_title); + if(x.main !== null){ + div_title.innerHTML = x.main.text; + div_title.setAttribute('style', x.main.style + ";background-color: inherit;"); + div_title.style.display = 'block'; + } + + //************************* + //subtitle + //************************* + var div_subtitle = document.createElement('div'); + div_subtitle.id = "subtitle"+el.id; + div_subtitle.setAttribute('style', 'font-family:Georgia, Times New Roman, Times, serif;font-size:12px;text-align:center;'); + div_subtitle.style.display = 'none'; + el_id.appendChild(div_subtitle); + if(x.submain !== null){ + div_subtitle.innerHTML = x.submain.text; + div_subtitle.setAttribute('style', x.submain.style + ";background-color: inherit;"); + div_title.style.display = 'block'; + } + + //************************* + //init idselection + //************************* + function onIdChange(id, init) { + if(id === ""){ + instance.network.selectNodes([]); + }else{ + instance.network.selectNodes([id]); + } + if(el_id.highlight){ + neighbourhoodHighlight(instance.network.getSelection().nodes, "click", el_id.highlightAlgorithm, true); + }else{ + if(init){ + selectNode = document.getElementById('nodeSelect'+el.id); + if(x.idselection.values !== undefined){ + if(indexOf.call(x.idselection.values, id, true) > -1){ + selectNode.value = id; + }else{ + selectNode.value = ""; + } + }else{ + selectNode.value = id; + } + } + } + if (window.Shiny){ + changeInput('selected', document.getElementById("nodeSelect"+el.id).value); + } + if(el_id.byselection){ + resetList('selectedBy', el.id, 'selectedBy'); + } + } + + // id nodes selection : add a list on top left + // actually only with nodes + edges data (not dot and gephi) + var idList = document.createElement("select"); + idList.setAttribute('class', 'dropdown'); + idList.style.display = 'none'; + idList.id = "nodeSelect"+el.id; + el_id.appendChild(idList); + + idList.onchange = function(){ + if(instance.network){ + onIdChange(document.getElementById("nodeSelect"+el.id).value, false); + } + }; + + var hr = document.createElement("hr"); + hr.setAttribute('style', 'height:0px; visibility:hidden; margin-bottom:-1px;'); + el_id.appendChild(hr); + + //************************* + //selectedBy + //************************* + function onByChange(value) { + if(instance.network){ + selectedHighlight(value); + } + if (window.Shiny){ + changeInput('selectedBy', value); + } + if(el_id.idselection){ + resetList('nodeSelect', el.id, 'selected'); + } + } + + // selectedBy : add a list on top left + // actually only with nodes + edges data (not dot and gephi) + //Create and append select list + var byList = document.createElement("select"); + byList.setAttribute('class', 'dropdown'); + byList.style.display = 'none'; + byList.id = "selectedBy"+el.id; + el_id.appendChild(byList); + + byList.onchange = function(){ + onByChange(document.getElementById("selectedBy"+el.id).value); + }; + + if(el_id.byselection){ + + el_id.byselection_values = x.byselection.values; + el_id.byselection_variable = x.byselection.variable; + el_id.byselection_multiple = x.byselection.multiple; + var option2; + + //Create and append select list + var selectList2 = document.getElementById("selectedBy"+el.id); + selectList2.setAttribute('style', x.byselection.style); + selectList2.style.display = 'inline'; + + option2 = document.createElement("option"); + option2.value = ""; + if(x.byselection.main === undefined){ + option2.text = "Select by " + x.byselection.variable; + } else { + option2.text = x.byselection.main; + } + + selectList2.appendChild(option2); + + //Create and append the options + for (var i2 = 0; i2 < x.byselection.values.length; i2++) { + option2 = document.createElement("option"); + option2.value = x.byselection.values[i2]; + option2.text = x.byselection.values[i2]; + selectList2.appendChild(option2); + } + + if (window.Shiny){ + changeInput('selectedBy', document.getElementById("selectedBy"+el.id).value); + } + } + + //************************* + // pre-treatment for icons (unicode) + //************************* + if(x.options.groups){ + for (var gr in x.options.groups){ + if(x.options.groups[gr].icon){ + if(x.options.groups[gr].icon.code){ + x.options.groups[gr].icon.code = JSON.parse( '"'+'\\u' + x.options.groups[gr].icon.code + '"'); + } + if(x.options.groups[gr].icon.face){ + if(x.options.groups[gr].icon.face === "'Font Awesome 5 Free'"){ + x.options.groups[gr].icon.weight = "bold" + } + } + if(x.options.groups[gr].icon.color){ + x.options.groups[gr].color = x.options.groups[gr].icon.color; + } + } + } + } + + if(x.options.nodes.icon){ + if(x.options.nodes.icon.code){ + x.options.nodes.icon.code = JSON.parse( '"'+'\\u' + x.options.nodes.icon.code + '"'); + } + if(x.options.nodes.icon.face){ + if(x.options.nodes.icon.face === "'Font Awesome 5 Free'"){ + x.options.nodes.icon.weight = "bold" + } + } + if(x.options.nodes.icon.color){ + x.options.nodes.color = x.options.nodes.icon.color; + } + } + + //************************* + //page structure + //************************* + + // divide page + var maindiv = document.createElement('div'); + maindiv.id = "maindiv"+el.id; + maindiv.setAttribute('style', 'height:95%;background-color: inherit;'); + el_id.appendChild(maindiv); + + var graph = document.createElement('div'); + graph.id = "graph"+el.id; + + if(x.legend !== undefined){ + if((x.groups && x.legend.useGroups) || (x.legend.nodes !== undefined) || (x.legend.edges !== undefined)){ + addlegend = true; + } + } + + //legend + if(addlegend){ + var legendwidth = x.legend.width*100; + var legend = document.createElement('div'); + + var pos = x.legend.position; + var pos2 = "right"; + if(pos == "right"){ + pos2 = "left"; + } + + legend.id = "legend"+el.id; + legend.setAttribute('style', 'float:' + pos + '; width:'+legendwidth+'%;height:100%'); + + //legend title + if(x.legend.main !== undefined){ + var legend_title = document.createElement('div'); + legend_title.innerHTML = x.legend.main.text; + legend_title.setAttribute('style', x.legend.main.style); + legend.appendChild(legend_title); + + legend.id = "legend_main"+el.id; + var legend_network = document.createElement('div'); + legend_network.id = "legend"+el.id; + legend_network.setAttribute('style', 'height:100%'); + legend.appendChild(legend_network); + } + + document.getElementById("maindiv"+el.id).appendChild(legend); + graph.setAttribute('style', 'float:' + pos2 + '; width:'+(100-legendwidth)+'%;height:100%;background-color: inherit;'); + }else{ + graph.setAttribute('style', 'float:right; width:100%;height:100%;background-color: inherit;'); + } + + document.getElementById("maindiv"+el.id).appendChild(graph); + + //************************* + //legend definition + //************************* + if(addlegend){ + + var legendnodes = new vis.DataSet(); + var legendedges = null; + var datalegend; + var tmpnodes; + + // set some options + var optionslegend = { + interaction:{ + dragNodes: false, + dragView: false, + selectable: false, + zoomView: x.legend.zoom + }, + physics:{ + stabilization: false + } + }; + + function range(start, length, step, rep){ + var a=[], b=start; + while(a.length < length){ + for (var i = 0; i < rep; i++){ + a.push(b); + if(a.length === length){ + break; + } + } + b+=step; + } + return a; + }; + + var mynetwork = document.getElementById('legend'+el.id); + var lx = mynetwork.clientWidth / 2 + 50; + var ly = mynetwork.clientHeight / 2 + 50; + var edge_ly = ly; + var ncol = x.legend.ncol; + var step_x = x.legend.stepX; + var step_y = x.legend.stepY; + var tmp_ly; + var tmp_lx = lx; + var tmp_lx2; + var all_tmp_y = []; + if(tmp_lx === 0){ + tmp_lx = 1 + } + + // construct nodes data if needed + if(x.legend.nodes !== undefined){ + if(x.legend.nodesToDataframe){ // data in data.frame + tmpnodes = visNetworkdataframeToD3(x.legend.nodes, "nodes") + } else { // data in list + tmpnodes = x.legend.nodes; + } + // only one element + if(tmpnodes.length === undefined){ + tmpnodes = new Array(tmpnodes); + } + } + + // array of y position + if(x.groups && x.legend.useGroups && x.legend.nodes !== undefined){ + all_tmp_y = range(ly, x.groups.length + tmpnodes.length, step_y, ncol); + } else if(x.groups && x.legend.useGroups && x.legend.nodes === undefined){ + all_tmp_y = range(ly, x.groups.length, step_y, ncol); + } else if(x.legend.useGroups === false && x.legend.nodes !== undefined){ + all_tmp_y = range(ly, tmpnodes.length, step_y, ncol); + } + + // want to view groups in legend + if(x.groups && x.legend.useGroups){ + // create data + for (var g1 = 0; g1 < x.groups.length; g1++){ + + if(g1 === 0){ + tmp_lx = lx; + } else { + tmp_lx = lx + g1%ncol * step_x; + } + + tmp_ly = all_tmp_y[g1]; + if(tmp_ly === 0){ + tmp_ly = 1 + } + + legendnodes.add({id: null, x : tmp_lx, y : tmp_ly, label: x.groups[g1], group: x.groups[g1], value: 1, mass:1}); + edge_ly = tmp_ly; + } + // control icon size + if(x.options.groups){ + optionslegend.groups = clone(x.options.groups); + for (var grp in optionslegend.groups) { + if(optionslegend.groups[grp].shape === "icon"){ + optionslegend.groups[grp].icon.size = 50; + } + } + } + } + // want to add custom nodes + if(x.legend.nodes !== undefined){ + + // control icon + for (var nd in tmpnodes){ + if(tmpnodes[nd].icon && !x.legend.nodesToDataframe){ + tmpnodes[nd].icon.code = JSON.parse( '"'+'\\u' + tmpnodes[nd].icon.code + '"'); + } + if(tmpnodes[nd].icon && tmpnodes[nd].icon.face){ + if(tmpnodes[nd].icon.face === "'Font Awesome 5 Free'"){ + tmpnodes[nd].icon.weight = "bold" + } + } + } + // group control for y + var add_gr_y = 0; + if(x.groups && x.legend.useGroups){ + add_gr_y = x.groups.length; + } + // set coordinates + for (var g = 0; g < tmpnodes.length; g++){ + if((g+legendnodes.length) === 0){ + tmp_lx = lx; + } else { + tmp_lx = lx + (g+legendnodes.length)%ncol * step_x; + } + + tmp_ly = all_tmp_y[add_gr_y + g]; + if(tmp_lx === 0){ + tmp_lx = 1 + } + if(tmp_ly === 0){ + tmp_ly = 1 + } + tmpnodes[g].x = tmp_lx; + tmpnodes[g].y = tmp_ly; + + if(tmpnodes[g].value === undefined && tmpnodes[g].size === undefined){ + tmpnodes[g].value = 1; + } + /*if(tmpnodes[g].id !== undefined){ + tmpnodes[g].id = null; + }*/ + tmpnodes[g].mass = 1; + edge_ly = tmp_ly; + } + legendnodes.add(tmpnodes); + } + // want to add custom edges + if(x.legend.edges !== undefined){ + if(x.legend.edgesToDataframe){ // data in data.frame + legendedges = visNetworkdataframeToD3(x.legend.edges, "edges") + } else { // data in list + legendedges = x.legend.edges; + } + // only one element + if(legendedges.length === undefined){ + legendedges = new Array(legendedges); + } + + // set coordinates and options + for (var edg = 0; edg < (legendedges.length); edg++){ + + var tmp_int = Math.floor(Math.random() * 1001); + legendedges[edg].from = edg + "tmp_leg_edges_" + tmp_int + "_1"; + legendedges[edg].to = edg + "tmp_leg_edges_" + tmp_int + "_2"; + legendedges[edg].physics = false; + legendedges[edg].smooth = false; + legendedges[edg].value = undefined; + + if(legendedges[edg].arrows === undefined){ + legendedges[edg].arrows = 'to'; + } + + if(legendedges[edg].width === undefined){ + legendedges[edg].width = 1; + } + + tmp_ly = edge_ly + (edg+1)*step_y; + if(tmp_ly === 0){ + tmp_ly = 1 + } + + if(ncol === 1){ + tmp_lx = lx - mynetwork.clientWidth/3; + tmp_lx2 = lx + mynetwork.clientWidth/3; + } else { + tmp_lx = lx; + tmp_lx2 = lx + (ncol-1) * step_x; + } + + if(tmp_lx === 0){ + tmp_lx = 1 + } + + if(tmp_lx2 === 0){ + tmp_lx2 = 1 + } + + legendnodes.add({id: edg + "tmp_leg_edges_" + tmp_int + "_1", x : tmp_lx, y : tmp_ly, size : 0.0001, hidden : false, shape : "square", mass:1}); + legendnodes.add({id: edg + "tmp_leg_edges_" + tmp_int + "_2", x : tmp_lx2, y : tmp_ly, size : 0.0001, hidden : false, shape : "square", mass:1}); + } + } + + // render legend network + datalegend = { + nodes: legendnodes, + edges: legendedges + }; + + + instance.legend = new vis.Network(document.getElementById("legend"+el.id), datalegend, optionslegend); + //link network for update for re-use and update + document.getElementById("legend"+el.id).network = instance.legend; + } + + //************************* + // Main Network rendering + //************************* + if(x.nodes){ + + // network + nodes = new vis.DataSet(); + edges = new vis.DataSet(); + + var tmpnodes; + if(x.nodesToDataframe){ // data in data.frame + tmpnodes = visNetworkdataframeToD3(x.nodes, "nodes") + } else { // data in list + tmpnodes = x.nodes; + } + // only one element + if(tmpnodes.length === undefined){ + tmpnodes = new Array(tmpnodes); + } + + // update coordinates if igraph + if(x.igraphlayout !== undefined){ + // to improved + var zoomLevel = -232.622349 / (tmpnodes.length + 91.165919) +2.516861; + var igclientWidth = document.getElementById("graph"+el.id).clientWidth; + var scalex = 100; + var scaley = 100; + + // current div visibled + if(igclientWidth !== 0){ + var factor = igclientWidth / 1890; + zoomLevel = zoomLevel/factor; + var scalex = (igclientWidth / 2) * zoomLevel; + var scaley = scalex; + if(x.igraphlayout.type !== "square"){ + scaley = (document.getElementById("graph"+el.id).clientHeight / 2) * zoomLevel; + } + } else { + // current div not visibled.... + igclientWidth = parseInt(el_id.style.width); + if(igclientWidth !== 0){ + var factor = igclientWidth / 1890; + zoomLevel = zoomLevel/factor; + var scalex = (igclientWidth / 2) * zoomLevel; + var scaley = scalex; + if(x.igraphlayout.type !== "square"){ + scaley = (parseInt(el_id.style.height) / 2) * zoomLevel; + } + } + } + + for (var nd in tmpnodes) { + tmpnodes[nd].x = tmpnodes[nd].x * scalex; + tmpnodes[nd].y = tmpnodes[nd].y * scaley; + } + } + + nodes.add(tmpnodes); + + var tmpedges; + if(x.edgesToDataframe){ // data in data.frame + tmpedges = visNetworkdataframeToD3(x.edges, "edges") + } else { // data in list + tmpedges = x.edges; + } + // only one element + if(tmpedges !== null){ + if(tmpedges.length === undefined){ + tmpedges = new Array(tmpedges); + } + edges.add(tmpedges); + } + + // reset tmpnodes + tmpnodes = null; + + data = { + nodes: nodes, + edges: edges + }; + + //save data for re-use and update + document.getElementById("graph"+el.id).nodes = nodes; + document.getElementById("graph"+el.id).edges = edges; + + }else if(x.dot){ + data = { + dot: x.dot + }; + }else if(x.gephi){ + data = { + gephi: x.gephi + }; + } + + var options = x.options; + + //************************* + //manipulation + //************************* + if(x.options.manipulation.enabled){ + + var style = document.createElement('style'); + style.type = 'text/css'; + style.appendChild(document.createTextNode(x.opts_manipulation.datacss)); + document.getElementsByTagName("head")[0].appendChild(style); + + var div_addnode = document.createElement('div'); + div_addnode.id = 'addnode-popUp'; + div_addnode.classList.add('network-popUp'); + div_addnode.innerHTML = x.opts_manipulation.tab_add_node; + el_id.appendChild(div_addnode); + + var div_editnode = document.createElement('div'); + div_editnode.id = 'editnode-popUp'; + div_editnode.classList.add('network-popUp'); + div_editnode.innerHTML = x.opts_manipulation.tab_edit_node; + el_id.appendChild(div_editnode); + + var div_editedge = document.createElement('div'); + div_editedge.id = 'editedge-popUp'; + div_editedge.classList.add('network-popUp'); + div_editedge.innerHTML = x.opts_manipulation.tab_edit_edge; + el_id.appendChild(div_editedge); + + if(x.options.manipulation.addNode === undefined){ + options.manipulation.addNode = function(data, callback) { + document.getElementById('addnode-operation').innerHTML = "Add Node"; + for (var nodecol = 0; nodecol < x.opts_manipulation.addNodeCols.length; nodecol++){ + document.getElementById('addnode-' + x.opts_manipulation.addNodeCols[nodecol]).value = data[x.opts_manipulation.addNodeCols[nodecol]]; + } + document.getElementById('addnode-saveButton').onclick = saveNode.bind(this, data, callback, "addNode"); + document.getElementById('addnode-cancelButton').onclick = clearPopUp.bind(); + document.getElementById('addnode-popUp').style.display = 'block'; + }; + } else if(typeof(x.options.manipulation.addNode) === typeof(true)){ + if(x.options.manipulation.addNode){ + options.manipulation.addNode = function(data, callback) { + document.getElementById('addnode-operation').innerHTML = "Add Node"; + for (var nodecol = 0; nodecol < x.opts_manipulation.addNodeCols.length; nodecol++){ + document.getElementById('addnode-' + x.opts_manipulation.addNodeCols[nodecol]).value = data[x.opts_manipulation.addNodeCols[nodecol]]; + } + document.getElementById('addnode-saveButton').onclick = saveNode.bind(this, data, callback, "addNode"); + document.getElementById('addnode-cancelButton').onclick = clearPopUp.bind(); + document.getElementById('addnode-popUp').style.display = 'block'; + }; + } else { + options.manipulation.addNode = false; + } + } else { + options.manipulation.addNode = x.options.manipulation.addNode; + } + + if(x.options.manipulation.editNode === undefined){ + options.manipulation.editNode = function(data, callback) { + var node_data = nodes.get(data.id); + document.getElementById('editnode-operation').innerHTML = "Edit Node"; + for (var nodecol = 0; nodecol < x.opts_manipulation.editNodeCols.length; nodecol++){ + document.getElementById('editnode-' + x.opts_manipulation.editNodeCols[nodecol]).value = node_data[x.opts_manipulation.editNodeCols[nodecol]]; + } + document.getElementById('editnode-saveButton').onclick = saveNode.bind(this, data, callback, "editNode"); + document.getElementById('editnode-cancelButton').onclick = cancelEdit.bind(this,callback); + document.getElementById('editnode-popUp').style.display = 'block'; + }; + } else if(typeof(x.options.manipulation.editNode) === typeof(true)){ + if(x.options.manipulation.editNode){ + options.manipulation.editNode = function(data, callback) { + var node_data = nodes.get(data.id); + document.getElementById('editnode-operation').innerHTML = "Edit Node"; + for (var nodecol = 0; nodecol < x.opts_manipulation.editNodeCols.length; nodecol++){ + document.getElementById('editnode-' + x.opts_manipulation.editNodeCols[nodecol]).value = node_data[x.opts_manipulation.editNodeCols[nodecol]]; + } + document.getElementById('editnode-saveButton').onclick = saveNode.bind(this, data, callback, "editNode"); + document.getElementById('editnode-cancelButton').onclick = cancelEdit.bind(this,callback); + document.getElementById('editnode-popUp').style.display = 'block'; + }; + } else { + options.manipulation.editNode = false; + } + } else { + options.manipulation.editNode = x.options.manipulation.editNode; + } + + if(x.options.manipulation.deleteNode === undefined){ + options.manipulation.deleteNode = function(data, callback) { + var r = confirm("Do you want to delete " + data.nodes.length + " node(s) and " + data.edges.length + " edges ?"); + if (r === true) { + deleteSubGraph(data, callback); + } else { clearPopUp(); callback(null); } + }; + } else if(typeof(x.options.manipulation.deleteNode) === typeof(true)){ + if(x.options.manipulation.deleteNode){ + options.manipulation.deleteNode = function(data, callback) { + var r = confirm("Do you want to delete " + data.nodes.length + " node(s) and " + data.edges.length + " edges ?"); + if (r === true) { + deleteSubGraph(data, callback); + } else { clearPopUp(); callback(null); } + }; + } else { + options.manipulation.deleteNode = false; + } + } else { + options.manipulation.deleteNode = x.options.manipulation.deleteNode; + } + + if(x.options.manipulation.deleteEdge === undefined){ + options.manipulation.deleteEdge = function(data, callback) { + var r = confirm("Do you want to delete " + data.edges.length + " edges ?"); + if (r === true) { + deleteSubGraph(data, callback); + } else { clearPopUp(); callback(null); } + }; + } else if(typeof(x.options.manipulation.deleteEdge) === typeof(true)){ + if(x.options.manipulation.deleteEdge){ + options.manipulation.deleteEdge = function(data, callback) { + var r = confirm("Do you want to delete " + data.edges.length + " edges ?"); + if (r === true) { + deleteSubGraph(data, callback); + } else { clearPopUp(); callback(null); } + }; + } else { + options.manipulation.deleteEdge = false; + } + } else { + options.manipulation.deleteEdge = x.options.manipulation.deleteEdge; + } + + if(x.options.manipulation.addEdge === undefined){ + options.manipulation.addEdge = function(data, callback) { + if (data.from == data.to) { + var r = confirm("Do you want to connect the node to itself?"); + if (r === true) { + saveEdge(data, callback, "addEdge"); + } + } + else { + saveEdge(data, callback, "addEdge"); + } + }; + } else if(typeof(x.options.manipulation.addEdge) === typeof(true)){ + if(x.options.manipulation.addEdge){ + options.manipulation.addEdge = function(data, callback) { + if (data.from == data.to) { + var r = confirm("Do you want to connect the node to itself?"); + if (r === true) { + saveEdge(data, callback, "addEdge"); + } + } + else { + saveEdge(data, callback, "addEdge"); + } + }; + } else { + options.manipulation.addEdge = false; + } + } else { + options.manipulation.addEdge = x.options.manipulation.addEdge; + } + + if(x.options.manipulation.editEdge === undefined){ + if(x.opts_manipulation.tab_edit_edge){ + options.manipulation.editEdge = {editWithoutDrag : function(data, callback) { + var edge_data = edges.get(data.id); + document.getElementById('editedge-operation').innerHTML = "Edit Edge"; + for (var edgecol = 0; edgecol < x.opts_manipulation.editEdgeCols.length; edgecol++){ + document.getElementById('editedge-' + x.opts_manipulation.editEdgeCols[edgecol]).value = edge_data[x.opts_manipulation.editEdgeCols[edgecol]]; + } + document.getElementById('editedge-saveButton').onclick = saveEdge.bind(this, data, callback, "editEdgeCols"); + document.getElementById('editedge-cancelButton').onclick = cancelEdit.bind(this,callback); + document.getElementById('editedge-popUp').style.display = 'block'; + } + } + } else { + options.manipulation.editEdge = function(data, callback) { + if (data.from == data.to) { + var r = confirm("Do you want to connect the node to itself?"); + if (r === true) { + saveEdge(data, callback, "editEdge"); + } + } + else { + saveEdge(data, callback, "editEdge"); + } + }; + } + } else if(typeof(x.options.manipulation.editEdge) === typeof(true)){ + if(x.options.manipulation.editEdge){ + if(x.opts_manipulation.tab_edit_edge){ + options.manipulation.editEdge = {editWithoutDrag : function(data, callback) { + var edge_data = edges.get(data.id); + document.getElementById('editedge-operation').innerHTML = "Edit Edge"; + for (var edgecol = 0; edgecol < x.opts_manipulation.editEdgeCols.length; edgecol++){ + document.getElementById('editedge-' + x.opts_manipulation.editEdgeCols[edgecol]).value = edge_data[x.opts_manipulation.editEdgeCols[edgecol]]; + } + document.getElementById('editedge-saveButton').onclick = saveEdge.bind(this, data, callback, "editEdgeCols"); + document.getElementById('editedge-cancelButton').onclick = cancelEdit.bind(this,callback); + document.getElementById('editedge-popUp').style.display = 'block'; + } + } + } else { + options.manipulation.editEdge = function(data, callback) { + if (data.from == data.to) { + var r = confirm("Do you want to connect the node to itself?"); + if (r === true) { + saveEdge(data, callback, "editEdge"); + } + } + else { + saveEdge(data, callback, "editEdge"); + } + }; + } + } else { + options.manipulation.editEdge = false; + } + } else { + options.manipulation.editEdge = x.options.manipulation.editEdge; + } + } + + // create network + instance.network = new vis.Network(document.getElementById("graph"+el.id), data, options); + if (window.Shiny){ + Shiny.onInputChange(el.id + '_initialized', true); + } + + //************************* + //add values to idselection + //************************* + + if(el_id.idselection){ + var selectList = document.getElementById("nodeSelect"+el.id) + setNodeIdList(selectList, x.idselection, nodes) + + if (window.Shiny){ + changeInput('selected', document.getElementById("nodeSelect"+el.id).value); + } + } + + //console.info(instance.network) + //save data for re-use and update + document.getElementById("graph"+el.id).chart = instance.network; + document.getElementById("graph"+el.id).options = options; + + ///////// + // popup + ///////// + + // Temporary variables to hold mouse x-y pos.s + var tempX = 0 + var tempY = 0 + + // Main function to retrieve mouse x-y pos.s + function getMouseXY(e) { + tempX = e.clientX + tempY = e.clientY + // catch possible negative values in NS + if (tempX < 0){tempX = 0} + if (tempY < 0){tempY = 0} + } + + document.addEventListener('mousemove', getMouseXY); + + //this.body.emitter.emit("showPopup",{id:this.popupObj.id,x:t.x+3,y:t.y-5})) + + // popup for title + var popupState = false; + var popupTimeout = null; + var vispopup = document.createElement("div"); + + // disable vis.js tooltip + var style = document.createElement('style'); + style.type = 'text/css'; + style.innerHTML = 'div.vis-tooltip {display : none}'; + document.getElementsByTagName('head')[0].appendChild(style); + + var popupStyle = 'position: fixed;visibility:hidden;padding: 5px;font-family: verdana;font-size:14px;font-color:#000000;background-color: #f5f4ed;-moz-border-radius: 3px;-webkit-border-radius: 3px;border-radius: 3px;border: 1px solid #808074;box-shadow: 3px 3px 10px rgba(0, 0, 0, 0.2);max-width:400px;word-break: break-all' + + if(x.tooltipStyle !== undefined){ + popupStyle = x.tooltipStyle + } + var popupStay = 300; + if(x.tooltipStay !== undefined){ + popupStay = x.tooltipStay + } + vispopup.setAttribute('style', popupStyle) + + document.getElementById("graph"+el.id).appendChild(vispopup); + + // add some event listeners to avoid it disappearing when the mouse if over it. + vispopup.addEventListener('mouseover',function () { + if (popupTimeout !== null) { + clearTimeout(popupTimeout); + popupTimeout = null; + } + }); + + // set the timeout when the mouse leaves it. + vispopup.addEventListener('mouseout',function () { + if (popupTimeout === null) { + myHidePopup(100); + } + }); + + // use the popup event to show + instance.network.on("showPopup", function(params) { + popupState = true; + myShowPopup(params); + }) + + // use the hide event to hide it + instance.network.on("hidePopup", function(params) { + // avoid double firing of this event, bug in 4.2.0 + if (popupState === true) { + popupState = false; + myHidePopup(popupStay); + } + }) + + // hiding the popup through css and a timeout + function myHidePopup(delay) { + popupTimeout = setTimeout(function() {vispopup.style.visibility = 'hidden';}, delay); + } + + // showing the popup + function myShowPopup(id) { + // get the data from the vis.DataSet + var nodeData = nodes.get([id]); + var edgeData = edges.get([id]); + + // a node ? + if(nodeData[0] !== null && nodeData[0] !== undefined){ + vispopup.innerHTML = nodeData[0].title; + // show and place the tooltip. + vispopup.style.visibility = 'visible'; + vispopup.style.top = tempY - 20 + "px"; + vispopup.style.left = tempX + 5 + "px"; + + } else if(edgeData[0] !== null && edgeData[0] !== undefined){ + // so it's perhaps a edge ? + vispopup.innerHTML = edgeData[0].title; + // show and place the tooltip. + vispopup.style.visibility = 'visible'; + vispopup.style.top = tempY - 20 + "px"; + vispopup.style.left = tempX + 5 + "px"; + } else { + // or a cluster ? + var node_cluster = instance.network.body.nodes[id] + if(node_cluster !== undefined){ + vispopup.innerHTML = node_cluster.options.title; + // show and place the tooltip. + vispopup.style.visibility = 'visible'; + vispopup.style.top = tempY - 20 + "px"; + vispopup.style.left = tempX + 5 + "px"; + } + } + + // for sparkline. Eval script... + var any_script= vispopup.getElementsByTagName('script') + for (var n = 0; n < any_script.length; n++){ + if(any_script[n].getAttribute("type") === "text/javascript"){ + eval(any_script[n].innerHTML); + } + } + } + + //************************* + // Events + //************************* + if(x.events !== undefined){ + for (var key in x.events) { + instance.network.on(key, x.events[key]); + } + } + + if(x.OnceEvents !== undefined){ + for (var key in x.OnceEvents) { + instance.network.once(key, x.OnceEvents[key]); + } + } + + if(x.ResetEvents !== undefined){ + for (var key in x.ResetEvents) { + instance.network.off(key); + } + } + //************************* + // Selected Highlight + //************************* + + function selectedHighlight(value) { + // get current nodes + var allNodes = nodes.get({returnType:"Object"}); + + // first resetEdges + resetAllEdges(edges, el_id.byselectionColor, el_id.highlightColor, instance.network); + var connectedNodes = []; + + // get variable + var sel = el_id.byselection_variable; + // need to make an update? + var update = !(el_id.selectActive === false && value === ""); + + if (value !== "") { + var updateArray = []; + el_id.selectActive = true; + + // mark all nodes as hard to read. + for (var nodeId in allNodes) { + var value_in = false; + // unique selection + if(el_id.byselection_multiple === false){ + if(sel == "label"){ + value_in = ((allNodes[nodeId]["label"] + "") === value) || ((allNodes[nodeId]["hiddenLabel"] + "") === value); + }else if(sel == "color"){ + value_in = ((allNodes[nodeId]["color"] + "") === value) || ((allNodes[nodeId]["hiddenColor"] + "") === value); + }else { + value_in = (allNodes[nodeId][sel] + "") === value; + } + }else{ // multiple selection + if(sel == "label"){ + var current_value = allNodes[nodeId]["label"] + ""; + var value_split = current_value.split(",").map(Function.prototype.call, String.prototype.trim); + var current_value2 = allNodes[nodeId]["hiddenLabel"] + ""; + var value_split2 = current_value.split(",").map(Function.prototype.call, String.prototype.trim); + value_in = (value_split.indexOf(value) !== -1) || (value_split2.indexOf(value) !== -1); + }else if(sel == "color"){ + var current_value = allNodes[nodeId]["color"] + ""; + var value_split = current_value.split(",").map(Function.prototype.call, String.prototype.trim); + var current_value2 = allNodes[nodeId]["hiddenColor"] + ""; + var value_split2 = current_value.split(",").map(Function.prototype.call, String.prototype.trim); + value_in = (value_split.indexOf(value) !== -1) || (value_split2.indexOf(value) !== -1); + }else { + var current_value = allNodes[nodeId][sel] + ""; + var value_split = current_value.split(",").map(Function.prototype.call, String.prototype.trim); + value_in = value_split.indexOf(value) !== -1; + } + } + if(value_in === false){ // not in selection, so as hard to read + nodeAsHardToRead(allNodes[nodeId], options, el_id.byselectionColor, el_id.highlightColor, instance.network, "node"); + } else { // in selection, so reset if needed + connectedNodes = connectedNodes.concat(allNodes[nodeId].id); + resetOneNode(allNodes[nodeId], options, instance.network); + } + allNodes[nodeId].x = undefined; + allNodes[nodeId].y = undefined; + // update data + if (allNodes.hasOwnProperty(nodeId) && update) { + updateArray.push(allNodes[nodeId]); + } + } + if(update){ + // set some edges as hard to read + var edgesHardToRead = edges.get({ + fields: ['id', 'color', 'hiddenColor', 'hiddenLabel', 'label'], + filter: function (item) { + return (indexOf.call(connectedNodes, item.from, true) === -1) ; + }, + returnType :'Array' + }); + + // all in degree nodes get their own color and their label back + for (i = 0; i < edgesHardToRead.length; i++) { + edgeAsHardToRead(edgesHardToRead[i], el_id.byselectionColor, el_id.highlightColor, instance.network, type = "edge") + } + edges.update(edgesHardToRead); + + nodes.update(updateArray); + + // select for highlight + if(el_id.highlight && x.nodes && el_id.byselectionHighlight){ + neighbourhoodHighlight(connectedNodes, "click", el_id.highlightAlgorithm, false); + instance.network.selectNodes(connectedNodes) + } + } + } + else if (el_id.selectActive === true) { + //reset nodes + resetAllNodes(nodes, update, options, instance.network, false) + el_id.selectActive = false + } + } + + //************************* + //Highlight + //************************* + var is_hovered = false; + var is_clicked = false; + + function neighbourhoodHighlight(params, action_type, algorithm, reset_selectedBy) { + + var nodes_in_clusters = instance.network.body.modules.clustering.clusteredNodes; + var have_cluster_nodes = false; + if(Object.keys(nodes_in_clusters).length > 0){ + have_cluster_nodes = true; + nodes_in_clusters = Object.keys(nodes_in_clusters); + edges_in_clusters = Object.keys(instance.network.body.modules.clustering.clusteredEdges); + } else { + nodes_in_clusters = []; + edges_in_clusters = []; + } + + var selectNode; + // get nodes data + var allNodes = nodes.get({returnType:"Object"}); + + // cluster + var array_cluster_id; + + // update + var update = !(el_id.highlightActive === false && params.length === 0) | (el_id.selectActive === true && params.length === 0); + + if(!(action_type == "hover" && is_clicked)){ + + // first resetEdges + resetAllEdges(edges, el_id.highlightColor, el_id.byselectionColor, instance.network); + + if (params.length > 0) { + var is_cluster = instance.network.isCluster(params[0]); + var selectedNode; + + if(is_cluster){ + selectedNode = instance.network.getNodesInCluster(params[0]); + } else { + selectedNode = params; + } + + var updateArray = []; + if(el_id.idselection){ + selectNode = document.getElementById('nodeSelect'+el.id); + if(is_cluster === false){ + if(x.idselection.values !== undefined){ + if(indexOf.call(x.idselection.values, selectedNode[0], true) > -1){ + selectNode.value = selectedNode[0]; + }else{ + selectNode.value = ""; + } + }else{ + selectNode.value = selectedNode[0]; + } + if (window.Shiny){ + changeInput('selected', selectNode.value); + } + } + } + + el_id.highlightActive = true; + var i,j; + var degrees = el_id.degree; + + // mark all nodes as hard to read. + for (var nodeId in instance.network.body.nodes) { + if(instance.network.isCluster(nodeId)){ + nodeAsHardToRead(instance.network.body.nodes[nodeId], options, el_id.highlightColor, el_id.byselectionColor, instance.network, "cluster"); + }else { + var tmp_node = allNodes[nodeId]; + if(tmp_node !== undefined){ + nodeAsHardToRead(tmp_node, options, el_id.highlightColor, el_id.byselectionColor, instance.network, "node"); + tmp_node.x = undefined; + tmp_node.y = undefined; + } + } + } + + if(algorithm === "all"){ + var connectedNodes; + if(degrees > 0){ + connectedNodes = []; + for (j = 0; j < selectedNode.length; j++) { + connectedNodes = connectedNodes.concat(instance.network.getConnectedNodes(selectedNode[j], true)); + } + connectedNodes = uniqueArray(connectedNodes, true, instance.network); + }else{ + connectedNodes = selectedNode; + } + + var allConnectedNodes = []; + // get the nodes to color + if(degrees >= 2){ + for (i = 2; i <= degrees; i++) { + var previous_connectedNodes = connectedNodes; + var currentlength = connectedNodes.length; + for (j = 0; j < currentlength; j++) { + connectedNodes = uniqueArray(connectedNodes.concat(instance.network.getConnectedNodes(connectedNodes[j])), true, instance.network); + } + if (connectedNodes.length === previous_connectedNodes.length) { break; } + } + } + // nodes to just label + for (j = 0; j < connectedNodes.length; j++) { + allConnectedNodes = allConnectedNodes.concat(instance.network.getConnectedNodes(connectedNodes[j])); + } + allConnectedNodes = uniqueArray(allConnectedNodes, true, instance.network); + + if(el_id.highlightLabelOnly === true){ + // all higher degree nodes get a different color and their label back + array_cluster_id = []; + for (i = 0; i < allConnectedNodes.length; i++) { + if (allNodes[allConnectedNodes[i]].hiddenLabel !== undefined) { + allNodes[allConnectedNodes[i]].label = allNodes[allConnectedNodes[i]].hiddenLabel; + allNodes[allConnectedNodes[i]].hiddenLabel = undefined; + if(have_cluster_nodes){ + if(indexOf.call(nodes_in_clusters, allConnectedNodes[i], true) > -1){ + + array_cluster_id = array_cluster_id.concat(instance.network.clustering.findNode(allConnectedNodes[i])[0]); + } + } + } + } + + if(array_cluster_id.length > 0){ + array_cluster_id = uniqueArray(array_cluster_id, false, instance.network); + for (i = 0; i < array_cluster_id.length; i++) { + instance.network.body.nodes[array_cluster_id[i]].setOptions({label : instance.network.body.nodes[array_cluster_id[i]].options.hiddenLabel, hiddenLabel:undefined}) + } + } + } + + // all in degree nodes get their own color and their label back + main nodes + connectedNodes = connectedNodes.concat(selectedNode); + + if (window.Shiny){ + Shiny.onInputChange(el.id + '_highlight_color_id', uniqueShiny(connectedNodes)); + } + if(el_id.highlightLabelOnly === true){ + if (window.Shiny){ + Shiny.onInputChange(el.id + '_highlight_label_id', allConnectedNodes.filter(function(x){ return !connectedNodes.includes(x)})); + } + } + + array_cluster_id = []; + for (i = 0; i < connectedNodes.length; i++) { + resetOneNode(allNodes[connectedNodes[i]], options, instance.network); + if(have_cluster_nodes){ + if(indexOf.call(nodes_in_clusters, connectedNodes[i], true) > -1){ + array_cluster_id = array_cluster_id.concat(instance.network.clustering.findNode(connectedNodes[i])[0]); + } + } + } + + if(array_cluster_id.length > 0){ + array_cluster_id = uniqueArray(array_cluster_id, false, instance.network); + for (i = 0; i < array_cluster_id.length; i++) { + resetOneCluster(instance.network.body.nodes[array_cluster_id[i]], options, instance.network); + } + } + + // set some edges as hard to read + var edgesHardToRead = edges.get({ + fields: ['id', 'color', 'hiddenColor', 'hiddenLabel', 'label'], + filter: function (item) { + return ((indexOf.call(connectedNodes, item.from, true) === -1)) ; + }, + returnType :'Array' + }); + + // all in degree nodes get their own color and their label back + array_cluster_id = []; + var tmp_cluster_id; + for (i = 0; i < edgesHardToRead.length; i++) { + edgeAsHardToRead(edgesHardToRead[i], el_id.highlightColor, el_id.byselectionColor, instance.network, type = "edge") + if(have_cluster_nodes){ + if(indexOf.call(edges_in_clusters, edgesHardToRead[i].id, true) > -1){ + tmp_cluster_id = instance.network.clustering.getClusteredEdges(edgesHardToRead[i].id); + if(tmp_cluster_id.length > 1){ + array_cluster_id = array_cluster_id.concat(tmp_cluster_id[0]); + } + } + } + } + + if(array_cluster_id.length > 0){ + array_cluster_id = uniqueArray(array_cluster_id, false, instance.network); + for (i = 0; i < array_cluster_id.length; i++) { + edgeAsHardToRead(instance.network.body.edges[array_cluster_id[i]].options, el_id.highlightColor, el_id.byselectionColor, instance.network, type = "cluster") + } + } + edges.update(edgesHardToRead); + } else if(algorithm === "hierarchical"){ + + var degree_from = degrees.from; + var degree_to = degrees.to; + degrees = Math.max(degree_from, degree_to); + + var allConnectedNodes = []; + var currentConnectedFromNodes = []; + var currentConnectedToNodes = []; + var connectedFromNodes = []; + var connectedToNodes = []; + + if(degree_from > 0){ + connectedFromNodes = edges.get({ + fields: ['from'], + filter: function (item) { + return ((indexOf.call(selectedNode, item.to, true) !== -1)) ; + }, + returnType :'Array' + }); + } + + if(degree_to > 0){ + connectedToNodes = edges.get({ + fields: ['to'], + filter: function (item) { + return ((indexOf.call(selectedNode, item.from, true) !== -1)) ; + }, + returnType :'Array' + }); + } + for (j = 0; j < connectedFromNodes.length; j++) { + allConnectedNodes = allConnectedNodes.concat(connectedFromNodes[j].from); + currentConnectedFromNodes = currentConnectedFromNodes.concat(connectedFromNodes[j].from); + } + + for (j = 0; j < connectedToNodes.length; j++) { + allConnectedNodes = allConnectedNodes.concat(connectedToNodes[j].to); + currentConnectedToNodes = currentConnectedToNodes.concat(connectedToNodes[j].to); + } + + var go_from; + var go_to; + + if(degrees > 1){ + for (i = 2; i <= degrees; i++) { + go_from = false; + go_to = false; + if(currentConnectedFromNodes.length > 0 && i <= degree_from){ + connectedFromNodes = edges.get({ + fields: ['from'], + filter: function (item) { + return indexOf.call(currentConnectedFromNodes, item.to, true) > -1; + }, + returnType :'Array' + }); + go_from = true; + } + + if(currentConnectedToNodes.length > 0 && i <= degree_to){ + connectedToNodes = edges.get({ + fields: ['to'], + filter: function (item) { + return indexOf.call(currentConnectedToNodes, item.from, true) > -1; + }, + returnType :'Array' + }); + go_to = true; + } + + if(go_from === true){ + currentConnectedFromNodes = []; + for (j = 0; j < connectedFromNodes.length; j++) { + allConnectedNodes = allConnectedNodes.concat(connectedFromNodes[j].from); + currentConnectedFromNodes = currentConnectedFromNodes.concat(connectedFromNodes[j].from); + } + } + + if(go_to === true){ + currentConnectedToNodes = []; + for (j = 0; j < connectedToNodes.length; j++) { + allConnectedNodes = allConnectedNodes.concat(connectedToNodes[j].to); + currentConnectedToNodes = currentConnectedToNodes.concat(connectedToNodes[j].to); + } + } + + if (go_from === false && go_to === false) { break;} + } + } + + allConnectedNodes = uniqueArray(allConnectedNodes, true, instance.network).concat(selectedNode); + + var nodesWithLabel = []; + if(el_id.highlightLabelOnly === true){ + if(degrees > 0){ + // nodes to just label + for (j = 0; j < currentConnectedToNodes.length; j++) { + nodesWithLabel = nodesWithLabel.concat(instance.network.getConnectedNodes(currentConnectedToNodes[j])); + } + + for (j = 0; j < currentConnectedFromNodes.length; j++) { + nodesWithLabel = nodesWithLabel.concat(instance.network.getConnectedNodes(currentConnectedFromNodes[j])); + } + nodesWithLabel = uniqueArray(nodesWithLabel, true, instance.network); + } else{ + nodesWithLabel = currentConnectedToNodes; + nodesWithLabel = nodesWithLabel.concat(currentConnectedFromNodes); + nodesWithLabel = uniqueArray(nodesWithLabel, true, instance.network); + } + } + // all higher degree nodes get a different color and their label back + array_cluster_id = []; + for (i = 0; i < nodesWithLabel.length; i++) { + if (allNodes[nodesWithLabel[i]].hiddenLabel !== undefined) { + allNodes[nodesWithLabel[i]].label = allNodes[nodesWithLabel[i]].hiddenLabel; + allNodes[nodesWithLabel[i]].hiddenLabel = undefined; + if(have_cluster_nodes){ + if(indexOf.call(nodes_in_clusters, nodesWithLabel[i], true) > -1){ + array_cluster_id = array_cluster_id.concat(instance.network.clustering.findNode(nodesWithLabel[i])[0]); + } + } + } + } + + if(array_cluster_id.length > 0){ + array_cluster_id = uniqueArray(array_cluster_id, false, instance.network); + for (i = 0; i < array_cluster_id.length; i++) { + instance.network.body.nodes[array_cluster_id[i]].setOptions({label : instance.network.body.nodes[array_cluster_id[i]].options.hiddenLabel, hiddenLabel:undefined}) + } + } + + // all in degree nodes get their own color and their label back + array_cluster_id = []; + for (i = 0; i < allConnectedNodes.length; i++) { + resetOneNode(allNodes[allConnectedNodes[i]], options, instance.network); + if(have_cluster_nodes){ + if(indexOf.call(nodes_in_clusters, allConnectedNodes[i], true) > -1){ + array_cluster_id = array_cluster_id.concat(instance.network.clustering.findNode(allConnectedNodes[i])[0]); + } + } + } + + if(array_cluster_id.length > 0){ + array_cluster_id = uniqueArray(array_cluster_id, false, instance.network); + for (i = 0; i < array_cluster_id.length; i++) { + resetOneCluster(instance.network.body.nodes[array_cluster_id[i]], options, instance.network); + } + } + + if (window.Shiny){ + Shiny.onInputChange(el.id + '_highlight_color_id', uniqueShiny(allConnectedNodes)); + } + if(el_id.highlightLabelOnly === true){ + if (window.Shiny){ + Shiny.onInputChange(el.id + '_highlight_label_id', nodesWithLabel.filter(function(x) {return !allConnectedNodes.includes(x)})); + } + } + + // set some edges as hard to read + var edgesHardToRead = edges.get({ + fields: ['id', 'color', 'hiddenColor', 'hiddenLabel', 'label'], + filter: function (item) { + return ((indexOf.call(allConnectedNodes, item.from, true) === -1) || (indexOf.call(allConnectedNodes, item.to, true) === -1)) ; + }, + returnType :'Array' + }); + + array_cluster_id = []; + for (i = 0; i < edgesHardToRead.length; i++) { + edgeAsHardToRead(edgesHardToRead[i], el_id.highlightColor, el_id.byselectionColor, instance.network, type = "edge") + if(have_cluster_nodes){ + if(indexOf.call(edges_in_clusters, edgesHardToRead[i].id, true) > -1){ + var tmp_cluster_id = instance.network.clustering.getClusteredEdges(edgesHardToRead[i].id); + if(tmp_cluster_id.length > 1){ + array_cluster_id = array_cluster_id.concat(tmp_cluster_id[0]); + } + } + } + } + + if(array_cluster_id.length > 0){ + array_cluster_id = uniqueArray(array_cluster_id, false, instance.network); + for (i = 0; i < array_cluster_id.length; i++) { + edgeAsHardToRead(instance.network.body.edges[array_cluster_id[i]].options, el_id.highlightColor, el_id.byselectionColor, instance.network, type = "cluster"); + } + } + + edges.update(edgesHardToRead); + + } + + if(update){ + if(!(action_type == "hover")){ + is_clicked = true; + } + // transform the object into an array + var updateArray = []; + for (nodeId in allNodes) { + if (allNodes.hasOwnProperty(nodeId)) { + updateArray.push(allNodes[nodeId]); + } + } + nodes.update(updateArray); + }else{ + is_clicked = false; + } + + } + else if (el_id.highlightActive === true | el_id.selectActive === true) { + // reset nodeSelect list if actived + if(el_id.idselection){ + resetList("nodeSelect", el.id, 'selected'); + } + //reset nodes + resetAllNodes(nodes, update, options, instance.network, false) + el_id.highlightActive = false; + is_clicked = false; + + if (window.Shiny){ + Shiny.onInputChange(el.id + '_highlight_label_id', null) + Shiny.onInputChange(el.id + '_highlight_color_id', null) + } + } + } + // reset selectedBy list if actived + if(el_id.byselection && reset_selectedBy){ + resetList("selectedBy", el.id, 'selectedBy'); + } + } + + function onClickIDSelection(selectedItems) { + var selectNode; + if(el_id.idselection){ + if (selectedItems.nodes.length !== 0) { + selectNode = document.getElementById('nodeSelect'+el.id); + if(x.idselection.values !== undefined){ + if(indexOf.call(x.idselection.values, selectedItems.nodes[0], true) > -1){ + selectNode.value = selectedItems.nodes; + }else{ + selectNode.value = ""; + } + }else{ + selectNode.value = selectedItems.nodes; + } + if (window.Shiny){ + changeInput('selected', selectNode.value); + } + }else{ + resetList("nodeSelect", el.id, 'selected'); + } + } + if(el_id.byselection){ + // reset selectedBy list if actived + if (selectedItems.nodes.length === 0) { + resetList("selectedBy", el.id, 'selectedBy'); + selectedHighlight(""); + } + } + } + + // shared click function (selectedNodes) + document.getElementById("graph"+el.id).myclick = function(params){ + if(el_id.highlight && x.nodes){ + neighbourhoodHighlight(params.nodes, "click", el_id.highlightAlgorithm, true); + }else if((el_id.idselection || el_id.byselection) && x.nodes){ + onClickIDSelection(params) + } + }; + + // Set event in relation with highlightNearest + instance.network.on("click", function(params){ + if(el_id.highlight && x.nodes){ + neighbourhoodHighlight(params.nodes, "click", el_id.highlightAlgorithm, true); + }else if((el_id.idselection || el_id.byselection) && x.nodes){ + onClickIDSelection(params) + } + }); + + instance.network.on("hoverNode", function(params){ + if(el_id.hoverNearest && x.nodes){ + neighbourhoodHighlight([params.node], "hover", el_id.highlightAlgorithm, true); + } + }); + + instance.network.on("blurNode", function(params){ + if(el_id.hoverNearest && x.nodes){ + neighbourhoodHighlight([], "hover", el_id.highlightAlgorithm, true); + } + }); + + //************************* + //collapse + //************************* + instance.network.on("doubleClick", function(params){ + if(el_id.collapse){ + collapsedNetwork(params.nodes, el_id.collapseFit, el_id.collapseResetHighlight, + el_id.clusterOptions, el_id.collapseLabelSuffix, + el_id.tree, instance.network, el.id) + } + }); + + if(el_id.collapse){ + instance.network.on("doubleClick", networkOpenCluster); + } + + //************************* + //footer + //************************* + var div_footer = document.createElement('div'); + div_footer.id = "footer"+el.id; + div_footer.setAttribute('style', 'font-family:Georgia, Times New Roman, Times, serif;font-size:12px;text-align:center;background-color: inherit;'); + div_footer.style.display = 'none'; + + document.getElementById("graph" + el.id).appendChild(div_footer); + if(x.footer !== null){ + div_footer.innerHTML = x.footer.text; + div_footer.setAttribute('style', x.footer.style + ';background-color: inherit;'); + div_footer.style.display = 'block'; + } + + //************************* + // export + //************************* + if(x.export !== undefined){ + + var downloaddiv = document.createElement('div'); + downloaddiv.setAttribute('style', 'float:right; width:100%;background-color: inherit;'); + + var downloadbutton = document.createElement("button"); + downloadbutton.setAttribute('style', x.export.css); + downloadbutton.style.position = "relative"; + downloadbutton.id = "download"+el.id; + downloadbutton.appendChild(document.createTextNode(x.export.label)); + downloaddiv.appendChild(downloadbutton); + + var hr = document.createElement("hr"); + hr.setAttribute('style', 'height:5px; visibility:hidden; margin-bottom:-1px;'); + downloaddiv.appendChild(hr); + + document.getElementById("maindiv"+el.id).appendChild(downloaddiv); + + document.getElementById("download"+el.id).onclick = function() { + + // height control for export + var addHeightExport = document.getElementById("graph" + el.id).offsetHeight + idList.offsetHeight + byList.offsetHeight + downloaddiv.offsetHeight; + if(div_title.style.display !== 'none'){ + addHeightExport = addHeightExport + div_title.offsetHeight; + } + if(div_subtitle.style.display !== 'none'){ + addHeightExport = addHeightExport + div_subtitle.offsetHeight; + } + if(div_footer.style.display !== 'none'){ + addHeightExport = addHeightExport + div_footer.offsetHeight; + } else { + addHeightExport = addHeightExport + 15; + } + + downloadbutton.style.display = 'none'; + var export_background = x.export.background; + if(x.background !== "transparent" && x.background !== "rgba(0, 0, 0, 0)"){ + export_background = x.background + } + + if(x.export.type !== "pdf"){ + html2canvas(el_id, { + background: export_background, + height : addHeightExport, + onrendered: function(canvas) { + canvas.toBlobHD(function(blob) { + saveAs(blob, x.export.name); + }, "image/"+x.export.type); + } + }); + } else { + html2canvas(el_id, { + background: export_background, + height : addHeightExport, + onrendered: function(canvas) { + var myImage = canvas.toDataURL("image/png", 1.0); + //var imgWidth = (canvas.width * 25.4) / 24; + //var imgHeight = (canvas.height * 25.4) / 24; + var table = new jsPDF('l', 'pt', [canvas.width, canvas.height]); + table.addImage(myImage, 'JPEG', 0, 0, canvas.width, canvas.height); + table.save(x.export.name); + } + }); + } + + downloadbutton.style.display = 'block'; + }; + } + + //************************* + // dataManipulation + //************************* + function clearPopUp() { + if(x.opts_manipulation.tab_add_node){ + document.getElementById('addnode-saveButton').onclick = null; + document.getElementById('addnode-cancelButton').onclick = null; + document.getElementById('addnode-popUp').style.display = 'none'; + } + + if(x.opts_manipulation.tab_edit_node){ + document.getElementById('editnode-saveButton').onclick = null; + document.getElementById('editnode-cancelButton').onclick = null; + document.getElementById('editnode-popUp').style.display = 'none'; + } + + if(x.opts_manipulation.tab_edit_edge){ + document.getElementById('editedge-saveButton').onclick = null; + document.getElementById('editedge-cancelButton').onclick = null; + document.getElementById('editedge-popUp').style.display = 'none'; + } + } + + function saveNode(data, callback, cmd) { + var iname; + var prediv; + if(cmd === "addNode"){ + iname = "addNodeCols"; + prediv = 'addnode-'; + } else { + iname = "editNodeCols"; + prediv = 'editnode-'; + } + var obj = {id : data.id} + for (var nodecol = 0; nodecol < x.opts_manipulation[iname].length; nodecol++){ + var add_node_val = document.getElementById(prediv + x.opts_manipulation[iname][nodecol]).value; + var add_node_type = document.getElementById(prediv + x.opts_manipulation[iname][nodecol]).type; + if(add_node_type && add_node_type === "number"){ + add_node_val = parseFloat(add_node_val) + } + if(add_node_val !== "undefined"){ + obj[x.opts_manipulation[iname][nodecol]] = add_node_val + } + } + + var update_obj = clone(obj); + update_obj.x = data.x; + update_obj.y = data.y; + nodes.update(update_obj); + + if (window.Shiny){ + obj.cmd = cmd; + Shiny.onInputChange(el.id + '_graphChange', obj); + } + clearPopUp(); + callback(null); + } + + function saveEdge(data, callback, cmd) { + if(cmd === "editEdge"){ + callback(data); //must be first called for egde id ! + if (window.Shiny){ + var obj = {cmd: cmd, id: data.id, from: data.from, to: data.to}; + Shiny.onInputChange(el.id + '_graphChange', obj); + } + } else if(cmd === "addEdge"){ + callback(data); //must be first called for egde id ! + if (window.Shiny){ + var obj = {cmd: cmd, id: data.id, from: data.from, to: data.to}; + Shiny.onInputChange(el.id + '_graphChange', obj); + } + } else if(cmd === "editEdgeCols"){ + for (var edgecol = 0; edgecol < x.opts_manipulation.editEdgeCols.length; edgecol++){ + var add_edge_val = document.getElementById("editedge-" + x.opts_manipulation.editEdgeCols[edgecol]).value; + var add_edge_type = document.getElementById("editedge-" + x.opts_manipulation.editEdgeCols[edgecol]).type; + if(add_edge_type && add_edge_type === "number"){ + add_edge_val = parseFloat(add_edge_val) + } + if(add_edge_val !== "undefined"){ + data[x.opts_manipulation.editEdgeCols[edgecol]] = add_edge_val + } + } + if (window.Shiny){ + var obj = {cmd: "editEdge", id : data.id} + for (var edgecol = 0; edgecol < x.opts_manipulation.editEdgeCols.length; edgecol++){ + if(data[x.opts_manipulation.editEdgeCols[edgecol]] !== "undefined"){ + obj[x.opts_manipulation.editEdgeCols[edgecol]] = data[x.opts_manipulation.editEdgeCols[edgecol]]; + } + } + Shiny.onInputChange(el.id + '_graphChange', obj); + } + callback(data); + clearPopUp(); + } + } + + function deleteSubGraph(data, callback) { + if (window.Shiny){ + var obj = {cmd: "deleteElements", nodes: data.nodes, edges: data.edges} + Shiny.onInputChange(el.id + '_graphChange', obj); + } + callback(data); + } + + function cancelEdit(callback) { + clearPopUp(); + callback(null); + } + + //************************* + // CLUSTERING + //************************* + if(x.clusteringGroup || x.clusteringColor || x.clusteringHubsize || x.clusteringConnection){ + + var clusterbutton = document.createElement("input"); + clusterbutton.id = "backbtn"+el.id; + clusterbutton.setAttribute('type', 'button'); + clusterbutton.setAttribute('value', 'Reinitialize clustering'); + clusterbutton.setAttribute('style', 'background-color:#FFFFFF;border: none'); + el_id.appendChild(clusterbutton); + + clusterbutton.onclick = function(){ + // reset some parameters / data before + if (el_id.selectActive === true | el_id.highlightActive === true) { + //reset nodes + neighbourhoodHighlight([], "click", el_id.highlightAlgorithm, true); + if (el_id.selectActive === true){ + el_id.selectActive = false; + resetList('selectedBy',el.id, 'selectedBy'); + } + if (el_id.highlightActive === true){ + el_id.highlightActive = false; + resetList('nodeSelect', el.id, 'selected'); + } + } + //instance.network.setData(data); + if(x.clusteringColor){ + clusterByColor(); + } + if(x.clusteringGroup){ + clusterByGroup(x.clusteringGroup.groups); + } + if(x.clusteringHubsize){ + clusterByHubsize(); + } + if(x.clusteringConnection){ + clusterByConnection(); + } + instance.network.fit(); + } + } + + if(x.clusteringGroup || x.clusteringColor || x.clusteringOutliers || x.clusteringHubsize || x.clusteringConnection){ + // if we click on a node, we want to open it up! + instance.network.on("doubleClick", function (params){ + if (params.nodes.length === 1) { + if (instance.network.isCluster(params.nodes[0]) === true) { + is_clicked = false; + instance.network.openCluster(params.nodes[0], {releaseFunction : function(clusterPosition, containedNodesPositions) { + return containedNodesPositions; + }}); + // must be better... + resetAllEdges(edges, el_id.highlightColor, el_id.byselectionColor, instance.network); + resetAllNodes(nodes, true, options, instance.network, true); + } else { + if(x.clusteringGroup){ + var array_group = nodes.get({ + fields: ['group'], + filter: function (item) { + return item.id === params.nodes[0] ; + }, + returnType :'Array' + }); + + clusterByGroup([array_group[0].group]); + } + } + } + }); + } + //************************* + //clustering Connection + //************************* + if(x.clusteringConnection){ + + function clusterByConnection() { + for (var i = 0; i < x.clusteringConnection.nodes.length; i++) { + instance.network.clusterByConnection(x.clusteringConnection.nodes[i]) + } + } + clusterByConnection(); + } + + //************************* + //clustering hubsize + //************************* + if(x.clusteringHubsize){ + + function clusterByHubsize() { + var clusterOptionsByData = { + processProperties: function(clusterOptions, childNodes) { + var cluster_level = 9999999 + for (var i = 0; i < childNodes.length; i++) { + //totalMass += childNodes[i].mass; + if(childNodes[i].level){ + cluster_level = Math.min(cluster_level, childNodes[i].level) + } + if(i === 0){ + //clusterOptions.shape = childNodes[i].shape; + clusterOptions.color = childNodes[i].color.background; + }else{ + //if(childNodes[i].shape !== clusterOptions.shape){ + //clusterOptions.shape = 'database'; + //} + if(childNodes[i].color.background !== clusterOptions.color){ + clusterOptions.color = 'grey'; + } + } + } + clusterOptions.label = "[" + childNodes.length + "]"; + if(cluster_level !== 9999999){ + clusterOptions.level = cluster_level + } + return clusterOptions; + }, + clusterNodeProperties: {borderWidth:3, shape:'box', font:{size:30}} + } + if(x.clusteringHubsize.size > 0){ + instance.network.clusterByHubsize(x.clusteringHubsize.size, clusterOptionsByData); + }else{ + instance.network.clusterByHubsize(undefined, clusterOptionsByData); + } + } + + clusterByHubsize(); + } + + if(x.clusteringColor){ + + //************************* + //clustering color + //************************* + function clusterByColor() { + var colors = x.clusteringColor.colors + var clusterOptionsByData; + for (var i = 0; i < colors.length; i++) { + var color = colors[i]; + var sh = x.clusteringColor.shape[i]; + var force = x.clusteringColor.force[i]; + clusterOptionsByData = { + joinCondition: function (childOptions) { + return childOptions.color.background == color; // the color is fully defined in the node. + }, + processProperties: function (clusterOptions, childNodes, childEdges) { + var totalMass = 0; + var cluster_level = 9999999; + for (var i = 0; i < childNodes.length; i++) { + totalMass += childNodes[i].mass; + if(childNodes[i].level){ + cluster_level = Math.min(cluster_level, childNodes[i].level) + } + if(force === false){ + if(i === 0){ + clusterOptions.shape = childNodes[i].shape; + }else{ + if(childNodes[i].shape !== clusterOptions.shape){ + clusterOptions.shape = sh; + } + } + } else { + clusterOptions.shape = sh; + } + + } + clusterOptions.value = totalMass; + if(cluster_level !== 9999999){ + clusterOptions.level = cluster_level + } + return clusterOptions; + }, + clusterNodeProperties: {id: 'cluster:' + color, borderWidth: 3, color:color, label: x.clusteringColor.label + color} + } + instance.network.cluster(clusterOptionsByData); + } + } + + clusterByColor(); + } + + //************************* + //clustering groups + //************************* + if(x.clusteringGroup){ + + function clusterByGroup(groups) { + var clusterOptionsByData; + for (var i = 0; i < groups.length; i++) { + var group = groups[i]; + var j = x.clusteringGroup.groups.indexOf(group); + if(j !== -1) { + var col = x.clusteringGroup.color[j]; + var sh = x.clusteringGroup.shape[j]; + var force = x.clusteringGroup.force[j]; + var sc_size = x.clusteringGroup.scale_size[j]; + + clusterOptionsByData = { + joinCondition: function (childOptions) { + return childOptions.group == group; // + }, + processProperties: function (clusterOptions, childNodes, childEdges) { + var totalMass = 0; + var cluster_level = 9999999; + for (var i = 0; i < childNodes.length; i++) { + totalMass += childNodes[i].mass; + if(childNodes[i].level){ + cluster_level = Math.min(cluster_level, childNodes[i].level) + } + if(force === false){ + if(i === 0){ + clusterOptions.shape = childNodes[i].shape; + clusterOptions.color = childNodes[i].color.background; + }else{ + if(childNodes[i].shape !== clusterOptions.shape){ + clusterOptions.shape = sh; + } + if(childNodes[i].color.background !== clusterOptions.color){ + clusterOptions.color = col; + } + } + } else { + clusterOptions.shape = sh; + clusterOptions.color = col; + } + } + if(sc_size){ + clusterOptions.value = totalMass; + } + if(cluster_level !== 9999999){ + clusterOptions.level = cluster_level + } + return clusterOptions; + }, + clusterNodeProperties: {id: 'cluster:' + group, borderWidth: 3, label:x.clusteringGroup.label + group} + } + instance.network.cluster(clusterOptionsByData); + } + + } + } + clusterByGroup(x.clusteringGroup.groups); + } + + //************************* + //clustering by zoom + //************************* + if(x.clusteringOutliers){ + + clusterFactor = x.clusteringOutliers.clusterFactor; + + // set the first initial zoom level + instance.network.on('initRedraw', function() { + if (lastClusterZoomLevel === 0) { + lastClusterZoomLevel = instance.network.getScale(); + } + }); + + // we use the zoom event for our clustering + instance.network.on('zoom', function (params) { + if(ctrlwait === 0){ + if (params.direction == '-') { + if (params.scale < lastClusterZoomLevel*clusterFactor) { + makeClusters(params.scale); + lastClusterZoomLevel = params.scale; + } + } + else { + openClusters(params.scale); + } + } + }); + } + + // make the clusters + function makeClusters(scale) { + ctrlwait = 1; + var clusterOptionsByData = { + processProperties: function (clusterOptions, childNodes) { + clusterIndex = clusterIndex + 1; + var childrenCount = 0; + var cluster_level = 9999999; + for (var i = 0; i < childNodes.length; i++) { + childrenCount += childNodes[i].childrenCount || 1; + if(childNodes[i].level){ + cluster_level = Math.min(cluster_level, childNodes[i].level) + } + } + clusterOptions.childrenCount = childrenCount; + clusterOptions.label = "# " + childrenCount + ""; + clusterOptions.font = {size: childrenCount*5+30} + clusterOptions.id = 'cluster:' + clusterIndex; + clusters.push({id:'cluster:' + clusterIndex, scale:scale}); + + if(cluster_level !== 9999999){ + clusterOptions.level = cluster_level + } + return clusterOptions; + }, + clusterNodeProperties: {borderWidth: 3, shape: 'database', font: {size: 30}} + } + instance.network.clusterOutliers(clusterOptionsByData); + if (x.clusteringOutliers.stabilize) { + instance.network.stabilize(); + }; + ctrlwait = 0; + } + + // open them back up! + function openClusters(scale) { + ctrlwait = 1; + var newClusters = []; + var declustered = false; + for (var i = 0; i < clusters.length; i++) { + if (clusters[i].scale < scale) { + instance.network.openCluster(clusters[i].id); + lastClusterZoomLevel = scale; + declustered = true; + } + else { + newClusters.push(clusters[i]) + } + } + clusters = newClusters; + if (x.clusteringOutliers.stabilize) { + instance.network.stabilize(); + }; + ctrlwait = 0; + } + + //****************** + // init selection + //****************** + if(el_id.idselection && x.nodes && x.idselection.selected !== undefined){ + onIdChange(''+ x.idselection.selected, true); + } + + if(el_id.byselection && x.nodes && x.byselection.selected !== undefined){ + onByChange(x.byselection.selected); + selectNode = document.getElementById('selectedBy'+el.id); + selectNode.value = x.byselection.selected; + } + + // try to fix icons loading css bug... + function iconsRedraw() { + setTimeout(function(){ + if(instance.network) + instance.network.redraw(); + if(instance.legend) + instance.legend.redraw(); + }, 250); + }; + + if(x.iconsRedraw !== undefined){ + if(x.iconsRedraw){ + iconsRedraw(); + instance.network.once("stabilized", function(){iconsRedraw();}) + } + } + }, + + resize: function(el, width, height, instance) { + if(instance.network) + instance.network.fit(); + if(instance.legend) + instance.legend.fit(); + } + +}); diff --git a/output/importances.rds b/output/importances.rds index 7f4030b..c3b8f9c 100644 Binary files a/output/importances.rds and b/output/importances.rds differ diff --git a/output/importances2.rds b/output/importances2.rds index df79c3c..65d32b8 100644 Binary files a/output/importances2.rds and b/output/importances2.rds differ